<?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>Adam Jordens@littlesquare:~/ &#187; Open Source Software</title>
	<atom:link href="http://littlesquare.com/category/open-source-software/feed/" rel="self" type="application/rss+xml" />
	<link>http://littlesquare.com</link>
	<description>Just a little square in a sea of blogs</description>
	<lastBuildDate>Wed, 08 Feb 2012 05:12:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Migrating a SVN Repository to GIT</title>
		<link>http://littlesquare.com/2010/06/migration-a-svn-repository-to-git/</link>
		<comments>http://littlesquare.com/2010/06/migration-a-svn-repository-to-git/#comments</comments>
		<pubDate>Sun, 20 Jun 2010 21:19:23 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://www.littlesquare.com/?p=386</guid>
		<description><![CDATA[Yesterday I took on the task of migrating a remote SVN repository to GIT.&#160; I recently bought a small cloud server from Rackspace with the goal of amalgamating various services I had hosted previously at Webfaction. The SVN –&#62; GIT migration was simple and painless (thanks to Jon Maddox for the reference instructions).&#160; Importantly, all [...]]]></description>
			<content:encoded><![CDATA[<p>Yesterday I took on the task of migrating a remote SVN repository to GIT.&#160; </p>
<p>I recently bought a small cloud server from Rackspace with the goal of amalgamating various services I had hosted previously at Webfaction.</p>
<p>The SVN –&gt; GIT migration was simple and painless (thanks to <a href="http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/">Jon Maddox</a> for the reference instructions).&#160; Importantly, all the commit history from Subversion was maintained.</p>
<p>&#160;</p>
<p>Create a new <em>git</em> user:</p>
<blockquote><p><font color="#444444" face="Verdana">adduser git</font></p>
</blockquote>
<p>&#160;</p>
<p>As the <em>git</em> user</p>
<blockquote><p><font color="#444444" face="Verdana">mkdir repos</font></p>
<p><font color="#444444" face="Verdana">cd repos</font></p>
<p><font color="#444444" face="Verdana">mkdir trunk_tmp</font></p>
<p><font color="#444444" face="Verdana">cd trunk_tmp</font></p>
<p><font color="#444444" face="Verdana">git-svn init <a href="http://x.y.z/svn/trunk">http://x.y.z/svn/trunk</a> –no-metadata</font></p>
<p><font color="#444444" face="Verdana">git config svn.authorsfile ~/repos/users.txt</font></p>
<p><font color="#444444" face="Verdana">git-svn fetch</font></p>
<p>&#160;</p>
</blockquote>
<p>The <em>users.txt </em>should contain a mapping of svn to git users in the following format:</p>
<blockquote><p><font color="#444444" face="Verdana">svnusername = My Full Name &lt;my email address&gt;</font></p>
</blockquote>
<p>&#160;</p>
<p>After the <em>git-svn fetch</em> operation has completed (it will download all revisions from subversion and may take a while), do the following: </p>
<blockquote><p><font color="#444444" face="Verdana">git clone trunk_tmp trunk</font></p>
<p><font color="#444444" face="Verdana">rm –rf trunk_tmp</font></p>
</blockquote>
<p><em></em></p>
<p><em>~git/repos/trunk</em> is the new home of your GIT repository.</p>
<p>&#160;</p>
<p>To access it remotely (<em>over ssh</em>):</p>
<blockquote><p><font color="#444444" face="Verdana">git clone ssh://git@&lt;host&gt;/~git/repos/trunk</font></p>
</blockquote>
<p>&#160;</p>
<p>Simple as that.&#160; I’m the only one using the repository so tunnelling it over a single user account is satisfactory.&#160; I’d recommend setting up ssh private/public keys to make authentication more seamless.</p>
<p>&#160;</p>
<p><strong>Resource</strong></p>
<ul>
<li><a href="http://git.or.cz/course/svn.html">http://git.or.cz/course/svn.html</a> – Provides a reasonable mapping of SVN –&gt; GIT commands. </li>
<li><a href="http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/">http://www.jonmaddox.com/2008/03/05/cleanly-migrate-your-subversion-repository-to-a-git-repository/</a> – More detailed instructions on the repository migration. </li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2010/06/migration-a-svn-repository-to-git/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Upgrading to Hibernate Search 3.2.0 (w/ Seam)</title>
		<link>http://littlesquare.com/2010/05/upgrading-to-hibernate-search-3-2-0-w-seam/</link>
		<comments>http://littlesquare.com/2010/05/upgrading-to-hibernate-search-3-2-0-w-seam/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 03:08:47 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2010/05/31/upgrading-to-hibernate-search-3-2-0-w-seam/</guid>
		<description><![CDATA[A couple weeks back I set out to upgrade the version of Hibernate Search that one of our applications was using. The boys at JBoss had recently released Hibernate Search 3.2.0 and it looked pretty sweet. The possibility of performance improvements around indexing was enough to make me upgrade. Unfortunately, like most software frameworks, Hibernate [...]]]></description>
			<content:encoded><![CDATA[<p>A couple weeks back I set out to upgrade the version of Hibernate Search that one of our applications was using.   </p>
<p>The boys at JBoss had recently <a href="http://in.relation.to/Bloggers/HibernateSearch32ReleasedMappingMassIndexingClustering">released</a> Hibernate Search 3.2.0 and it looked pretty sweet. The possibility of performance improvements around indexing was enough to make me upgrade.</p>
<p>Unfortunately, like most software frameworks, Hibernate Search introduced/forced some new dependencies on us. We had previously been using Seam 2.2.0 and Hibernate 3.3.0 (<em>both JPA1</em>), neither of which were compatible with Hibernate Search 3.2.0.</p>
<p>We&#8217;re using Maven, so I&#8217;ll quickly outline the dependency changes I had to make (<em>all dependences are available via the </em><a href="http://relation.to/Bloggers/JBossMavenRepositoryChanges"><em>JBoss Nexus Repository</em></a>):</p>
<blockquote><p><font size="2" face="Verdana">&lt;dependency&gt;       <br />&#160;&#160;&#160; &lt;groupId&gt;javax.persistence&lt;/groupId&gt;        <br />&#160;&#160;&#160; &lt;artifactId&gt;persistence-api&lt;/artifactId&gt;        <br />&#160;&#160;&#160; &lt;!&#8211; bit of a hack to make sure we aren&#8217;t transitively pulling in the persistence api (should be referencing hibernate-jpa-2.0-api now) –-&gt;        <br />&#160;&#160;&#160; &lt;version&gt;explicitly-fail&lt;/version&gt;        <br />&lt;/dependency&gt;</font></p>
</blockquote>
<p>javax.persistence:persistence-api is the JPA1 API and is no longer relevant and should never be included as a dependency. The <em>explicitly-fail</em> version will trigger a build failure if it ever manages to sneak in.</p>
<blockquote><p><font size="2" face="Verdana">&lt;dependency&gt;       <br /> &lt;groupId&gt;org.hibernate.javax.persistence&lt;/groupId&gt;        <br /> &lt;artifactId&gt;hibernate-jpa-2.0-api&lt;/artifactId&gt;        <br /> &lt;version&gt;1.0.0.Final&lt;/version&gt;        <br />&lt;/dependency&gt;</font>      </p>
</blockquote>
<p>org.hibernate.javax.persistence:hibernate-jpa-2.0-api is the new JPA2 API published by Hibernate.&#160; </p>
<p>All previous hibernate dependencies had to be upgraded to <strong>3.5.2.Final</strong>, and Hibernate Search bumped up to<strong> 3.2.0.Final</strong>.</p>
<p>If you&#8217;re using Seam, you&#8217;ll also need to upgrade it to <strong>2.2.1.CR1</strong>.&#160; Note that this is not yet a final release but is necessary in order to support JPA2.</p>
<p>Unfortunately, Seam <strong>2.2.1.CR1</strong> lacks a complete Hibernate Search integration.&#160; I could no longer able properly inject a FullTextEntityManager (<em>via @In</em>).</p>
<p>Instead I was forced to obtain a FullTextSession programmatically:</p>
<blockquote><p><font face="Verdana">private FullTextSession getFullTextSession()       <br />{        <br />&#160;&#160;&#160; Session session = (Session) entityManager.getDelegate();        <br />&#160;&#160;&#160; return Search.getFullTextSession&#160; (session.getSessionFactory().getCurrentSession());        <br />}</font></p>
</blockquote>
<p>Seam also enhanced it&#8217;s EntityManager so that it now returns a JDK proxy when getDelegate() is called.&#160; </p>
<p>That would be fine and dandy, but unfortunately the proxy does not implement org.hibernate.classic.Session, as required by the FullTextSession in Hibernate Search.&#160; </p>
<p>Session.getSessionFactory().getCurrentSession() will return an org.hibernate.classic.Session and does allow you to move forward.&#160; </p>
<p>A bit annoying and hopefully something that will get corrected in the near future.&#160; I’m hoping that either Hibernate Search will be upgraded to not require a classic session, or Seam will provide an EntityManager delegate implementing the classic session interface. Better yet, Seam should just provide a fully supported integration with Hibernate Search 3.2.0.   </p>
<p>Honestly, that was about it as far as the upgrade went.&#160; We were able to index using either the new MassIndexer API or the old suggested best practice from Hibernate Search 3.1.&#160; </p>
<p>It&#8217;s interesting to note that on my test system, the MassIndexer API was slower than the previous indexing code. The documentation does cover many different tuning possibilities so it’s entirely possible the situation could be improved.</p>
<p>Also, the MassIndexer API runs in a series of transactions and unless your timeout is set sufficiently high (<em>ie. higher than the default JBoss 5 minutes</em>), you will see transaction timeouts. </p>
<p>I didn&#8217;t attempt to work around this and opt&#8217;d to stick with existing indexing code that already runs in a separate Seam @Asynchronous method (<em>thus avoiding timeouts</em>).</p>
<p>Somewhat less than ideal, but if you&#8217;re keen on running Hibernate Search 3.2.0 w/ Seam in JBoss 4.2.3, it <strong>is possible<em> </em></strong>and not too much work.</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2010/05/upgrading-to-hibernate-search-3-2-0-w-seam/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DeveloperForce.com : Initial Thoughts and Experiences using the Platform</title>
		<link>http://littlesquare.com/2009/07/developerforce-com-initial-thoughts-and-experiences-using-the-platform/</link>
		<comments>http://littlesquare.com/2009/07/developerforce-com-initial-thoughts-and-experiences-using-the-platform/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 06:39:19 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2009/07/08/developerforce-com-initial-thoughts-and-experiences-using-the-platform/</guid>
		<description><![CDATA[The team and I have recently kicked off a rather ambitious project.&#160; In an attempt to help accelerate the early development activities, we’ve made a decision to build a series of one-off implementations using the DeveloperForce.com platform (salesforce.com sans the sales CRM portions). The objective is to learn enough about the platform during these initial [...]]]></description>
			<content:encoded><![CDATA[<p>The team and I have recently kicked off a rather ambitious <a href="http://www.genologics.com/translational-research">project</a>.&#160; In an attempt to help accelerate the early development activities, we’ve made a decision to build a series of one-off implementations using the <em>DeveloperForce.com</em> platform (<em>salesforce.com sans the sales CRM portions</em>).</p>
<p>The objective is to learn enough about the platform during these initial largely custom implementations, to be in a position to hopefully create and deliver a largely standalone solutions faster than we would using the typical Java technology stack.</p>
<p>The jury is still out, but what follows are some initial thoughts after working with the platform.&#160; The team in question are a group of 3 senior developers working collectively on an application deployed in a single Salesforce Organization.&#160; <em></em></p>
<p><em>Forgive my use or miss-use of Salesforce/DeveloperForce terminology.&#160; </em><em>It can get confusing at times <img src='http://littlesquare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </em></p>
<p><strong></strong></p>
<p><strong>Version Control</strong></p>
<p>Like any good development shop, we store all code and build artifacts in source control.&#160; Subversion is our poison of choice.</p>
<p>Salesforce development is a bit different in that a lot of the configuration and development activities can occur in either the browser or their Eclipse-based IDE.&#160; </p>
<p>Our strategy for getting code and configurations under source control was to use Eclipse and regularly sync with our development organizations (<em>Salesforce jargon for a development space or area</em>).&#160; </p>
<p>Unbeknownst to us at the onset, there are certain configurations you can make using the browser that are not possible to make with the IDE.&#160; It’s important that these configurations (<em>user/queue creation, etc.</em>) are documented externally (<em>ie. in a spreadsheet</em>).</p>
<p>Code and configurations are moved between developers using Subversion and the Eclipse synchronization capabilities (or the Salesforce migration tool).&#160; By storing these artifacts in Subversion, we’re also able to do code reviews on them via Crucible.</p>
<p>Your mileage may vary with this approach, as we found the current Salesforce tooling to be quite poor at conflict resolution when it came to structural changes.&#160; Moreover, we frequently had to fall back to manually making changes via the web browser.&#160; <strong></strong></p>
<p><strong>Very annoying</strong>.&#160; </p>
<p>I think it’s safe to assume that despite all the redeeming qualities of the DeveloperForce platform, some significant gaps remain when it comes to the expectations of traditional software developers.&#160; By traditional, I mean those of us that are used to using source control, doing code reviews, etc.&#160; <strong>I guess Salesforce considers us a dying breed <img src='http://littlesquare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </strong></p>
<p>&#160;</p>
<p>Would I choose the platform to build a product I expected to maintain in the long-term and derive significant value from? <strong>No</strong>.&#160; </p>
<p>Would I use it in the short-term as a RAD environment to build a prototype? <strong>Possibly</strong>, but not without first considering some of the more traditional alternatives (<em>there are a number of schema-less data storage products available these days, combine that with a Grails, Seam, Rails or Django and you may very well be off to the races</em>).</p>
<p>&#160;</p>
<p>That’s enough for one night.&#160; I plan on doing a follow-up once the team has more experience maintaining and migrating code after it’s been deployed to DeveloperForce.</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2009/07/developerforce-com-initial-thoughts-and-experiences-using-the-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate Scalability Talk</title>
		<link>http://littlesquare.com/2009/06/hibernate-scalability-talk/</link>
		<comments>http://littlesquare.com/2009/06/hibernate-scalability-talk/#comments</comments>
		<pubDate>Sun, 21 Jun 2009 03:05:48 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>
		<category><![CDATA[qcon hibernate]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2009/06/20/hibernate-scalability-talk/</guid>
		<description><![CDATA[Good talk from Emmanuel Bernard and Max Ross on the subject over at InfoQ. Both Hibernate Core and Shards are covered, as well as Hibernate Search. Particularly interesting for me was his overview of the different mechanisms by which you can support multiple customer schemas securely and with decent performance.&#160; The product I’m actively working [...]]]></description>
			<content:encoded><![CDATA[<p>Good <a href="http://www.infoq.com/presentations/Scaling-Hibernate-Emmanuel-Bernard-Max-Ross">talk</a> from Emmanuel Bernard and Max Ross on the subject over at InfoQ. Both Hibernate Core and Shards are covered, as well as Hibernate Search.</p>
<p>Particularly interesting for me was his overview of the different mechanisms by which you can support multiple customer schemas securely and with decent performance.&#160; The product I’m actively working on is likely headed in this direction, looks like Oracle VPD is Emmanuel’s preferred solution.&#160; A quick search has turned up an add-on for Postgres called <a href="http://veil.projects.postgresql.org/curdocs/index.html">Veil</a> which aims to provide row/column-level security similar to Oracle VPD.&#160; Good to at least have a choice, but I imagine that when push comes to shove, Oracle will win out.</p>
<p>Shards has always looked interesting, will be nice when it finally hits GA and supports the JPA API.&#160; Would make it slightly easier to incorporate and play around with.</p>
<p>Interesting thoughts on clustering Lucene/Hibernate Search.&#160; We’re currently running it asynchronously (<em>ie. @Asynchronous in Seam</em>) on a single node but will likely need to look at pushing it to a second box and trying to get indexes in near real time without noticeable degradation to the front-end.</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2009/06/hibernate-scalability-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Framework misuses are still your bugs.</title>
		<link>http://littlesquare.com/2009/03/framework-misuses-are-still-your-bugs/</link>
		<comments>http://littlesquare.com/2009/03/framework-misuses-are-still-your-bugs/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 16:24:04 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2009/03/03/framework-misuses-are-still-your-bugs/</guid>
		<description><![CDATA[I spent a few hours tonight trying to diagnose a problem we were running into tonight with some web application code. That was on top of the better part of a day that was spent by another developer digging into the code. Development ain’t easy, and frameworks for all their glory strive to make the [...]]]></description>
			<content:encoded><![CDATA[<p>I spent a few hours tonight trying to diagnose a problem we were running into tonight with some web application code.</p>
<p>That was on top of the better part of a day that was spent by another developer digging into the code.</p>
<p>Development ain’t easy, and frameworks for all their glory strive to make the easy stuff easier and the difficult stuff… well it’s still difficult.</p>
<p>Take Seam for example, a couple simple @In annotations here and there, and all of a sudden you have an application up and running.&#160; </p>
<p>But throw transactions and exceptions into the mix and the expected behaviour is up in the air.</p>
<p>Imagine the following scenario:</p>
<blockquote><p>Component A calls Component B.update() which in turn calls EntityManager.persist(someEntity).</p>
<p>someEntity fails a database constraint and an EntityAlreadyExists exception is propagated from Component B.update().&#160; </p>
</blockquote>
<p>Can Component A turn around and update someEntity and call Component B.update() again?</p>
<p>It depends.&#160; In Seam there is a RollbackInterceptor behind the scenes that will rollback any transaction crossing an injection boundary (<em>it’s slightly more complicated than that but we’ll leave that for another day</em>).&#160; </p>
<p>If Component A was a POJO Transactional Seam component, and Component B was a Seam EntityHome component, this wouldn’t work.&#160; In this sitation, Component B throwing an exception would actually rollback the transaction before control was returned to Component A.&#160; Component A could very well handle the exception but the underlying transaction would still be rolled back.</p>
<p>From the looks of the implementation, the EntityHome (<em>Component B</em>) is relying on the entity existing in its PersistenceContext when doing an update.&#160; You can update() multiple times as long as the transaction remains open and long-running.</p>
<p>Throw an exception into the mix and that transaction is likely to get rolled back by the RollbackInterceptor and the persistence context reset.</p>
<p>From that point on, calling Component B.update() (<em>equivalent to EntityHome.update()</em>) is going to report a success but do nothing but flush an empty persistence context.&#160; </p>
<p>&#160;</p>
<p>The short term fix was to have Component B.update() re-merge in <em>someEntity</em>.&#160; However, rather than perverting the framework, it likely makes sense to dig deeper into the implementations and merge Component A and Component B to prevent the RollbackInterceptor from firing and rolling back the transaction on an exception that is recoverable.</p>
<p>The things you learn!</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2009/03/framework-misuses-are-still-your-bugs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eclipise Memory Analyzer (MAT)</title>
		<link>http://littlesquare.com/2008/06/eclipise-memory-analyzer-mat/</link>
		<comments>http://littlesquare.com/2008/06/eclipise-memory-analyzer-mat/#comments</comments>
		<pubDate>Sun, 29 Jun 2008 00:10:26 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[citations]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2008/06/28/eclipise-memory-analyzer-mat/</guid>
		<description><![CDATA[I must say the Eclipse Memory Analyzer looks pretty slick. There is some pretty good material over on the developers blog. Lastly, there was a talk on it at JavaOne 2008 titled &#8216;Automated Heap Dump Analysis for Developers, Testers, and Support Employees&#8216; (multimedia recording). The Eclipse Memory Analyzer is a fast and feature-rich Java heap [...]]]></description>
			<content:encoded><![CDATA[<p>I must say the <a href="http://www.eclipse.org/mat/">Eclipse Memory Analyzer</a> looks pretty slick. There is some pretty good material over on the <a href="http://dev.eclipse.org/blogs/memoryanalyzer/">developers blog</a>. Lastly, there was a talk on it at JavaOne 2008 titled &#8216;<em>Automated Heap Dump Analysis for Developers, Testers, and Support Employees</em>&#8216; (<a href="http://developers.sun.com/learning/javaoneonline/j1sessn.jsp?sessn=TS-5729&amp;yr=2008&amp;track=tools">multimedia recording</a>).</p>
<blockquote>
<p>The Eclipse Memory Analyzer is a fast and feature-rich Java heap analyzer that helps you find memory leaks and reduce memory consumption.</p>
<p>The Memory Analyzer was developed to analyze productive heap dumps with hundreds of millions of objects. Once the heap dump is parsed, you can re-open it instantly, immediately get the retained size of single objects and quickly approximate the retained size of a set of objects. The reference chain to the Garbage Collection Roots then details why the object is not garbage collected.</p>
<p>Using these features, a report automatically extracts leak suspects. It includes details about the objects accumulated, the path to the GC Roots, plus general information like system properties.</p>
</blockquote>
<p>The tool was actually contributed by SAP and is currently an incubation project over at Eclipse. It&#8217;s available as both an <em>eclipse feature</em> and a standalone <em><strong>eclipse RCP</strong></em> application.</p>
<p>Kudos to the team for taking the time to provide a standalone package!</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2008/06/eclipise-memory-analyzer-mat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>caBIG Annual Meeting &#8211; A developers perspective</title>
		<link>http://littlesquare.com/2008/06/cabig-annual-meeting-a-developers-perspective/</link>
		<comments>http://littlesquare.com/2008/06/cabig-annual-meeting-a-developers-perspective/#comments</comments>
		<pubDate>Tue, 24 Jun 2008 20:35:49 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2008/06/24/cabig-annual-meeting-a-developers-perspective/</guid>
		<description><![CDATA[For the past couple of days I&#8217;ve been attending the caBIG Annual Meeting (it&#8217;s the 5th such meeting and by all accounts the most well attended). About caBIG caBIG™ stands for the cancer Biomedical Informatics Grid™. caBIG™ is an information network enabling all constituencies in the cancer community – researchers, physicians, and patients – to [...]]]></description>
			<content:encoded><![CDATA[<p>For the past couple of days I&#8217;ve been attending the <a href="https://cabig.nci.nih.gov/overview/">caBIG</a> Annual Meeting (<em>it&#8217;s the 5th such meeting and by all accounts the most well attended</em>).</p>
<p><strong>About caBIG</strong></p>
<blockquote>
<p><strong><span style="font-weight: normal;"><em>caBIG™ stands for the cancer Biomedical Informatics Grid™. caBIG™ is an information network enabling all constituencies in the cancer community – researchers, physicians, and patients – to share data and knowledge. The components of caBIG™ are widely applicable beyond cancer as well.</em></span></strong></p>
<p><strong><span style="font-style: italic; font-weight: normal;">The mission of caBIG™ is to develop a truly collaborative information network that accelerates the discovery of new approaches for the detection, diagnosis, treatment, and prevention of cancer, ultimately improving patient outcomes.<br /></span></strong></p>
</blockquote>
<p><strong><span style="font-weight: normal;">In a nutshell, <em>caBIG</em> is an initiative of the <em>National Cancer Institute</em> built heavily upon open-source components that aims to motivate and facilitate the sharing of data. It strongly suggests a front-loaded UML workflow (<em>using MDA</em>) and incorporates certain aspects of ontologies and common data definitions to help guarantee consistent semantics (<em>and syntax</em>).</span></strong></p>
<p><strong><span style="font-weight: normal;">From a purely technical perspective, I&#8217;ve never been sold on the idea of MDA. I&#8217;ve had experience with both open-source and commercial modeling tools that have never fulfilled on the promise of true round-tripping (<em>and if you don&#8217;t have round-tripping&#8230; well, you&#8217;re in for a world of hurt</em>). Now in the <em>caBIG</em> case, there is a pipeline of transformations that you&#8217;re more or less required to run through&#8230;</span></strong></p>
<ol>
<li><strong><span style="font-weight: normal;">Create a UML representation of your object and domain models</span></strong></li>
<li><strong><span style="font-weight: normal;">Annotate the model with caBIG specific annotations and stereotypes</span></strong></li>
<li><strong><span style="font-weight: normal;">Run the annotated model through the <em>Semantic Integration Workbench</em> (<em>another caBIG tool</em>)</span></strong></li>
<li><strong><span style="font-weight: normal;">Submit the final model (<em>XMI</em>) to caBIG for approval and insertion into the caDSR (<em>cancer data standards repository</em>)</span></strong></li>
</ol>
<p><strong><span style="font-weight: normal;">Make a change in the future and you&#8217;re more or less required to run through steps #1-4 again.</span></strong></p>
<p><strong><span style="font-weight: normal;">Once you have a validated UML model, you can then run through the <em>caCORE SDK</em> and generate skeleton code for a 3-tiered application consisting of (<em>at a high level</em>) a Hibernate data model, an external API and some middleware code to glue the API and data model together. <em>Round-tripping is essentially non-existent from what I&#8217;ve heard and seen.</em></span></strong></p>
<p><strong><span style="font-weight: normal;"><strong>You&#8217;re done! Congratulations on achieving Silver-level compliance.</strong></span></strong></p>
<p><strong>&#8230;</strong></p>
<p><strong><em><span style="font-weight: normal;">wait a second.</span></em></strong></p>
<p><strong><span style="font-weight: normal;">It&#8217;s a little bit too process heavy for my liking. I would have liked to see the</span> <em><span style="font-weight: normal;">NIH/caBIG</span></em> <span style="font-weight: normal;">be first and foremost focused on data interoperability and</span></strong> less on tools, particularly those that <strong>dictate particular workflow</strong><strong>s</strong> (<em>like UML -&gt; annotation -&gt; MDA -&gt; Code Generation</em>).</p>
<p>I&#8217;d much rather see an extensible API with pluggable end-points, a meta data registration service and a suite of validation test cases. Define suitable goals and keep it simple. <em>Provide suitable incentives and vendors <strong>will</strong> support it</em>.</p>
<p>There&#8217;s more than one way to provide interoperability.</p>
<p>As a developer working on existing products that are considering support for <em>caBIG</em>, the requirement to fundamentally change my development process is a bit unnerving. Speaking generally, there&#8217;s no guarantee that everyone has UML models for their systems and even if they did, attempting to do full MDA transformations on them would be fairly ambitious.</p>
<p>That&#8217;s it for now. It&#8217;s been an interesting conference and I&#8217;ve learned a lot about the various initiatives and their progress. Off to visit customers in Cincinnati tomorrow!</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2008/06/cabig-annual-meeting-a-developers-perspective/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Do You OpenGrok?</title>
		<link>http://littlesquare.com/2008/04/do-you-opengrok/</link>
		<comments>http://littlesquare.com/2008/04/do-you-opengrok/#comments</comments>
		<pubDate>Sat, 19 Apr 2008 02:14:43 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2008/04/18/do-you-opengrok/</guid>
		<description><![CDATA[Today was our first hack day of 2008. I&#8217;ve been helping coordinate these events for the past year and a half and they&#8217;ve proven to be a solid source of inspiration and motivation for all participants. Unfortunately for me, today was more or less a day of false starts. Like always, I had a number [...]]]></description>
			<content:encoded><![CDATA[<p>Today was our first <a href="http://www.theglobeandmail.com/servlet/story/RTGAM.20070719.wgthackday19/BNStory/Technology/home">hack day</a> of 2008. I&#8217;ve been helping coordinate these events for the past year and a half and they&#8217;ve proven to be a solid source of inspiration and motivation for all participants.</p>
<p>Unfortunately for me, today was more or less a day of false starts. Like always, I had a number of ideas but quickly realized most of them were too much work or simply not interesting enough to devote time to. I was contemplating playing around with GWT or Android but couldn&#8217;t think of an interesting enough problem to warrant the effort setting up the development environment. I just couldn&#8217;t bring myself to install Eclipse.</p>
<p>On the Eclipse front, it&#8217;s a constant struggle. I think the community support it gets is great but wish other IDEs would get the same love (<span style="font-style: italic;">obviously it&#8217;s a matter of user demand</span>). I&#8217;m an IntelliJ fan and find its lack of serious plugins for many of the popular open-source frameworks a bit disappointing. It&#8217;s Groovy support is top notch, things are definitely lacking when it comes to other popular frameworks (<span style="font-style: italic;">like Seam which has JBoss Tools for Eclipse but not much for IntelliJ</span>).</p>
<p>I&#8217;ll leave the topic of Maven artifacts for another day. Needless to say that some of the more popular frameworks and libraries are starting to come around to it.</p>
<p>The day was not a complete loss and I did manage to make progress on a couple of things. The first involved some UI work that could eventually replace our current excel-based way of doing expenses. I&#8217;ve been seeing more and more references to <a href="http://extjs.com/">Ext JS</a> and wanted to check it out. I mocked up a bit of a GUI using some of their components but didn&#8217;t get much farther than that. I was quite impressed with their <a href="http://extjs.com/deploy/dev/examples/">examples</a> (<a href="http://extjs.com/deploy/dev/examples/feed-viewer/view.html">Feed Viewer</a> and <a href="http://extjs.com/deploy/dev/examples/desktop/desktop.html">Web Desktop</a>). If you&#8217;re a web developer, I&#8217;d be interesting in hearing your thoughts on the library. I don&#8217;t do a lot of web-centric development but I have played a bit with <a href="http://www.prototypejs.org/">Prototype</a>, <a href="http://jquery.com/">JQuery</a> and <a href="http://mochikit.com/">Mochikit</a> previously in conjunction with Rails and Django.</p>
<p>The more interesting thing I played around with today was <a href="http://opensolaris.org/os/project/opengrok/">OpenGrok</a>.</p>
<blockquote>
<p>OpenGrok is a fast and usable source code search and cross reference engine. It helps you search, cross-reference and navigate your source tree. It can understand various program file formats and version control histories like Mercurial, SCCS, RCS, CVS, Subversion, Teamware and Bazaar. In other words it lets you grok (profoundly understand) the open source, hence the name OpenGrok. It is written in Java.</p>
<p>OpenGrok is the tool used for the OpenSolaris source browser and search.</p>
</blockquote>
<p>It&#8217;s actually pretty cool. I installed on to a Ubuntu 7.10 virtual machine without too many problems. There are a few gotchas (<span style="font-style: italic;">documented and undocumented</span>) when it came to indexing our source code (<span style="font-style: italic;">from subversion</span>) but in the end it worked pretty well. OpenGrok uses <a href="http://lucene.apache.org/">Lucene</a> behind the scenes and provides a nice simplistic web application for searching and navigating the source code (<span style="font-style: italic;">there are also command-line and Swing interfaces</span>).</p>
<p>Performance was very good. Indexing a checkout consisting of ~1.1G (lots of libraries and test data) didn&#8217;t take much longer than a couple minutes. Indexing the 11,000 change sets from subversion only added about a minute. <span style="font-style: italic;">This is on a VM w/ 512M on a MacBook Pro</span>. Searches are instantaneous.</p>
<p>I haven&#8217;t played around with too many other source code x-referencers so I&#8217;m not sure I fully understand it&#8217;s potential or how it compares to it&#8217;s commercial and OSS competitors. That being said, I love the speed and if the OpenSolaris guys are using it, it can&#8217;t be that bad right?</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2008/04/do-you-opengrok/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>JDBCSpy &#8211; What&#8217;s been happening.</title>
		<link>http://littlesquare.com/2008/03/jdbcspy-whats-been-happening/</link>
		<comments>http://littlesquare.com/2008/03/jdbcspy-whats-been-happening/#comments</comments>
		<pubDate>Sat, 15 Mar 2008 08:30:50 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2008/03/15/jdbcspy-whats-been-happening/</guid>
		<description><![CDATA[So I&#8217;ve been working off and on over the past 6 months on a little side project, JDBCSpy. I&#8217;ve mentioned it previously so this post is just a little update. It&#8217;s far from my day job and really just serves as a bit of an outlet. You&#8217;re free to argue about whether it&#8217;s a creative [...]]]></description>
			<content:encoded><![CDATA[<p>So I&#8217;ve been working off and on over the past 6 months on a little side project, <a href="http://code.google.com/p/jordens-jdbcspy/">JDBCSpy</a>. I&#8217;ve mentioned it previously so this post is just a little update.</p>
<p>It&#8217;s far from my day job and really just serves as a bit of an outlet. You&#8217;re free to argue about whether it&#8217;s a creative outlet or not <img src='http://littlesquare.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  The project stemmed from code written during one of hack days and has grown organically from there.</p>
<p>Essentially the goals of the project are as follows:</p>
<ul>
<li>
    <strong>Provide an interface to easily gather statistics from a JDBC connection.</strong> Currently this is accomplishable in two ways.</p>
<ul>
<li>The delegating JDBC driver will write all executing queries to a log file alongside some basic statistical information (ie. <span style="font-style: italic;">how long it spent executing</span>).</li>
<li>More interestingly, the delegating JDBC driver also registers an MBean that exposes a slightly more comprehensive set of statistics (ie. <span style="font-style: italic;">how much time has been spent executing sql, # of queries executed, etc.</span>)</li>
<li>There&#8217;s also an example implementation of a TestNG listener that will track JDBC statistics on a per-test method basis.</li>
</ul>
</li>
<li>
    <strong>Provide a means of visualizing the gathered statistics.</strong></p>
<ul>
<li><strong><span style="font-weight: normal;">There is a JDBCSpy Viewer under development. It has the ability to connect real-time to the JDBCSpy MBean and visualize activity. It can also reply a previously logged session by loading the JDBCSpy log file. It makes use of a bunch of the Orson and JFreeChart work so things don&#8217;t look half bad.</span></strong></li>
</ul>
</li>
</ul>
<p>I&#8217;ve been using Maven for all build activities which satisfies one of the non-functional objectives.</p>
<p>If pressed, I&#8217;d say things are available in a beta-quality form. The code isn&#8217;t perfect nor particularly tuned. Most of the <span style="font-style: italic;">(recent)</span> time I&#8217;ve spent on the project has been focused towards GUI refactoring. There&#8217;s plenty of more work to do on the JDBC driver side but it&#8217;s more or less taken a back seat right now. Part of the reason for this lies in the fact that there&#8217;s a few other projects that do something similar for JDBC logging.</p>
<p>Click <a href="http://jordens-jdbcspy.googlecode.com/files/JDBCSpy-LogReplay.png">here</a> for a screenshot of the current viewer.</p>
<p>I&#8217;ll probably be adding some basic Groovy support <span style="font-style: italic;">(to enable user-defined filtering)</span> to the viewer in the next commit or two. More or less just for kicks but it would also provide an opportunity to play a bit more with the language.</p>
<p>Cheers.</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2008/03/jdbcspy-whats-been-happening/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Google of One : Yes and No</title>
		<link>http://littlesquare.com/2008/02/a-google-of-one-yes-and-no/</link>
		<comments>http://littlesquare.com/2008/02/a-google-of-one-yes-and-no/#comments</comments>
		<pubDate>Tue, 26 Feb 2008 08:28:47 +0000</pubDate>
		<dc:creator>ajordens</dc:creator>
				<category><![CDATA[General Discussions]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://littlesquare.com/2008/02/26/a-google-of-one-yes-and-no/</guid>
		<description><![CDATA[A Google of One It&#8217;s just another phase in the continued commoditization of infrastructure. It started a decade or two ago with the OS and has been followed in quick succession by the web and J2EE stacks. While not free, cloud computing offerings by the likes of Amazon.com have definitely opened the realm of possibility [...]]]></description>
			<content:encoded><![CDATA[<blockquote>
<p><a href="http://www.programmersparadox.com/2008/02/20/a-google-of-one/">A Google of One</a></p>
</blockquote>
<p>It&#8217;s just another phase in the continued commoditization of infrastructure. It started a decade or two ago with the OS and has been followed in quick succession by the web and J2EE stacks.</p>
<p>While not free, cloud computing offerings by the likes of Amazon.com have definitely opened the realm of possibility to the average developer.</p>
<p><span style="font-style: italic;">Hadoop</span> is just the next logical procession in all of this, an implementation of something Google pioneered and has been running for 4 or 5 years now. Continued <a href="http://www.techcrunch.com/2008/02/20/yahoo-search-wants-to-be-more-like-google-embraces-hadoop/">contributions</a> to the project from Yahoo! (<span style="font-style: italic;">assuming they continue to open-source the majority of their improvements</span>) and others can only strengthen it&#8217;s appeal.</p>
<p>In the case of Google, they&#8217;ve been very successful because of what they&#8217;ve been able to build on top of their infrastructure. They have long realized the importance of well architected distributed systems and their developers see those benefits today. As developers, it&#8217;s amazing how simple things are when you&#8217;re able to think about them serially. Google and Yahoo! understand that, <span style="font-style: italic;">so should we</span>.</p>
<blockquote>
<p style="font: 12.0px Helvetica"><span style="font-style: italic;">The resources that used to be precious are now freely available. So then what becomes the bottleneck? What becomes the skill that is valued?</span></p>
<p style="font: 12.0px Helvetica; min-height: 14.0px"></p>
<p style="font: 12.0px Helvetica"><span style="font-style: italic;"><span style="text-decoration: underline;">Two things:</span></span></p>
<p style="font: 12.0px Helvetica"><span style="font-style: italic;">* <strong>Implementation</strong>. The ability to leverage all the pieces together effectively.</span></p>
<p style="font: 12.0px Helvetica"><span style="font-style: italic;">* <strong>Business Acumen</strong>. By this, I mean having a smart business plan. If you are going to pull this off, you are going to need to cover the cost of using the cloud computing and the initial servers. Yet if you can come up with a way to make enough money off of each individual using the service, it could potentially be self sustaining. Google and Yahoo could even help you compete against them by supplying you with revenue from ads.</span></p>
</blockquote>
<p>I&#8217;ll add <span style="font-style: italic;"><strong>Availability of useful and interesting data</strong></span> to this list. You can have all the processing power in the world but if it&#8217;s not directed towards solving interesting problems, you&#8217;ll have a very small audience.</p>
]]></content:encoded>
			<wfw:commentRss>http://littlesquare.com/2008/02/a-google-of-one-yes-and-no/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

