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

<channel>
	<title>Ron&#039;s Techie Blog &#187; Tools</title>
	<atom:link href="http://rpstechnologies.net/ron/blog/category/tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://rpstechnologies.net/ron/blog</link>
	<description>Thoughts on software development</description>
	<lastBuildDate>Wed, 28 Jul 2010 03:55:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>New change management tool: Redmine</title>
		<link>http://rpstechnologies.net/ron/blog/2009/11/new-change-management-tool-redmine/</link>
		<comments>http://rpstechnologies.net/ron/blog/2009/11/new-change-management-tool-redmine/#comments</comments>
		<pubDate>Sun, 22 Nov 2009 04:53:02 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/11/new-change-management-tool-redmine/</guid>
		<description><![CDATA[I was starting a new project, needed a change management tool, and wasn&#8217;t really satisfied with the tools available last time I looked, so I took a look at what was currently available.&#160; One option I came across that hadn&#8217;t &#8230; <a href="http://rpstechnologies.net/ron/blog/2009/11/new-change-management-tool-redmine/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was starting a new project, needed a change management tool, and wasn&#8217;t really satisfied with the tools available <a href="http://rpstechnologies.net/ron/blog/2008/05/change-management-and-bug-tracking/">last time I looked</a>, so I took a look at what was currently available.&nbsp; One option I came across that hadn&#8217;t been on my radar before was <a href="http://www.redmine.org/">Redmine</a>.</p>
<p>Redmine has many of the features I like from <a href="http://trac.edgewall.org/">Trac</a>, such as the Roadmap view, version control integration, an Activity view, and built in Wiki.&nbsp; It also has a bunch of <a href="http://www.redmine.org/wiki/redmine/Plugin_List">plugins</a>, <a href="http://www.redmine.org/wiki/redmine/PluginCharts">one of which</a> looks like it&#8217;ll generate burndown charts, which I&#8217;m planning to use.</p>
<p>It looked like Redmine was fairly well supported on Windows (box I have available) so I decided to try it out.&nbsp; Redmine is based on Ruby on Rails, so the first step to <a href="http://www.redmine.org/wiki/redmine/RedmineInstall">installation</a> is to get Ruby and Rails installed.</p>
<p>I started off trying to install Ruby and Rails under cygwin, but ran into problems with building mysql from source (no cygwin port for this!).</p>
<p>So instead I went down the route of installing everything outside of cygwin.&nbsp; Here&#8217;s a summary of the steps:
<ul>
<li>Install the <a href="http://rubyforge.org/frs/?group_id=167">Windows Ruby binary</a>, along with Gem package system.</li>
<p>
<li>Install the Rails 2.1.2 gem, which Redmine 0.8.X depends on</li>
<p>
<li>Download and unpack the Redmine <a href="http://rubyforge.org/frs/?group_id=1850">distribution</a></li>
<p>
<li>Setup the database (running on MySQL in my case) and edit database.yml per <a href="http://www.redmine.org/wiki/redmine/RedmineInstall#Database">instructions</a>.</li>
<p>
<li>I had to install older MySQL client library due to some Rails/MySQL library incompatibility (described <a href="http://forums.aptana.com/viewtopic.php?f=20&amp;t=7563&amp;p=27407&amp;hilit=libmysql.dll#p27407">here</a>)</li>
<p>
<li>Create the database schema for Redmine via:
<pre class="brush: bash; gutter: false;">rake redmine:load_default_data RAILS_ENV=&amp;amp;quot;production&amp;amp;quot;</pre>
</li>
<p>
<li>Populate a default configuration via:
<pre class="brush: bash; gutter: false;">rake redmine:load_default_data RAILS_ENV=&amp;amp;quot;production&amp;amp;quot;</pre>
</li>
<p>
<li>You can then run Redmine via: 
<pre class="brush: bash; gutter: false;">ruby script/server webrick -e production</pre>
</li>
<p></ul>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" alt="" src="http://img.zemanta.com/pixy.gif?x-id=9b481db7-b423-82f1-b1e3-514062399571" /></div>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2009/11/new-change-management-tool-redmine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Maven and skinny wars</title>
		<link>http://rpstechnologies.net/ron/blog/2009/09/maven-and-skinny-wars/</link>
		<comments>http://rpstechnologies.net/ron/blog/2009/09/maven-and-skinny-wars/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 04:34:55 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[maven java j2ee]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/09/maven-and-skinny-wars/</guid>
		<description><![CDATA[Maven is a great build system, but sometimes limitations come up that can drive you crazy.  One such limitation is support for building &#8220;skinny war&#8221; files.  Granted, I don&#8217;t think it&#8217;s the most common configuration, but for certain types of &#8230; <a href="http://rpstechnologies.net/ron/blog/2009/09/maven-and-skinny-wars/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Maven is a great build system, but sometimes limitations come up that can drive you crazy.  One such limitation is support for building &#8220;skinny war&#8221; files.  Granted, I don&#8217;t think it&#8217;s the most common configuration, but for certain types of applications, it&#8217;s the preferred way to package your application.</p>
<p>By default, war files are packaged with all of the libraries they use embedded within them.  This is fine, unless your application uses a large number of libraries, and you have more than one war file within your enterprise application archive (ear file).  In that case, you&#8217;re causing the JVM to load the same set of classes multiple times, once for each war, which can use up a significant amount of memory, and bloating the size of your ear file.</p>
<p>In a skinny war configuration, the libraries are packaged at a higher level, within the ear file itself, and the war files are made to reference the libraries packaged within the ear file within their MANIFEST.MF file.  The classes are loaded once, and can be used in multiple web applications bundled in the ear.</p>
<p>Unfortunately, this isn&#8217;t directly supported in Maven, although there are workarounds.  As <a href="http://maven.apache.org/plugins/maven-war-plugin/examples/skinny-wars.html">this</a> page states, &#8220;The Maven WAR and EAR Plugins do not directly support this mode of operation but we can fake it through some POM and configuration magic&#8221;.  The workaround is to list the jars in each war, but tell Maven to exclude it from the WEB-INF/lib and to add references to the jar in the MANIFEST.MF file.</p>
<p>The ear file Maven project then needs to list every library it will package as a dependency.  This means that common libraries will be listed in the ear project, and each war project that uses them, causing quite a bit of bloat in the Maven project files.</p>
<p><a href="http://docs.codehaus.org/display/MAVENUSER/Solving+the+Skinny+Wars+problem">This</a> wiki page has a good description of the situation, some alternate solutions, and requirements for a long term solution.</p>
<p>Ideally, I&#8217;d like to be able to take the same Maven war project file, and build for standalone deployment (fat war), or deployment within an ear project where the common libraries are included once in the ear file (skinny war), without having to change the Maven war project file.</p>
<p>For this to work, I think the ear project would have to control whether and which war project libraries are pushed up to the ear project.  The ear project file could explicitly list those libraries that should be bundled in the ear, or it could have an option where it calculates the common libraries across the contained war files, and automatically bundles them in the ear file.  As the link above indicates, the ear project would have to have the ability to rewrite the manifest entries of the contained war projects.</p>
<p>Technorati Tags: <a class="performancingtags" rel="tag" href="http://technorati.com/tag/maven%20java%20j2ee">maven java j2ee</a></p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=ae4d8b41-e52d-8b4b-9262-9dd52e9a2744" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2009/09/maven-and-skinny-wars/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mercurial and Subversion : What&#8217;s working for me</title>
		<link>http://rpstechnologies.net/ron/blog/2008/12/mercurial-and-subversion-whats-working-for-me/</link>
		<comments>http://rpstechnologies.net/ron/blog/2008/12/mercurial-and-subversion-whats-working-for-me/#comments</comments>
		<pubDate>Mon, 22 Dec 2008 15:02:03 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/mercurial-and-subversion-whats-working-for-me/</guid>
		<description><![CDATA[One popular use of DVCS systems such as Mercurial and GIT is as &#8220;super clients&#8221; to Subversion, at least until more projects get on the DVCS bandwagon. You get most of the benefits of the DVCS and can still work &#8230; <a href="http://rpstechnologies.net/ron/blog/2008/12/mercurial-and-subversion-whats-working-for-me/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>One popular use of DVCS systems such as Mercurial and GIT is as &#8220;super clients&#8221; to Subversion, at least until more projects get on the DVCS bandwagon. You get most of the benefits of the DVCS and can still work the rest of the team using Subversion.</p>
<p>I&#8217;ve been using Mercurial to work on a couple projects I&#8217;m involved with that have Subversion repositories. GIT has a good bridge to Subversion built in. Unfortunately, Mercurial is a little bit behind on this front, but it looks like things are getting better quickly.</p>
<p>I initially tried out <a href="http://progetti.arstecnica.it/tailor/">Tailor</a>, a general purpose version control bridge tool, which supports Mercurial and Subversion among a bunch of others. I had difficulty getting Tailor to work with the Subversion repository I was working on, and it didn&#8217;t seem like Tailor was being used much for Mercurial-Subversion.</p>
<p>I&#8217;ve been using the <a href="http://pypi.python.org/pypi/hgsvn">hgsvn</a> package lately and it&#8217;s worked out pretty well. The only caveat is that hgsvn doesn&#8217;t directly support uploading changes from Mercurial back to Subversion. hgsvn does a good job of downloading changesets from Subversion to Mercurial though, and there are a couple solutions to handle the other direction. I&#8217;ve been pushing changes back by using the excellent Mercurial MQ extension.</p>
<p>A new Mercurial-Subversion bridge, <a href="http://www.bitbucket.org/durin42/hgsubversion/wiki/Home">hgsubversion</a>, looks like it supports both downstream and upstream changes from Mercurial to/from Subversion, and looks very promising. I&#8217;m just waiting for it to support <a href="http://www.bitbucket.org/durin42/hgsubversion/issue/14/make-it-possible-to-import-history-starting-at-some">importing starting at a particular Subversion revision</a> before I can start using it.</p>
<p>Until I can use hgsubversion, here is how I&#8217;ve been using hgsvn. I installed hgsvn as a Python egg package via <a href="http://peak.telecommunity.com/DevCenter/EasyInstall">easy_install</a>:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">sudo easy_install hgsvn</span></p>
<p>The hgimportsvn command is used to import change sets from an existing Subversion repository into a local Mercurial repository it creates. You can optionally have it start at a particular Subversion revision if you don&#8217;t need the full history imported:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hgimportsvn [-r svn rev] &lt;svn URL&gt; &lt;local directory name&gt;</span></p>
<p>This creates a combined Subversion working directory and Mercurial repository in the local directory you give it. Once this is done you can update the Mercurial repository with the latest Subversion changesets by executing the following in the local directory:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hgpullsvn</span></p>
<p>You run hgpullsvn anytime you want to refresh the Mercurial repository with the latest from Subversion. You can then do anything you would do with a Mercurial repository, except committing changes of your own. Cloning, MQ, revision histories, diffs, etc all work. I tried committing a change to the Mercurial repository, then committing the same changes to Subversion, then doing an hgpullsvn to update both from the Subversion repository. This worked at first but the Mercurial repository got out of sync after a while, so I wouldn&#8217;t recommend it.</p>
<p>What I&#8217;ve been doing is managing the upstream changes via Mercurial Queues (MQ). This also helps me manage patches I want to apply on top of the latest code.</p>
<p>The first time using Mercurial Queues in a repository, you have to initialize the queue repository:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg qinit -c</span></p>
<p>The -c option makes it so the queues repository is version controlled. You can then see what older versions of a patch were in case you need to roll back. I&#8217;m basically using patches as changesets, so it&#8217;s useful for me to be able to version control and have a history for them.</p>
<p>Once you have the queue repository, you can create a patch before making any changes to files:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg qnew -g &lt;patch name&gt;</span></p>
<p>When you create a new patch, it automatically becomes an active patch at the top of the queue. You can then edit files as you normally would. &#8216;hg add&#8217; and &#8216;hg remove&#8217; commands mark files to be added or removed in the patch.</p>
<p>Once you&#8217;re ready to commit any changed/added/removed files to the patch, do a commit:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg qcommit<br /></span></p>
<p>Once committed, you can look in your .hg/patches/ directory and see the patch file.</p>
<p>Whenever I want to update from SVN, I pop everything off the patch queue so the Mercurial repository &amp; Subversion working directory are pristine, and do the update:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg qpop -a</span></p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hgpullsvn</span></p>
<p>I can then push the patches I&#8217;m working on back on top:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg qpush -a</span></p>
<p>Whenever I&#8217;m ready to push changes into Subversion, I export the patch, then apply it to a separate Subversion working directory for commit:</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">hg export -g &lt;patch name&gt; &gt; ../my.patch</span></p>
<p>in separate Subversion working directory,</p>
<p style="text-indent:20pt;"><span style="font-family:monospace;">patch -p1 &lt; ../my.patch</span></p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2008/12/mercurial-and-subversion-whats-working-for-me/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Semantic documentation markup languages: XDocs, DocBook, Dita</title>
		<link>http://rpstechnologies.net/ron/blog/2008/08/semantic-documentation-markup-languages-xdocs-docbook-dita/</link>
		<comments>http://rpstechnologies.net/ron/blog/2008/08/semantic-documentation-markup-languages-xdocs-docbook-dita/#comments</comments>
		<pubDate>Wed, 13 Aug 2008 14:55:21 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/semantic-documentation-markup-languages-xdocs-docbook-dita/</guid>
		<description><![CDATA[I&#8217;ve been using the Maven XDoc markup language for documenting design on a client project. Looking into editors for XDoc led me to taking a closer look at DocBook, and Dita, a relative newcomer. All of these formats allow you &#8230; <a href="http://rpstechnologies.net/ron/blog/2008/08/semantic-documentation-markup-languages-xdocs-docbook-dita/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been using the Maven <a href="http://maven.apache.org/doxia/references/xdoc-format.html">XDoc</a> markup language for documenting design on a client project. Looking into editors for XDoc led me to taking a closer look at <a href="http://www.docbook.org/">DocBook</a>, and <a href="http://en.wikipedia.org/wiki/Darwin_Information_Typing_Architecture">Dita</a>, a relative newcomer. All of these formats allow you to write documentation in a semantic manner, separate from the presentation. You can then generate HTML, PDF, RTF, etc from your document using your choice of transformers. DocBook has been around the longest, but is still active, with the 5.0 version recently released.</p>
<p>The best editor for these formats I&#8217;ve found is <a href="http://www.xmlmind.com/xmleditor/">XMLMind XMLEditor</a>. <a href="http://wiki.apache.org/velocity/EditXdocs">Here</a> is information on using XMLEditor to edit XDoc documents. The latest version of XMLEditor supports DocBook v4 and v5 out of the box, and support for Dita can be downloaded as a plugin. Currently I&#8217;m leaning towards using DocBook for technical documentation due to its wider support, although Dita sounds interesting.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2008/08/semantic-documentation-markup-languages-xdocs-docbook-dita/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Change Management and Bug Tracking</title>
		<link>http://rpstechnologies.net/ron/blog/2008/05/change-management-and-bug-tracking/</link>
		<comments>http://rpstechnologies.net/ron/blog/2008/05/change-management-and-bug-tracking/#comments</comments>
		<pubDate>Wed, 21 May 2008 14:54:20 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/change-management-and-bug-tracking/</guid>
		<description><![CDATA[A project I&#8217;m involved with is in need of a change management tool, so I&#8217;m in the process of re-evaluating the landscape of open source change management tools, and testing a couple out. Change management is one of those software &#8230; <a href="http://rpstechnologies.net/ron/blog/2008/05/change-management-and-bug-tracking/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A project I&#8217;m involved with is in need of a change management tool, so I&#8217;m in the process of re-evaluating the landscape of open source change management tools, and testing a couple out.</p>
<p>Change management is one of those software software development practices that I rarely see implemented in IT projects, although it helps to organize development and cuts down on the more tedious project management activities (gathering status, updating detailed project plans). Change management is similar to defect tracking, which is frequently used, but is broader is scope. Defect tracking is really a subset of change management.</p>
<p>In a change management process, every proposed and actual change to an artifact is recorded and tracked in a change management tool. I say artifact rather than code because it can be used to track changes to requirements, test scripts, documentation, design; not just code. Every change to an artifact and commit to VCS has an associated record in the change management tool associated with it, describing the nature of the change, who requested it, what release it was planned for, etc.</p>
<p>Open source projects seem to more frequently use change management, which isn&#8217;t surprising considering they are made up of distributed teams who need a good way to keep track of what changes are planned for, and tracking the progress of those changes.</p>
<p>There&#8217;s a bunch of open source change management tools out there. <a href="http://roundup.sourceforge.net/">Roundup</a>, <a href="http://jtrac.info/">JTrac</a>, <a href="http://www.xplanner.org/">XPlanner</a>, <a href="http://scarab.tigris.org/">Scarab</a>, <a href="http://www.mantisbt.org/">Mantisbt</a>, <a href="http://www.itracker.org/">ITracker</a>, <a href="http://trac.edgewall.org/">Trac</a>, and <a href="http://www.bugzilla.org/">Bugzilla</a> are the tools I took a look at.</p>
<p>I have several criteria for a change management tool, including:</p>
<ul>
<li>Ability to link one change request to another</li>
<li>This can be used to set up dependencies between changes or defects (this bug has to be fixed before that one can) or to break up large changes into smaller ones to be worked on by different people (e.g. have a change request to track the development of a feature, linked to smaller change requests to track the changes to implement the feature).</li>
<li>RSS feeds for reports/searchs</li>
<li>Support for representing enhancements and defects</li>
<li>Support for components, with the ability to assign change requests to components, and to assign owners for each component</li>
<li>Easy to administer &#8211; Ability to administer products, components, and users through a web UI</li>
<li>Ability to authenticate against LDAP</li>
<li>Active development community</li>
<li>Easy to use, web-based on-demand reporting and charting</li>
<li>Can run on Windows (it&#8217;s the box I have)</li>
<li>Support by <a href="http://www.eclipse.org/mylyn/">Mylyn</a></li>
</ul>
<p>I narrowed the choice down to Bugzilla and Trac, and settled on Bugzilla after installing both. I&#8217;ve used and installed Bugzilla before, so I was already pretty comfortable with it. The Bugzilla Windows installation has come a long way since the last time I tried it (~2001). Back then I gave up and ended up installing Linux on a box just to be able to run Bugzilla. It still requires quite a few steps, but it worked without too much trouble.</p>
<p>I installed stable version 3.0.4 following the instructions at <a href="http://www.bugzilla.org/docs/win32install.html">http://www.bugzilla.org/docs/win32install.html</a>. At a high level, the steps were:</p>
<ul>
<li>Download and unpack tarball</li>
<li>Install MySQL 5.0.51a</li>
<li>Create Bugzilla database and database user</li>
<li>Installe ActiveState Perl 5.8.8</li>
<li>Installed a bunch(!) of Perl packages via bundled PPM tool</li>
<li>Install &amp; Configure Apache 2.2</li>
<li>Had to upgrade Email and Mime related Perl packages (see <a href="http://ayria.livejournal.com/33438.html">this</a> blog posting).</li>
<li>Download and install Graphviz, and tell Bugzilla where the &#8216;dot&#8217; executable can be found (Bugzilla parameters-&gt;Dependency Graphs)</li>
<li>Execute perl collectstats.pl (not sure if this is doing anything)</li>
<li>I had to execute the following to get graphical reports to work: ppm install Template-GD</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2008/05/change-management-and-bug-tracking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using IntelliJ IDEA</title>
		<link>http://rpstechnologies.net/ron/blog/2008/03/using-intellij-idea/</link>
		<comments>http://rpstechnologies.net/ron/blog/2008/03/using-intellij-idea/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 14:52:44 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2008/03/using-intellij-idea/</guid>
		<description><![CDATA[I&#8217;ve started using Intellij IDEA as an IDE. I&#8217;ve always heard good things about it but stuck with Eclipse because it&#8217;s pretty good, and the standard used by most clients I&#8217;ve worked with. What got me to try it out &#8230; <a href="http://rpstechnologies.net/ron/blog/2008/03/using-intellij-idea/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve started using <a href="http://www.jetbrains.com/idea/">Intellij IDEA</a> as an IDE. I&#8217;ve always heard good things about it but stuck with Eclipse because it&#8217;s pretty good, and the standard used by most clients I&#8217;ve worked with.</p>
<p>What got me to try it out was the Groovy/Grails support. I&#8217;ve been doing some work with Grails and had heard they had a good plugin. After working with it a while, the Groovy support is the best out of the three major Java IDEs (Eclipse, NetBeans, IDEA). The Maven 2 support is great too.. It&#8217;s by far the best support for Maven 2 in any IDE. There are some features I would still like them to add (such as a Maven repository index/search feature), but the important things work well (handling Maven dependencies).</p>
<p>In general, I find myself having to fiddle with the UI less than I do with Eclipse (configuring and switching perspectives, resizing panes, etc).</p>
<p>The other plugin I was really interested in was the <a href="http://code.google.com/p/mercurialidea/">Mercurial IDEA</a> plugin. This plugin is still early in the development cycle. Unfortunately it gave me an error when starting up &#8211; it was compiled for JDK 1.6 and I&#8217;m stuck with 1.5 on my Mac. I imported the MercurialIdea plugin source into Idea, reset it to use the Idea platform runtime, and rebuilt the plugin without success. No biggie, the Mercurial command line is easy enough to use.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2008/03/using-intellij-idea/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenID, Yahoo, and other news</title>
		<link>http://rpstechnologies.net/ron/blog/2008/01/openid-yahoo-and-other-news/</link>
		<comments>http://rpstechnologies.net/ron/blog/2008/01/openid-yahoo-and-other-news/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 14:51:36 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/openid-yahoo-and-other-news/</guid>
		<description><![CDATA[Recent OpenID developments&#8230; At the end of this month, Yahoo will be supporting OpenID. Any Yahoo user that chooses to enable the feature will be able to use their Yahoo ID on sites that support OpenID. The announcement doesn&#8217;t mention &#8230; <a href="http://rpstechnologies.net/ron/blog/2008/01/openid-yahoo-and-other-news/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Recent OpenID developments&#8230;</p>
<p>At the end of this month, <a href="http://openid.yahoo.com/">Yahoo will be supporting</a> <a href="http://en.wikipedia.org/wiki/OpenID">OpenID</a>. Any Yahoo user that chooses to enable the feature will be able to use their Yahoo ID on sites that support OpenID. The announcement doesn&#8217;t mention Yahoo accepting OpenIDs from other providers, so this is probably only one-way for now. So put together the population of Yahoo users which are now getting OpenID support, and AOL users, which have had it for a while, and you have a pretty large chunk of the web population that have OpenIDs (once they enable them anyways). Now we need more websites to accept OpenIDs from other providers.</p>
<p>I&#8217;m waiting for <a href="http://www.acegisecurity.org/">Acegi</a> to support OpenID so I can build support into a webapp I&#8217;m working on. Looks like there&#8217;s been some <a href="http://raykrueger.blogspot.com/2008/01/acegi-openid-support-update.html">recent progress</a> on that front.</p>
<p>Another OpenID related, if a bit old, tidbit &#8211; <a href="https://www.myopenid.com/">MyOpenId</a> <a href="http://janrain.com/blog/2007/10/17/myopenid-adds-information-card-support/">now supports</a> <a href="http://en.wikipedia.org/wiki/Information_Card">Information Card</a> as a means to authenticate with MyOpenID. So when prompted to authenticate to MyOpenID, you can present an Information Card and authenticate without using a username or password at all.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2008/01/openid-yahoo-and-other-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Handy Java utility: jarexplorer</title>
		<link>http://rpstechnologies.net/ron/blog/2007/12/handy-java-utility-jarexplorer/</link>
		<comments>http://rpstechnologies.net/ron/blog/2007/12/handy-java-utility-jarexplorer/#comments</comments>
		<pubDate>Sun, 16 Dec 2007 14:50:46 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/handy-java-utility-jarexplorer/</guid>
		<description><![CDATA[Wanted to give kudos to a handy little Java utility I started using: jarexplorer. It&#8217;s a Swing-based app that indexes the contents of jar files found in an entire directory structure, and lets you search for classes and files within &#8230; <a href="http://rpstechnologies.net/ron/blog/2007/12/handy-java-utility-jarexplorer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Wanted to give kudos to a handy little Java utility I started using: <a href="http://code.google.com/p/jar-explorer/">jarexplorer</a>. It&#8217;s a Swing-based app that indexes the contents of jar files found in an entire directory structure, and lets you search for classes and files within those jar files. It&#8217;s blazingly fast and also provides viewers to look into classes, text files, and images. Double click on the search results and the viewer comes up. Nice to see tools that do one thing and do it well.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2007/12/handy-java-utility-jarexplorer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using Mercurial</title>
		<link>http://rpstechnologies.net/ron/blog/2007/11/using-mercurial/</link>
		<comments>http://rpstechnologies.net/ron/blog/2007/11/using-mercurial/#comments</comments>
		<pubDate>Sun, 25 Nov 2007 14:44:00 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/using-mercurial/</guid>
		<description><![CDATA[As I posted earlier, I&#8217;ve been looking at some of the decentralized version control systems and started using Mercurial. There are several decentralized VCSs, including Bazaar, GIT, Mercurial, and others. Out of the decentralized VCSs, Mercurial and GIT seemed to &#8230; <a href="http://rpstechnologies.net/ron/blog/2007/11/using-mercurial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>As I posted earlier, I&#8217;ve been looking at some of the decentralized version control systems and started using Mercurial. There are several decentralized VCSs, including <a href="http://bazaar-vcs.org/">Bazaar</a>, <a href="http://git.or.cz/">GIT</a>, <a href="http://www.selenic.com/mercurial/wiki/">Mercurial</a>, and others. Out of the decentralized VCSs, Mercurial and GIT seemed to have the greatest momentum and adoption rate. GIT is being used by the Linux Kernel, Wine project, and <a href="http://git.or.cz/gitwiki/GitProjects">others</a>. Mercurial is being adopted by OpenJDK, OpenSolaris, Mozilla, among <a href="http://www.selenic.com/mercurial/wiki/index.cgi/ProjectsUsingMercurial">others</a>. Having wide adoption and momentum are important to me because I want to use something that&#8217;ll be around several years from now and will be supported by GUI tools, build and continuos integration tools, and IDEs.</p>
<p>After looking into both, I ended up going with Mercurial over GIT. Both Mercurial and GIT seem to fit my needs; decentralized, fast, and flexible, but GIT didn&#8217;t seem as well supported on non-Linux platforms and the Java IDE plugins are further behind. Mercurial has binaries available for Mac, Windows, and of course Linux. On the Mac and Windows side, there are a couple different options for how to install Mercurial; using a ports packaging system such as Cygwin on Windows or MacPorts on Mac, or installing natively on the OS. The Eclipse IDE plugin is still early in development, but it sounds like the NetBeans plugin is pretty full featured.</p>
<p>When working with Mercurial, everything is a copy of the repository, including branches and the local repository that developers work out of. Each repository is as fully capable as any other and includes all of the change history. It sounds inefficient to have a full copy of the repository on each workstation, but it turns out that Mercurial repositories are usually smaller than a Subversion working directory. This is partly because Mercurial stores changes to files in a very efficient manner, and partly because Subversion stores a significant amount of extra data in a working directory in order to avoid accessing the server for some operations.</p>
<p>In Mercurial, changes to files are committed to a local repository as a unit of work, called a change set. The change sets can then be pushed or pulled from other repositories in order to share work with others. It&#8217;s then up to you how you organize your work and manage the exchange of change sets between repositories. You can have a single master repository that everyone pushes/pulls from, you can have multiple masters for better performance and reliability, you can have a hierarchical model where committers receive change sets from the community, then pass it up to module owners, who pass them up to release owners (from what I&#8217;ve heard the Linux Kernel is organized in this way), or even have no master and have members of the team exchange change sets directly with each others&#8217; repositories (this sounds like too much work though).</p>
<p>Most of all, I was impressed with Mercurial&#8217;s attention to details in their design decisions:</p>
<ul>
<li>Mercurial never makes updates to a revision log of a file, just appends to it. This minimizes the opportunities for data getting corrupted; if you never update or delete data, there is very little chance of it being accidentally corrupted beyond repair.</li>
<li>Mercurial stores the diffs to files (text and binary) rather than storing the full copy of a file for every revision. It then &#8220;replays&#8221; the diffs in order to reconstruct the full copy of a revision of a file when needed. This is much more efficient than it may seem, but after a large number of changes it can become expensive. To compensate for this, Mercurial stores a snapshot copy of a file revision for fast access when the chain of diffs becomes too long.</li>
<li>Minimize locking &#8211; read and update operations have been ordered in such a manner that locking isn&#8217;t necessary for most commands. Reads and clone/pull operations don&#8217;t lock the repository at all. Mercurial uses locks to ensure only one process writes to a repository at a time, but read and clone/pull operations are not affected by this.</li>
<li>Minimizing filesystem seek operations &#8211; Seek operations are relatively expensive, so Mercurial has been designed to minimize this. This is one of the reasons that Mercurial keeps repository metadata in a single directory (.hg at the root) rather than stored with each directory as Subversion does (.svn directories) &#8211; having separate metadata directories would require a seek for every directory.</li>
</ul>
<p>I&#8217;ll follow up later with a post on setting up &amp; working with Mercurial.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2007/11/using-mercurial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Version control systems: Going decentralized</title>
		<link>http://rpstechnologies.net/ron/blog/2007/09/version-control-systems-going-decentralized/</link>
		<comments>http://rpstechnologies.net/ron/blog/2007/09/version-control-systems-going-decentralized/#comments</comments>
		<pubDate>Mon, 03 Sep 2007 05:21:16 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Tools]]></category>
		<category><![CDATA[VCS]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2007/09/version-control-systems-going-decentralized/</guid>
		<description><![CDATA[I&#8217;ve used a number of version control systems over time, starting out with SCCS and RCS. I used CVS for many years for my own work and for client projects where CVS could be used. For the last 4 years &#8230; <a href="http://rpstechnologies.net/ron/blog/2007/09/version-control-systems-going-decentralized/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve used a number of version control systems over time, starting out with SCCS and RCS. I used CVS for many years for my own work and for client projects where CVS could be used. For the last 4 years I&#8217;ve been using and recommending Subversion, a relatively recent centralized version control system. Subversion is a big improvement over CVS, and I&#8217;ve found it to be a good VCS, but it still suffers from problems common to all centralized version control systems.</p>
<p>In a centralized version control system, there&#8217;s a single repository that tracks the changes to all files, and any version control operations (check out, commit, merge, etc) must go through the central repository. Lately I&#8217;ve been tracking the decentralized version control systems that have come out and have been getting attention. As the name implies, in a decentralized version control system, there isn&#8217;t a single central repository and server responsible for tracking changes to files. In a decentralized version control system, you can have any number of repositories tracking changes to the same set of files. Each repository is as fully capable as the next and able to carry out all of the version control operations (commit, checkout, merge, etc) on the files. No repository is inherently more important than another. The changes to files (change sets) can be pushed and pulled from one repository to another. Although no repository is inherently more important than another, when teams work with decentralized version control systems, they typically designate one repository as the &#8220;master&#8221; repository to which all changes ultimately get pushed and from which other repositories can pull changes. Another variation on this is to have two or more &#8220;master&#8221; repositories which exchange change sets between them. This model of having multiple repositories extends all the way down to the workstation. In most decentralized VCSs, developers work off a local repository, which is just as full fledged and capable as any &#8220;master&#8221; repository.</p>
<p>There are several real world &#8220;itches&#8221; I experienced that got me looking into decentralized version control systems:</p>
<p><strong>Working offline</strong></p>
<p>I sometimes work somewhere that doesn&#8217;t have a connection to the central Subversion repository &#8211; either I&#8217;m working somewhere without an internet connection, or don&#8217;t have a connection to the internal network where the Subversion repository resides. This is actually not that uncommon for me. With a central repository, this means I can&#8217;t rename files in Subversion, commit changes, create a new branch to work on an independent change, merge work, etc. I&#8217;m basically limited to editing files without renames/moves. With a decentralized VCS, I could do everything I can do with a central repository while disconnected, because every developer has a full fledged repository they are locally working from. When I&#8217;m again connected with the &#8220;master&#8221; repository, I can push my changes up to it.</p>
<p><strong>Delays in getting central VCS repository set up</strong></p>
<p>Sometimes getting a new repository added to a centralized VCS for a new project can take quite a while. The repository has to be set up, permissions have to be granted, and the person responsible for it may be out, or have a million other things to do. Until the repository is set up, the team has to share source code by some other means (email, etc) which is error prone and no versioning information is captured. With a decentralized VCS, a team could start working together using their own repository, then push all of the changes into a &#8220;master&#8221; repository when it becomes available. The team is able to get work done without being blocked, and the system administrators are able to control access to the authoritative VCS.</p>
<p><strong>Distributed teams with poor network access</strong></p>
<p>When working with distributed teams, the network access for offsite teams has frequently been average to poor. Sometimes connectivity to the central repository goes down altogether, and when connectivity is up, operations such as commits, merges, and updates from the repository are painfully slow. Teams work around this by falling back to sharing code via email (error prone, cumbersome), or holding off sharing changes, which makes for muddled commits and makes integration more difficult.</p>
<p><strong>Moving a repository from one server to another</strong></p>
<p>Sometimes you need to switch a VCS repository from one server to another; maybe the server needed to be used for something else, a more powerful server was needed, or the VCS repositories were being consolidated onto fewer servers. With a centralized VCS, when this happens, the entire team needs to switch over at the same time. This means that any changes that are going on have to be committed (hopefully they don&#8217;t break the build), the repository has to be copied over to the new location, the continuous integration process needs to be switched over, and all developers need to switch their workstations to point to the new repository. Needless to say this disrupts development and incurs a real cost.</p>
<p>With a decentralized VCS, the new repository could be set up with a copy of the old repository while the old repository is still being used. The continuous integration process and developers could gradually switch to the new repository when practical (e.g. after completing development of a story). All the while, the new repository can pull any changes that are committed to the old repository, ensuring the new repository is up to date. You could also have changes committed to the new repository flow back to the old repository while it is still in use. Whenever you have migrated all of the processes and people to the new repository, the old repository can be turned off. Everything has switched over without disrupting development.</p>
<p><strong>Repository going down</strong></p>
<p>Unfortunately, VCS servers do go down, more frequently than it seems they should. Usually you just need to restart the server process, but sometimes hardware failures can take the repository down for longer periods. If you are diligent about keeping backups of your repository, maybe you can get back up and running without much delay. The worst case of this I remember was when using ClearCase in a large development team where everyone used virtual views, which was recommended by the ClearCase admins. When the ClearCase server went down, no one could even access their code (since the files are served up from a virtual filesystem by ClearCase), so most of the development team just went home after a couple hours of being down. I&#8217;ve heard that ClearCase virtual views aren&#8217;t recommended for this reason, but I don&#8217;t know enough about the intricacies of ClearCase to say.</p>
<p>If using a decentralized VCS, you can set up one or more mirrors of the main VCS repository, so if one goes down, people can use one of the others without interrupting development. Also, since everyone has a full repository on their workstations, it&#8217;s pretty easy to clone one of those repositories and set up a temporary main repository for everyone to push/pull changes to. But for short outages, the development team likely won&#8217;t even notice since people mostly work off their local repository and holding off from pushing changes to the main server for a while isn&#8217;t a big deal. In short, a decentralized VCS is much more fault tolerant than a centralized VCS.</p>
<p>There are several capable decentralized version control systems available, including <a href="http://bazaar-vcs.org/">Bazaar</a>, <a href="http://www.selenic.com/mercurial/wiki/">Mercurial</a>, <a href="http://svk.bestpractical.com/view/HomePage">SVK</a>, <a href="http://git.or.cz/">GIT</a>, and more. Some of these are being used on major open source projects such as the open source JDK, OpenSolaris, and the Linux kernel.</p>
<p>Since this post is getting lengthy, I&#8217;ll follow up with another post on my experience after having switched to a decentralized VCS.</p>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2007/09/version-control-systems-going-decentralized/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
