<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<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/"
	>

<channel>
	<title>version-control &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/version-control/</link>
	<description>Feed of posts on WordPress.com tagged "version-control"</description>
	<pubDate>Sat, 26 Dec 2009 14:20:01 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Best screen cast on Git.]]></title>
<link>http://pythonnewbie.wordpress.com/2009/12/24/best-screen-cast-on-git/</link>
<pubDate>Fri, 25 Dec 2009 00:03:04 +0000</pubDate>
<dc:creator>Raja Ramanathan</dc:creator>
<guid>http://pythonnewbie.wordpress.com/2009/12/24/best-screen-cast-on-git/</guid>
<description><![CDATA[I loved this screen cast on Git and i strongly recommend this for any one. It runs for an hour and h]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I loved this screen cast on Git and i strongly recommend this for any one. It runs for an hour and half. He goes from basics to all the way to advanced in the end. I would rate this to be one of the best screen casts. He explains it so well the internals of the git that it solidified my understanding of branching, merging and using remote repository well. Here are the links&#8230;</p>
<ul>
<li><a href="http://excess.org/article/2008/07/ogre-git-tutorial/" target="_blank">Screen cast</a>.</li>
<li><a href="http://edgyu.excess.org/git-tutorial/2008-07-09/intro-to-git.pdf" target="_blank">Slide in pdf format</a>.</li>
</ul>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[My Jump into the Modern SCMs]]></title>
<link>http://hamandeggs.wordpress.com/2009/12/25/my-jump-into-the-modern-scms/</link>
<pubDate>Fri, 25 Dec 2009 00:01:30 +0000</pubDate>
<dc:creator>hleinone</dc:creator>
<guid>http://hamandeggs.wordpress.com/2009/12/25/my-jump-into-the-modern-scms/</guid>
<description><![CDATA[I&#8217;ve been a somewhat faithful user of SVN since I started programming some 7 years back. It]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I&#8217;ve been a somewhat faithful user of SVN since I started programming some 7 years back. It&#8217;s better than CVS (which I&#8217;ve used for some time) or &#8211; I don&#8217;t even know what kind of perverted &#8211; methods people used to use before that. It has worked relatively well in my very own projects and inadequately in the company space. I think the case is quite similar for many projects, the switch from CVS to SVN is now followed with another switch.</p>
<p>In the last few years I&#8217;ve heard rumors about the next-generation SCMs like Mercurial, Git and Bazaar. I&#8217;ve heard huge open source projects moving out from SVN to one of those. As far as I understand, they&#8217;re all based on similar approach: You clone the whole repository to your computer as a local repository, make your commits to the local repository and then push the changes back to the distributed one. Then the changes from the distributed repository are pulled to other people&#8217;s local repositories and so should you do with the changes they have made.</p>
<p>For a while I&#8217;ve thought that the next-generation has already become current and I should really get back on track with the revision control. Few weeks ago a perfect moment appeared when I begun an open source pet project with a good friend of mine. We decided to use some modern technology for sharing the sources with each other. So we went on with Google Code which meant Mercurial.</p>
<p>First thing I want to know when introducing a new programming-related practice is its integration with the practices I already use. Read: I want IDE integration. And I also want to reserve the ability to change IDE and it still works. Of course I want to run it on multiple platforms, at least Windows and Linux. I want the ability to change from Eclipse + Windows to Netbeans + Linux or any combination of these, also as IntelliJ IDEA is being open sourced why not expect support for it too. I have to admit that that&#8217;s a bit tough requirement for any system, but coming from Java world that&#8217;s kind of a default expectation.</p>
<p>Mercurial works nicely out-of-the-box on Netbeans, probably because they use it a lot internally at Sun, for example on <a href="http://hub.opensolaris.org/bin/view/Community+Group+tools/dcm_evaluation_mercurial">OpenSolaris</a>. The Eclipse support is not that qualified, <a href="http://bitbucket.org/mercurialeclipse/main/wiki/Home">MercurialEclipse</a>&#8217;s integration with the Eclipse Team environment is not even close to the standards set by Subversive or Subclipse.</p>
<p>The things are completely the opposite on Git, <a href="http://www.eclipse.org/egit/">the Eclipse plugin</a> is quite good &#8211; despite being still in incubation &#8211; and integrates somehow with the Team features. <a href="http://nbgit.org/">The Netbeans integration</a> is not even able to push to the master, which makes it mostly unusable.</p>
<p>As a conclusion, my expectations are not yet reached, and I expect to see bigger change in the near future, probably when the systems reach the integration level of SVN which might be the reason restricting wider adoption in the enterprise. I don&#8217;t know if there will be a single winner in the end. It seems that Mercurial and Git are quite even on features and adaption and Bazaar is not much behind. If there will be a single winner, as a Finn, I have to hope <a href="http://en.wikipedia.org/wiki/Linus_Torvalds">my countryman</a>&#8217;s product Git to be victorious. (For the serious readers, former is intended to be a joke, I&#8217;m really not patriotic at all, though Linus is a nice guy) I want to wish a merry Christmas to all my few readers!</p>
<p><iframe src='http://digg.com/api/diggthis.php?u=http%3A%2F%2Fdigg.com%2Fprogramming%2FMy_Jump_into_the_Modern_SCMs_Ham_and_Eggs' height='82' width='55' frameborder='0' scrolling='no' style='float: right; margin-left: 10px; margin-bottom: 5px; padding: 4px 0 2px 4px; background: #fff;'></iframe></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Distributed Version Control is the future...]]></title>
<link>http://pythonnewbie.wordpress.com/2009/12/23/distributed-version-control-is-the-future/</link>
<pubDate>Wed, 23 Dec 2009 22:01:18 +0000</pubDate>
<dc:creator>Raja Ramanathan</dc:creator>
<guid>http://pythonnewbie.wordpress.com/2009/12/23/distributed-version-control-is-the-future/</guid>
<description><![CDATA[If you have been following my posts, you would have noticed that I made the decision on branching mo]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>If you have been following my posts, you would have noticed that I made the decision on branching model for the web development. Usually ISP &#8217;s provide a lot of choices on VCS (Version Control System)  - svn,mercurial,bazzar and git. I wanted to choose one that makes the dev process efficient and fast enough for frequent releases.</p>
<p>Having used powerful and popular commercial VCS which is centralized by the way, I was leaned towards going with svn because it is same as them except for lack of gui tools to admin, locking and painful multiple merges between branches. But it seemed to be the popular open source version control in the dev community now. But i wanted to step back and evaluate other options of git and mercurial which i&#8217;ve not used before even as a developer.</p>
<p>I was stumped when i attempted to evaluate git and mercurial. Really these two are DVCS (Distributed Version Control System) which is quite different from the CVCS (Centralized Version Control System) like cvs,perforce and svn.  Honestly there are some basic fundamental difference between the distributed &#38; centralized that you need to be aware of.  <a title="DVCS" href="http://betterexplained.com/articles/intro-to-distributed-version-control-illustrated/" target="_blank">Better explained here</a>.</p>
<p>You need to first get some of the centralized concepts( the painful branching and merging) out of your brain for a while and look at DVCS in a pure mind. I&#8217;m planning to install and play with git on os/x as it looks promising among DVCS choices.</p>
<p>If you have sometime to kill take a look at this youtube video where Linus talks about Git. Key take away from this  video is that DVCS is better than CVCS and not about the git vs other source controls.</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/4XpnKHJAok8&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/4XpnKHJAok8&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Proposal: Version Control - The Operating System]]></title>
<link>http://andrewfong.wordpress.com/2009/12/22/version-control-the-operating-system/</link>
<pubDate>Tue, 22 Dec 2009 22:15:17 +0000</pubDate>
<dc:creator>andrewfong</dc:creator>
<guid>http://andrewfong.wordpress.com/2009/12/22/version-control-the-operating-system/</guid>
<description><![CDATA[There are two classes I wish I took back in college: Dinosaurs &amp; Their Relatives and Operating S]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>There are two classes I wish I took back in college: <a href="http://www.thecrimson.com/article/2006/10/20/dinosaurs-teaches-science-literacy-has-place/">Dinosaurs &#38; Their Relatives</a> and <a href="http://www.eecs.harvard.edu/~mdw/course/cs161/">Operating Systems</a>. The latter especially bugs me, because every time I see something about a <a href="http://www.chromium.org/chromium-os">browser-based</a> <a href="http://en.wikipedia.org/wiki/Joo_Joo">operating system</a>, I want to scream, &#8220;No, no, I don&#8217;t want that!&#8221; and then curl up in a corner for three months making something I do want.</p>
<p>I don&#8217;t have the know-how to do the latter, but I do have a blog, so I can do some virtual screaming.</p>
<p>My beef with a browser-based OS is simple: I LIKE DOWNLOADING THINGS. My WiFi connection throws a hissy fit every 10 minutes (can&#8217;t tell whether I should blame Netgear, Comcast, or tiny gremlins). Or sometimes I&#8217;m on the road or on a plane or in some place where I want to do something on a netbook and I don&#8217;t have net access. I bet I&#8217;m not alone. I&#8217;ve heard this plenty of times: &#8220;I want a netbook. All I do is browse the net anyway. Oh, and I want Microsoft Word. And I need to be able to sync my MP3 player with it. And I want to watch some movies I&#8217;ve ripped. And I want to play World of Warcraft. And if it&#8217;d scratch my back, that&#8217;d be nice too.&#8221;</p>
<p>As in, people basically want a tiny full-featured laptop for $300. Sure, you can do all the above stuff with your fancy Gears / HTML5 / Extensions / etc., but you&#8217;re spending so much time reinventing the wheel. Hey look everyone, I can drag and drop in my browser! Whee! I&#8217;ve only been able to do that in my operating system since at least Windows 3.1!</p>
<p>This isn&#8217;t exactly a new experience for the industry either. When the iPhone launched, Apple was all, &#8220;You don&#8217;t need apps! You have web apps!&#8221; Then they launched the App Store and pretended they never said that.</p>
<p>So what&#8217;s the best way to merge the &#8220;cloud&#8221; with a netbook&#8217;s operating system? IMHO, the solution has been around for a while. And no, it&#8217;s not the iPhone, it&#8217;s <a href="http://en.wikipedia.org/wiki/Revision_control">version control</a>.</p>
<p><!--more-->I like to download things, but I also like the idea of being able to use multiple machines and have everything &#8212; my settings, files, and apps all sync up intelligently. Download an MP3 on one computer and listen to it on another. Version control lets you do that.</p>
<p>Version control has traditionally been a very difficult-to-understand programmer-oriented concept, yet it&#8217;s not hard to automate much of it and slap a decent UI on it. I mean, <a href="http://dropbox.com/">Dropbox</a> has managed to pull it off.</p>
<p>I like Dropbox, but I want Dropbox&#8217;s mechanics to extend to the entire operating system, and then some. Some ideas on what that might look like:</p>
<p>(1) <strong>Package package package</strong>.</p>
<p>Let&#8217;s keep everything in their self-contained packages &#8212; no need for a single app to insert stuff into a registry, modify environment variables, or scatter files across /usr/bin, /usr/lib, and six other folders. One single package, just like good lord intended. Why? Well, it&#8217;s a good idea generally, and it also makes syncing less of a headache &#8212; imagine syncing an app from one computer to another only to realize you forgot a DLL.</p>
<p>(2) <strong>Infinite Undos</strong></p>
<p>It&#8217;s kind of the reason version control was invented.</p>
<p>(3) <strong>Share the sandbox</strong></p>
<p><strong></strong>People love sandboxes. It sounds fun and magical, and it also happens to good for security. We like holding dangerous animals in captivity for our amusement &#8212; so long as said dangerous animals can&#8217;t jump out of their pen and devour Little Timmy. The problem with the sandboxes is that sometimes apps need to share stuff. Some apps are designed to enhance others. Other apps are meant to edit external files. Proper sandboxing lets the user decide what apps can access what, but users are fallible.</p>
<p>One way of building a flexible sandbox is to borrow concepts from version control &#8212; e.g. <em>branch</em>, <em>clone, </em>and <em>merge</em>. If App A wants to change a setting that App B depends on, rather than letting A directly edit the setting, the OS simply provides A with its own private copy. If A and B are both aware of each other and need to see the changes the other is making, the OS lets A and B merge their two copies. If A or B is at any point unhappy with the merge, either is free to revert back to their original copy. Granted, user interaction may still be required at some point here, and explaining version control to the average user is hard, but Dropbox has done a decent enough job of it so far with simple files.</p>
<p>And yes, multiple copies of things will eat up memory quick but (1) deltas are small and (2) disk space is getting cheaper.</p>
<p>(4) <strong>Standards</strong></p>
<p>A lot of this could be built using existing VCS standards &#8212; SVN, GIT, Mercurial, and so forth all do what they do well enough. If the cloud that your OS depended on disappeared or became evil, then anyone capable of setting up a version control repository could build their own replacement cloud. It maximizes user-control and decreases dependencies.</p>
<p>&#8212;&#8211;</p>
<p>Now I could be talking out of my ass here &#8212; I have yet to compile my own kernel, and while I love GIT, I&#8217;ve also never poked around in its source code and done any performance testing. Still, if this feasible, someone, please make it.</p>
<p>UPDATE: <a href="http://news.ycombinator.com/item?id=1010969">Lots of useful comments at news.yc</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Tracking versions of applications]]></title>
<link>http://stande.wordpress.com/2009/12/08/tracking-versions-of-applications/</link>
<pubDate>Tue, 08 Dec 2009 14:36:10 +0000</pubDate>
<dc:creator>stande</dc:creator>
<guid>http://stande.wordpress.com/2009/12/08/tracking-versions-of-applications/</guid>
<description><![CDATA[Sometimes I need to check the version (build, release) of an application for which I need  to create]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Sometimes I need to check the version (build, release) of an application for which I need  to create/update test scripts or run a test.</p>
<p>For this I created a test script that fetches application names and their versions for the current day and outputs this into an Excel file . That is I have a separate file for each day.</p>
<p>It is useful if you need to check quickly which builds were deployed into the test environment yesterday evening or when the current build for an application was deployed into the environment.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Cloud Considerations: 4 tips for getting started on Amazon EC2]]></title>
<link>http://blogs.mikeci.com/2009/12/08/cloud-considerations-4-tips-for-getting-started-on-amazon-ec2/</link>
<pubDate>Tue, 08 Dec 2009 12:20:11 +0000</pubDate>
<dc:creator>benleedham</dc:creator>
<guid>http://blogs.mikeci.com/2009/12/08/cloud-considerations-4-tips-for-getting-started-on-amazon-ec2/</guid>
<description><![CDATA[You need an environment and have decided that Amazon is the way to go. There are some things that sh]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>You need an environment and have decided that Amazon is the way to go. There are some things that should be considered before building your OS on, or uploading to the cloud.</p>
<p><span style="text-decoration:underline;"><strong>1. Getting started</strong></span></p>
<p style="text-align:center;"><a href="http://mikeciblogs.wordpress.com/files/2009/12/engine_start.jpg"><img class="aligncenter size-full wp-image-140" title="engine_start" src="http://mikeciblogs.wordpress.com/files/2009/12/engine_start.jpg" alt="" width="198" height="174" /></a></p>
<p>There are a couple of ways to get started with Amazon Cloud Hosting. You can build your own AMI ( Amazon Machine Image ) or you can modify an existing public AMI.<br />
I am not going to give a tutorial on how to go about either of these options, that is well documented by <a title="Amazon" href="http://docs.amazonwebservices.com/AmazonEC2/dg/2006-06-26/creating-an-ami.html" target="_blank">Amazon</a>.</p>
<p>Firstly you need to select your operating system, Amazon has a decent selection of supported OSs, you have the main Linux flavours that you&#8217;d want to see:</p>
<ul>
<li>Red Hat</li>
<li>Fedora</li>
<li>Ubuntu</li>
<li>Debian</li>
<li>Gentoo</li>
<li>openSUSE</li>
</ul>
<p>along with:</p>
<ul>
<li>OpenSolaris</li>
</ul>
<p>and one token Windows version:</p>
<ul>
<li>Windows Server 2003</li>
</ul>
<p>After selecting your OS see if there is a public image available of the version you would like to help you make the decision of whether to build your own.</p>
<p>If you want to go with a public AMI you need to decide if you can trust the provider, you can boot up an instance and check out the machine, see what is installed, ensure there is no proprietary software or at least you know the software that is installed. This should be thought about as well as the considerations to be applied to building your own AMI.</p>
<p>The easiest way to boot your first AMI is through the <a title="AWS Management Console" href="http://aws.amazon.com/console/" target="_blank">AWS Management Console</a>. It is a fairly intuitive front end to the commands you can run when you install the EC2 tools, once you learn your way around the console, it will  give you a better insight into the tasks you need to get used to when using the command line tools.</p>
<p>If you want to build your own AMI then you will be in control of exactly what is installed, but you should consider the next point.</p>
<p><span style="text-decoration:underline;"><strong>2. Is it Repeatable?</strong></span></p>
<p style="text-align:center;"><a href="http://mikeciblogs.wordpress.com/files/2009/12/escher-drawing-hands.png"><img class="aligncenter size-full wp-image-141" title="Escher Drawing Hands" src="http://mikeciblogs.wordpress.com/files/2009/12/escher-drawing-hands.png" alt="" width="198" height="149" /></a></p>
<p>Now you have decided how to get started, are you able to rebuild your environment to the same specifications in a short period of time? If the worst happens and for whatever reason your server gets shutdown, lost, deleted, can you re-provision it?</p>
<p>Whether you are building your own or modifying an existing AMI there are ways to make the process repeatable. The simplest way is to keep a record of the process, a list of what is installed, the location of the binaries, where they are installed and any configuration steps.</p>
<p>If you have read the Amazon docs, and I suggest you do, then it should be fairly clear that all of the processes involved in either building your own or starting with an existing AMI are scriptable ( at least on the Linux side of things ). Using Amazon&#8217;s EC2 tools you can control AMI instances through scripts quite nicely, boot instances, attach EBS volumes, upload files and execute commands, everything necessary for automated environment creation. This in theory could be the beginning of your own Amazon DSL, but that is another blog post&#8230;</p>
<p>When creating your AMI through a loopback file, once again you have almost infinite control which should make the scripting easier. Once you have finished with your masterpiece you need to be sure to bundle it and <a title="upload it to Amazon" href="http://docs.amazonwebservices.com/AWSEC2/latest/DeveloperGuide/index.html?bundling-an-ami-linux.html" target="_blank">upload it to Amazon</a>.</p>
<p><span style="text-decoration:underline;"><strong>3. Persistence</strong></span></p>
<p style="text-align:center;"><a href="http://mikeciblogs.wordpress.com/files/2009/12/catinabox.png"><img class="aligncenter size-full wp-image-142" title="catinabox" src="http://mikeciblogs.wordpress.com/files/2009/12/catinabox.png" alt="" width="198" height="198" /></a></p>
<p>Now you know how you want to create your AMI and make sure the process is repeatable you need to think about the persistence of your data. By default none of your information will be saved when your AMI instance is shut down, unless you re-bundle that instance to a new bucket or with a new manifest name everything you did since you booted will be lost.</p>
<p>Obviously this isn&#8217;t workable, Amazon have a solution, and they call it Elastic Block Storage (EBS). Again there are Amazon docs for how to <a title="create and use EBS volumes" href="http://docs.amazonwebservices.com/AWSEC2/latest/UserGuide/index.html?creating-ebs.html" target="_blank">create and use EBS volumes</a>. EBS volumes are attached to your instances as devices which you can mount as you would any other device, they are easy to use and it is simple to take backups by using the snapshot feature.</p>
<p>The real consideration is how to structure the installation of your software so you get the benefits of data persistence. This is obviously going to vary massively on the type of system you are running and the software you are installing, but components like web applications and databases and such should be configured to use EBS for information storage. If you plan carefully you can have EBS volumes with discrete services installed that can be cloned and attached to new instances at will, allowing for a truly scaleable architecture.</p>
<p><span style="text-decoration:underline;"><strong>4. Versioning</strong></span></p>
<p style="text-align:center;"><a href="http://mikeciblogs.wordpress.com/files/2009/12/bulb_old_new.png"><img class="aligncenter size-full wp-image-146" title="bulb_old_new" src="http://mikeciblogs.wordpress.com/files/2009/12/bulb_old_new.png" alt="" width="198" height="144" /></a></p>
<p>How can you keep a track of differences in your environments from one upload to the next? There are a couple of really manageable ways, if you are scripting your setup then you can use version control and a release or tagging process of the script to keep a track of environmental changes.</p>
<p>If you are only at the stage of keeping a track of changes through component lists then it is possible to bundle your AMIs to a bucket appended with a version, or indeed specify a manifest file versioned in the same way, meaning you will keep your historic changes as an entire environment. If you are version controlling your scripts I would suggest uploading to unique bucket names appended with versions to begin with anyway, it just means you can immediately revert to the old environment if anything goes wrong.</p>
<p>After using Amazon EC2 for a while it will become clear how environments can be used as just another architectural component, they can be provisioned on demand, have services attached and started and within minutes you have a custom &#8220;box&#8221; available for use in the cloud, which can be torn down and brought back to its initial state very quickly.</p>
<p>One more thing, whatever you do, don&#8217;t block your SSH port <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How does Etherpad work?]]></title>
<link>http://nickdsnyder.wordpress.com/2009/12/06/how-does-etherpad-work/</link>
<pubDate>Sun, 06 Dec 2009 09:15:41 +0000</pubDate>
<dc:creator>nickdsnyder</dc:creator>
<guid>http://nickdsnyder.wordpress.com/2009/12/06/how-does-etherpad-work/</guid>
<description><![CDATA[Etherpad is (but not for long) an awesome tool that lets you do real time collaborative editing for ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://etherpad.com/" target="_blank">Etherpad</a> is (but not for long) an awesome tool that lets you do real time collaborative editing for free without creating an account. My favorite use case for Etherpad is for conducting phone screen interviews because it allows me to copy and paste pre-written questions for the candidate to read, and also enables me to ask coding questions to software engineers.</p>
<p>It came as an unpleasant surprise on Friday (2009-12-05) when a friend discovered that Etherpad disabled new pad creation because they had been <a href="http://etherpad.com/ep/blog/posts/google-acquires-appjet" target="_blank">bought by Google</a> to work on Google Wave. This sparked a multi-hour discussion with some fellow engineers about how we might implement Etherpad since we had been unable to find any suitable alternatives that matched our requirements (free, no sign up, real time editing). Our discussion ultimately converged to a solution that we later found out was very similar the <a href="http://www.youtube.com/watch?v=3ykZYKCK7AM&#38;feature=youtube_gdata" target="_blank">Google Wave implementation</a>. Fortunately, <a href="http://etherpad.com/ep/blog/posts/etherpad-back-online-until-open-sourced" target="_blank">Etherpad came back online the next day</a> so I decided to investigate how Etherpad had solved this very interesting problem.</p>
<p>To keep everything in sync, the Etherpad server holds the authoritative copy of the document. When an Etherpad client updates the document, it sends a changeset to the server. The client does not receive any information back when it posts a changeset, nor does it poll the server for updates, so it appears that the client must initiate some sort of semi-persistent connection to the server on page load that allows the server to stream updates to the client.</p>
<p>While a client is updating the document it sends changesets to the server every N milliseconds until there are no more changesets to send. In practice this means most changesets are only a few characters depending on how fast you type. The changesets that the client is sending are quite cryptic but I was inspired to do some reverse engineering.</p>
<p>Actions:</p>
<ol>
<li>Type &#8220;hellodude&#8221; on line 2.</li>
<li>Highlight &#8220;hellodude&#8221; and PASTE &#8220;bye&#8221; (I had copied &#8220;bye&#8221; to my clipboard outside of Etherpad)</li>
<li>Highlight &#8220;bye&#8221; and delete it with one keystroke</li>
</ol>
<p>Changesets that Etherpad generated:</p>
<ol>
<li><code>"changeset":"Z:2&#62;9&#124;1=1*0+9$hellodude"</code></li>
<li><code>"changeset":"Z:c&#60;6&#124;1=1-8*0+2$by"</code></li>
<li><code>"changeset":"Z:6&#60;3&#124;1=1-3$</code></li>
</ol>
<p>Analysis:</p>
<ul>
<li>&#8220;Z:2&#8243;, &#8220;Z:c&#8221; and &#8220;Z:6&#8243; are the length of the current document in base 36 (1,2,&#8230;,8,9,a,b,&#8230;,y,z,10,11,&#8230;,18,19,1a,1b,&#8230;) BEFORE the change occurred. The &#8220;length&#8221; is the number of distinct positions where your cursor can exist.</li>
<li>&#8220;&#62;9&#8243; means the net effect of the changeset was to add 9 characters. &#8220;&#60;6&#8243; means the net effect of the changeset was to delete 6 characters (deleted 8 characters and added 2 characters).</li>
<li>&#8220;&#124;1&#8243; is the line number that the changeset applies to (this parameter is omitted for the first line which has index 0)</li>
<li>&#8220;=1&#8243; is the starting position of the cursor for the changeset (index starting at 1 for each line)</li>
<li>&#8220;-8*&#8221; are the absolute number of characters that were deleted (omitted if no characters were deleted)</li>
<li>&#8220;*0&#8243; is either present or not present in everything that I have tried so I can&#8217;t figure out it is is more than just a delimiter.</li>
<li>&#8220;+9$&#8221;, &#8220;+2$&#8221; and &#8220;-3$&#8221; are the absolute number of characters that were added</li>
<li>&#8220;$hellodude&#8221; and &#8220;$hi&#8221; are the characters that were added. If characters were deleted and no characters were added then this is empty (which means the client is requesting to delete the character at a specific position, regardless of its value)</li>
</ul>
<p>I assume the server is streaming back similar changesets to the client but I don&#8217;t know for sure since the persistent connection isn&#8217;t visible in Firebug and I am not interested in busting out Wireshark. This isn&#8217;t a complete picture (it gets a little bit more complicated for multiline changesets, and I don&#8217;t care about text formatting) but I am satisfied that I was able to figure out the basics.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Firefox profile folder cleanup script]]></title>
<link>http://l0b0.wordpress.com/2009/11/30/firefox-profile-folder-cleanup-script/</link>
<pubDate>Mon, 30 Nov 2009 11:28:00 +0000</pubDate>
<dc:creator>l0b0</dc:creator>
<guid>http://l0b0.wordpress.com/2009/11/30/firefox-profile-folder-cleanup-script/</guid>
<description><![CDATA[Here&#8217;s a simple script which can be useful if you want to version control the Firefox profile ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Here&#8217;s a simple script which can be useful if you want to version control the Firefox profile folder, or just to keep it slim. Please see the embedded documentation for more information.</p>
<h2>cleanup.sh</h2>
<pre class="brush: bash;">#!/bin/sh
#
# NAME
#    cleanup.sh - Clean up the Firefox profile folder
#
# SYNOPSIS
#    cleanup.sh [options] [directory]
#
# OPTIONS
#    -v,--verbose    Verbose output
#
# EXAMPLE
#    ./cleanup.sh -v
#
#    Cleanup in ./Profile
#
#    /path/to/cleanup.sh /path/to/Firefox/profile
#
#    Cleanup in /path/to/Firefox/profile
#
# DESCRIPTION
#
#    &#34;Vacuums&#34; the .sqlite files and sorts cert_override.txt and persdict.dat
#    alphabetically, to make them suitable for version control.
#
# BUGS
#    Email bugs to victor dot engmark at gmail dot com. Please include the
#    output of running this script in verbose mode (-v).
#
# COPYRIGHT AND LICENSE
#    Copyright (C) 2009 Victor Engmark
#
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see &#60;http://www.gnu.org/licenses/&#62;.
#
################################################################################

# Output error message
error()
{
    if [ -z &#34;$2&#34; ]
    then
        error_code=$EX_UNKNOWN
    else
        error_code=$2
    fi
    echo &#34;$1&#34; &#62;&#38;2
    exit $error_code
}

usage()
{
    error &#34;Usage: ${cmdname} [-v&#124;--verbose] [directory]&#34; $EX_USAGE
}

verbose_echo()
{
    if [ $verbose ]
    then
        echo &#34;$*&#34;
    fi
}

# Use for mandatory directory checks
# $1 is the directory path
# $2 is the (optional) error message
directory_exists()
{
    if [ ! -d $1 ]
    then
        error &#34;No such directory '${1}'
$2&#34; $EX_NO_SUCH_DIR
    fi
}

# Make sure an executable is available
# $1 is the path to the executable
# $2 is the (optional) error message
executable_exists()
{
    if [ ! -x $1 ]
    then
        error &#34;No such executable '${1}'
$2&#34; $EX_NO_SUCH_EXEC
    fi
}

ifs_original=&#34;$IFS&#34; # Reset when done
IFS=&#34;
&#34; # Make sure paths with spaces don't make any trouble when looping

PATH=&#34;/usr/bin:/bin&#34;
cmdname=`basename $0`
directory=$(dirname $(readlink -f $0))

if [ -z &#34;$profile_directory&#34; ]
then
    profile_directory=&#34;${directory}/Profile&#34;
fi

# Exit codes from /usr/include/sysexits.h, as recommended by
# http://www.faqs.org/docs/abs/HTML/exitcodes.html
EX_OK=0           # successful termination
EX_USAGE=64       # command line usage error
EX_DATAERR=65     # data format error
EX_NOINPUT=66     # cannot open input
EX_NOUSER=67      # addressee unknown
EX_NOHOST=68      # host name unknown
EX_UNAVAILABLE=69 # service unavailable
EX_SOFTWARE=70    # internal software error
EX_OSERR=71       # system error (e.g., can't fork)
EX_OSFILE=72      # critical OS file missing
EX_CANTCREAT=73   # can't create (user) output file
EX_IOERR=74       # input/output error
EX_TEMPFAIL=75    # temp failure; user is invited to retry
EX_PROTOCOL=76    # remote error in protocol
EX_NOPERM=77      # permission denied
EX_CONFIG=78      # configuration error

# Custom errors
EX_UNKNOWN=1
EX_NO_SUCH_DIR=91
EX_NO_SUCH_EXEC=92

# Process parameters
until [ $# -eq 0 ]
do
    case $1 in
        -v&#124;--verbose)
            verbose=1
            shift
            ;;
        *)
            if [ $# -ne 1 ]
            then
                usage
            fi
            profile_directory=$1
            shift
            ;;
    esac
done

# Announce that we're running
verbose_echo &#34;Running $cmdname at `date`.&#34;

# Make sure the directory path doesn't end with a slash
profile_directory=&#34;${profile_directory%\/}&#34;

# Preliminary checks
executable_exists &#34;/usr/bin/sqlite3&#34;
directory_exists &#34;$profile_directory&#34;

verbose_echo &#34;Profile directory: '${profile_directory}'&#34;

cd $profile_directory

# SQLite cleanup
for sql_file in *.sqlite
do
    verbose_echo &#34;Cleaning '${sql_file}'&#34;
    echo &#34;VACUUM;&#34; &#124; sqlite3 $sql_file
done

# Sorting files
for file in cert_override.txt persdict.dat
do
    verbose_echo &#34;Sorting '${file}'&#34;
    sort --output=$file $file
done

cd $directory

verbose_echo &#34;Cleaning up.&#34;
IFS=&#34;$ifs_original&#34;

verbose_echo &#34;${cmdname} completed at `date`.&#34;
exit $EX_OK</pre>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[why you should never code on fridays ?]]></title>
<link>http://739pm.wordpress.com/2009/11/29/why-you-should-never-code-on-fridays/</link>
<pubDate>Sun, 29 Nov 2009 20:44:17 +0000</pubDate>
<dc:creator>prateekurmaliya</dc:creator>
<guid>http://739pm.wordpress.com/2009/11/29/why-you-should-never-code-on-fridays/</guid>
<description><![CDATA[we all know last moment changes always result in that dreaded 3:00AM call from support guys,this has]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://739pm.wordpress.com/files/2009/11/neck-pain.jpg"><img src="http://739pm.wordpress.com/files/2009/11/neck-pain.jpg" alt="" title="argh.." width="120" height="120" class="alignleft size-full wp-image-112" /></a>we all know last moment changes always result in that dreaded 3:00AM call from support guys,this has been proven infact there is a <a href="http://www.infosun.fim.uni-passau.de/st/papers/zeller-phd/zeller-phd.pdf">phd</a>[pdf] thesis on it,<a href="http://www.st.cs.uni-saarland.de/zeller/">Andreas Zeller</a> from saarland university has done research on change inducing fixes,the <a href="http://msr.uwaterloo.ca/msr2005/papers/14.pdf">research</a>[pdf] can be simplified as linking version control and bug database together to track when the bugs are introduced in system and how they relate to some changes made recently.</p>
<p>below is the google tech talk given by Andreas Zeller where he discusses concept of <a href="http://en.wikipedia.org/wiki/Delta_Debugging">delta debugging</a> and <a href="http://www.st.cs.uni-saarland.de/publications/files/zeller-esec-1999.pdf">software archaeology</a>[pdf] further.</p>
<p><span style='text-align:center; display: block;'><object width='425' height='350'><param name='movie' value='http://www.youtube.com/v/SzRqd4YeLlM&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' /><param name='allowfullscreen' value='true' /><param name='wmode' value='transparent' /><embed src='http://www.youtube.com/v/SzRqd4YeLlM&#038;rel=1&#038;fs=1&#038;showsearch=0&#038;hd=0' type='application/x-shockwave-flash' allowfullscreen='true' width='425' height='350' wmode='transparent'></embed></object></span></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[To delete or not to delete]]></title>
<link>http://nickdsnyder.wordpress.com/2009/11/29/to-delete-or-not-to-delete/</link>
<pubDate>Sun, 29 Nov 2009 03:00:22 +0000</pubDate>
<dc:creator>nickdsnyder</dc:creator>
<guid>http://nickdsnyder.wordpress.com/2009/11/29/to-delete-or-not-to-delete/</guid>
<description><![CDATA[I recently found out how satisfying it is to delete old code. Why? Because it improves the signal to]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I recently found out how satisfying it is to delete old code. Why? Because it improves the signal to noise ratio of individual code files and of the code repository as a whole.</p>
<p>Imagine you are a new hire who is trying to get familiar with a repository and learn how things are done. If your repository is cluttered with old code files then looking for good examples of how to do something is like walking through a minefield of &#8220;// DEPRICATED!!!&#8221;  and &#8220;// TODO: get rid of this hack&#8221;.</p>
<p>Not only is old code clutter, it is dangerous. Consider a function calculateFoo() which was written assuming X was true (a reasonable assumption at the time). What happens if X ceases to be true at some point in the future? If calculateFoo() is still being used, then it creates a bug (which may or may not be noticed in a timely fashion).</p>
<p>Worse, if nobody is using calculateFoo() then the bug turns in to a time bomb waiting to explode on the next person who needs to calculate foo. This person will probably eyeball the code and if they don&#8217;t happen to notice the potentially subtle bug, then they will start to use calculateFoo() assuming that it works.</p>
<p>Another possible scenario is that a new programmer needs to calculate foo but needs the result formatted differently then how calculateFoo() formats the result. A cautious programmer might not want to modify the behavior of calculateFoo() for fear of breaking any existing uses of the function (even though there aren&#8217;t any). Therefore this programmer might add a new function calculateFooNewFormat() that calls calculateFoo() and then formats the result in the desired way. The code is now more complex then necessary because it handles a non-existent case.</p>
<p>The solution? Delete code that is old and unused!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Deleted Team Projects still visible in Source Control Explorer]]></title>
<link>http://intovsts.net/2009/11/25/deleted-team-projects-still-visible-in-source-control-explorer/</link>
<pubDate>Wed, 25 Nov 2009 20:42:49 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/25/deleted-team-projects-still-visible-in-source-control-explorer/</guid>
<description><![CDATA[Today I bumped into a solution for deleting deleted Team Projects (yip, that&#8217;s right: deleting]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Today I bumped into a solution for deleting <i>deleted</i> Team Projects (yip, that&#8217;s right: deleting Team Projects that should have been already deleted). A while ago we noticed that Team Projects in TFS2008 SP1 that were deleted with <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> were still visible in the Source Control Explorer and re-running <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> for the same Team Projects resulted in an error message that the Team Project could not be found on the Team Foundation Server.</p>
<p>But due to <a href="http://social.msdn.microsoft.com/forums/en-US/tfssetup/thread/8dc75f1c-d62a-42d1-af61-1c4578835ea5/" target="_blank">this entry in the TFS forum</a> I was finally able to remove the Team Projects from Source Control Explorer as well.</p>
<p>Solution:</p>
<ul>
<li>Create new Team Project with exactly the same name as the Team Project that wasn&#8217;t completely deleted and specify the option to not create the version control folder.</li>
<li>After the Team Project Creation wizard finishes, you need to run <a href="http://msdn.microsoft.com/en-us/library/ms181482(VS.80).aspx" target="_blank">TFSDeleteProject.exe</a> for the newly created Team Project.</li>
</ul>
<p>No sign anymore of the <i>deleted</i> Team Projects in Version Control! Sounds logical?!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Overcoming Resistance to Change by SCM]]></title>
<link>http://blog.accurev.com/2009/11/17/overcoming-resistance-to-change-by-scm/</link>
<pubDate>Tue, 17 Nov 2009 18:25:41 +0000</pubDate>
<dc:creator>accurev</dc:creator>
<guid>http://blog.accurev.com/2009/11/17/overcoming-resistance-to-change-by-scm/</guid>
<description><![CDATA[We ran across the article “Overcoming Resistance to Change by SCM” by Ben Weatherall on CMCrossroads]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>We ran across the article “Overcoming Resistance to Change by SCM” by Ben Weatherall on CMCrossroads. The excerpts below exemplify the need for tools like AccuRev that support changing processes and Agile adoption. Ben Weatherall has kindly allowed us to re-post these excerpts so that we may share his insight with all our readers.</p>
<p>Excerpts from “Overcoming Resistance to Change by SCM”</p>
<p>By Ben Weatherall</p>
<p>“As an industry, SCM is conservative – we hold the corporate jewels in our hands and we are reluctant to let either processes, procedures or personnel have a chance to mess them up. In fact, when they do get messed up we tend to lose our jobs. Then along came Agile and the need to support it while maintaining both technical and professional integrity.”</p>
<p>“Some of the old versioning tools could not handle merges of codebases where one or more of them had been refactored, so many of us had to rapidly switch tools. This often required a lot of hidden work to get triggers, wrappers, interfaces, metrics data collection, etc. working with the new tools. At the same time, there was a push to use tools that supported such things as backlogs and user stories instead of “just” defects. It was often the case where a development organization would bring in their own tools and tell SCM to either use them or get out of the way.”</p>
<p>“All of a sudden SCMers had to start rolling out their own tools, integrations, customizations, etc. with a speed even greater than the typical Agile development organization. And with significantly less personnel. We now leveraged what we could of the Agile methodology. We did rapid prototyping knowing ahead of time that things would have to be completely redone at a future time. Our assumptions, ones that made sense at the time, was that once a branching/stream structure and new tracking tools were in place to support this new way of developing software, it would stabilize and we could catch up.”</p>
<p>“The end result of this is that SCM has to adapt and do so at a rate that would have been considered impossible just a few years ago. We must adapt technologically, but we have to maintain the core integrity of principals of SCM: identification, reproducibility and traceability. A typical development sprint team consists of 5 people of which at least one represents the Quality organization. A typical SCM “team” consists of only one person. Across the software development industry as a whole, the SCM headcount is probably only 1-2% of the combined Development and Quality “workers.” For those of you in larger companies or those who are involved in admin-heavy tools, this probably sounds low; but from empirical evidence it is not. This is especially troubling for those who have to support multiple teams who are using different methodologies or variants of them.”</p>
<p><strong><em>Ben Weatherall </em></strong><em>is currently based in Fort Worth, Texas where he practices Practical CM on a daily basis supporting a modified Agile-SCRUM development methodology. He uses a combination of AccuRev, CVS, Bugzilla and AnthillPro (as well as custom tools). He is a member of IEEE, ASEE (Association of Software Engineering Excellence – The SEI’s Dallas based SPIN Affiliate), FWLUG (Fort Worth Linux Users Group), NTLUG (North Texas Linux Users Group) and PLUG (Phoenix Linux Users Group).</em></p>
<p><em> </em></p>
<p><em>For the entire version of this article on CM Crossroads, please visit: <a href="http://www.cmcrossroads.com/cm-journal-articles/13047" target="_blank">http://www.cmcrossroads.com/cm-journal-articles/13047</a> </em></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Could your next development environment be in the cloud?]]></title>
<link>http://blogs.mikeci.com/2009/11/17/could-your-next-development-environment-be-in-the-cloud/</link>
<pubDate>Tue, 17 Nov 2009 15:00:37 +0000</pubDate>
<dc:creator>Chris Neal</dc:creator>
<guid>http://blogs.mikeci.com/2009/11/17/could-your-next-development-environment-be-in-the-cloud/</guid>
<description><![CDATA[Your new project has been given the green light. You need to get your team up and running quickly.  ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Your new project has been given the green light. You need to get your team up and running quickly.  Could a cloud based development environment be the answer? This blog discusses some of the options  and issues for moving to a  hosted development environment.</p>
<p><a href="http://mikeciblogs.wordpress.com/files/2009/11/cloud_city.jpg"><img class="alignnone size-full wp-image-101" title="cloud_city" src="http://mikeciblogs.wordpress.com/files/2009/11/cloud_city.jpg" alt="Cloud City" width="450" height="337" /></a></p>
<p>One of the first tasks for any Agile project team is to establish a robust, reliable set of development tools and associated infrastructure. Generally on any new development endeavour the following needs to be put in place:</p>
<ul>
<li>Locate or create a source code repository and import your skeleton project.</li>
</ul>
<ul>
<li>Locate or create a continuous integration server to build your source code, run your tests and notify the team via email of any failures.</li>
</ul>
<ul>
<li>Locate or create a task/user story tracking server and/or issue management tool and add your project to it.</li>
</ul>
<ul>
<li>Locate or create your test environments for developer smoke, integration, and functional testing.</li>
</ul>
<p>Now you might be lucky and have much of this infrastructure in place, in which case adding some extra users, a new project and associated set of build jobs might be relatively straightforward. However, if it isn&#8217;t you will need to   allocate a decent chunk of time to setting things up yourself. This may involve procurement of hardware, installation of an appropriate OS, installation of the relevant applications, providing secure access to project team members and so on. This gets more complex if the team is distributed and the infrastructure must be accessible beyond a LAN.</p>
<p>Often these development tools are open source, which means that while the cost of acquisition for the software may be zero, the ongoing maintenance and support will probably require specialist knowledge.  Any time your team spends doing this is time that could be spent progressing the project.</p>
<p>With either option, server space and administration time is required and there are obviously costs associated with this, and the costs may be disproportionately large to small and medium-sized organisations.</p>
<p>In the same way that SaaS offerings for email and collaboration suites (such as Google Apps) have sought over the past few years sought to turn these services into low-cost, click-and-go commodities, there are now equivalent hosted solution options available for Agile development infrastructure.</p>
<p>Hosted version control solutions have been available for a while and the market has expanded rapidly over the past few years. <a title="Collabnet" href="http://collab.net" target="_blank">Collabnet</a> (the people behind Subversion) and <a title="CVSdude" href="www.cvsdude.com" target="_blank">CVSdude</a> are probably the best known. Both companies have expanded their offerings, and not only provide version control but are bundled with or integrate to a host of other tools.  These now compete with newer entrants like <a href="http://beanstalkapp.com">Beanstalk</a>, <a title="assembla" href="http://www.assembla.com" target="_blank">Assembla</a> and <a title="unfuddle" href="http://unfuddle.com/" target="_blank">Unfuddle</a> (which also does Git hosting). <a title="github" href="http://github.com/" target="_blank">GitHub</a> itself has seen huge <a title="github hosting" href="http://www.datacenterknowledge.com/archives/2009/09/15/github-departs-engine-yard-for-rackspace/" target="_blank">growth</a> over the past year, with over 400 new users and 1,000 projects being added each day.</p>
<p>Coming from the other direction are suppliers of Development collaboration and productivity tools, <a title="atlassian" href="http://www.atlassian.com/" target="_blank">Atlassian</a> are probably the biggest player here and their hosted <a title="jira studio" href="http://www.atlassian.com/studio/" target="_blank">JIRA studio</a> suite based around the very popular Jira issue tracking tool was launched in May 2008.  <a title="fogbugz" href="http://www.fogcreek.com/FogBugz/" target="_blank">Fogbugz</a> is another alternative, based around an integrated Project Management, Wiki, Issue Management and Helpdesk set of tools.</p>
<p>Each vendor has a different focus with JIRA studio and Collabnet&#8217;s <a title="Team forge" href="http://www.open.collab.net/products/ctf/" target="_blank">Team-Forge </a>perhaps the most fully featured for development teams. Both offer a very comprehensive stack and are moving towards the idea of an Application Lifecycle Management (ALM) suite. It will be interesting to see how these platforms develop, and how the traditional Enterprise tool vendors (IBM Rational, Microsoft and Borland) respond.</p>
<p>If  a platform sounds too restrictive and you want to &#8220;pick and mix&#8221; your own set of tools you can.  There are also some great tools which focus on a specific area &#8211; <a title="basecamp" href="http://basecamphq.com/" target="_blank">Basecamp</a> for Project Management and <a title="lighthouse" href="http://lighthouseapp.com/" target="_blank">Lighthouse</a> for Issue Management are a couple of well-known examples worth looking at. Most of these tools have open APIs that enable you to integrate easily with others, so getting together an integrated  set of tooling is easily achievable.</p>
<p>My advice here is to be clear about what you want from these tools. Some are very feature rich and developer centric while others do a great job of providing a clean and simple process and interface. So which tools suits you will depend on your project, your team, and your organisation. What is clear though is that there is growth in this sector, increased competition and greater integration between the providers. All of this can only be good for those who are happy to outsource their development environments &#8211; increased choice and competition against a backdrop of  <a title="aws costs" href="http://aws.typepad.com/aws/2009/10/amazon-ec2-now-an-even-better-value.html" target="_blank">decreasing hosting costs</a>.</p>
<p>Moving on from  managing your project to testing it, the use of externalized environments that allow teams to deploy a release of a web-based application and run functional tests against it, is trickier. Depending on the nature of the application and its associated runtime dependencies this may require the creation of a bespoke environment. However, recent developments in cloud computing should soon make this much easier. Google&#8217;s <a title="App Engine" href="http://code.google.com/appengine/" target="_blank">App Engine</a> for example allows you to run Java (and Python) applications on their infrastructure. So if the <a>AppEngine</a> is your production target, creating a test environment that is a clone of production should be a relatively straight-forward activity. More recently in August this year, <a>SpringSource</a> launched their <a title="spring clud foundry" href="http://www.cloudfoundry.com/" target="_blank">Cloud Foundry</a> which allows you to rapidly deploy a test (and also production) environment for your Java web application with a few mouse clicks and Microsoft have also weighed in with <a title="MS Azure" href="http://www.microsoft.com/windowsazure/" target="_blank">Azure</a>. Both Google and Microsoft are promising tighter integration with the IDE, and I&#8217;ll be watching these platforms closely.</p>
<p>One area which is less mature is hosted continuous integration. There are currently only a small number of pioneering providers in this space, which may surprise some, as the practice of continuous integration is at the heart of the Agile development process. The SaaS multi-tenant application model does not fit easily with the requirements for continuous and often complex software builds. It is computing resource intensive activity, especially for programming languages such as Java, and this will inevitably impact the cost of such a service to the end-user. Mike CI is one of these pioneers and there is a good analysis of the others <a title="build doctor outsourced ci" href="http://www.build-doctor.com/2009/10/08/outsourcing-continuous-integration/" target="_blank">here</a>.</p>
<p>Now I&#8217;m not saying trusting your code to a 3rd party is a simple decision to make. There are often legal, security and organisational hurdles to consider. It isn&#8217;t be for everyone and for many large corporates it might be a step too far. But for many people the cost, convenience and management overhead of maintaining it all yourself does not stack up. Your team is in place to write great software. For your next project, I&#8217;d recommend that you seriously consider using these low-cost, on-demand hosted services.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[git is too complicated for me]]></title>
<link>http://exitstatuszero.wordpress.com/2009/11/17/git-is-too-complicated-for-me/</link>
<pubDate>Tue, 17 Nov 2009 02:09:53 +0000</pubDate>
<dc:creator>Jeffrey</dc:creator>
<guid>http://exitstatuszero.wordpress.com/2009/11/17/git-is-too-complicated-for-me/</guid>
<description><![CDATA[git is too complicated for me. It&#8217;s supposed to be awesome, but I just can&#8217;t figure it o]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><a href="http://git-scm.com/">git</a> is too complicated for me. It&#8217;s supposed to be awesome, but I just can&#8217;t figure it out.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Git for Computer Scientist]]></title>
<link>http://jongampark.wordpress.com/2009/11/15/git-for-computer-scientist/</link>
<pubDate>Mon, 16 Nov 2009 00:06:01 +0000</pubDate>
<dc:creator>jongampark</dc:creator>
<guid>http://jongampark.wordpress.com/2009/11/15/git-for-computer-scientist/</guid>
<description><![CDATA[Visual Source Safe, CVS, SubVersion, 그리고 Git 한국 사람으로써 발음도 힘든 Git, &#8220;깃&#8221;인가 &#8220;짓&#8221;인]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Visual Source Safe, CVS, SubVersion, 그리고 Git<br />
한국 사람으로써 발음도 힘든 Git, &#8220;깃&#8221;인가 &#8220;짓&#8221;인가? 나는 &#8220;짓&#8221;이라고 발음하는데 NSCoder Nigher에선 &#8220;깃&#8221;이라고들 하더라. 근데 어떤 사람들 보면 또 &#8220;짓&#8221;이라고 하기도 한다.</p>
<p>근데 도대체 이렇게 버젼 컨트롤 프로그램들이 다양한 이유가 뭘까? 도대체 뭐가 다르길래 자꾸만 새로운 것을 내놓을까? Visual Source Safe가 문제가 많다는 것이야 뭐 MS 제품에 빠진 사람들 아니면 다들 아는 것이고, CVS와 Subversion은 CVS 사람들도 Subversion을 Better CVS라고 부르니 뭐 그다지 궁금하지도 않고. ( 사실 좀 차이가 있다. SubVersion이 파일 깨지는 것에 덜 취약하고 속도가 빠르다고 알려져 있다. 그 이유는 CVS는 파일간의 차이를 저장하는데 반해, SubVersion은 완전하게 그 다른 버젼들을 저장하는 것이라고 한다. 내가 읽은 것을 기억하는게 맞다면.. ) 그렇다면 Subversion이 훌륭하게 좋은데 왜 Git이란 새로운 것이 나왔으며, 요새 Git을 많이들 쓰는가? 적어도 NSCoder Night에선 Git이 내세인거 같다.<br />
Git은 다른 것들과 달리 분산형 시스템이다. 즉 commit을 자체에 하는 샘이고, 어떤 주기가 오거나 어떤 명령이 오거나.. 혹은 네트워크에 연결이 될때, 서로 간에 통신을 통해서 transparent하게 그 버젼을 동일하게 유지시켜 준다. 그러므로 빠르다. 또한 항상 네트워크에 연결될 필요도 없다.<br />
근데 그 외는 무슨 차이가 있을까? 우연히 다음의 문서를 보게 되었다. GitHub를 통해서..<br />
관심있으신 분들은 읽어보시기들 바란다.</p>
<p><a href="http://eagain.net/articles/git-for-computer-scientists/">Git for Computer Scientist</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[TFS2010: Visualization of merging partial changes in changeset]]></title>
<link>http://intovsts.net/2009/11/11/tfs2010-visualization-of-merging-partial-changes-in-changeset/</link>
<pubDate>Wed, 11 Nov 2009 13:47:30 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/11/tfs2010-visualization-of-merging-partial-changes-in-changeset/</guid>
<description><![CDATA[Yesterday (during the Source Code Management session of Brian Harry at TechEd 2009 in Berlin), I not]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Yesterday (during the Source Code Management session of <a href="http://blogs.msdn.com/bharry/" target="_blank">Brian Harry</a> at TechEd 2009 in Berlin), I noticed for the first time that merging partial changes in a changeset is also clearly visible afterwards. I just found some time between sessions to test it out &#8230;</p>
<p><img src="http://intovsts.wordpress.com/files/2009/11/mergingpartialchanges.png" border="0" /></p>
<p>In the screenshot above you may notice that changeset 9 (dev branch) is merged to the main branch. But look at the yellow color of the bar after the merge and the tooltip that is shown when I hover over changeset 11. Changeset 9 consisted of 2 different files that were modified while the merge operation took only 1 modified file in changeset 11. Valuable information!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Branching in TFS2010: atomic operation without pending changes]]></title>
<link>http://intovsts.net/2009/11/10/branching-in-vs2010-atomic-operation-without-pending-changes/</link>
<pubDate>Tue, 10 Nov 2009 15:12:39 +0000</pubDate>
<dc:creator>pietergheysens</dc:creator>
<guid>http://intovsts.net/2009/11/10/branching-in-vs2010-atomic-operation-without-pending-changes/</guid>
<description><![CDATA[Currently in TFS2008 when you create a new branch in your version control structure, all files are c]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Currently in TFS2008 when you create a new branch in your version control structure, all files are copied to your local worspace and marked as pending changes. This means that a branch in TFS2008 is not seen as an atomic operation. You were required to check-in the local changes before the branch got created on the server. If your branch would consist of a huge set of files, branching could become a time-consuming operation and the system would not prohibit you to do some modifications to the pending changes.</p>
<p>In TFS2010, a branch is now seen as an atomic operation: it doesn&#8217;t copy all files into your local workspace and the branch action is immediately checked-in &#8211; no option anymore to do some local modifications. The <i>child</i> branch will always be an exact copy of the selected <i>parent</i> branch folder. You will get a messagebox that will notify you of this action when you hit the branch button &#8230;</p>
<p><img src="http://intovsts.wordpress.com/files/2009/11/branchingmessagebox.png" border="0" /></p>
<p>You will need to request a <i>get latest</i> on the newly created child branch to have a local copy of the sources. </p>
<p>Some <i>simple</i> changes can make a big difference!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Parallel Development - Late Binding Mode]]></title>
<link>http://cascmpluginforvisualstudio.wordpress.com/2009/11/09/parallel-development-late-binding-mode/</link>
<pubDate>Mon, 09 Nov 2009 02:02:53 +0000</pubDate>
<dc:creator>subhasis</dc:creator>
<guid>http://cascmpluginforvisualstudio.wordpress.com/2009/11/09/parallel-development-late-binding-mode/</guid>
<description><![CDATA[Late Binding mode provides more flexibility for Parallel Development compared to being in Online mod]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Late Binding mode provides more flexibility for Parallel Development compared to being in Online mode. One major difference is nobody needs to keep the file checked out in branch (e.g. 0.1.1(R)). So setting the correct context (CA SCM) part is delayed till the users commit their changes. Only when someone needs to commit the changes, it requires a CA SCM context (Package, Check In Process and other processes).</p>
<p>Let’s assume, CA SCM Administrator has helped initializing the creation of a project (CA SCM Project) and baselined the source code in that project. And it has the below structure:</p>
<p>====== Source Code Baselined ======</p>
<p>CA SCM Broker: BrokerMachine</p>
<p>CA SCM Project: ParallelDev</p>
<p>State for Development: Development</p>
<p>Check In Process: Check In on Branch and Trunk</p>
<p>View Path : \Repository\Source Code\Common</p>
<p>======= Pre-requisite Information ========</p>
<p>Solution File: Solution.sln  (under \Repository\Source Code\Common)</p>
<p>Install CA Software Change Manager client</p>
<p>Install the Visual Studio Plug-in for CA Software Change Manager</p>
<p>SCM Explorer: Available from “View -&#62; SCM Explorer” menu in Visual Studio IDE.</p>
<p>======= Late Binding Mode – First Developer – user1 ========</p>
<p>User1 opens Visual Studio IDE and then opens SCM Explorer as being instructed. Clicks on “New Broker Connection”, provides login details and connects to CA SCM broker (BrokerMachine).</p>
<p>Navigates to CA SCM Project “ParallelDev”, and navigates till repository path “\Repository\Source Code\Common”. He finds the solution file “Solution.sln” in the list view in right pane.</p>
<p>Right clicks on the solution, and performs “Open Solution”. Wow! The solution is in his own machine now and it is open in his Visual Studio with managed glyphs (icons beside files in Solution Explorer).</p>
<p>Next important thing is – start working as I don&#8217;t need any context now.</p>
<p>User1 is least bothered about who else is working on which file this time. He started changing in several files.</p>
<p>======= Late Binding Mode – Second Developer – user2 ========</p>
<p>User2 opens the solution in his machine in Visual Studio IDE from CA SCM. The solution and all its files are shown as managed.</p>
<p>User2 also updated few files from the IDE.</p>
<p>======== Commit &#8211; Set Context ========</p>
<p>Before any of the users commit their changes, it requires a context (CA SCM), so let&#8217;s set the context. If you see, I don&#8217;t even have set the check out process this time. And for check in process, I have kept both the option Branch and Trunk enabled, so I will explain both the cases separately.</p>
<p>====<strong> User1 – Context</strong> ====</p>
<p>Package: <strong>dev1</strong></p>
<p>Check In Process: Check In on Branch and Trunk</p>
<p>====<strong> User2 – Context </strong>====</p>
<p>Package: <strong>dev2</strong></p>
<p>Check In Process: Check In on Branch and Trunk</p>
<p>====== Commit &#8211; On Branch ======</p>
<p>If both the users are committing changes on Branch, chances of getting a conflict in local workspace is absent. Only when those branch versions are merged in CA SCM (using CA SCM Workbench), there it may create merged (M) tag versions, which we need to resolve and create a normal (N) tag.</p>
<p>====== Commit &#8211; On Trunk ======</p>
<p>What if both are committing on Trunk, now it may find conflicts (both started working on 0&#8242;th version of the file, both users have changed the same file from their own workspaces, and one of them has committed the change to repository on Trunk). So, second user has to resolve the conflict from within IDE. Only after that it allows to commit the change (conflict file) to the repository. In this case, users don&#8217;t have to resolve any merged (M) tag from CA SCM Workbench.</p>
<p>======= All Set Now! &#8211; Let&#8217;s Change Few Other Files ======</p>
<p>&#160;</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[A Tale of Two Working Modes]]></title>
<link>http://cascmpluginforvisualstudio.wordpress.com/2009/11/02/a-tale-of-two-working-modes/</link>
<pubDate>Mon, 02 Nov 2009 17:40:03 +0000</pubDate>
<dc:creator>subhasis</dc:creator>
<guid>http://cascmpluginforvisualstudio.wordpress.com/2009/11/02/a-tale-of-two-working-modes/</guid>
<description><![CDATA[Late Binding Mode and Online Mode - These are the two modes of working that this plug-in supports. B]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><strong>Late Binding Mode </strong>and <strong>Online Mode </strong>- These are the two modes of working that this plug-in supports. Both has its own merits and demerits.</p>
<p>Online mode means you are always connected to the CA SCM (Software Change Manager) server or rather broker. Any change that you make in the local workspace in Visual Studio is immediately reflected in the CA SCM repository. So, you check out a file to start working in it. Really good thing for someone who wants to ensure that the fellow developer has started working on something at certain date and time. Also, in certain situation it restricts two users from updating or modifying a single file. What will happen if for some silly reason you are far far away from that giant server! You&#8217;ve got to be disconnected, but this mode does not allow that.</p>
<p>As a developer I will be little bit biased towards Late Binding for the simple reason of its simplicity and flexibility. Moreover, it does not force me to stay connected 24&#215;7 to that giant server that I just talked about a little earlier. What a relief, may be now I can disconnect from the server, take a nab, wake up and do some changes in code (of course from Visual Studio). When I come back near to that roaring server, I can connect back to it and commit all my code changes to CA SCM repository. New versions of the changed files are now created.</p>
<p>Make your choice!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Git Series: #1 Introduction]]></title>
<link>http://panjwanib.wordpress.com/2009/11/02/git-series-1-introduction/</link>
<pubDate>Mon, 02 Nov 2009 14:57:36 +0000</pubDate>
<dc:creator>bud786</dc:creator>
<guid>http://panjwanib.wordpress.com/2009/11/02/git-series-1-introduction/</guid>
<description><![CDATA[Command-Line Fear I have been windows user from past 8 years anode Graphical User Interface. I was i]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><h1>Command-Line Fear</h1>
<p class="MsoNormal" style="line-height:14.25pt;"><span style="font-family:&#38;">I have been windows user from past 8 years anode Graphical User Interface.  I was in dire search for a good source control because Source Safe was bringing nothing but disappointment to my life.  After researching n the market, I learned that Subversion (SVN) and Git are two which are popular but as soon as I found out that it’s a command-line version control and mostly used by Linux and Ruby users, I opted to and started learning Subversion.  After couple of months, I noticed that Git was gaining a lot of traction so I logged into my </span><a href="http://www.tekpub.com" target="_blank"><span style="font-family:&#38;">TekPub</span></a><span style="font-family:&#38;"> account and started on the Git screen casts.  I have to tell you, I switched my source control right away with no sign &#8220;command-line fear&#8221; and full of excitement.  If you are a windows user and looking for a good source control, I request you to read this post with &#8220;open-mind&#8221; which hopefully will help you decide if Git is for your not.</span></p>
<h1>Why use Git?</h1>
<ol>
<li><strong>Git is Distributed: </strong>You don’t have to have a centralized system.The repository can be locally on your computer.  You can have centralized system, but there is a lot of freedom with it.</li>
<li><strong>Git is Fast: </strong>Git has a faster and different way of tracking file changes.</li>
<li><strong>Git is Reliable: </strong>Your repository is local which can be publicly shared as needed so there is not centralized server which can blow up and take your source history.</li>
<li><strong>Git is Cheap: </strong>Open Source with no centralized server to maintain make it cheap.</li>
<li><strong>Git is Easy: </strong>Git is very easy to use</li>
<li><strong>Git is Fun: </strong>Easy, Cheap, Reliable, and Fast which helps you be more efficient …..sounds like fun.</li>
</ol>
<p><strong> </strong></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:.25in;"><strong> </strong></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:-.25in;"><strong> </strong></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:.25in;"><strong> </strong></p>
<p class="MsoListParagraphCxSpMiddle" style="text-indent:.25in;"><strong> </strong></p>
<p class="MsoListParagraphCxSpLast" style="text-indent:.25in;"><strong> </strong></p>
<h1>How Git Emereged?</h1>
<p class="MsoNormal">Git was initially designed and developed by Linus Torvalds.It was one of his personal project to support Linux Kernel because Linus was didn’t like any source control software out there.Therefore, Linus rolls his own source control in April 2005 which has speed and efficiency, distributed, and bullet proof.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SubVersion - Cheap copies]]></title>
<link>http://thinkbigactsmall.wordpress.com/2009/10/27/subversion-cheap-copies/</link>
<pubDate>Tue, 27 Oct 2009 23:53:38 +0000</pubDate>
<dc:creator>postmannevercome</dc:creator>
<guid>http://thinkbigactsmall.wordpress.com/2009/10/27/subversion-cheap-copies/</guid>
<description><![CDATA[I have asked myself several times &#8220;How Subversion makes copies of each revision&#8221;. Whenev]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have asked myself several times &#8220;How Subversion makes copies of each revision&#8221;. Whenever, a new change has been committed a new version of the current files will be automatically created. One commit creates a one copy of the whole respository folder.</p>
<p>Does it make Subversion respository a huge monster of hard disk ? Who eats your disk daramatically in sense of a large project.</p>
<p>Today, I found answer for that kind of wonder that is Subversion uses Cheap Copies.</p>
<p>&#8220;                 <strong>Cheap Copies</strong></p>
<div>
<p><span style="color:#0000ff;"><em>Subversion&#8217;s repository has a special design.  When you           copy a directory, you don&#8217;t need to worry about the           repository growing huge—Subversion doesn&#8217;t actually           duplicate any data.  Instead, it creates a new directory           entry that points to an </em><em>existing</em> tree.           If you&#8217;re a Unix user, this is the same concept as a           hard-link.  From there, the copy is said to be           “lazy”.  That is, if you commit a change to one           file within the copied directory, then only that file           changes—the rest of the files continue to exist as           links to the original files in the original           directory.</span></p>
<p><span style="color:#0000ff;"><em>This is why you&#8217;ll often hear Subversion users talk           about “cheap copies”.  It doesn&#8217;t matter how           large the directory is—it takes a very tiny, constant           amount of time to make a copy of it.  In fact, this feature           is the basis of how commits work in Subversion: each           revision is a “cheap copy” of the previous           revision, with a few items lazily changed within.  (To read           more about this, visit Subversion&#8217;s website and read about           the “bubble up” method in Subversion&#8217;s design           documents.)</em></span></p>
<p><span style="color:#0000ff;"><em>Of course, these internal mechanics of copying and           sharing data are hidden from the user, who simply sees           copies of trees.  The main point here is that copies are           cheap, both in time and space.  Make branches as often as           you want.</em></span></p>
</div>
<p>&#8220;</p>
<p>&#160;</p>
<p>&#160;</p>
</div>]]></content:encoded>
</item>

</channel>
</rss>
