<?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>Hearn Garage &#187; Technical</title>
	<atom:link href="http://www.adamhearn.co.uk/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adamhearn.co.uk</link>
	<description>Homepage of the Hearn Garage - where else?</description>
	<lastBuildDate>Wed, 01 Feb 2012 20:42:29 +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>Builds, the magic between code and deployment – Part 5</title>
		<link>http://www.adamhearn.co.uk/2011/12/builds-the-magic-between-code-and-deployment-part-5/</link>
		<comments>http://www.adamhearn.co.uk/2011/12/builds-the-magic-between-code-and-deployment-part-5/#comments</comments>
		<pubDate>Thu, 15 Dec 2011 19:11:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=822</guid>
		<description><![CDATA[A short post continuing the subject of builds with this one covering the use of virtualised infrastructure. I would advise any software development department to make use of virtualisation &#8211; especially for appliances such as Build Agents. The choice of virtualisation product in a commercial environment typically comes down to one of two choices. Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>A short post continuing the subject of builds with this one covering the use of virtualised infrastructure.</p>
<p>I would advise any software development department to make use of virtualisation &#8211; especially for appliances such as Build Agents. The choice of virtualisation product in a commercial environment typically comes down to one of two choices. Microsoft offer Hyper-V for free as a role on Windows 2008 and newer and VMWare provide ESX (both free and paid versions). Both are excellent solutions though at this time my preference is with VMWare &#8211; it&#8217;s simply a more mature product with a greater feature set. I have no experience of ESX setup/configuration however and whilst this is an area where Hyper-V scores well I would still put ESX ahead.</p>
<p><span id="more-822"></span>Both Hyper-V and ESX have similar features and either product will support a TFS build environment without issue.</p>
<p>One particular feature that is must have [for build eco-systems] is the ability to create template virtual machines. A template VM is a machine that is pre-configured and ready to run but repackaged as a template. The purpose of a template is to ensure successive deployments of machines based on the template will, obviously, inherit the template&#8217;s configuration and be to all intents and purposes &#8216;the same&#8217;.</p>
<p>Using a pre-configured template as a base for a machine should save considerable time and ensure consistency in the resulting machine. Build Agents are commodity appliances that simply &#8216;drop in&#8217; to the TFS build eco-system or removed at will. They benefit from the template in both speed of deployment (subject to disk/network constraints) and consistency of content.</p>
<p>The first template to build is a base operating system and I follow a pre-defined set of actions when building one.</p>
<h4>Create machine</h4>
<p>Resources such as CPU, disk, memory should be sized appropriately. Whilst these are usually editable when a machine is deployed from the template, historical evidence shows that they are seldom adjusted. Resource over-allocation may soon become a problem if the template has excessive demands.<br />
Virtualisation products typically provide support for fixed or expanding disk storage formats. If disk capacity is at a premium where the templates are stored it may help to use an expanding format.</p>
<h4>Install Operating System</h4>
<p>With recent versions of Windows there should be little to do bar map the DVD drive/mount the ISO and install. For those versions of Windows that support it, do not enter a license key &#8211; a template need not be licensed at this stage.</p>
<h4>Install Operating System Service Pack</h4>
<p>Where appropriate, insert CD/DVD/mount ISO and/or run the Service Pack installer. I perform this 1st as it generally provides the fastest way to get the most stable copy of the Operating System.</p>
<h4>Install tools, customisations, etc.</h4>
<p>Installation of system tools such as 7-Zip, .NET Framework, Silverlight, etc. Any system level customisations should also be applied here.</p>
<p>I do not usually add a template to a domain as templates have no purpose on a domain. I also name each template with a fixed naming convention (T-&#8217;OS&#8217;-'TYPE&#8217;). For example, a Windows 2008 R2 French template machine would have the following name: T-WIN2K8R2-FR.</p>
<h4>Configure Windows Update</h4>
<p>Even when the latest Service Pack has been recently released it&#8217;s normal for Windows Update to have an additional set of updates to apply. Sadly this can amount to significant download and installation time. I also enable Microsoft Update to allow updates for other Microsoft products (such as Visual Studio, SQL Server, Silverlight, etc.). Even though Microsoft are steadily improving the experience, it&#8217;s usually necessary to run this several times in between reboots.</p>
<p>Once complete I disable automatic updates on all virtual machine templates. In the context of a Build Agent, automatic updates that yield later versions of the C++ development runtime can cause issues.</p>
<h4>Clean up machine content</h4>
<p>Delete temporary folder files, any local downloads, internet history, etc. Not always necessary but I like to have my templates with as little context data as possible.</p>
<h4>Convert the machine to a Template</h4>
<p>Most virtualisation products contain inbuilt support for deploying templates. What I mean by that is they will handle machine identification changes such as SID regeneration and network name change when a machine is created from a template. If that&#8217;s the case, simply convert the machine as is. If not, Sysprep should be used to manipulate the machine state into something that will support being rolled out. Once Sysprep has completed (the machine should have shutdown) the machine can be converted to a template.</p>
<p>&nbsp;</p>
<p>Hopefully the benefit of creating template machines with a &#8216;bare&#8217; operating system installation should be obvious. It will be quicker to deploy the template in a consistent manner rather than repeat the above actions per machine. The next and final post of builds covers the Build Agent template virtual machine configuration and how components are built without Visual Studio.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/12/builds-the-magic-between-code-and-deployment-part-5/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Builds, the magic between code and deployment – Part 4</title>
		<link>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-4/</link>
		<comments>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-4/#comments</comments>
		<pubDate>Thu, 24 Nov 2011 02:07:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[TFS]]></category>
		<category><![CDATA[Visual Studio]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=790</guid>
		<description><![CDATA[Nearing the end of my posts regarding builds, this one describes a TFS build definition. If you&#8217;ve read the previous articles you will know that I consider TFS to have an excellent build eco-system. Other application suites offer similar services but somehow TFS manages to do exactly what&#8217;s expected with the minimum of hassle. Whilst [...]]]></description>
			<content:encoded><![CDATA[<p>Nearing the end of my posts  regarding builds, this one describes a TFS build definition.</p>
<p>If you&#8217;ve read the previous articles you will know that I consider TFS to have an excellent build eco-system. Other application suites offer similar services but somehow TFS manages to do exactly what&#8217;s expected with the minimum of hassle. Whilst many of the concepts are technology agnostic please be warned I&#8217;ll be using TFS as my reference point.</p>
<p>I&#8217;d first like to touch on how Visual Studio solution (.sln) files are typically used as it has an impact on how each build definition may be configured. <span id="more-790"></span>Microsoft&#8217;s &#8216;<a title="Outdated guidance on Structuring Solutions and Projects" href="http://msdn.microsoft.com/en-us/library/ee817674.aspx">guidance</a>&#8216; is that everyone should work with a large solution file and it is that that is added as the component build item. This has some advantages:</p>
<ul>
<li>the developers always build all of the software to the extent as controlled by the solution file</li>
<li>the solution file will define the build order using project dependencies so this need not be understood by everyone</li>
<li>changes to the build order made in a solution are immediately reflected in the next build</li>
</ul>
<p>Potential drawbacks are that:</p>
<ul>
<li>all developers will always have to pull out the latest source and build all components in order to start a task &#8211; if the task is small this could use a significant portion of the task&#8217;s allocated time</li>
<li>Visual Studio solutions files with large amounts of projects are [still] slow &#8211; even after the improvements Microsoft has made in Visual Studio 2010</li>
<li>changes to the solution must be carefully considered and controlled &#8211; build output may be affected</li>
<li>finally, as all components are built on each developer workstation, all developers will typically need a full set of licensed controls even though their daily task output has no need for them thus increasing the potential cost and servicing impact</li>
</ul>
<p>What&#8217;s my advice? Consider the options before choosing to use large solution files and if you can, don&#8217;t use them.</p>
<p>I practise a &#8220;work against the latest nightly build and only get the minimum code out to complete the feature&#8221; development style. All developers will be required to know the system composition so that projects may be built individually in the correct order. However, knowledge such as this being shared across the team should be considered beneficial to the ongoing project rather than detrimental.</p>
<p>A TFS build definition consists of the following major attribute groups:</p>
<ul>
<li>When &#8211; The choice of trigger (Manual, CI, Scheduled, etc. all covered in the <a title="Builds, the magic between code and deployment – Part 3" href="http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-3/">last post</a>)</li>
<li>How &#8211; Build process template and associated configuration</li>
<li>What &#8211; Location of what to monitor; list of components to build</li>
</ul>
<p>TFS provides a default build process template that performs standard actions suitable for out of the box build operation. It&#8217;s normal to customise this process to suit the needs of the project. Additional actions may include resource version number updating, code signing binary output, etc. As the TFS build process template is built using Microsoft Workflow it&#8217;s extremely easy to customize.</p>
<p>Other aspects of &#8216;How&#8217; include whether tests are executed, the build configuration type, source and symbol server integration, etc. These are fairly self explanatory and exposed in the build definition editor using simple UI options.</p>
<p>There are 2 aspects to &#8216;What&#8217; is built:</p>
<ol>
<li>the location of the source code repository that the build definition will work against &#8211; typically the root of a branch</li>
<li>the complete set of components that will be built from that location</li>
</ol>
<p>With a single large solution file in use, the build definition will refer to it alone. If individual project files are used, the build definition will be more complex referring to the project file for each component in an appropriate order.</p>
<p>Whilst it&#8217;s not a difficult task to configure a build definition I would advocate the use of an assigned resource, a &#8220;build engineer&#8221; if you will, so that at least the responsibility lies with someone. This role can be shared with a developer or be completely separate depending on the size/structure of the company/product build requirement.</p>
<p>With TFS, builds are remotely executed on Build Agents that are managed by Build Controllers. There are typically many Agents to a single Controller and a single Controller per TFS Team Collection. As the product is highly configurable it could equally be multiple Controllers each with a single Agent. Whilst there is no right or wrong configuration the former provides a pattern that is probably better understood.</p>
<p>Each Build Agent uses a distinct working folder thus allowing for multiple builds to be running under different Agents on the same machine. Custom Tags are used to define a Build Agent that is configured for specific build duties, such as being hosted on a platform with a particular configuration. A build definition can use these tags to indicate to the Build Controller what type of Build Agent is required. Builds are then scheduled on the next available Agent that matches the Tag criteria. Should no Agent exist or be available the build will fail. A build definition that specifies no Tags will be scheduled on any Agent.</p>
<p>With the correct build definitions in place, the following key drivers for using any form of automated build should be realised:</p>
<ul>
<li>Traceability</li>
<li>Repeatability</li>
<li>Reliability</li>
</ul>
<p>Execution of builds remotely means that the code is taken from the developer [as part of a Check-in] and built within the confines of the controlled build eco-system using one of the pre-defined build processes. The oft abused &#8220;it works on my machine&#8221; issue is minimised as builds are not performed on a developer&#8217;s machine where a potentially variable set of control and runtime versions may have yielded unpredictable results. Code contained in each and every build is also only ever taken from the content of a TFS branch (development/main/release) and is therefore fully traceable.</p>
<p>Build status reporting is via e-mail, desktop notification application or custom event subscription. Completed builds can then be assigned a quality indicator that may be used further in the development process.</p>
<p>After a very short time frame it&#8217;ll be hard to imagine returning to the ways of old!</p>
<p>Most developers will perceive running a build as the execution of Visual Studio in much the same way as a local build action is performed. It is also true that most small development teams simply install a full development environment on the Build Agent and queue builds using it and depending on the project type, that actually may be necessary. As I believe there is a better way of achieving the same result, that will be the subject of my next post.</p>
<div id="_mcePaste" class="mcePaste" style="position: absolute; left: -10000px; top: 923px; width: 1px; height: 1px; overflow: hidden;">Each Build Agent uses a distinct working folder thus allowing for multiple builds to be running under different agents on the same machine. The Controller allows for concurrent or sequential build execution. Should a Build Agent be configured for specific build duties, such as being hosted on a platform with a particular configuration, custom tags are use.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Builds, the magic between code and deployment – Part 3</title>
		<link>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-3/</link>
		<comments>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-3/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 11:22:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=784</guid>
		<description><![CDATA[Continuing on from where I left off, I now move on to discuss the builds themselves. A build is the term given to the process by which content stored in a code repository is transformed into deliverable artifacts. Most source code is compiled/processed into binary artifacts such as DLLs or EXEs using a known toolset [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on from where I left off, I now move on to discuss the builds themselves.</p>
<p>A build is the term given to the process by which content stored in a code repository is transformed into deliverable artifacts. Most source code is compiled/processed into binary artifacts such as DLLs or EXEs using a known toolset initiated and controlled by a pre-defined build process. Each process usually follows the &#8216;get latest, build components, run tests and drop build output to deployment folder&#8217; sequence. TFS provides an adequate starter in the shape of the &#8216;default process&#8217;.</p>
<p>Build output can be anything from loose files right up to an installation package. Whilst there is no &#8216;one size fits all&#8217; answer I would always advocate the provision of an installation package to deploy an application. Using the right technology this can also created  as part of the default build process.</p>
<p><span id="more-784"></span>Continuing on the branch structure introduced in the last post, there is usually more than one build definition configured (each may also use a distinct process):</p>
<ul>
<li>Development branches would typically use Continuous Integration (CI) builds</li>
<li>Main branch would typically use Nightly builds</li>
<li>Release branches would typically use Manual builds</li>
</ul>
<h3>Continuous Integration (CI)</h3>
<p>CI builds are executed when content is &#8220;touched&#8221;. The purpose of this build type is that it ensures the quality of code repository content is kept high. For basic implementations the measure of quality may merely reflect how compilable the content is rather than be a measure of its functional quality. However, most CI build systems provide for the execution of tests as part of the build. With an appropriate set of tests, the functional quality of the build can also be measured. A build that compiles but fails testing is likely to be as undesirable as one that fails compilation, perhaps even more so!</p>
<p>TFS 2010 offers a number of different CI build options with one that is possibly still unique: &#8216;Gated Check-in&#8217;. The concept behind this build type is that it operates directly on a check-in. Only when the check-in content builds successfully will the check-in be completed. This is in contrast to most CI builds where the check-in is performed prior to build execution. The advantage of the Gated Check-in is that it&#8217;s not possible to check in code that does not compile thus ensuring a higher level of confidence in the stability of the code repository content. A disadvantage is that a single check-in must include all appropriate changes and if the check-in becomes dependent on another it may be impossible to submit a build for successful compilation. In this case I would still advocate the mechanism but allow the build action to be overridden. Different teams have different ways of working so a more standard CI build or a &#8216;roll-up&#8217; CI build may be chosen instead.</p>
<p>I consider CI build output very transient so the build definition in TFS is set to keep output only from the last few successful.</p>
<h3>Nightly</h3>
<p>Building the content of the code repository on a nightly basis should be considered the minimum for any project. A nightly build simply provides confidence that the code repository content will support the following day&#8217;s code changes. A failed build should be addressed as soon as practicable.</p>
<p>I execute the nightly build against the Main branch as Main is considered stable and it is the baseline for other branches (development and release). Main is updated (merged) with from content from Development branches so code churn is less than that of the source branch. The Development branch content is already considered high quality (it executes Gated Check-in builds with test execution) so any issues should only arise from the result of the merge operation.</p>
<p>Nightly build output is considered worthwhile. I leave the TFS defaults of &#8216;last 10 successful builds kept&#8217;.</p>
<h3>Manual</h3>
<p>With TFS any build may be executed manually. With both CI and Nightly builds in place there&#8217;s less requirement to run a build process manually but the option remains.</p>
<p>However, Release builds are, by comparison to the others described here, executed far less frequently and almost without exception executed manually. A release build will usually have a different process to support the official software release. This may be the in the form of version resource management, code signing of output, release packaging, etc.</p>
<p>Successful release builds are always kept as they form a record of what official releases have been made.</p>
<p>&nbsp;</p>
<p>One of the key objectives in investing in this type of build configuration is to minimise the &#8216;it works when I build it on my machine&#8217; scenarios that are often prevalent in small development teams. Knowing exactly what was included in a release package and how it was generated is key to understanding how situations arise when the application is in front of a customer.</p>
<p>It should be understood that this phase requires a resource that has a good range of experience.  Building an application (even a simple one) usually requires an  understanding of the software structure, the intended composition and  the expected platforms. Whoever is managing this should have ideally  been involved in the previous phases on this or other projects so that  the task is not performed blind.</p>
<p>The next post will delve into how to configure TFS build ecosystem to support the builds described.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-%e2%80%93-part-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Builds, the magic between code and deployment &#8211; Part 2</title>
		<link>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-2/</link>
		<comments>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-2/#comments</comments>
		<pubDate>Sun, 06 Nov 2011 09:32:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=693</guid>
		<description><![CDATA[This is Part 2 of a series covering Builds with this post focusing, albeit superficially, on code repositories. The assumption is you&#8217;ve had your application composition and software structure defined and everyone is desperate to get stuck in to code generation. After all, we&#8217;re all doing Agile and the business expects results [because of it]! [...]]]></description>
			<content:encoded><![CDATA[<p>This is Part 2 of a series covering Builds with this post focusing, albeit superficially, on code repositories.</p>
<p>The assumption is you&#8217;ve had your application composition and software structure defined and everyone is desperate to get stuck in to code generation. After all, we&#8217;re all doing Agile and the business expects results [because of it]!</p>
<p>Developers typically submit code to the repository and move on to the next feature. After all a developer&#8217;s purpose is to develop features and the job of pulling the source together is not usually a shared responsibility.</p>
<p>For small development teams, &lt; 5 co-located for example, it&#8217;s perfectly possible to get away with the bare minimum. That is Microsoft Visual SourceSafe with the benefit being that it takes no time to install, there&#8217;s not a lot of configuration to it and it [mostly] works. There are many horror stories on the Internet regarding VSS but in reality you have to do something to break it, it doesn&#8217;t just break itself.</p>
<p><span id="more-693"></span>However, even Microsoft have decreed that VSS is dead and the new solution going forward is Team Foundation Server. Going from VSS to TFS 2010 is daunting to say the least and it must be said that it might be better to consider alternatives such as <a href="http://git-scm.com/">Git</a> or <a href="http://subversion.apache.org/">SVN</a>. For the 2010 release, Microsoft provided a variant of TFS called &#8220;TFS Basic 2010&#8243;. Providing the full feature set of TFS bar Sharepoint and Reporting Services integration it&#8217;s described as &#8220;TFS 2010 for SourceSafe Users&#8221;.</p>
<p>Unlike TFS 2010, installation of TFS Basic 2010 is supported on Windows 7 machines so there&#8217;s not even a requirement to be running it on a server. As the product is quite mature now I&#8217;ll simply point readers to the web for details on <a href="https://encrypted.google.com/search?q=how+to+install+TFS+Basic+2010">how to install TFS Basic 2010</a>. Note that out of the box it&#8217;s licensed [not limited to] for 5 users; additional users require a CAL and those costs may add up.</p>
<p>The Code Repository store for TFS is a SQL Server database. The developer need not be aware of that of course but the system administrator should ensure the TFS databases are backed up appropriately. Since release a <a href="http://visualstudiogallery.msdn.microsoft.com/c255a1e4-04ba-4f68-8f4e-cd473d6b971f">Backup Wizard</a> has been added to TFS to make this as simple as possible.</p>
<p>Small development teams with VSS probably rarely made use of Branching &#8211; almost certainly in stark contrast to teams who used open source equivalents. For those readers wondering what Branching is, it&#8217;s a mature topic and whilst <a href="https://encrypted.google.com/search?q=what+is+branching">the question</a> has already been asked, a one liner from me is:</p>
<blockquote><p>a branch is a separate code stream created from a base in order to apply a distinct set of changes.</p></blockquote>
<p>Branching therefore allows multiple streams of work to be active simultaneously and should increase productivity by actively supporting the development process. Whilst VSS branching always seemed to lead to problems, both technical and  user orientated, TFS offers a robust solution and  all development teams large or small should make use of it.</p>
<p>I would advocate the following branch configuration as a minimum:</p>
<ul>
<li>Main (contains stable code)</li>
<li>Development [n] (work in progress branch, created from Main &#8211; effectively v-next)</li>
<li>Release [n] (official releases, created from Main)</li>
</ul>
<p>Other patterns exists &#8211; branch on feature, branch per developer, branch for serviced release, etc. An existing development process is more likely to define and drive the chosen pattern rather than there be any considerable technical advantage in choosing one above another.</p>
<p>For reference, Microsoft keep an active project on <a href="http://www.codeplex.com">Codeplex</a> called <a href="http://tfsbranchingguideiii.codeplex.com/">Visual Studio TFS Branching Guidance</a> that is now in its third iteration.</p>
<p>What&#8217;s this got to do with builds, are we not way off track? Not at all, Branching should be integral to all development teams &#8211; especially Agile ones &#8211; and therefore must be implicitly supported by the build ecosystem. My example branching configuration defines a number of areas where builds may be executed and the next post will describe each in some detail.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Builds, the magic between code and deployment &#8211; Part 1</title>
		<link>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-1/</link>
		<comments>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-1/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 08:32:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[TFS]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=684</guid>
		<description><![CDATA[Part of my role has always required me to understand how to build software reliably. That is both on a developer machine, for the production of debug or release binaries, or as part of an automated build system. I&#8217;ve managed builds for 20 years across a number of different systems/platforms and it&#8217;s not a subject [...]]]></description>
			<content:encoded><![CDATA[<p>Part of my role has always required me to understand how to build software reliably. That is both on a developer machine, for the production of debug or release binaries, or as part of an automated build system. I&#8217;ve managed builds for 20 years across a number of different systems/platforms and it&#8217;s not a subject that has ever been solved for free.</p>
<p>Before anyone can get to building components there&#8217;s usually a large amount of [largely unseen] effort required to define application composition, software structure, code repository configuration and deployment plans. I&#8217;ll set the scene by defining what I consider those terms to mean:</p>
<p><span id="more-684"></span>Application Composition</p>
<blockquote><p>This is just a fancy way of saying &#8220;how is the solution going to be shaped&#8221;. Almost always the classic onion metaphor will be used. Each layer may have contractual dependency on others but know nothing about the internal implementation. This phase is key &#8211; even in an &#8220;Agile&#8221; world. Don&#8217;t start coding without a pretty good idea of where you&#8217;re going and what technology (not technique) you&#8217;ll use to get there. To succeed in this phase you need experience, plain and simple.</p></blockquote>
<p>Software Structure</p>
<blockquote><p>Standards, patterns, components, etc. to be used in production of the solution. Some assets may be carried over/re-used/enhanced from previous projects, such as standards, whereas others may be specific. Some developers will probably do a good job here though it&#8217;s often best left to the architect.</p></blockquote>
<p>Code Repository</p>
<blockquote><p>A place where a developer stores code that is considered &#8216;complete&#8217;. It is not a backup medium (though of course it is imperative that it is covered by a very good backup strategy). Although the repository can be simply a shared folder on a disk it makes little sense as there are so many better options such as GIT or SVN, both of which are well respected open source projects. My experience is with Microsoft TFS so I&#8217;ll be using this as the basis for my posts.</p></blockquote>
<p>Deployment</p>
<blockquote><p>To me, defines both the process and anything considered a deliverable generated from the process. Binary deliverables are the set of assets generated from source code that would be presented to appropriate platform(s) for the purposes of achieving the goals of the solution. Deliverables could equally be miscellaneous data files. Typically an installer package would be used to contain and manage deliverable assets. In summary, deployment covers the bit after the Developer and before the Tester. Generally speaking this is perhaps the least considered phase of those I&#8217;ve listed here and is the purpose behind the post.</p></blockquote>
<p>The next post will backtrack to the code repository stage so that I can define how a developer interacts with code and what affect that may have.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/11/builds-the-magic-between-code-and-deployment-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New cycling log plugin enabled</title>
		<link>http://www.adamhearn.co.uk/2011/11/new-cycling-log-plugin-enabled/</link>
		<comments>http://www.adamhearn.co.uk/2011/11/new-cycling-log-plugin-enabled/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 12:19:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cycling]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=678</guid>
		<description><![CDATA[I&#8217;ve had a bit of spare time to get the plugin operating as I would want so I&#8217;ve now transferred the old data in and enabled it. Before anyone asks &#8220;where&#8217;s the source code?&#8221;, I need to do a clean-up of a couple of the classes and when it&#8217;s in reasonable shape, I&#8217;ll upload it [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a bit of spare time to get the plugin operating as I would want so I&#8217;ve now transferred the old data in and enabled it.</p>
<p>Before anyone asks &#8220;where&#8217;s the source code?&#8221;, I need to do a clean-up of a couple of the classes and when it&#8217;s in reasonable shape, I&#8217;ll upload it to the WordPress plugin repository.</p>
<p>It uses as custom mySQL table to store entries, WordPress options table to store plugin option data and <a title="pChart 2.0" href="http://www.pchart.net/">pChart 2.0 </a>for graphical presentation.</p>
<p><span id="more-678"></span>Inspiration for the plugin was the &#8220;Runners Log&#8221; plugin that I had used for a number of months. One thing that I didn&#8217;t like with that was the need to add a new post just to get an entry logged. Whilst I could have hacked around that I felt that I would ultimately be happier with something specific to my needs. I&#8217;ll be adding a number of output features over time so consider this release a version 0.1!</p>
<p>Any comments please let me know via the contact page.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/11/new-cycling-log-plugin-enabled/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Time for a new Babbage Engine</title>
		<link>http://www.adamhearn.co.uk/2011/08/time-for-a-new-babbage-engine/</link>
		<comments>http://www.adamhearn.co.uk/2011/08/time-for-a-new-babbage-engine/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 17:12:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Hardware]]></category>
		<category><![CDATA[Retro]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=614</guid>
		<description><![CDATA[My PC has been limping along for a long while now and whilst I did promise to buy a new one when the [in]famous Duke Nukem Forever game was released I didn&#8217;t get around to it &#8211; the game hasn&#8217;t exactly chalked up many good reviews (most of which from people who never purchased it [...]]]></description>
			<content:encoded><![CDATA[<p>My PC has been limping along for a long while now and whilst I did promise to buy a new one when the [in]famous Duke Nukem Forever game was released I didn&#8217;t get around to it &#8211; the game hasn&#8217;t exactly chalked up many good reviews (most of which from people who never purchased it and/or expecting something it simply was never going to be).</p>
<p><span id="more-614"></span>Anyway, back to the PC&#8230; it actually performed its last calculation a few weeks back! Failing to boot and eventually corrupting the disk once again I decided to retire it. The empty shell of my Suntek Grace aluminium case has been sat by the side of my desk since.</p>
<p>I don&#8217;t have a need for a gaming machine (reasons that should be obvious when considering this is a PC!) so I went for something reasonable rather than spectacular. The CPU is a top of the line SandyBridge (2600K) as it was listed on the Scan Today Only page with what should be a decent motherboard (Asus P8Z68-V).</p>
<p>Hopefully all the bits will be here by the week end and I&#8217;ll be with something more useful than the laptop I&#8217;m currently using (its good but it&#8217;s certainly no desktop replacement). I&#8217;m still hopeful Duke Nukem Forever will provide a few hours of good old fashioned fun. If not I can continue to marvel at my adventure game collection running under ScummVM  <img src='http://www.adamhearn.co.uk/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>History of my Babbage Engines:</p>
<ul>
<li>286</li>
<li>Intel DX-33</li>
<li>Intel DX4-100</li>
<li>Pentium 133</li>
<li>Pentium 2-350 -&gt; later upgraded to 550Mhz</li>
<li>Pentium 3-1Ghz</li>
<li>Pentium M760 2ghz</li>
</ul>
<p>The later machines lasted significantly longer in the purchased form than those earlier although the internals of each PC was gradually upgraded over its lifespan. Hopefully the main components of the new machine will last as long as the previous.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/08/time-for-a-new-babbage-engine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EA 9 released, protocol handler verified</title>
		<link>http://www.adamhearn.co.uk/2011/06/ea-9-released-protocol-handler-verified/</link>
		<comments>http://www.adamhearn.co.uk/2011/06/ea-9-released-protocol-handler-verified/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 08:42:09 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Enterprise Architect]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=583</guid>
		<description><![CDATA[In keeping with their prolific release schedule, Sparx Systems have recently released v9.0 of Enterprise Architect. I&#8217;ve verified that the EA Protocol Handler works with this version without change. Should anyone find anything untoward then consider dropping a post to the Sourceforge project page&#8217;s forum.]]></description>
			<content:encoded><![CDATA[<p>In keeping with their prolific release schedule, Sparx Systems have recently released v9.0 of Enterprise Architect.</p>
<p>I&#8217;ve verified that the <a title="EA Protocol Handler Project Page" href="http://sourceforge.net/projects/eaprotocol/">EA Protocol Handler</a> works with this version without change. Should anyone find anything untoward then consider dropping a post to the Sourceforge project page&#8217;s <a title="EA Protocol Handler forum" href="http://sourceforge.net/projects/eaprotocol/forums/forum/1021425">forum</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/06/ea-9-released-protocol-handler-verified/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pseudovariables in Visual Studio debugging session</title>
		<link>http://www.adamhearn.co.uk/2011/04/pseudovariables-in-visual-studio-debugging-session/</link>
		<comments>http://www.adamhearn.co.uk/2011/04/pseudovariables-in-visual-studio-debugging-session/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 11:53:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=257</guid>
		<description><![CDATA[Ever wanted to quickly see the security context at the current stack location in a native application? Here&#8217;s a quick bookmark for the MSDN page describing Pseudovariables in Visual Studio. $user can be very useful when tracing multi-tier calls with delegated tokens.]]></description>
			<content:encoded><![CDATA[<p>Ever wanted to quickly see the security context at the current stack location in a native application? <a title="MSDN page" href="http://msdn.microsoft.com/en-us/library/ms164891.aspx">Here&#8217;s</a> a quick bookmark for the MSDN page describing Pseudovariables in Visual Studio.</p>
<p><strong>$user</strong> can be very useful when tracing multi-tier calls with delegated tokens.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/04/pseudovariables-in-visual-studio-debugging-session/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PC upgrade soon, it&#8217;s nearly here&#8230;</title>
		<link>http://www.adamhearn.co.uk/2011/01/pc-upgrade-soon-its-nearly-here/</link>
		<comments>http://www.adamhearn.co.uk/2011/01/pc-upgrade-soon-its-nearly-here/#comments</comments>
		<pubDate>Sat, 22 Jan 2011 01:53:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Gaming]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://www.adamhearn.co.uk/?p=237</guid>
		<description><![CDATA[&#8220;It&#8221; being the long awaited release of Duke Nukem Forever. Scheduled for early May (6th in Europe) the game now being completed by Gearbox software (I hope they don&#8217;t make a hash of it) and not 3D Realms (who did seem to be making a hash of it!) has been voted top vapour ware title [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;It&#8221; being the long awaited release of Duke Nukem Forever. Scheduled for early May (6th in Europe) the game now being completed by Gearbox software (I hope they don&#8217;t make a hash of it) and not 3D Realms (who did seem to be making a hash of it!) has been voted top vapour ware title for the past decade or so! Looks like that award might finally be offered to another deserving product!</p>
<p><span id="more-237"></span>In all honesty I have very little time and interest to play games on my PC these days. My PC became nothing more than a Visual Studio workhorse &#8211; a sad fact that I do way too much unpaid work at home.  Over the years it has also started to become unreliable so a return to gaming will definitely require a kit refresh. Intel have a solid product in their &#8220;Sandy Bridge&#8221; CPUs although marred by stupid CPU/motherboard combination restrictions.</p>
<p>You never know, hell might even freeze over and I will install Windows 7 <img src='http://www.adamhearn.co.uk/wordpress/wp-includes/images/smilies/yikes.gif' alt=':yikes:' class='wp-smiley' /> It didn&#8217;t last more than a weekend when I tried it out a year back (it does pretty much nothing for a developer and is best on hardware more recent than my current PC).</p>
<p>When the day comes I&#8217;ll post about the beating my wallet will have taken&#8230; It will quite possibly be the last &#8220;PC&#8221; I buy as the PC games industry is dead [to me] and the chance of Windows severely outstripping hardware is likely to be a thing of the past.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.adamhearn.co.uk/2011/01/pc-upgrade-soon-its-nearly-here/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

