<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Robert Cowham's Blog</title>
	
	<link>http://www.robertcowham.com/blog</link>
	<description>Robert Cowham's Musings</description>
	<lastBuildDate>Sun, 07 Mar 2010 21:08:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/RobertCowhamsBlog" /><feedburner:info uri="robertcowhamsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Keeping Track of your DVCS Development</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/xdLA6tJ5Wdk/</link>
		<comments>http://www.robertcowham.com/blog/179/keeping-track-of-your-dvcs-development/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 21:08:43 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[SCM]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/blog/?p=179</guid>
		<description><![CDATA[One of the blogs I keep tabs on is Eric Sink, and his latest article Obstacles to an enterprise DVCS struck a chord.  I was also interested in Martin Fowler&#8217;s somewhat related take:  http://www.martinfowler.com/bliki/VersionControlTools.html
I personally think that the rise of DVCS (Distributed Version Control Systems just in case you&#8217;re wondering) such as Git and Mercurial [...]]]></description>
			<content:encoded><![CDATA[<p>One of the blogs I keep tabs on is Eric Sink, and his latest article <a href="http://www.ericsink.com/articles/vcs_trends.html" target="_blank">Obstacles to an enterprise DVCS</a> struck a chord.  I was also interested in Martin Fowler&#8217;s somewhat related take:  <a href="http://www.martinfowler.com/bliki/VersionControlTools.html">http://www.martinfowler.com/bliki/VersionControlTools.html</a></p>
<p>I personally think that the rise of DVCS (Distributed Version Control Systems just in case you&#8217;re wondering) such as Git and Mercurial is a really good thing. As Martin mentions, the value of GitHub and BitBucket show their project collaboration features.</p>
<p>I am quite happy for a bit of controversy to arise (<a href="http://go2.wordpress.com/?id=725X1342&amp;site=reliablesoftware.wordpress.com&amp;url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D4XpnKHJAok8">Linus on &#8220;Subversion is Brain Dead!&#8221;</a>) as it proves that the subject is important, and worth learning about (Oscar Wilde&#8217;s dictum &#8220;The only thing worse than being talked about is not being talked about&#8221;).</p>
<p>One of the points made by Martin is about the importance of process and making sure you are using your tool sensibly &#8211; he mentions ThoughtWorks teams using local VCS on a daily basis and checking in to the corporate standard one a week or so at times.</p>
<p>The advantages of a DVCS:</p>
<ul>
<li>the ability to work easily remotely (&#8221;on a plane&#8221; etc)</li>
<li>lightweight branches and excellent merging capabilities &#8211; often rather better than centralised systems</li>
<li>day to day performance &#8211; because it&#8217;s local is typically very good</li>
<li>distributed repositories make backup less of an issue</li>
</ul>
<p>However, I think there are challenges to using DVCSs in corporate environments:</p>
<ul>
<li><strong>centralised systems are easier to control</strong> &#8211; not always a bad word! You may want only certain people to be able to view or update certain files (as an example I have done some consultancy for Camelot Group who run the UK National Lottery &#8211; as you can imagine, the audit requirements are fairly high. I have seen the names of modules called things like NotifyWinner.java &#8211; starts certain creative processes going in the mind!).</li>
<li><strong>the visibility and communication of status</strong> &#8211; if checkins or branches are made on a central system then they are typically visible to other people, and can be tracked and reviewed, and if necessary chased up. Where is the &#8220;master copy&#8221; of code, or a particular release?</li>
<li><strong>security of your assets</strong> &#8211; what happens if your whole code base on a cloned repository on someone&#8217;s laptop goes walkabout? Encryption can address some of this, but it is still a danger.</li>
</ul>
<p>Some of these can be addressed by working practices, but the nature of DVCSs mean you have to be careful. For example, there is typically a &#8220;master repository&#8221; for open source projects, updating of which is restricted to a few people.</p>
<p>The fit of DVCSs to open source development is easy to see &#8211; anyone can clone a repository and make changes, and those changes can be fed back and committed in a controlled manner (much better than sending patches).</p>
<p>However, I was interested to see the lament by James Bennet, Django’s release manager, mentioning  the difficulties of tracking and coordinating development across larger numbers of developers, repositories and workflows: <a href="http://www.b-list.org/weblog/2010/feb/02/branching/">http://www.b-list.org/weblog/2010/feb/02/branching/</a> (see <a href="http://media.b-list.org/presentations/2009/pycon/dvcs.pdf">his lightning talk at Pycon</a>). As he mentions: &#8220;in Django 1.1 there was a feature scheduled for this release, but he lost track of it, and they slipped by a month).</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/xdLA6tJ5Wdk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/179/keeping-track-of-your-dvcs-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/179/keeping-track-of-your-dvcs-development/</feedburner:origLink></item>
		<item>
		<title>Team Foundation Server Evolution and Principles</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/H5xnJv0ELc4/</link>
		<comments>http://www.robertcowham.com/blog/177/team-foundation-server-evolution-and-principles/#comments</comments>
		<pubDate>Thu, 14 Jan 2010 16:33:51 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[Team Foundation Server]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[merging]]></category>
		<category><![CDATA[perforce]]></category>
		<category><![CDATA[team foundation server]]></category>
		<category><![CDATA[tfs]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/blog/?p=177</guid>
		<description><![CDATA[I was interested to browse information about Microsoft&#8217;s Team Foundation Server (TFS) 2010 and it&#8217;s newer features.
It made me think a little about how TFS has evolved and what is the comparison to Perforce. This is interesting because TFS shares a lot of principles with Perforce as regards the underlying model (integrations, branches etc) &#8211; not too [...]]]></description>
			<content:encoded><![CDATA[<p>I was interested to browse information about Microsoft&#8217;s Team Foundation Server (TFS) 2010 and it&#8217;s newer features.</p>
<p>It made me think a little about how TFS has evolved and what is the comparison to Perforce. This is interesting because TFS shares a lot of principles with Perforce as regards the underlying model (integrations, branches etc) &#8211; not too surprising as Microsoft still uses their own re-badged version of Perforce called SourceDepot internally for some of their major projects (Windows and Office development). I doubt that TFS shares any code with Perforce/SourceDepot as Microsoft totally re-architected it on top of SQL Server and with different comms architecture etc.</p>
<p>It has been interesting to see how TFS has changed some of the functionality/terminology from the Perforce equivalents, and yet with similar underlying principles.</p>
<h3>Perforce Branching and Merging</h3>
<ul>
<li>Perforce has the <strong><a href="http://www.perforce.com/perforce/doc.092/manuals/cmdref/integrate.html#1040699" target="_blank">integrate</a></strong> command which will both create a new codeline from an existing codeline, or propagate changes between codelines.</li>
<li><strong>Integrate</strong> has many options for source and target specifications, including wildcards and branch specifications (with complete set of view mappings), and options to selectively integrate specific changes</li>
<li>The -v option does not copy files to the workspace (makes creation of new codelines faster)</li>
<li>You need to run the <strong><a href="http://www.perforce.com/perforce/doc.092/manuals/cmdref/resolve.html#1040665" target="_blank">resolve</a></strong> command after the integrate to decide how to merge changes, or whether to discard the source changes (but remember them as merged), or overwrite the target files, etc.</li>
</ul>
<h3>TFS Branching and Merging</h3>
<ul>
<li>TFS has the <a href="http://msdn.microsoft.com/en-us/library/d73s8b27(VS.80).aspx" target="_blank"><strong>branch</strong></a> command which creates new codelines from an existing codeline, and the <strong><strong><a href="http://msdn.microsoft.com/en-us/library/bd6dxhfy(VS.80).aspx" target="_blank">merge</a><strong> </strong></strong></strong>command which propagates changes.</li>
<li>TFS can only branch files or folders &#8211; it has no equivalent of branch specs</li>
<li>The<strong> branch </strong>command has a <strong>/noget</strong> which is the equivalent of <strong>integrate -v</strong>.</li>
<li>The <strong>merge</strong> command has a <strong>/discard</strong> option which is the equivalent of <strong>resolve -ay</strong></li>
<li>The <strong><a href="http://msdn.microsoft.com/en-us/library/6yw3tcdy(VS.80).aspx" target="_blank">resolve</a> </strong>command does merges</li>
</ul>
<h3>Thoughts</h3>
<p>Based on my experience of training people (for Perforce in particular), Perforce has more power/more options, but these take longer to learn. TFS has considered Perforce&#8217;s options and simplified and moved some functionality to different commands.</p>
<p>For example, I quite like the way TFS splits the branch and merge commands &#8211; users tend to think of these as distinct operations. Under the covers, it is understandable why Perforce treats them as similar, since for each individual file, creating a copy on a new codeline is the same whether you are creating the whole codeline or have added a new file and are propagating that single add sometime after the codelines have been created.</p>
<h3>TFS First Class Branches</h3>
<p>The TFS simplication of only allowing files or folders to be branched (folders recursively) is typically what most Perforce users do anyway &#8211; otherwise it starts to get very complicated to understand your repository structure.</p>
<p>In particular, this has allowed them to implement <a href="http://blogs.msdn.com/mitrik/archive/2009/06/08/first-class-branches.aspx" target="_blank">First Class Branches</a> (from Matt Mitrik&#8217;s blog):</p>
<blockquote>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">we’re not reinventing the way that branching works in TFS.  Branches are still created in much the same way, our path spaced, early branching model hasn’t changed, and merging is fundamentally the same (see my post on <a style="text-decoration: none; color: #0066dd; font-weight: normal;" href="http://blogs.msdn.com/mitrik/archive/2009/05/28/changing-to-slot-mode-in-tfs-2010-version-control.aspx">slot mode</a>).  What has changed is the presentation to the user, the representation of logical relationships, and the introduction of structured metadata.</p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;"><strong>Branches in the UI</strong></p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;"><a style="text-decoration: none; color: #0066dd; font-weight: normal;" href="http://blogs.msdn.com/blogfiles/mitrik/WindowsLiveWriter/FirstClassBranches_11660/image_2.png"><img style="margin-top: 5px; margin-right: 5px; margin-bottom: 5px; margin-left: 0px; display: inline; border-width: 0px; padding: 0px;" title="Branches in SCE" src="http://blogs.msdn.com/blogfiles/mitrik/WindowsLiveWriter/FirstClassBranches_11660/image_thumb.png" border="0" alt="Branches in SCE" width="288" height="252" align="left" /></a>Now that branches are treated differently from other folders in the system, we have a new icon to visually distinguish them in the UI.  In Source Control Explorer, branches will continue behave just like folders, meaning that they are still containers of files and folders, and all of the same actions are present &#8211; they can be branched, merged, deleted, etc…</p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
</blockquote>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;"><span id="more-177"></span>Matt also has articles:</p>
<ul>
<li><a href="http://blogs.msdn.com/mitrik/archive/2009/06/11/branch-hierarchy-visualization.aspx">Branch Hiearchy Visualisation</a></li>
<li><a href="http://blogs.msdn.com/mitrik/archive/2009/11/10/new-branch-and-merge-permissions.aspx" target="_blank">New Branch and Merge Permissions</a></li>
</ul>
<h3>Summary</h3>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">I think that Perforce could do well by taking some note of Microsoft&#8217;s User Interface expertise and ideas, and &#8220;borrowing&#8221; them <img src='http://www.robertcowham.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">As an example of good ideas being taken up in other tools, TFS (and other tools such as Accurev) have long had the concept of &#8220;shelving&#8221; &#8211; an intermediate step before checkin &#8211; being able to save work on the server  and have other people look at it, and yet it not be a full checkin that is part of the global history. While there have long been custom tools added to Perforce to implement this feature, I was very pleased to see Perforce&#8217;s 2009.2 release with shelving (and as <a href="http://blog.perforce.com/blog/?p=1872" target="_blank">explained in Laura Wingerd&#8217;s article</a> &#8211; how did we get by <em>without</em> shelving?!).</p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">I look forward to Perforce&#8217;s response to some of the other branching features!</p>
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<p style="margin-top: 10px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px;">
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/H5xnJv0ELc4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/177/team-foundation-server-evolution-and-principles/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/177/team-foundation-server-evolution-and-principles/</feedburner:origLink></item>
		<item>
		<title>Call for Papers for BCS CMSG and itSMF Conference 2010 Now Live!</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/XONO7pVTI9o/</link>
		<comments>http://www.robertcowham.com/blog/175/call-for-papers-for-bcs-cmsg-and-itsmf-conference-2010-now-live/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 23:23:41 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[bcs]]></category>
		<category><![CDATA[cmsg]]></category>
		<category><![CDATA[conference]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/blog/?p=175</guid>
		<description><![CDATA[Just a reminder to all that the Call for Papers is now live for the conference which will take place on 8 June 2010.
Title is:
Foundations for Success &#8211; Change, Configuration &#38; Release Management
Optimising your Service Assets
We had a successful event last year inspite of the economic downturn. This year is about making sure that appropriate [...]]]></description>
			<content:encoded><![CDATA[<p>Just a reminder to all that the <a href="http://www.bcs-cmsg.org.uk/conference/2010/callforpapers.shtml" target="_blank">Call for Papers is now live for the conference</a> which will take place on 8 June 2010.</p>
<p>Title is:</p>
<h3>Foundations for Success &#8211; Change, Configuration &amp; Release Management<br />
Optimising your Service Assets</h3>
<p>We had a successful event last year inspite of the economic downturn. This year is about making sure that appropriate foundations are in place to support coming out of recession.</p>
<p>Look forward to those papers being proposed!</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/XONO7pVTI9o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/175/call-for-papers-for-bcs-cmsg-and-itsmf-conference-2010-now-live/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/175/call-for-papers-for-bcs-cmsg-and-itsmf-conference-2010-now-live/</feedburner:origLink></item>
		<item>
		<title>Hansel and Gretel’s Lessons for Safe Exploration (the Breadcrumbs of Version Control)</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/poaT1Hw6qBw/</link>
		<comments>http://www.robertcowham.com/blog/172/hansel-and-gretels-lessons-for-safe-exploration-the-breadcrumbs-of-version-control/#comments</comments>
		<pubDate>Sat, 26 Dec 2009 13:14:27 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Perforce]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[perforce]]></category>
		<category><![CDATA[Version Control]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/blog/?p=172</guid>
		<description><![CDATA[One of the things that I do quite frequently is download new packages and bits and pieces of code to play with on my local machine. I frequently start making local edits to perform local configuration changes, or perhaps try out the odd idea. Quite often these packages are downloaded, played with, and then discarded if [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things that I do quite frequently is download new packages and bits and pieces of code to play with on my local machine. I frequently start making local edits to perform local configuration changes, or perhaps try out the odd idea. Quite often these packages are downloaded, played with, and then discarded if they don&#8217;t meet my needs. But of course some of them end up with a permanent place in my tool chest, or installation.</p>
<h2>Exploring with Bread Crumbs</h2>
<p>I start getting twitchy if I start making changes to anything without checking them in somewhere as I go. It is all too easy otherwise to lose track of the changes you have made and quickly get yourself into a mess, losing lots of time and effort.</p>
<p>So, like <a href="http://en.wikipedia.org/wiki/Hansel_and_Gretel#Plot.5B1.5D" target="_blank">Hansel and Gretel</a>, I prefer to leave a trail of bread crumbs along the way so that I can explore safely (avoiding if possible my breadcrumbs being eaten by the birds!).</p>
<p>I view this as being able to explore while having the safety net of my saved versions stored away. Advantages:</p>
<ul>
<li>I know what I have changed at any point (can show what&#8217;s changed and do diffs)</li>
<li>I have a bread crumb trail leading me back home to my initial clean configuration</li>
<li>I can revert to known working states if the current experiment goes wrong (e.g. accidentally delete chunks of text in the editor, or change several settings at once without appreciating their interactions)</li>
</ul>
<h2 style="font-size: 1.5em;">Bread Crumb Trail Tools</h2>
<p>My tool of choice for SCM is Perforce which is fast, effective and has lots of client tools. Having used it for many years as a consultant and trainer it is second nature to me and quick and easy to use, and rock solid.</p>
<p>And yet, for this particular type of work, I find it not always  ideal. Why?</p>
<ul>
<li>I need to setup a client workspace &#8211; not difficult, but enough steps to still be annoying and to often result in me not doing it (requires making decisions on naming, default paths in the repository etc &#8211; seems like it could be easily automated, but just slightly too variable in requirements to make this easy)</li>
<li>The changes are &#8220;permanent&#8221; in my repository &#8211; even if the whole experiment turns out to have been a red herring (and yes of course I can obliterate stuff, but that&#8217;s another extra step)</li>
</ul>
<p>Please note that if I really want to keep all my work &#8211; for example the package turns out to be of long term use, then I make the small extra effort and import into Perforce (together with <a title="Third Party Codelines" href="http://www.cmcrossroads.com/bradapp/acme/branching/branch-structs.html#ThirdPartyLine" target="_blank">third party codeline pattern</a> etc to be able to track future changes as new release are made etc.). At this point, it turns out that saving it &#8220;centrally&#8221; is very beneficial.</p>
<h2>Bread Crumb Tool of Choice</h2>
<p>My favourite current tool for this &#8220;temporary&#8221; bread crumb saving is <a href="http://mercurial.selenic.com/" target="_blank">Mercurial (hg)</a>.</p>
<p>The advantages for me:</p>
<ul>
<li>It is very quick and easy (but also a full featured system should I ever need it)</li>
<li>The &#8220;repository&#8221; is saved in the .hg directory at the root</li>
<li>If I remove the whole tree then repository goes too</li>
</ul>
<p>I use the command line client to save an initial snapshot (from the root of the tree where I have extracted the package):</p>
<pre>hg init .
hg add .
hg commit -m "Initial version of XXX as downloaded"</pre>
<p>Subsequently I typically use the following subset of commands (from &#8220;hg help&#8221;):</p>
<ul>
<li> add          add the specified files on the next commit</li>
<li> commit       commit the specified files or all outstanding changes</li>
<li> copy         mark files as copied for the next commit</li>
<li> diff         diff repository (or selected files)</li>
<li> help         show help for a given topic or a help overview</li>
<li> log          show revision history of entire repository or files</li>
<li> remove       remove the specified files on the next commit</li>
<li> revert       restore individual files or directories to an earlier state</li>
<li> status       show changed files in the working directory</li>
</ul>
<p>TortoiseHg is also useful.</p>
<h2>Conclusion</h2>
<p>Perforce remains my tool of choice for most SCM related activity, but Mercurial is a very useful addition to my personal tool chest, and in particular in this type of scenario.</p>
<p>The main thing I would always encourage people: <strong>Whatever you do, get into a habit of using a version control tool as often as you can!</strong> You will seldom regret it.</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/poaT1Hw6qBw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/172/hansel-and-gretels-lessons-for-safe-exploration-the-breadcrumbs-of-version-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/172/hansel-and-gretels-lessons-for-safe-exploration-the-breadcrumbs-of-version-control/</feedburner:origLink></item>
		<item>
		<title>Flickr’s Flipping Flags</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/bdkHomGCtfc/</link>
		<comments>http://www.robertcowham.com/blog/171/flickrs-flipping-flags/#comments</comments>
		<pubDate>Tue, 15 Dec 2009 10:55:20 +0000</pubDate>
		<dc:creator>robert</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[Tech]]></category>
		<category><![CDATA[branching]]></category>
		<category><![CDATA[feature branches]]></category>
		<category><![CDATA[refactoring]]></category>
		<category><![CDATA[software product lines]]></category>
		<category><![CDATA[variant management]]></category>
		<category><![CDATA[variants]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/blog/?p=171</guid>
		<description><![CDATA[I was interested to see the post about Flickr&#8217;s developing new code on the mainline and using flags and flippers to control it.
Obviously an alternative to this approach is to use feature branches &#8211; so developing longer lived features off the mainline and only merging it back in when there you want to &#8220;turn the [...]]]></description>
			<content:encoded><![CDATA[<p>I was interested to see the post about <a href="http://code.flickr.com/blog/2009/12/02/flipping-out/" target="_blank">Flickr&#8217;s developing new code on the mainline and using flags and flippers to control it</a>.</p>
<p>Obviously an alternative to this approach is to use feature branches &#8211; so developing longer lived features off the mainline and only merging it back in when there you want to &#8220;turn the feature on&#8221;.</p>
<p>As Ross Harmes says though, &#8220;This style of development isn’t all rainbows and sunshine.&#8221;</p>
<p>So what are some of the tradeoffs requiring consideration before adopting this approach?</p>
<h1>Pros</h1>
<ul>
<li>Avoids multiple branches and thus merging &#8211; makes developer&#8217;s lives easier in that they know they are only in a single branch (mainline) and they need to keep that working</li>
<li>Single codebase &#8211; force people to &#8220;fix forwards&#8221; rather than &#8220;roll back&#8221; changes.</li>
<li>According to Ross,  &#8221;Deploys become smaller and more frequent; this leads to bugs that are easier to fix, since we can catch them earlier and the amount of changed code is minimized.&#8221;</li>
</ul>
<h1>Cons</h1>
<ul>
<li>Lots of &#8220;if &#8230; else &#8230;&#8221; constructs complicate the code base. As he mentions &#8220;<em>after launching a feature, we have to go back in the code base and remove the old version (maintaining separate versions of all features on Flickr would be a nightmare)</em>&#8220;</li>
<li>Makes testing more complex with all these configurations needing to be tested</li>
<li>If you are not careful, can lead to a certain amount of &#8220;copy and paste&#8221; coding as opposed to <a href="http://en.wikipedia.org/wiki/Don't_repeat_yourself" target="_blank">DRY style</a>. This can require significant discipline to avoid.</li>
</ul>
<p>As regards the &#8220;Deploys become smaller and more frequent&#8221;, this is possible to achieve with other methods, including task branches or the equivalent. Indeed I would say that making deploys smaller and more frequent is a desirable thing to do in any case.</p>
<p>The phrase &#8220;remove the old version&#8221; is very important &#8211; and implies a suitable amount of refactoring post release (and the discipline to make sure that happens). One of the things that I have learnt to appreciate more and more is the ability and the willingness to delete unneeded code (with the safety net of old versions being stored in my repository). You may comment it out line by line (a quick /* &#8230; */ around a block, while easy to do is very easy to miss when reading the code), but it&#8217;s amazing how quickly redundant code starts to slow you down and consume energy and brain cycles &#8211; especially for new people to that code. Keeping a clean code base through good refactoring has proven to be a very effective agile development practice for many people.</p>
<p>I have seen this flag approach used successfully in the past, but also seen it start to become a morass of spaghetti code when there are too many options, or when new features interact with each other (which is where &#8220;copy and paste&#8221; starts to become attractive, inspite of all its myriad failings and creation of maintenance problems). This is particularly true of &#8220;products&#8221; where there are lots of customisable options which need to be kept available to customers in the code base for years. Addressing this particular problem in a maintainable way requires a lot of thought and effort. Codebases in C/C++ with multiple #ifdefs can become a big problem if not very carefully managed. I remember seeing an excellent internal paper within Symbian on the half dozen potential approaches to introducing variability within their codebase for mobile phone systems (a harder problem than for many due to needing to provide source to manafacturers &#8211; so code changes are visible to others). The options ranged from #ifdef (very seldom considered as valid) to modular components to ordinary conditional statements.</p>
<p>A similar danger story was a company producing financial software for 15 different customers, with multiple different options, all from the same &#8220;codebase&#8221;, and indeed from the same workspace/development environment  (it had a database and 4GL involved which made it hard to create separate workspaces). If a customer wanted a new feature, they got it, but they were also forced to take 20 other features or bug fixes that had been checked in on the mainline and were requested by other customers. It often took weeks to stabilise things. Luckily things have improved substantially since then for that particular company.</p>
<p>This whole area has resulted in approaches and tools to address the problem &#8211; search for &#8220;software product lines&#8221; and &#8220;variant management&#8221; for some links. A friend of mine, Mark Dalgarno, runs <a href="http://www.software-acumen.com/" target="_blank">Software Acumen</a> who consults and sells products in this arena.</p>
<p>In the Flickr case, it would be interesting to get some metrics as to how many &#8220;features in progress&#8221; they have on the go at any one time, and how their development team tends to be split amongst features  (how many people per feature).</p>
<p>In the absence of such metrics to help people really understand the issues fully, I hope that the Flickr post won&#8217;t be <a href="http://en.wikipedia.org/wiki/Siren" target="_blank">a siren call</a> which lures unsuspecting software developers on to a new set of rocks. As always, learn from others but make sure they are solving the same problem that you have to solve.</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/bdkHomGCtfc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/171/flickrs-flipping-flags/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/171/flickrs-flipping-flags/</feedburner:origLink></item>
		<item>
		<title>Blog relaunch on WordPress</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/5bieZsAlpac/</link>
		<comments>http://www.robertcowham.com/blog/149/blog-relaunch-on-wordpress/#comments</comments>
		<pubDate>Mon, 07 Dec 2009 15:34:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tech]]></category>
		<category><![CDATA[blogging]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/wordpress/?p=149</guid>
		<description><![CDATA[How inconvenient tools cause process problems :)]]></description>
			<content:encoded><![CDATA[<p>So, time to turn an early new year&#8217;s leaf over on the blogging front!</p>
<p>I have been struggling with some motivational issues as to making sure to keep updating the blog. Part of the reason for that is the tools I was using for maintaining the blog. The problem was that the tools I had and the interface to them were such that it became a bit of a chore to write new articles, upload them etc. Net result &#8211; I didn&#8217;t feel the temptation to blog much!</p>
<p>One of the reasons I went with Rublog (original blogging framework) is that I wanted to ensure that all my posts were appropriate version controlled &#8211; it is against my principles to have things &#8220;only&#8221; stored in a database when I am used to full version control (and various tools for seeing history of articles being stored).</p>
<p>Various other issues came to the fore as regards new features, comments etc. Having looked around, I realised that I had also been suffering from some code snobbery &#8211; my personal lack of enthusiasm for PHP (and preference for Ruby/Python), leading me to look askance at PHP based solutions. But tools are tools, and market share is as important in the blogging tool market as the SCM market &#8211; the more people using your tool, the greater the enthusiasm and availability of good options, addins, plugins etc.</p>
<p>So, the result is a conversion to WordPress. A bit of help from the <a href="http://urbangiraffe.com/plugins/redirection/">redirection plugin</a> and all the older articles should still be available!</p>
<p>The proof of the pudding as regards updates and the benefits of the new tool is in the eating, so watch this space for regular updates &#8211; keep me honest!!</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/5bieZsAlpac" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/149/blog-relaunch-on-wordpress/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/149/blog-relaunch-on-wordpress/</feedburner:origLink></item>
		<item>
		<title>Review of BCS Agile SCM Event on 24 November 2008</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/_tRe3td8O4Q/</link>
		<comments>http://www.robertcowham.com/blog/115/review-of-bcs-agile-scm-event-on-24-november-2008/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 15:54:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[agile scm]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[team foundation server]]></category>
		<category><![CDATA[tfs]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/wordpress/?p=115</guid>
		<description><![CDATA[This is a brief review of the BCS CMSG Agile SCM event on 24th November 2008.

Please note that the presentations are on line from the link above. Below are some extra notes to go with the presentations.

All in all a very good and informative day!]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;">This is a brief review of the <a style="text-decoration: none; color: #2050f0;" href="http://www.bcs-cmsg.org.uk/events/e20081124.shtml">BCS CMSG Agile SCM </a>event on 24th November 2008.</span></p>
<p>Please note that the presentations are on line from the link above. Below are some extra notes to go with the presentations.</p>
<p>All in all a very good and informative day!</p>
<h3>Michael Azoff (The Butler Group) &#8211; The Agile Difference</h3>
<p><a style="text-decoration: none; color: #2050f0;" href="http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-azoff.pdf">Presentation here</a></p>
<p>Michael did a good job of setting the scene and introducing various terms around agile etc.</p>
<p>He talked about the wider context &#8211; and how people need to stay engaged in projects. Quoted an example of a US Healthcare provider where management did not get sufficiently involved in the new billing system because it was not &#8220;exciting enough&#8221;. The company had sufficient problems that it lost 2/3 of its value, and ended up having to pay out $200m to clients etc.</p>
<p>Such things promote the need for a dashboard &#8211; simple summary of project status with the ability to drill down. Data is always available.</p>
<p>Regarding SCM he noted nothing in the indexes of various books on Agile methods that relates to SCM &#8211; an oversight!</p>
<p>However, came up with a couple of useful links:</p>
<ul>
<li>Henrik Kniberg&#8217;s <a style="text-decoration: none; color: #2050f0;" href="http://www.infoq.com/articles/agile-version-control">Version Control for Multiple Agile Teams</a></li>
<li>Also his <a style="text-decoration: none; color: #2050f0;" href="http://www.infoq.com/news/2007/06/scrum-xp-book">Scrum and XP from the Trenches</a></li>
<li><a style="text-decoration: none; color: #2050f0;" href="http://blog.crisp.se/henrikkniberg/">Henrik&#8217;s Blog</a></li>
</ul>
<h4>Richard Erwin (Microsoft) &#8211; SCM and Agile Practices within Microsoft Developer Division</h4>
<p><span style="font-size: small;"><a style="text-decoration: none; color: #2050f0;" href="http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-erwin.pdf">Presentation here</a></span></p>
<p>Another excellent talk and the slides well worth reading. Interesting to see Microsoft&#8217;s &#8220;dog fooding&#8221; of their own product and the benefits and improvements of their process between Visual Studio 2005, 2008 and 2010 (already out in previews).</p>
<p>Some points:</p>
<ul>
<li>Most companies using adhoc processes, and having problems getting a handle on all the information that is coming in. Showed off some of the dashboards and similar feedback options within VSTS.</li>
<li>Within Microsoft there are 4 major divisions:
<ul>
<li>Windows</li>
<li>Office</li>
<li>Developer Tools</li>
<li>SQL Server</li>
</ul>
</li>
<li>Their largest instance is 17m source files, 500k items, 3 Tb data</li>
<li>VSTS 2010 has been &#8220;dog fooding&#8221; since 2007. Problems don&#8217;t go unnoticed as a result &#8211; he mentioned the great summer &#8216;08 outage!</li>
<li>There is a slide showing usage of VSTS within the various divisions. Developer Tools is completely VSTS. However Windows and Office are still using SourceDepot for version control (although using VSTS being used for Planning and Bug Tracking). Richard responded to one question that the internal tools (SourceDepot) were &#8220;not available&#8221; outside Microsoft. On further prompting, he admitted that SourceDepot was a rebadged version of Perforce &#8211; based on the source code that Microsoft bought in 1999 &#8211; one of those &#8220;industry secrets&#8221; that has leaked out over the years!</li>
<li>A successful import from the Office division is the concept of &#8220;Feature Crews&#8221;</li>
<li>Concept of Bug Debt &#8211; carry no debt in feature model. One of the slides shows the burn down chart from 25,000(!) bugs for VS 2005 &#8211; they did get it close to zero for release, but life was hellish! The comparable chart for VSTS 2008 is much flatter.</li>
<li>Not surprisingly the cost of hotfixes or sevice packs is massive &#8211; its a major incentive to avoid those &#8211; hence major quality gates when teams push code back to the mainline.</li>
</ul>
<h3 style="color: #446060; line-height: 19px;">Branching Model</h3>
<p>It&#8217;s a fairly standard Mainline model with large team branches. There&#8217;s a huge amount of automated testing. Teams take it in turns to &#8220;publish&#8221; to the Mainline, and have to pass very significant quality gates to do so.</p>
<h4>Andrew Tunnicliffe (London Underground) &#8211; Towards Visualizations of Configuration Management</h4>
<p><span style="font-size: small;"><a style="text-decoration: none; color: #2050f0;" href="http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-tunnicliffe.pdf">Presentation here</a></span></p>
<p>Andrew wanted to leave us with the message &#8211; &#8220;Configuration Management isn&#8217;t just for Christmas!&#8221;</p>
<p>Some notes:</p>
<ul>
<li>His presentation was a little different in that it looked at the complexities of managing what according to the Royal College of Engineers is the most complex system in the UK.</li>
<li>Software is very much only one element &#8211; in addition to hardware, staff/people are vital. This includes training needs etc &#8211; you can&#8217;t introduce new stuff without it. <span style="font-size: small;">Takes 2 years to train 100 drivers. How do you manage change in that time?</span></li>
<li>In one morning they went from 4 trains to 5 trains per period &#8211; this is a step change of 25% in one go &#8211; you can&#8217;t introduce 10% of a new train <img src='http://www.robertcowham.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>S/w control and signalling all changing.</li>
<li>He called it saftety critical agile.</li>
<li>Of course in a public project of this size, there are huge political pressures to deliver.</li>
<li>A lot of the value in visualisation is for people at the edges rather than those in the trenches. Train driver just needs to know that <strong>something</strong> has changed.</li>
</ul>
<p>The examples he showed us are a tool based around MS Project with various extra attributes, and a Network diagram tool. It can also publish to the web.</p>
<p>Interesting to see how something relatively simple and straight forward could make a significant difference to acceptance by people &#8211; the CM information is much more easily visible.</p>
<h4>Finbarr Joy (Upco) &#8211; All Things to All Men: Keeping it simple?</h4>
<p><a style="text-decoration: none; color: #2050f0;" href="http://www.bcs-cmsg.org.uk/events/e20081124/2008-11-24-agile-scm-upco.pdf">Presentation here</a></p>
<p>Finbarr wanted to avoid any perception of giving a &#8220;sales pitch&#8221;, inspite of Upco&#8217;s sponsorship of the event &#8211; paid for a nice lunch!</p>
<p>The main focus of his talk was around build and deployment frameworks &#8211; making it easy to setup, customize and manage.</p>
<p>He mentioned the experience of Upco in doing development for their clients and wanting to scratch their own itch and improve their processes. The only drawback for me was the lack of specifics in the talk &#8211; it would have been useful to see some before and after figures showing how this approach has worked in practice. A couple of useful nuggets:</p>
<ul>
<li>Is your change management really change prevention &#8211; or perceived as that?</li>
<li>Projects change a standard pattern many times which leads to incompatible processes and much rework.</li>
</ul>
<p>He finished by pointing at the <a style="text-decoration: none; color: #2050f0;" href="https://kundo.dev.java.net/">open source project Kundo</a> which is well worth checking out:</p>
<p>Kundo provides a structured, convention based approach for Java builds. Kundo has a pluggable, extensible architecture; it harnesses the power and flexibility of Groovy and Ant to provide a highly configurable Java build framework.</p>
<p>Kundo achieves this flexibility with a plug-in architecture that attaches behaviours (provided by Kundo plug-ins) to build lifecycle phases. Kundo consists of a kernel and a set of foundation plug-ins. The kernel is responsible for the orchestration of the multiple collaborators within the build system.</p>
<p>Conceptually similar to the approach taken by the Apache Maven project, the Kundo implementation is simpler (the kernel library jar file is ~ 60Kb) and, in our humble opinion, offers greater flexibility; if you want to simply wire an Ant into a buildfile and use it, you can. Build lifecycles are defined within a build &#8216;recipe&#8217;. A recipe declares the plug-ins required to perform a build. Each Kundo plug-in, much like a Maven plug-in, encapsulates a discreet set of build management (or deployment, release management etc etc) logic and has its own versioning/release cycle.</p>
<h4>Sean Cody (Bank of America) &#8211; SCM &#8211; the Agile Keystone</h4>
<p>Sean&#8217;s talk has unfortunately not yet had the slides approved to be released externally. It was an excellent talk and well received.</p>
<p>He talked about some of the background and issues of both SCM (software configuration management) and Agile.</p>
<p>In particular for agile:</p>
<ul>
<li>Not always clear what it means</li>
<li>Is it a project management approach or just technical practices?</li>
<li>Fragilism?!</li>
<li>Image problem:
<ul>
<li>Hard to manage and control</li>
<li>Too many cowboys</li>
<li>An excuse for no documentation</li>
<li>&#8220;Decline and Fall of Agile&#8221;</li>
</ul>
</li>
</ul>
<p>He used the metaphor of the keystone which is vital to arches, domes and other architectural designs. A lack of good SCM renders Agile ineffective.</p>
<p>Key components for Bank of America:</p>
<ul>
<li>Story management server</li>
<li>SCM server</li>
<li>Continuous Integration server</li>
<li>Testing server</li>
<li>Wiki for publishing results</li>
</ul>
<p>Story management is the most important function for users. The key thing is to track the evolution of a story from inception to release. This means the following are all tied to stories (with no exceptions):</p>
<ul>
<li>All SCM check-ins</li>
<li>Build records</li>
<li>Testing records</li>
</ul>
<p>The business can see the details of the stories and indeed click through to view all aspects of development should they so wish. This visibility allows development to prove its value to the business. It also makes for easy traceability &#8211; audit is not a problem.</p>
<p>Sean is keen on tools that are easy to integrate, even though customisation comes with the cost of maintenance. For the SCM tool the following are mandatory:</p>
<ul>
<li>Atomic check-ins</li>
<li>Change history</li>
<li>Performance</li>
<li>Reliability</li>
<li>Simple to use</li>
</ul>
<p>These aren&#8217;t new requirements &#8211; but they even more important for Agile development. They (together with the framework) help address some of the criticisms of Agile:</p>
<ul>
<li>Lack of structure</li>
<li>Lack of documentation</li>
<li>Management of scope creep</li>
<li>Meeting enterprise change requirements</li>
<li>Meeting audit and regulatory requirements</li>
</ul>
<p>He left with a word of warning: cultural change is hard to implement &#8211; tools can only do so much &#8211; your people are important!</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/_tRe3td8O4Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/115/review-of-bcs-agile-scm-event-on-24-november-2008/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/115/review-of-bcs-agile-scm-event-on-24-november-2008/</feedburner:origLink></item>
		<item>
		<title>Custom Perforce GUI Installers (for large sites)</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/l1JPb0rrYn8/</link>
		<comments>http://www.robertcowham.com/blog/113/custom-perforce-gui-installers-for-large-sites/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 15:53:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Perforce]]></category>
		<category><![CDATA[SCM]]></category>
		<category><![CDATA[install]]></category>
		<category><![CDATA[installers]]></category>
		<category><![CDATA[perforce]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/wordpress/?p=113</guid>
		<description><![CDATA[For quite a while there has been an option to create your own custom installer for Perforce deployments (including automation). This can be particularly useful for larger sites with lots of new users coming along regularly.

This article shows you how to do this...]]></description>
			<content:encoded><![CDATA[<p>For quite a while there has been an option to create your own <a style="text-decoration: none; color: #2050f0;" href="http://kb.perforce.com/AdminTasks/InstallAndUpgrade/AutomatedDep..tOfPerforce">custom installer for Perforce deployments</a> (including automation). This can be particularly useful for larger sites with lots of new users coming along regularly.</p>
<p>The customizable element of the scripted installer is a configuration file named perforce.cfg. The Perforce Administrator edits this file, and places it on a shared network drive along with the expanded contents of the perforce.zip file. Perforce client programs can then be installed by running setup.exe from each desktop.</p>
<p>One of the annoyances with this approach is that you have to expand the .zip file and put things on a network drive. It is not easy to do this sort of thing within a single executable for example (which makes it hard to put on your intranet and get users to double click).</p>
<p>Well, having played around with various installers and options, I have discovered a fairly simple way of doing this via a self extracting executable (SFX), and the open source 7-Zip program.</p>
<h4>Instructions</h4>
<p>Create a directory structure:</p>
<ul>
<li>some root dir
<ul>
<li>7-zip &#8211; contains a batch file, a couple of config files and perforce.cfg &#8211; see below for contents.</li>
<li>p4winst &#8211; contains expanded <a style="text-decoration: none; color: #2050f0;" href="http://www.perforce.com/downloads/perforce/r07.2/bin.ntx86/p4winst.zip">p4winst.zip</a> (without the perforce.cfg)</li>
<li>p4vinst &#8211; contains expanded <a style="text-decoration: none; color: #2050f0;" href="http://www.perforce.com/downloads/perforce/r07.2/bin.ntx86/p4vinst.zip">p4vinst.zip</a> (without the perforce.cfg)</li>
</ul>
</li>
</ul>
<p>Currently (as of 2007.2) the perforce.cfg file is the same for both P4Win and P4V.</p>
<p><span style="font-size: small;">You need to get a couple of files from </span><a style="text-decoration: none; color: #2050f0;" title="http://7-zip.org/download.html" href="http://7-zip.org/download.html"><span style="color: blue; font-size: small;"><span style="text-decoration: underline;">7-zip.org/download.html</span></span></a></p>
<ul>
<li><span style="font-size: small;">Download  <a style="text-decoration: none; color: #2050f0;" title="http://downloads.sourceforge.net/sevenzip/7z442.exe" href="http://downloads.sourceforge.net/sevenzip/7z442.exe"><span style="color: blue; font-size: small;"><span style="text-decoration: underline;">7-Zip executable</span></span></a><span style="font-size: small;"> and install, say in d:\apps\7-Zip (as referenced in batch file)</span></span></li>
<p><span style="font-size: small;"> </span></p>
<li><span style="font-size: small;">Download <a style="text-decoration: none; color: #2050f0;" title="http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2" href="http://downloads.sourceforge.net/sevenzip/7z442_extra.tar.bz2"><span style="color: blue; font-size: small;"><span style="text-decoration: underline;">7z Library, SFXs for installers, Plugin for FAR Manager </span></span></a><span style="font-size: small;">anand unzip to the 7-Zip install directory mentioned above.</span></span></li>
</ul>
<p><span style="font-size: small;"><span style="font-size: small;"><span style="font-size: small;">Edit perforce.cfg to customize for your installation.</span></span></span></p>
<p>Create a p4winst.conf and p4v.conf (which must both be UTF-8 &#8211; Notepad can save this format, as can Notepad++ or other editors) in that directory.</p>
<p><span style="font-size: small;">Run make_installers.bat from the command line in the appropriate directory and check that the following are created (which you can put on an intranet or whatever):</span></p>
<ul>
<li><span style="font-size: small;">p4winst.exe</span></li>
<p><span style="font-size: small;"> </span></p>
<li><span style="font-size: small;">p4vinst.exe</span></li>
</ul>
<p><span style="font-size: small;">You can then send your users a single exectuable which unzips itself and automatically runs the perforce setup.exe with the included perforce.cfg &#8211; QED!</span></p>
<h4>make_installers.bat</h4>
<p>This contains something like the following:</p>
<pre style="border-left-width: 7px; border-left-style: solid; border-left-color: #e8d8d8;">:: Batch file to package up P4Win using .zip file and the 7-Zip freely available
:: Zip program (which can create SFX - Self Extracting Archives). 

@echo off 

:: May need to customize the following
set ZIP_DIR="d:\apps\7-zip" 

call :make_install p4winst
call :make_install p4vinst
goto :exit 

:make_install 

set INSTALLER=%1 

:: First create new clean versions of the zip files (including current directory version of perforce.cfg in preference)
if exist %INSTALLER%.7z del %INSTALLER%.7z
if exist %INSTALLER%.exe del %INSTALLER%.exe 

%ZIP_DIR%\7z a %INSTALLER%.7z ..\%INSTALLER%\* perforce.cfg</pre>
<pre style="border-left-width: 7px; border-left-style: solid; border-left-color: #e8d8d8;">:: Copy SFX file plus config file plus zipped installer into a single SFX .exe
copy /b %ZIP_DIR%\7zsd.sfx + %INSTALLER%.conf + %INSTALLER%.7z %INSTALLER%.exe
if not errorlevel 1 goto :EOF
if exist %INSTALLER%.exe goto :EOF 

echo *** ERROR: failed to create %INSTALLER%.exe
goto :exit 

:exit</pre>
<h4>p4winst.conf (and p4vinst.conf)</h4>
<p>These are simple UTF8 format file with contents similar to:</p>
<pre style="border-left-width: 7px; border-left-style: solid; border-left-color: #e8d8d8;">;!@Install@!UTF-8!
Title="P4Win Custom Installer"
BeginPrompt="Do you want to install P4Win?"
RunProgram="setup.exe"
;!@InstallEnd@!</pre>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/l1JPb0rrYn8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/113/custom-perforce-gui-installers-for-large-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/113/custom-perforce-gui-installers-for-large-sites/</feedburner:origLink></item>
		<item>
		<title>Subconf 2007 – Subversion and the Enterprise</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/VGHPITm3RpU/</link>
		<comments>http://www.robertcowham.com/blog/111/subconf-2007-subversion-and-the-enterprise/#comments</comments>
		<pubDate>Wed, 31 Oct 2007 15:53:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/wordpress/?p=111</guid>
		<description><![CDATA[This article is a result of my visit to Subconf in Munich a couple of weeks ago.
The first thing to say is that Subconf was very enjoyable and interesting and my compliments to the organisers. There were some excellent speakers and it was good to chat to various vendors too. I also had a very [...]]]></description>
			<content:encoded><![CDATA[<p>This article is a result of my visit to Subconf in Munich a couple of weeks ago.</p>
<p>The first thing to say is that Subconf was very enjoyable and interesting and my compliments to the organisers. There were some excellent speakers and it was good to chat to various vendors too. I also had a very good time at the dinner that evening &#8211; the only slight fly in the ointment was the S-Bahn strike the following morning which meant a rather earlier taxi to the airport than I might have wished!</p>
<p>The two keynotes by Brian Behlendorf and Karl Fogel respectively were particularly good. Indeed it was good to get them at the conference since both guys seem to be scaling down their Subversion involvement &#8211; Brian has stepped down as CTO at Collabnet and Karl is running QuestionCopyright.org (although remains as President of Subversion Corporation.</p>
<p>Some of the slides are now <a style="text-decoration: none; color: #2050f0;" href="http://subconf.open.collab.net/">available online</a>.</p>
<h2 style="color: #446060; line-height: 20px;">Brian&#8217;s Keynote</h2>
<p>Brian mentioned his involvement in Apache and some of the lessons learnt about creating a community that worked. These lessons were then applied by Collab.net to get Subversion going. If you create a high quality community, you will create high quality software.</p>
<ul>
<li>Need to be nice to people to avoid a &#8220;fork&#8221; &#8211; Development leaders exhibit good communication skills, and can bring different ideas together.</li>
<li>Conscious effort to bring new developers along the path: from &#8220;consumers&#8221;, to bug reporters, to patch submitters, to active contributors.</li>
</ul>
<p>Brian was asked the question in his talk about Linus&#8217;s somewhat inflammatory video about Git where various sideswipes about brain-dead CVS and Subversion people are made. Brian had no particular axe to grind about this and said that the Subversion camp bore no ill will to the distributed crowd and were rather surprised at some of the venom coming back &#8211; a very measured and mature response.</p>
<p>Brian mention the difference between a centralised model and a distributed model &#8211; there is a lot that enterprise like about the control of a centralised model. For example, laptops get stolen (he lost his a few weeks ago), and a laptop might contain a whole distributed repository. Enterprises prefer more control!</p>
<h2 style="color: #446060; line-height: 20px;">Martin Doettling&#8217;s Intro to Karl</h2>
<p>The <a style="text-decoration: none; color: #2050f0;" href="http://subconf.open.collab.net/pdf/SubConf07_Karl_Fogel_intro_MDoettling.pdf">key points of this</a> were:</p>
<ul>
<li>Estimated user base now exceeds 2 million</li>
<li>10x growth since 1.4</li>
<li>Large numbers of enterprise users</li>
</ul>
<h2 style="color: #446060; line-height: 20px;">Karl&#8217;s Keynote - <a style="text-decoration: none; color: #2050f0;" href="http://subconf.open.collab.net/pdf/Keynote_Karl_Fogel_how-stuff-happens.pdf">How Stuff Happens</a></h2>
<p>Karl picked up on some of Brian&#8217;s points about the community, and showed various ways in which they have been able to get hackers to create software that the enterprise can use!</p>
<ul>
<li>There is a very comprehensive <a style="text-decoration: none; color: #2050f0;" href="http://subversion.tigris.org/hacking.html">guide to how to contribute</a> &#8211; 43 pages of it! This is where people start.</li>
<li>Some principles:
<ul>
<li>Make it easy to do things right</li>
<li>Make it rewarding to do things right</li>
<li>Influence proportional to effort
<ul>
<li>Moving from contributor to partial-committer to commiter</li>
<li>Tracking no of patches etc by user &#8211; all automated with links (see <a style="text-decoration: none; color: #2050f0;" href="http://www.red-bean.com/svnproject/contribulyzer/">Contribulyzer</a>)</li>
</ul>
</li>
</ul>
</li>
</ul>
<h2 style="color: #446060; line-height: 20px;">Other Notes</h2>
<p>I couldn&#8217;t stay for the second day, but some other points of interest:</p>
<ul>
<li>There are increasing numbers of tools based around Subversion &#8211; Collabnet, Polarion, CodeBeamer etc</li>
<li>Subversion command line is increasingly irrelevant as people use it through Tortoise, Eclipse etc.</li>
<li>Merge tracking there at long last with 1.5 just around the corner</li>
<li>Really being used in the industry</li>
<li>SVK provides an interesting distributed method</li>
</ul>
<p>I also had some chats with Collabnet around the idea of perhaps the BCS CMSG working with them to put on an event in London next year &#8211; definitely something to look into.</p>
<p>Well worth a visit as a conference.</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/VGHPITm3RpU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/111/subconf-2007-subversion-and-the-enterprise/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/111/subconf-2007-subversion-and-the-enterprise/</feedburner:origLink></item>
		<item>
		<title>Directing vs. Managing Configurations</title>
		<link>http://feedproxy.google.com/~r/RobertCowhamsBlog/~3/rZs9UMnJIZ0/</link>
		<comments>http://www.robertcowham.com/blog/109/directing-vs-managing-configurations/#comments</comments>
		<pubDate>Tue, 10 Jul 2007 15:52:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[SCM]]></category>
		<category><![CDATA[management]]></category>

		<guid isPermaLink="false">http://www.robertcowham.com/wordpress/?p=109</guid>
		<description><![CDATA[In a recent CM Crossroads article on defining Agile SCM I included the quote from Charles Handy that I recently picked up on my travels through an airport:
Go to the theatre and look at the programme. Everyone connected with the performance is listed, no matter how small their contribution. People like to be recognised as [...]]]></description>
			<content:encoded><![CDATA[<p>In a recent CM Crossroads article on defining Agile SCM I included the quote from Charles Handy that I recently picked up on my travels through an airport:</p>
<blockquote><p>Go to the theatre and look at the programme. Everyone connected with the performance is listed, no matter how small their contribution. People like to be recognised as individuals. The word &#8220;manager&#8221; is reserved for those in charge of things, not people, the stage manager and the lighting manager. The people who are in direct communication with the customer, the actors, are directed, not managed, by someone who actually leaves the scene once the project is under way. He or she trusts the cast to go it alone, and as often as not, they improve on the production once the director departs. Trust inspires. One more thing &#8211; at the end of each performance they receive an expression of appreciation from their audience, direct feedback from the people who matter. No waiting for the annual performance appraisal.</p>
<blockquote><p>Charles Handy, <em>Myself and Other More Important Matters</em>, Arrow Books, 2007 &#8211; ISBN 9780099481881</p></blockquote>
</blockquote>
<p>This obviously applies to more than just the directing vs. managing debate (e.g. feedback/appreciation), but really hit home for me as an expression of what those of us in the Configuration Management arena need to be doing. We should be directing our colleagues and developers rather than managing them (although we can of course manage actual configurations as before!). We need to get out and about amongst our congregation of developers and others, and infect them with enthusiasm and skills for the delights and benefits of good CM.</p>
<p>There is a huge danger, which I come across fairly frequently, of sitting in your ivory tower wondering why developers aren&#8217;t doing what you know is &#8220;the right thing&#8221;. They haven&#8217;t got the message, they aren&#8217;t doing what they should, and management isn&#8217;t helping you to beat them up with a big stick to force them into doing it. Sometimes it seems we are just on a hiding to nothing&#8230;</p>
<p>In CM we need to aspire to the director (servant-leader) mold &#8211; we provide a support service for people to get on with their jobs and we help them do it, but it is <strong>they</strong> that do (most of) it, not us. There is obviously some level at which CM is still responsible for certain things &#8211; in particular processes and systems, and for auditing to ensure things have been done correctly.</p>
<p>Thus I am more and more convinced that, particularly for Agile teams, CM should be the responsibility of everyone not just the CM person(s). This means that as CM professionals our job is:</p>
<ul>
<li>to sell the ideas, principles and tools of sound CM while supporting people in getting their jobs done and <strong>delivering value</strong> to the business (not just ticking CM boxes)</li>
<li>to solve people&#8217;s day-to-day issues through education and tool/automation support</li>
<li>to <strong>show </strong>how it is easier to do &#8220;the right thing&#8221; than it is not to do it &#8211; a little discipline is worth a ton of lost time due to bugs introduced, or things suddenly not working</li>
<li>to get out and about and work with developers, pairing with them and demonstrating good CM practice, discovering those little niggling things that cause lost time and productivity or pain and solving them</li>
<li>to ensure that our own working practices are suitable role models (avoid &#8220;do as we do not as we say&#8230;&#8221;)</li>
<li>to focus on continuous process improvement &#8211; there is almost always something more we can do (but again focus on value)</li>
</ul>
<p>There are many challenges, and in an Agile world, it is more about working with people to define just enough process to be useful, and not too much to get in the way. I was fascinated to hear a vendor representative complaining that some of their customer had developers who were downloading and using Subversion for their day to day work as opposed to using the corporate tool. I wondered what had happened to make the tool or the configured process so unfriendly as to force the developers down this path.</p>
<img src="http://feeds.feedburner.com/~r/RobertCowhamsBlog/~4/rZs9UMnJIZ0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.robertcowham.com/blog/109/directing-vs-managing-configurations/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.robertcowham.com/blog/109/directing-vs-managing-configurations/</feedburner:origLink></item>
	</channel>
</rss>
