<?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 on software &#187; Software Development</title>
	<atom:link href="http://rpstechnologies.net/ron/blog/category/software-dev/feed/" rel="self" type="application/rss+xml" />
	<link>http://rpstechnologies.net/ron/blog</link>
	<description>Thoughts on software development</description>
	<lastBuildDate>Sun, 29 Apr 2012 02:29:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</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; title: ; notranslate">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; title: ; notranslate">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; title: ; notranslate">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>Public mashup and data feed APIs</title>
		<link>http://rpstechnologies.net/ron/blog/2009/08/public_mashup_and_data_feeds/</link>
		<comments>http://rpstechnologies.net/ron/blog/2009/08/public_mashup_and_data_feeds/#comments</comments>
		<pubDate>Sun, 02 Aug 2009 13:22:10 +0000</pubDate>
		<dc:creator>ron</dc:creator>
				<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://rpstechnologies.net/ron/blog/2009/08/public_mashup_and_data_feeds/</guid>
		<description><![CDATA[I&#8217;m doing some research for a possible venture.  A part of this venture would fall into the mashup category &#8211; pulling information from other sites and services, and combining it in a unique way.  Following are my initial notes on &#8230; <a href="http://rpstechnologies.net/ron/blog/2009/08/public_mashup_and_data_feeds/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m doing some research for a possible venture.  A part of this venture would fall into the mashup category &#8211; pulling information from other sites and services, and combining it in a unique way.  Following are my initial notes on some interesting APIs and information feeds:</p>
<p><a href="http://www.programmableweb.com/">Programmable Web</a> is a great resource for those building mashups &#8211; it has a directory of APIs and Mashups that make use of those APIs.  The blog post &#8220;<a href="http://compassioninpolitics.wordpress.com/2009/06/03/best-free-apis-for-web-developers/">Top Twenty Open APIs and Mashup Resources for Web Developers</a>&#8221; lists some of the most popular APIs.</p>
<p><a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;url=http%3A%2F%2Fcode.google.com%2Ftransit%2Fspec%2Ftransit_feed_specification.html&amp;ei=_BJ1Sv-hFo2csgPEgrX0CA&amp;usg=AFQjCNGgPEnU4imJ3Z-gjXzAYe3IsJr0sA">Google Transit Feed Specification</a></p>
<ul>
<li>Provides information on stops, routes, calendar, fares, frequencies, usage policies</li>
<li>Unfortunately, only available for a limited set of metro areas</li>
</ul>
<p><a href="http://code.google.com/apis/maps/">Google Maps AJAX API</a>:</p>
<ul>
<li>AJAX API</li>
<li>Display map with road, satellite, hybrid, and terrain, by latitude &amp; longitude</li>
<li>Can respond to user events within the map &#8211; e.g. clicking, zooming in/out, panning, etc</li>
<li>Can manipulate map via JavaScript &#8211; adding markers, changing location, zoom, etc</li>
<li>Can create various types of overlays on the map</li>
<li>Includes google street view</li>
</ul>
<p><a href="http://code.google.com/apis/ajaxfeeds/">Google AJAX Feed API</a></p>
<ul>
<li>Include any RSS or ATOM feed on your site, with various presentation options</li>
</ul>
<p><a href="http://code.google.com/apis/opensocial/">OpenSocial</a></p>
<ul>
<li>Common API for multiple social networking sites, including hi5,  LinkedIn, MySpace, Netlog, Ning, orkut, and Yahoo.  Unfortunately Facebook is not one of them.</li>
<li>JavaScript APIs for client side and REST/RPC APIs for server side</li>
<li>Can be used to create apps that are embedded in social networking sites, as well as use user social information (user profile, friend lists, events) from social networks in your site.</li>
<li><a href="http://oauth.net/">OAuth</a> is used to allow users to authorize use of their social network information</li>
</ul>
<p><a href="http://code.google.com/apis/youtube/overview.html">YouTube APIs</a></p>
<ul>
<li>Integrate YouTube functionality into your site: video searches, upload videos, etc</li>
<li>Integrate video player into your site</li>
<li>Allow users to see/manage their favorites on your site</li>
<li>RSS/ATOM data feeds from YouTube</li>
</ul>
<p><a href="http://www.yelp.com/developers/documentation">YELP APIs</a></p>
<ul>
<li>REST APIs</li>
<li>Retrieve business info and reviews for a geographic region and business category.  This includes the business location, and their categories.</li>
<li>Retrieve neighborhood name and info by location</li>
<li>Retrieve reviews for a particular business</li>
<li>Retrieve business info and pictures</li>
<li>It looks like this isn&#8217;t a complete directory &#8211; only those businesses and features that have been rated are listed</li>
</ul>
<p><a href="http://www.zillow.com/howto/api/APIOverview.htm">Zillow APIs</a></p>
<ul>
<li>&#8220;Neighborhood and city affordability statistics: Zillow Home Value Index, Zestimate distribution, median single family home and condo values, average tax rates, and percentage of flips.&#8221;</li>
<li>Demographic data at the city and neighborhood level &#8211; local market data, affordability, household income, average age, commute time, etc.</li>
<li>Home Valuation: &#8220;Search results list, Zestimate<sup>®</sup> home valuations, home valuation charts, comparable houses, and market trend charts.&#8221;</li>
<li>Property Details: &#8220;Property-level data, including historical sales price and year, taxes, beds/baths, etc.&#8221;</li>
<li>Lists of counties, cities, ZIP codes, and neighborhoods, as well as latitude and longitude data for these areas so you can put them on a map.</li>
<li>&#8220;boundaries for nearly 7,000 neighborhoods and 150 cities&#8221;  available via Creative Commons license.</li>
<li>License restricts site from charging money for Zillow data</li>
</ul>
<p><a href="http://developer.yahoo.com/local/">Yahoo! Local Web Services</a></p>
<ul>
<li>REST APIs</li>
<li>Provides access to public collections created with Yahoo! Local Collections</li>
<li>Can perform local searches based on location, radius, route, categories: returns results with location info, ratings, categories, etc</li>
<li>Yahoo Local search web site: http://local.yahoo.com/ &#8211; You can see some of the information that&#8217;s available</li>
</ul>
<p><a href="http://www.walkscore.com/api.shtml">Walkscore API</a>:</p>
<ul>
<li>Get walk score by location</li>
</ul>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=11c844b6-4dc2-8014-8eb2-e17ac64063ef" alt="" /></div>
]]></content:encoded>
			<wfw:commentRss>http://rpstechnologies.net/ron/blog/2009/08/public_mashup_and_data_feeds/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>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>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>
	</channel>
</rss>

