<?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>BlackBox &#187; Programming</title>
	<atom:link href="http://www.warneronstine.com/category/programming/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.warneronstine.com</link>
	<description>Where technology and art disappear</description>
	<lastBuildDate>Wed, 17 Nov 2010 10:52:31 +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>Gorm-couchdb grails plugin release 0.3</title>
		<link>http://www.warneronstine.com/2009/11/16/gorm-couchdb-grails-plugin-release-0-3/</link>
		<comments>http://www.warneronstine.com/2009/11/16/gorm-couchdb-grails-plugin-release-0-3/#comments</comments>
		<pubDate>Mon, 16 Nov 2009 22:16:50 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[gorm]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.warneronstine.com/?p=518</guid>
		<description><![CDATA[We actually released this to the Grails plugin repository last week but haven&#8217;t had time to blog about this release. There&#8217;s a lot of good stuff in this release, some bug fixes and some new features. Before we dive into the new features there is a short how-to on the wiki. To install the plugin [...]]]></description>
			<content:encoded><![CDATA[<p>We actually released this to the Grails plugin repository last week but haven&#8217;t had time to blog about this release. There&#8217;s a lot of good stuff in this release, some bug fixes and some new features.</p>
<p>Before we dive into the new features there is a short <a href="http://wiki.github.com/coryhacking/gorm-couchdb/how-to-use-gorm-couchdb">how-to</a> on the <a href="http://wiki.github.com/coryhacking/gorm-couchdb/">wiki</a>. To install the plugin you can just do a
<pre><code>grails install-plugin gorm-couchdb</code></pre>
<p> or download from the Grails Web site.</p>
<h2>New Features</h2>
<p>Domain objects now assume that there is a design document with the same name as the <code>@CouchEntity</code> type:</p>
<pre><code>
@CouchEntity
Customer {
    ...
 }
</code></pre>
<p>This will then map to a design document named <em>customer</em>. So a call to <code>Customer.queryView("byName")</code> is the same as <code>Customer.queryView("customer/byName")</code>.</p>
<p>Added <code>count()</code> and <code>list()</code> methods that call the <strong>count</strong> and <strong>list</strong> view of the domain design document. You can optionally specify the view as the first parameter, e.g. <code>Customer.list("byName")</code>.  Also, both methods take the options parameter, so default scaffolding code like the following works:</p>
<pre><code>
def list = {
    params.max = Math.min(params.max ? params.max.toInteger() : 10, 100)
    [tripInstanceList: Trip.list(params), tripInstanceTotal: Trip.count()]
}
</code></pre>
<p>Added dynamic finders support for <code>list</code>, <code>find</code>, and <code>count</code> methods that take the view name from the method.  Instead of calling <code>Customers.list("byName")</code> you can now call <code>Customers.listByName()</code>.  The <code>list</code> and <code>count</code> methods only accept options as parameters, for example <code>Customers.listByName(params)</code>. The dynamic finder methods assume that the keys are passed first and that the last parameter of type Map contains any options, e.g., <code>Customers.findByName("John Smith", "John Doe", params)</code> will query the <em>customers/byName</em> view for keys that equal &#8220;John Smith&#8221; or &#8220;John Doe&#8221;.</p>
<p>The methods <code>findByView()</code> and <code>findByViewAndKeys()</code> were renamed to <code>queryByView()</code> and <code>queryByViewAndKeys()</code> to avoid any potential conflicts.</p>
<p>Added a &#8220;typeFieldName&#8221; parameter to the <code>@CouchEntity</code> annotation that specifies the name of the type field stored in the JSON document (and CouchDB database).</p>
<p>Added automatic type conversion on <strong>list</strong>, <strong>find</strong>, and <strong>query</strong> results if the name is the same as a field of the domain model.  A field like <code>lastUpdated</code> will get returned as a Date object instead of a string that you would have to convert.</p>
<p>Added support for <code>@Transient</code> annotation on transient fields.  This is in addition to the already present GORM &#8220;transient&#8221; support.  This also works on &#8220;read-only&#8221; fields, i.e., bean properties with a getter but no setter.</p>
<p>The plugin now uses <a href="http://code.google.com/p/jcouchdb/">jcouchdb&#8217;s</a> svenson library for JSON generation and parsing.  This gives us a slight performance boost, but more importantly, keeps us inline with future jcouchdb changes and enhancements.</p>
<p>Added a <code>toJSON()</code> method to domain objects that returns a JSON version of the domain object.  Note that this could be very different from the one returned by Groovy&#8217;s JSON as id becomes _id and version becomes _rev along with other changes.</p>
<h2>Bug Fixes</h2>
<ul>
<li>Now correctly read attachment&#8217;s metadata</li>
<li>Now remove the automatically injected <strong>id</strong> and <strong>version</strong> properties, and rewrite the <code>toString()</code> method to use the right fields</li>
<li>Now allow spaces in <strong>id</strong> values for bulk operations</li>
<li>Can now store unicode data in any field (including <strong>id</strong> fields)</li>
</ul>
<h2>What&#8217;s next?</h2>
<p>Right now we think we have a fairly stable plugin that we have started using in actual projects and will be improving this as we run into any issues. For me, the first thing will probably be compound key support, where something like <code>project_myProjectName</code> as the id value of my document instead of a generated value. Above and beyond that, handling object relationships is pretty high up there &#8211; we&#8217;re just trying to figure out the best way to do it.</p>
<p>Our main repository is on <a href="http://github.com/coryhacking/gorm-couchdb">Cory&#8217;s Github</a> since he&#8217;s been doing most of the work at this point and I&#8217;ve shifted into more of a project management role.</p>
<p>For bugs, please submit any issues to the bug tracker on <a href="http://github.com/coryhacking/gorm-couchdb/issues">Github</a>. New feature and release planning will be on <a href="http://www.pivotaltracker.com/projects/31715">PivotalTracker</a>. We haven&#8217;t setup a separate mailing list, but both of us are on the Grails user and dev lists. If you would like to become more involved, contact <a href="http://github.com/coryhacking">either</a> of <a href="http://github.com/warnero">us</a> through the Github system. </p>
<p>Finally, if you are developing a different NoSql Grails plugin we want to talk to you. We want to see if we can coordinate our efforts and if there&#8217;s any common ground we can agree on so that we aren&#8217;t all reinventing the wheel.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;title=Gorm-couchdb%20grails%20plugin%20release%200.3&amp;bodytext=We%20actually%20released%20this%20to%20the%20Grails%20plugin%20repository%20last%20week%20but%20haven%27t%20had%20time%20to%20blog%20about%20this%20release.%20There%27s%20a%20lot%20of%20good%20stuff%20in%20this%20release%2C%20some%20bug%20fixes%20and%20some%20new%20features.%0D%0A%0D%0ABefore%20we%20dive%20into%20the%20new%20features%20there%20is%20a" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;title=Gorm-couchdb%20grails%20plugin%20release%200.3" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;title=Gorm-couchdb%20grails%20plugin%20release%200.3&amp;notes=We%20actually%20released%20this%20to%20the%20Grails%20plugin%20repository%20last%20week%20but%20haven%27t%20had%20time%20to%20blog%20about%20this%20release.%20There%27s%20a%20lot%20of%20good%20stuff%20in%20this%20release%2C%20some%20bug%20fixes%20and%20some%20new%20features.%0D%0A%0D%0ABefore%20we%20dive%20into%20the%20new%20features%20there%20is%20a" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Gorm-couchdb%20grails%20plugin%20release%200.3%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;t=Gorm-couchdb%20grails%20plugin%20release%200.3" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;title=Gorm-couchdb%20grails%20plugin%20release%200.3&amp;annotation=We%20actually%20released%20this%20to%20the%20Grails%20plugin%20repository%20last%20week%20but%20haven%27t%20had%20time%20to%20blog%20about%20this%20release.%20There%27s%20a%20lot%20of%20good%20stuff%20in%20this%20release%2C%20some%20bug%20fixes%20and%20some%20new%20features.%0D%0A%0D%0ABefore%20we%20dive%20into%20the%20new%20features%20there%20is%20a" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F11%2F16%2Fgorm-couchdb-grails-plugin-release-0-3%2F&amp;title=Gorm-couchdb%20grails%20plugin%20release%200.3" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2009/11/16/gorm-couchdb-grails-plugin-release-0-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>6 signs your Web UI was created by a programmer</title>
		<link>http://www.warneronstine.com/2009/10/22/6-signs-your-web-ui-was-created-by-a-programmer/</link>
		<comments>http://www.warneronstine.com/2009/10/22/6-signs-your-web-ui-was-created-by-a-programmer/#comments</comments>
		<pubDate>Thu, 22 Oct 2009 14:00:47 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[not_a_designer]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[web2.0]]></category>

		<guid isPermaLink="false">http://www.warneronstine.com/?p=385</guid>
		<description><![CDATA[This post was inspired by &#8220;The 7 signs your UI was created by a programmer&#8221; post on Voyce.com. Your Web UI consists solely of CRUD (Create, Read, Update, Delete) screens &#8211; no matter how complex the user interaction is, it can always be boiled down to CRUD. Right? Everything is in Times New Roman &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>This post was inspired by &#8220;<a id="aptureLink_HlT5d0Bu6h" href="http://www.voyce.com/index.php/2009/09/14/the-7-signs-your-ui-was-created-by-a-programmer/">The 7 signs your UI was created by a programmer</a>&#8221; post on <a href="http://www.voyce.com">Voyce.com</a>.</p>
<ol>
<li>Your Web UI consists solely of CRUD (Create, Read, Update, Delete) screens &#8211; no matter how complex the user interaction is, it can always be boiled down to CRUD. Right?</li>
<li>Everything is in Times New Roman &#8211; who needs a nice-looking font anyway?</li>
<li>Everything is using the latest JavaScript library with UI functionality &#8211; what do you mean not everyone is running the latest FireFox beta?</li>
<li>It uses tables for layout. Everywhere. Because <a id="aptureLink_drCDeCTalt" href="http://www.google.com/search?client=safari&amp;rls=en&amp;q=debugging+CSS&amp;ie=UTF-8&amp;oe=UTF-8">CSS sucks to debug</a> (on top of that, &#8220;Screw the <a id="aptureLink_pRBuJeMoZL" href="http://semanticweb.org">Semantic Web</a>!&#8221;).</li>
<li>The form fields validate, they just don&#8217;t have any errors next to them when they fail &#8211; because the user should <strong>know</strong> what they did wrong.</li>
<li>And forms themselves <a id="aptureLink_MRGtqLpc5u" href="http://37signals.com/svn/posts/1867-design-decisions-new-signup-form">go on and on and on</a> &#8230;</li>
</ol>
<p>I could only come up with 6, but I&#8217;m sure there are many more. Add your favorites in the comments below!</p>
<p>I&#8217;m also hoping to turn this into a somewhat regular series on Web Developers and tips and tricks for designing usable, non-ugly interfaces. If you have any tips, let me know in the comments and I&#8217;ll be sure to credit you.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;title=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer&amp;bodytext=This%20post%20was%20inspired%20by%20%22The%207%20signs%20your%20UI%20was%20created%20by%20a%20programmer%22%20post%20on%20Voyce.com.%0D%0A%0D%0A%09Your%20Web%20UI%20consists%20solely%20of%20CRUD%20%28Create%2C%20Read%2C%20Update%2C%20Delete%29%20screens%20-%20no%20matter%20how%20complex%20the%20user%20interaction%20is%2C%20it%20can%20always%20be%20boiled%20dow" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;title=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;title=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer&amp;notes=This%20post%20was%20inspired%20by%20%22The%207%20signs%20your%20UI%20was%20created%20by%20a%20programmer%22%20post%20on%20Voyce.com.%0D%0A%0D%0A%09Your%20Web%20UI%20consists%20solely%20of%20CRUD%20%28Create%2C%20Read%2C%20Update%2C%20Delete%29%20screens%20-%20no%20matter%20how%20complex%20the%20user%20interaction%20is%2C%20it%20can%20always%20be%20boiled%20dow" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;t=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;title=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer&amp;annotation=This%20post%20was%20inspired%20by%20%22The%207%20signs%20your%20UI%20was%20created%20by%20a%20programmer%22%20post%20on%20Voyce.com.%0D%0A%0D%0A%09Your%20Web%20UI%20consists%20solely%20of%20CRUD%20%28Create%2C%20Read%2C%20Update%2C%20Delete%29%20screens%20-%20no%20matter%20how%20complex%20the%20user%20interaction%20is%2C%20it%20can%20always%20be%20boiled%20dow" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F22%2F6-signs-your-web-ui-was-created-by-a-programmer%2F&amp;title=6%20signs%20your%20Web%20UI%20was%20created%20by%20a%20programmer" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2009/10/22/6-signs-your-web-ui-was-created-by-a-programmer/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Here comes gorm-couchdb plugin for grails</title>
		<link>http://www.warneronstine.com/2009/10/21/here-comes-gorm-couchdb-plugin-for-grails/</link>
		<comments>http://www.warneronstine.com/2009/10/21/here-comes-gorm-couchdb-plugin-for-grails/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 19:17:30 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[gorm]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://www.warneronstine.com/?p=394</guid>
		<description><![CDATA[Well, crazy or not I actually (somehow) convinced someone to help me out. And boy did he help! I got some of the basics going and then Cory took off with them. He&#8217;s put a lot into this plugin and for that I wanted to publicly thank him. Now, onto the nitty-gritty. This is an [...]]]></description>
			<content:encoded><![CDATA[<p>Well, crazy or not I actually (somehow) convinced <a href="http://twitter.com/coryhacking">someone</a> to help me out. And boy did he help! I got some of the basics going and then Cory took off with them. He&#8217;s put a lot into this plugin and for that I wanted to publicly thank him.</p>
<p>Now, onto the nitty-gritty. This is an alpha <a href="http://wiki.github.com/coryhacking/gorm-couchdb/release-notes">release</a>, so it&#8217;s still missing some features (mainly object inheritance and any kind of relational mapping right now). Basically what you can do is to create an object and save it in a CouchDB database. We have some configuration options and some other cool things that you can try out like loading/reloading of views in your database.</p>
<p>Here are some of the basics of what you can do with the gorm-couchdb plugin</p>
<ul>
<li>Save a class as a CouchDB document</li>
<li>Specify the type of document you want to save (special field in the database)</li>
<li>Save attachments with a document</li>
<li>Specify a custom id an version field to use for your class/document</li>
<li>Load and reload .js views directly into your database when they change</li>
</ul>
<p>There is a short <a href="http://wiki.github.com/coryhacking/gorm-couchdb/how-to-use-gorm-couchdb">how-to</a> on the <a href="http://wiki.github.com/coryhacking/gorm-couchdb/">wiki</a>. To install it you can just do a
<pre><code>grails install-plugin gorm-couchdb</code></pre>
<p> or download from the Grails Web site.</p>
<p>We&#8217;ve switched the main repo over to <a href="http://github.com/coryhacking/gorm-couchdb">Cory&#8217;s</a> since he&#8217;s been doing most of the work at this point and I&#8217;ve shifted into more of a project management role. I&#8217;ll get to down to some more development of features I really want (like composite keys) in the near future.</p>
<p>For bugs, please use the one on <a href="http://github.com/coryhacking/gorm-couchdb/issues">Github</a>, we will be doing all of our release planning over on <a href="http://www.pivotaltracker.com/projects/31715">PivotalTracker</a>. We haven&#8217;t setup a separate mailing list but both of us are on the grails user and dev lists. If you would like to become more involved contact <a href="http://github.com/coryhacking">either</a> of <a href="http://github.com/warnero">us</a> through the Github system. </p>
<p>Finally, if you are developing a different NoSql grails plugin we want to talk to you. Primarily we want to see if we can coordinate our efforts and if there&#8217;s any common ground we can agree on so that we aren&#8217;t all reinventing the wheel.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;title=Here%20comes%20gorm-couchdb%20plugin%20for%20grails&amp;bodytext=Well%2C%20crazy%20or%20not%20I%20actually%20%28somehow%29%20convinced%20someone%20to%20help%20me%20out.%20And%20boy%20did%20he%20help%21%20I%20got%20some%20of%20the%20basics%20going%20and%20then%20Cory%20took%20off%20with%20them.%20He%27s%20put%20a%20lot%20into%20this%20plugin%20and%20for%20that%20I%20wanted%20to%20publicly%20thank%20him.%0D%0A%0D%0ANow%2C%20onto%20" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;title=Here%20comes%20gorm-couchdb%20plugin%20for%20grails" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;title=Here%20comes%20gorm-couchdb%20plugin%20for%20grails&amp;notes=Well%2C%20crazy%20or%20not%20I%20actually%20%28somehow%29%20convinced%20someone%20to%20help%20me%20out.%20And%20boy%20did%20he%20help%21%20I%20got%20some%20of%20the%20basics%20going%20and%20then%20Cory%20took%20off%20with%20them.%20He%27s%20put%20a%20lot%20into%20this%20plugin%20and%20for%20that%20I%20wanted%20to%20publicly%20thank%20him.%0D%0A%0D%0ANow%2C%20onto%20" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Here%20comes%20gorm-couchdb%20plugin%20for%20grails%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;t=Here%20comes%20gorm-couchdb%20plugin%20for%20grails" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;title=Here%20comes%20gorm-couchdb%20plugin%20for%20grails&amp;annotation=Well%2C%20crazy%20or%20not%20I%20actually%20%28somehow%29%20convinced%20someone%20to%20help%20me%20out.%20And%20boy%20did%20he%20help%21%20I%20got%20some%20of%20the%20basics%20going%20and%20then%20Cory%20took%20off%20with%20them.%20He%27s%20put%20a%20lot%20into%20this%20plugin%20and%20for%20that%20I%20wanted%20to%20publicly%20thank%20him.%0D%0A%0D%0ANow%2C%20onto%20" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F10%2F21%2Fhere-comes-gorm-couchdb-plugin-for-grails%2F&amp;title=Here%20comes%20gorm-couchdb%20plugin%20for%20grails" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2009/10/21/here-comes-gorm-couchdb-plugin-for-grails/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Crazy? Working on CouchDB Grails OR plugin</title>
		<link>http://www.warneronstine.com/2009/09/16/crazy-working-on-couchdb-grails-or-plugin/</link>
		<comments>http://www.warneronstine.com/2009/09/16/crazy-working-on-couchdb-grails-or-plugin/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 23:09:27 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[couchdb]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://www.warneronstine.com/2009/09/16/crazy-working-on-couchdb-grails-or-plugin/</guid>
		<description><![CDATA[Not sure if I&#8217;m crazy or not but after getting an initial setup with jcouchdb I am getting tired of manually mapping my class fields with the Couch fields so I&#8217;m starting to work on a gorm-couchdb plugin. Pouring over Grails code (and the gorm-jpa plugin code). Chime in if you&#8217;re interested in helping as [...]]]></description>
			<content:encoded><![CDATA[<p>Not sure if I&#8217;m crazy or not but after getting an initial setup with jcouchdb I am getting tired of manually mapping my class fields with the Couch fields so I&#8217;m starting to work on a gorm-couchdb plugin.</p>
<p>Pouring over Grails code (and the gorm-jpa plugin code). Chime in if you&#8217;re interested in helping as this is secondary to what I want to get done. I&#8217;ll throw some code up to github soon (maybe tomorrow with an early, early version).</p>
<p style="font-size: 10px;">  <a href="http://posterous.com">Posted via web</a>   from <a href="http://blackboxpost.posterous.com/crazy-working-on-couchdb-grails-or-plugin">BlackBox Post</a>  </p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;title=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin&amp;bodytext=Not%20sure%20if%20I%27m%20crazy%20or%20not%20but%20after%20getting%20an%20initial%20setup%20with%20jcouchdb%20I%20am%20getting%20tired%20of%20manually%20mapping%20my%20class%20fields%20with%20the%20Couch%20fields%20so%20I%27m%20starting%20to%20work%20on%20a%20gorm-couchdb%20plugin.%20%20Pouring%20over%20Grails%20code%20%28and%20the%20gorm-jpa%20p" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;title=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;title=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin&amp;notes=Not%20sure%20if%20I%27m%20crazy%20or%20not%20but%20after%20getting%20an%20initial%20setup%20with%20jcouchdb%20I%20am%20getting%20tired%20of%20manually%20mapping%20my%20class%20fields%20with%20the%20Couch%20fields%20so%20I%27m%20starting%20to%20work%20on%20a%20gorm-couchdb%20plugin.%20%20Pouring%20over%20Grails%20code%20%28and%20the%20gorm-jpa%20p" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;t=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;title=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin&amp;annotation=Not%20sure%20if%20I%27m%20crazy%20or%20not%20but%20after%20getting%20an%20initial%20setup%20with%20jcouchdb%20I%20am%20getting%20tired%20of%20manually%20mapping%20my%20class%20fields%20with%20the%20Couch%20fields%20so%20I%27m%20starting%20to%20work%20on%20a%20gorm-couchdb%20plugin.%20%20Pouring%20over%20Grails%20code%20%28and%20the%20gorm-jpa%20p" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2009%2F09%2F16%2Fcrazy-working-on-couchdb-grails-or-plugin%2F&amp;title=Crazy%3F%20Working%20on%20CouchDB%20Grails%20OR%20plugin" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2009/09/16/crazy-working-on-couchdb-grails-or-plugin/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Git, Mercurial, or Bazaar?</title>
		<link>http://www.warneronstine.com/2008/07/07/git-mercurial-or-bazaar/</link>
		<comments>http://www.warneronstine.com/2008/07/07/git-mercurial-or-bazaar/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 14:20:00 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[bazaar]]></category>
		<category><![CDATA[dvcs]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[mercurial]]></category>
		<category><![CDATA[scm]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[The other big change I’m considering is actually moving away from Subversion. I’ve really enjoyed using it, but a recent discussion on the Groovy Dev list about Distributed Version Control Systems (DVCS) has got me looking at alternatives and why it would be good. I asked my friend Kate if she had any blog posts [...]]]></description>
			<content:encoded><![CDATA[<p>The other big change I’m considering is actually moving away from Subversion. I’ve really enjoyed using it, but a <a href="http://www.nabble.com/should-we-use-bazaar--td18132610.html">recent discussion</a> on the Groovy Dev list about Distributed Version Control Systems (DVCS) has got me looking at alternatives and why it would be good. I asked my friend <a href="http://weblog.masukomi.org">Kate</a> if she had any blog posts on why switching to a dvcs is a good idea and she whipped one up <a href="http://weblog.masukomi.org/2008/06/27/why-you-should-use-a-distributed-version-control-system">for me</a>.</p>
<p>After reading through it I think I’m sold, but now I’m trying to figure out which one to try out first. <a href="http://git.or.cz/">Git</a> honestly looks like the clear winner here in a number of respects:</p>
<ul>
<li>Serious mindshare amongst the OSS projects</li>
<li>Has a great community committed to pushing the project forward (as Kate <a href="http://weblog.masukomi.org/2008/02/04/some-thoughts-about-git">suggests</a> )</li>
<li>Has some really good functionality (even if it is a bit obtuse to get to understand)</li>
<li>Looks like the beginnings of some plugins
<ul>
<li><a href="http://git.or.cz/gitwiki/EclipsePlugin">Eclipse</a></li>
</ul>
</li>
</ul>
<p>But it also has some (current) drawbacks:</p>
<ul>
<li>Tools are really only available on Linux &#8211; Mac looks like its coming but could be a pain in the ass to build, forget Windows right now
<ul>
<li>No IDEA plugin yet (bummer) &#8211; but it does look like IDEA 8 will <a href="http://www.jetbrains.net/confluence/display/IDEADEV/IDEA+8.0+Technology+Roadmap">support it</a></li>
<li>No NetBeans plugin</li>
</ul>
</li>
<li>It’s a bit obtuse to learn &#8211; the commands are not necessarily the easiest to understand but they do have a <a href="http://git.or.cz/course/svn.html">Subversion -&gt; Git</a> guide online</li>
</ul>
<p>So, I think I will try Git first, maybe. What about the other two &#8211; <a href="http://bazaar-vcs.org/">Bazaar</a> and <a href="http://www.selenic.com/mercurial">Mercurial</a>? Bazaar honestly looks like 3rd place contender right now, but it does have some interesting tools available to it. Let’s look at Mercurial next.</p>
<ul>
<li>There are some pre-built packages for OS X and Windows &#8211; nice</li>
<li>Again, looks like the beginnings of some plugins
<ul>
<li><a href="http://www.vectrace.com/mercurialeclipse/">Eclipse</a></li>
<li><a href="http://code.google.com/p/mercurialidea/">IDEA</a></li>
<li><a href="http://wiki.netbeans.org/MercurialVersionControl">NetBeans</a></li>
</ul>
</li>
</ul>
<p>Some current drawbacks</p>
<ul>
<li>Doesn’t seem to have the same mindshare as Git does (this is my perception not necessarily true)</li>
</ul>
<p>Now onto Bazaar.</p>
<ul>
<li>Binaries available for multiple platforms &#8211; OS X, Windows, and Linux</li>
<li><a href="https://launchpad.net/pqm">Patch Queue Manager</a> &#8211; very interesting tool</li>
<li><a href="http://code.aaronbentley.com/bundlebuggy/">Bundle Buggy</a> &#8211; another interesting tool</li>
<li>There are again plugins available
<ul>
<li><a href="http://bazaar-vcs.org/BzrEclipse">Eclipse</a></li>
<li><a href="https://launchpad.net/bzr4idea">IDEA</a></li>
</ul>
</li>
</ul>
<p>Of course after I started this I found this much more <a href="http://www.infoq.com/articles/dvcs-guide">in-depth review</a> of the different systems over at InfoQ.</p>
<p>I think after reading a ton more on this (and the InfoQ article) that I’m going to give Mercurial a short first and see how it goes. Kate makes two more points at the end of this blog post on <a href="http://weblog.masukomi.org/2008/02/07/a-rebuttal-to-use-mercurial-you-git">Mercurial vs. Git</a> (which itself was a response to another blog post) &#8211; If you need Windows support or documentation are important items then Mercurial may be a better choice. For me, while I don’t need Windows support, it will be nice to understand what I’m trying to do first.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;title=Git%2C%20Mercurial%2C%20or%20Bazaar%3F&amp;bodytext=The%20other%20big%20change%20I%E2%80%99m%20considering%20is%20actually%20moving%20away%20from%20Subversion.%20I%E2%80%99ve%20really%20enjoyed%20using%20it%2C%20but%20a%20recent%20discussion%20on%20the%20Groovy%20Dev%20list%20about%20Distributed%20Version%20Control%20Systems%20%28DVCS%29%20has%20got%20me%20looking%20at%20alternatives%20and%20why" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;title=Git%2C%20Mercurial%2C%20or%20Bazaar%3F" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;title=Git%2C%20Mercurial%2C%20or%20Bazaar%3F&amp;notes=The%20other%20big%20change%20I%E2%80%99m%20considering%20is%20actually%20moving%20away%20from%20Subversion.%20I%E2%80%99ve%20really%20enjoyed%20using%20it%2C%20but%20a%20recent%20discussion%20on%20the%20Groovy%20Dev%20list%20about%20Distributed%20Version%20Control%20Systems%20%28DVCS%29%20has%20got%20me%20looking%20at%20alternatives%20and%20why" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Git%2C%20Mercurial%2C%20or%20Bazaar%3F%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;t=Git%2C%20Mercurial%2C%20or%20Bazaar%3F" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;title=Git%2C%20Mercurial%2C%20or%20Bazaar%3F&amp;annotation=The%20other%20big%20change%20I%E2%80%99m%20considering%20is%20actually%20moving%20away%20from%20Subversion.%20I%E2%80%99ve%20really%20enjoyed%20using%20it%2C%20but%20a%20recent%20discussion%20on%20the%20Groovy%20Dev%20list%20about%20Distributed%20Version%20Control%20Systems%20%28DVCS%29%20has%20got%20me%20looking%20at%20alternatives%20and%20why" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F07%2Fgit-mercurial-or-bazaar%2F&amp;title=Git%2C%20Mercurial%2C%20or%20Bazaar%3F" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/07/07/git-mercurial-or-bazaar/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Is Maven going away?</title>
		<link>http://www.warneronstine.com/2008/07/06/is-maven-going-away/</link>
		<comments>http://www.warneronstine.com/2008/07/06/is-maven-going-away/#comments</comments>
		<pubDate>Sun, 06 Jul 2008 13:49:33 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[polyglot]]></category>
		<category><![CDATA[scala]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[First, let me say, I like Maven &#8211; a lot. I’ve liked the idea, if not the execution, since 1.0 (yes, I know there is some serious bad blood for the implementation of 1.0, and yes I still liked it). But I’ve recently run into some irritating problems with Maven that would again, I think, [...]]]></description>
			<content:encoded><![CDATA[<p>First, let me say, I like <a href="http://maven.apache.org">Maven</a> &#8211; a lot. I’ve liked the idea, if not the execution, since 1.0 (yes, I know there is some serious bad blood for the implementation of 1.0, and yes I still liked it). But I’ve recently run into some irritating problems with Maven that would again, I think, require a major reworking of what it does.</p>
<p>Here is the main issue Maven is designed to handle one language only for its compilation &#8211; primarily Java. This is rapidly starting to fall apart now that the JVM has some serious contenders besides Java, namely <a href="http://groovy.apache.org">Groovy</a>, <a href="http://jruby.codehaus.org/">JRuby</a>, <a href="http://www.jython.org/">Jython</a>, and <a href="http://www.scala-lang.org/">Scala</a>. There are some hackish things for getting Maven to deal with these, however it still only has one “true” source directory for compilation. A case in point is a mixed Java/Groovy project &#8211; trying to get <a href="http://www.jetbrains.com/idea/">IntelliJ</a> to respect the fact that I want not one, but two main source directories is a pain in the ass as I have to either tell it not to sync everytime I launch or I have to refix the source directories each time I update the project.</p>
<p>This is what triggered this post &#8211; what happens when I want to do some <a href="http://labs.adobe.com/technologies/flex/">Flex</a> programming with some Java, ActionScript and MXML, all of these are true source files (and in Maven specfic directories). I’m sure some Mavenite is going to say that these should be separate projects, but in alot of cases they aren’t and it doesn’t make sense to actually separate them into sub-projects. And I’m equally as sure that some Ant-ite is going to come along and tell me to use <a href="http://ant.apache.org/">Ant</a> &#8211; I won’t. Ant is stuck in the past and I won’t use it unless I absolutely have to. I like the “imposed” structure that Maven offers. I can walk up to any project and know where  to find stuff instead of blindly hunting around for hours trying to piece it together like some giant source-code jigsaw puzzle, blech.</p>
<p>So, I’m at cross-roads, what should I do? There is <a href="http://ant.apache.org/ivy/">Ivy</a> (for dependency management -which they got from Maven natch), but that requires Ant, blech. There’s also <a href="http://gant.codehaus.org/">Gant</a>, ok, this is better, but still Ant. <a href="http://groovy.codehaus.org/GMaven">GMaven</a>, but I’m right back where I started.</p>
<p>Enter, <a href="http://www.gradle.org/">Gradle</a>, a new Groovy-based build system that offers alot of the benefits of Maven without locking you in and the flexibility of Ant. I’m not 100% sold on it yet, but I’m going to give it a shot for a relatively complex project that will have a fair amount of Java, Groovy and other fun resource files. It looks interesting in that all the build files are actually Groovy scripts that are a DSL (like Gant files). Here’s a short example with some dependencies (taken directly from their examples in the download).</p>
<pre><code>import org.gradle.api.tasks.util.FileSet

usePlugin('groovy')

group = 'org.gradle'
version = '1.0'

sourceCompatibility = 1.5
targetCompatibility = 1.5

dependencies {
   clientModule(['groovy'], ":groovy-all:1.6-beta-1") {
       dependency(":commons-cli:1.0")
   }
   compile project(':groovycDetector')
   testCompile ":junit:4.4"
}

compile {
   exclude('**/Exclude.java')
   groovyExclude('**/ExcludeGroovy.groovy')
   groovyJavaExclude('**/ExcludeGroovyJava.java')
}

manifest.mainAttributes(myprop: 'myvalue')
metaInf &lt;&lt; new FileSet(new File(srcRoot, 'metaInfFiles'))

test.options.systemProperties['org.gradle.integtest.buildDir'] = buildDir.absolutePath
</code></pre>
<p>I will try and keep everyone up to date as I continue to investigate this new build system. They also state that they are going to be supporting polyglot programming in the near future which I’m looking forward to.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;title=Is%20Maven%20going%20away%3F&amp;bodytext=First%2C%20let%20me%20say%2C%20I%20like%20Maven%20-%20a%20lot.%20I%E2%80%99ve%20liked%20the%20idea%2C%20if%20not%20the%20execution%2C%20since%201.0%20%28yes%2C%20I%20know%20there%20is%20some%20serious%20bad%20blood%20for%20the%20implementation%20of%201.0%2C%20and%20yes%20I%20still%20liked%20it%29.%20But%20I%E2%80%99ve%20recently%20run%20into%20some%20irritating%20proble" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;title=Is%20Maven%20going%20away%3F" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;title=Is%20Maven%20going%20away%3F&amp;notes=First%2C%20let%20me%20say%2C%20I%20like%20Maven%20-%20a%20lot.%20I%E2%80%99ve%20liked%20the%20idea%2C%20if%20not%20the%20execution%2C%20since%201.0%20%28yes%2C%20I%20know%20there%20is%20some%20serious%20bad%20blood%20for%20the%20implementation%20of%201.0%2C%20and%20yes%20I%20still%20liked%20it%29.%20But%20I%E2%80%99ve%20recently%20run%20into%20some%20irritating%20proble" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Is%20Maven%20going%20away%3F%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;t=Is%20Maven%20going%20away%3F" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;title=Is%20Maven%20going%20away%3F&amp;annotation=First%2C%20let%20me%20say%2C%20I%20like%20Maven%20-%20a%20lot.%20I%E2%80%99ve%20liked%20the%20idea%2C%20if%20not%20the%20execution%2C%20since%201.0%20%28yes%2C%20I%20know%20there%20is%20some%20serious%20bad%20blood%20for%20the%20implementation%20of%201.0%2C%20and%20yes%20I%20still%20liked%20it%29.%20But%20I%E2%80%99ve%20recently%20run%20into%20some%20irritating%20proble" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F07%2F06%2Fis-maven-going-away%2F&amp;title=Is%20Maven%20going%20away%3F" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/07/06/is-maven-going-away/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Flex vs. OpenLaszlo</title>
		<link>http://www.warneronstine.com/2008/05/14/flex-vs-openlaszlo/</link>
		<comments>http://www.warneronstine.com/2008/05/14/flex-vs-openlaszlo/#comments</comments>
		<pubDate>Wed, 14 May 2008 12:56:40 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[laszlo]]></category>
		<category><![CDATA[ria]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Last night I presented part 2 of a 2-part series looking at Flex and OpenLaszlo at the Tucson JUG. Here are my final thoughts on the two (given a brief introduction to each): Both are good platforms for RIA I really like the fact that you can compile Flex apps in either XML or in [...]]]></description>
			<content:encoded><![CDATA[<p>Last night I presented part 2 of a 2-part series looking at Flex and OpenLaszlo at the <a href="http://www.tucson-jug.org">Tucson JUG</a>. Here are my final thoughts on the two (given a brief introduction to each):</p>
<ul>
<li>Both are good platforms for RIA</li>
<li>I really like the fact that you can compile Flex apps in either XML or in ActionScript</li>
<li>I like OpenLaszlo’s xpath notation for connecting to XML datasources</li>
<li>I feel that Flex has really gained the mind-share of the Open-Source community. I found many more tools available to me in Flex-land than in OpenLaszlo
<ul>
<li>See <a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS">BlazeDS</a>, <a href="http://www.graniteds.org/">GraniteDS</a> for some excellent Open-Source data and messaging providers for Flex</li>
<li><a href="http://www.israfil.net/projects/mojo/maven-flex2-plugin/">Maven</a> and Ant(included with the Flex SDK) tools for Flex</li>
<li>Unfortunately the Eclipse plugin for OpenLaszlo appears to be gone, gone, gone.</li>
<li>Both have Unit testing frameworks available &#8211; <a href="http://asunit.org/">ASUnit</a>, <a href="http://code.google.com/p/as3flexunitlib/">FlexUnit</a>, and <a href="http://wiki.openlaszlo.org/Test_Infrastructure">LzUnit</a></li>
</ul>
</li>
<li>I like the fact that OpenLaszlo supports additional run-times through the new “legals” initiative (DHTML and others are in the pipeline through a partnership with Sun)</li>
<li>I couldn’t find an easy way to setup a project for OpenLaszlo through Ant or Maven. I’m sure they exist but nothing turned up in a cursory search
<ul>
<li>I take it back, I finally found <a href="http://wiki.openlaszlo.org/LZProject#Useful_ANT_build_targets">this</a> on the OpenLaszlo wiki for ant tasks included with the source. But not packaged up all nice and clean like the ones for Flex. Blech.</li>
</ul>
</li>
<li>I also like how easy it is to create and modify components for Laszlo. I don’t know how easy it is to do this in Flex.</li>
<li>The docs for OpenLaszlo are somewhat scattered and some are sorely out of date. Several examples on their own site didn’t work at all with 4.0.12</li>
</ul>
<p>Overall I think I will be focusing my future efforts on Flex/ActionScript 3.0 and unfortunately leaving Laszlo behind. I have been a fan of it for quite a while but I don’t think it has kept up at all with Flex and is starting to lose mind-share amongst the Open-Source community.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;title=Flex%20vs.%20OpenLaszlo&amp;bodytext=Last%20night%20I%20presented%20part%202%20of%20a%202-part%20series%20looking%20at%20Flex%20and%20OpenLaszlo%20at%20the%20Tucson%20JUG.%20Here%20are%20my%20final%20thoughts%20on%20the%20two%20%28given%20a%20brief%20introduction%20to%20each%29%3A%0D%0A%0D%0A%09Both%20are%20good%20platforms%20for%20RIA%0D%0A%09I%20really%20like%20the%20fact%20that%20you%20can%20c" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;title=Flex%20vs.%20OpenLaszlo" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;title=Flex%20vs.%20OpenLaszlo&amp;notes=Last%20night%20I%20presented%20part%202%20of%20a%202-part%20series%20looking%20at%20Flex%20and%20OpenLaszlo%20at%20the%20Tucson%20JUG.%20Here%20are%20my%20final%20thoughts%20on%20the%20two%20%28given%20a%20brief%20introduction%20to%20each%29%3A%0D%0A%0D%0A%09Both%20are%20good%20platforms%20for%20RIA%0D%0A%09I%20really%20like%20the%20fact%20that%20you%20can%20c" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Flex%20vs.%20OpenLaszlo%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;t=Flex%20vs.%20OpenLaszlo" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;title=Flex%20vs.%20OpenLaszlo&amp;annotation=Last%20night%20I%20presented%20part%202%20of%20a%202-part%20series%20looking%20at%20Flex%20and%20OpenLaszlo%20at%20the%20Tucson%20JUG.%20Here%20are%20my%20final%20thoughts%20on%20the%20two%20%28given%20a%20brief%20introduction%20to%20each%29%3A%0D%0A%0D%0A%09Both%20are%20good%20platforms%20for%20RIA%0D%0A%09I%20really%20like%20the%20fact%20that%20you%20can%20c" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F14%2Fflex-vs-openlaszlo%2F&amp;title=Flex%20vs.%20OpenLaszlo" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/05/14/flex-vs-openlaszlo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Optimizing Tapestry 4 for development</title>
		<link>http://www.warneronstine.com/2008/05/02/optimizing-tapestry-4-for-development/</link>
		<comments>http://www.warneronstine.com/2008/05/02/optimizing-tapestry-4-for-development/#comments</comments>
		<pubDate>Fri, 02 May 2008 15:45:47 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[tapestry]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Periodically I will do small consulting gigs and recently had a client who wanted to know if there was a way that they could improve their development experience with Tapestry 4. Their specific problem lied in the fact that when they initially pulled up any Tapestry page it was incredibly slow to render that first [...]]]></description>
			<content:encoded><![CDATA[<p>Periodically I will do small consulting gigs and recently had a client who wanted to know if there was a way that they could improve their development experience with Tapestry 4. Their specific problem lied in the fact that when they initially pulled up any Tapestry page it was incredibly slow to render that first time. They were not using the property <a href="http://tapestry.apache.org/tapestry4.1/usersguide/configuration.html"><code>org.apache.tapestry.disable-caching</code></a> so that definitely wasn’t the issue.</p>
<p>The solutions that I came up with after doing some research and looking at their code were these:</p>
<ul>
<li>Use Jetty for development</li>
<li>Convert as much of their pages (and components) to be “spec-less” as possible</li>
</ul>
<p>Two primary reasons to use Jetty are that it allows you to more easily reload HTML changes and in general is a much more lightweight container than Tomcat, therefore getting an overall faster startup time and increasing development time. One of their own developers was already using Jetty and was seeing speed increases.</p>
<p>The primary reason to convert your HTML pages to be ”<a href="http://wiki.apache.org/tapestry/SpeclessPagesInWEB-INF">spec-less</a>” (in other words no *.page file to bother with) is that reduces the overhead that Tapestry 4 puts into place to parse the XML file and figure out how all the components are wired together. Instead it puts this in either the HTML template, which it is already parsing, or in the Java class as an Annotation.</p>
<p>This also has the side benefit of prepping your code for converting up to Tapestry 5 as it uses no *.page files whatsoever.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;title=Optimizing%20Tapestry%204%20for%20development&amp;bodytext=Periodically%20I%20will%20do%20small%20consulting%20gigs%20and%20recently%20had%20a%20client%20who%20wanted%20to%20know%20if%20there%20was%20a%20way%20that%20they%20could%20improve%20their%20development%20experience%20with%20Tapestry%204.%20Their%20specific%20problem%20lied%20in%20the%20fact%20that%20when%20they%20initially%20pulled" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;title=Optimizing%20Tapestry%204%20for%20development" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;title=Optimizing%20Tapestry%204%20for%20development&amp;notes=Periodically%20I%20will%20do%20small%20consulting%20gigs%20and%20recently%20had%20a%20client%20who%20wanted%20to%20know%20if%20there%20was%20a%20way%20that%20they%20could%20improve%20their%20development%20experience%20with%20Tapestry%204.%20Their%20specific%20problem%20lied%20in%20the%20fact%20that%20when%20they%20initially%20pulled" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Optimizing%20Tapestry%204%20for%20development%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;t=Optimizing%20Tapestry%204%20for%20development" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;title=Optimizing%20Tapestry%204%20for%20development&amp;annotation=Periodically%20I%20will%20do%20small%20consulting%20gigs%20and%20recently%20had%20a%20client%20who%20wanted%20to%20know%20if%20there%20was%20a%20way%20that%20they%20could%20improve%20their%20development%20experience%20with%20Tapestry%204.%20Their%20specific%20problem%20lied%20in%20the%20fact%20that%20when%20they%20initially%20pulled" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F05%2F02%2Foptimizing-tapestry-4-for-development%2F&amp;title=Optimizing%20Tapestry%204%20for%20development" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/05/02/optimizing-tapestry-4-for-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Groovy DSL roundup</title>
		<link>http://www.warneronstine.com/2008/04/24/groovy-dsl-roundup/</link>
		<comments>http://www.warneronstine.com/2008/04/24/groovy-dsl-roundup/#comments</comments>
		<pubDate>Thu, 24 Apr 2008 15:50:00 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[dsl]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[This is my first attempt at categorizing some of the DSLs I’ve run across into some kind of logical grouping. First I’ll list out some Groovy DSL examples (sound off in the comments for those I’m not aware of, the more the better). I’ll go through the DSLs first and then look at the possible [...]]]></description>
			<content:encoded><![CDATA[<p>This is my first attempt at categorizing some of the DSLs I’ve run across into some kind of logical grouping. First I’ll list out some Groovy DSL examples (sound off in the comments for those I’m not aware of, the more the better). I’ll go through the DSLs first and then look at the possible categories after the break. And the first two are mine that I created</p>
<ul>
<li><a href="http://www.warneronstine.com/blog/articles/2007/04/27/my-groovy-hom-take-2">Groovy Higher Order Messaging (HOM)</a></li>
<li>Math DSL <a href="http://www.warneronstine.com/blog/articles/2007/11/23/math-dsl-beginning">Part 1</a> and <a href="http://www.warneronstine.com/blog/articles/2007/11/26/math-dsl-part-deux-elementary-row-operations-eros">Part 2</a></li>
<li><a href="http://groovy.codehaus.org/GroovyLab">GroovyLab</a></li>
<li><a href="http://json-lib.sourceforge.net/groovy.html">Json-lib with Groovy</a></li>
<li><a href="http://grails.org/doc/1.0.x/guide/14.%20Grails%20and%20Spring.html#14.3%20Runtime%20Spring%20with%20the%20Beans%20DSL">Grails’ Spring Bean DSL</a></li>
<li><a href="http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.4.1%20Dynamic%20Finders">Grails’ Dynamic Finders</a></li>
<li><a href="http://grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.4.2%20Criteria">Grails’ Criteria DSL</a></li>
<li><a href="http://grails.org/Validation+Reference">Grails’ Domain Class Validation DSL</a></li>
<li><a href="http://jparsec.codehaus.org/Groovy+Parser">JParsec’s Groovy interface</a></li>
<li><a href="http://glaforge.free.fr/weblog/index.php?itemid=233">Guillaume’s Unit Manipulation DSL</a></li>
<li><a href="http://docs.codehaus.org/display/GROOVY/Using+Ant+from+Groovy">AntBuilder</a> (as well as XMLBuilder, SwingBuilder, etc. &#8211; builders, essentially)</li>
<li><a href="http://kenbarclay.blogspot.com/">Ken Barclay’s GParsec</a></li>
<li>Human readable date manipulation such as in <a href="http://glaforge.free.fr/weblog/index.php?itemid=187">Guillaume’s example</a></li>
<li><a href="http://tiago.org/ps/2008/02/25/dsl-tactics-in-groovy-1many/">Tiago Antão’s Malaria Drug DSL</a></li>
<li><a href="http://codeforfun.wordpress.com/2007/04/09/gspec-for-java-bdd/">GSpec Behavior Driven Development</a></li>
</ul>
<p>I know there are more out there but this is a good starting point for sure.</p>
<p>Now, on to the actual categories of DSL “types”</p>
<p>I have been paying attention to Martin Fowler’s new <a href="http://www.martinfowler.com/dslwip/">DSL book</a> in which he specifies several types of Internal DSLs. I’m not 100% on board with all of these yet, but here they are (of course these may change as this is a work in progress, so if he changes them it isn’t my fault <img src='http://www.warneronstine.com/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> ):</p>
<ul>
<li><a href="http://www.martinfowler.com/dslwip/ExpressionBuilder.html">Expression Builder</a>: A layer that provides a fluent interface over a regular API</li>
<li><a href="http://www.martinfowler.com/dslwip/FunctionSequence.html">Function Sequence</a>: A combination of function calls as a sequence of statements.</li>
<li><a href="http://www.martinfowler.com/dslwip/NestedFunction.html">Nested Function</a>: Compose functions by nesting function calls as arguments of of other calls.</li>
<li><a href="http://www.martinfowler.com/dslwip/MethodChaining.html">Method Chaining</a>: Make modifier methods return the host object so that multiple modifiers can be invoked in a single expression.</li>
<li><a href="http://www.martinfowler.com/dslwip/ObjectScoping.html">Object Scoping</a>: Put DSL code in a subclass of a class that provdes the DSL vocabulary.</li>
<li><a href="http://www.martinfowler.com/dslwip/Closure.html">Closure</a>:
<ul>
<li><a href="http://www.martinfowler.com/dslwip/NestedClosure.html">Nested Closure</a>: Express statement sub-elements of a function call by putting them into a closure in an argument.</li>
</ul>
</li>
<li><a href="http://www.martinfowler.com/dslwip/LiteralCollection.html">Literal Collection Expression</a>: Form language expressions using literal collection syntax</li>
<li>Dynamic Reception: Handle messages without defining them in the code</li>
<li>Annotation: Data about program elements, such as classes and methods, which can be processed during compilation or execution.</li>
<li>Macro: Define DSL expressions as macro definitions</li>
<li>Parse Tree Manipulation: Capture the parse tree of a code fragment to manipulate it with DSL processing code.</li>
</ul>
<p>Ok, so these are the basic categories as Martin has defined them. How do these map up to the tools and techniques we have in Groovy?</p>
<ul>
<li>Method/Property Missing &#8211; a special method that is called when a method can not be found allowing a developer to intercept the call
<ul>
<li>Maps to Dynamic Reception fairly well</li>
</ul>
</li>
<li>Categories &#8211; allows new methods to be added to any class at runtime
<ul>
<li>Could fit into Object Scoping or maybe a new one, Duck Typing? &#8211; not sure</li>
</ul>
</li>
<li>ExpandoMetaClass &#8211; a dynamically expandable bean
<ul>
<li>Again Dynamic Reception</li>
</ul>
</li>
<li>Closures/Nested Closures
<ul>
<li>Closures/Nested Closures</li>
</ul>
</li>
<li>Relaxed rules on the use of parentheses
<ul>
<li>Hmm, not sure where this would fit</li>
</ul>
</li>
<li>Built-in list and map syntax
<ul>
<li>I believe this is Literal Collection Expression</li>
</ul>
</li>
<li>Ability to dynamically add methods to an interface and have concrete classes also have the methods
<ul>
<li>Again, this sounds like Dynamic Reception</li>
</ul>
</li>
<li>Operator overloading
<ul>
<li>Hmm, again I’m not sure where this fits</li>
</ul>
</li>
<li>Annotations
<ul>
<li>Annotation</li>
</ul>
</li>
</ul>
<p>First up we have our builders (AntBuilder, XMLBuilder, Criteria Builder, etc.) these essentially mimic some other existing structure (an Ant build file, XML file, or SQL syntax). What patterns do these use? Just off the top of my head I think I see:</p>
<ul>
<li>Expression Builder</li>
<li>Nested Closures</li>
<li>Dynamic Reception</li>
<li>Literal Collection Expression</li>
</ul>
<p>JSON-lib’s Groovy interface has the following:</p>
<ul>
<li>Literal Collection Expression</li>
<li>Dynamic Reception</li>
<li>Operator Overloading (<code>as</code>)</li>
</ul>
<p>My Groovy Higher Order Messaging DSL has:</p>
<ul>
<li>Dynamic Reception</li>
<li>Nested Closures</li>
</ul>
<p>My Groovy Math DSL has:</p>
<ul>
<li>Dynamic Reception</li>
<li>Nested Closures (or possibly what would be considered Function Sequence in some cases, even though they aren’t functions but it might fit)</li>
<li>Operator Overloading</li>
</ul>
<p>GroovyLab has:</p>
<ul>
<li>Expression Builder</li>
<li>Probably has more just don’t have time to dig into the code &#8211; I’m just looking at the quick examples)</li>
<li>Operator Overloading</li>
</ul>
<p>Guillaume’s Unit Manipulation DSL has:</p>
<ul>
<li>Expression Builder</li>
<li>Dynamic Reception</li>
<li>Closure/Nested Closure</li>
<li>Operator Overloading</li>
</ul>
<p>Ken Barclay’s GParsec has:</p>
<ul>
<li>Dynamic Reception</li>
<li>Parse Tree Manipulation? (not sure if this qualifies for this or not)</li>
</ul>
<p>GroovyRestlet DSL has:</p>
<ul>
<li>Literal Collection Expression</li>
<li>Closure/Nested Closure</li>
<li>Function Sequence</li>
</ul>
<p>GSpec has:</p>
<ul>
<li>Closure/Nested Closure</li>
<li>Function Sequence</li>
<li>Dynamic Reception</li>
</ul>
<p>Grails’ Domain Class Validation DSL has:</p>
<ul>
<li>Literal Colleciton Expression</li>
<li>Closure</li>
<li>Macros?</li>
</ul>
<p>Tiago Antão’s Malaria Drug DSL has:</p>
<ul>
<li>Object Scoping</li>
<li>Dynamic Reception</li>
</ul>
<p>Human readable date modification has:</p>
<ul>
<li>Object Scoping</li>
<li>Operator Overloading</li>
</ul>
<p>Now, one of the big things that I think Fowler is missing here (and one that you can see several DSLs take advantage of) is Operator Overloading/Overriding. This, I think, is a key technique in DSLs and one that can make a DSL go from good to great. It’s all about letting the user think in the context they are in &#8211; be it math matrices, sql queries, file and string manipulation (overriding the <code>&lt;&lt;</code> or <code>&gt;&gt;</code> operators). It’s all about the user’s context and making it easy for them to “think” in their domain and not have to worry about the language implementation (I use it quite heavily in my Math DSL to implement matrix operators for example).</p>
<p>I know I didn’t hit on all the DSLs I mentioned, but will try and come up with a wiki or something that people can contribute back to. In the mean time sound off in the comments if you have a DSL that I didn’t mention, or you feel my categorization is wrong (and why). I’m also curious if there are examples of some of the ones I didn’t touch on such as Annotations. This is an initial stab at this and as I said earlier I’m not 100% on board with how Fowler has organized things but I think it’s a good start.</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;title=Groovy%20DSL%20roundup&amp;bodytext=This%20is%20my%20first%20attempt%20at%20categorizing%20some%20of%20the%20DSLs%20I%E2%80%99ve%20run%20across%20into%20some%20kind%20of%20logical%20grouping.%20First%20I%E2%80%99ll%20list%20out%20some%20Groovy%20DSL%20examples%20%28sound%20off%20in%20the%20comments%20for%20those%20I%E2%80%99m%20not%20aware%20of%2C%20the%20more%20the%20better%29.%20I%E2%80%99ll%20go%20th" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;title=Groovy%20DSL%20roundup" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;title=Groovy%20DSL%20roundup&amp;notes=This%20is%20my%20first%20attempt%20at%20categorizing%20some%20of%20the%20DSLs%20I%E2%80%99ve%20run%20across%20into%20some%20kind%20of%20logical%20grouping.%20First%20I%E2%80%99ll%20list%20out%20some%20Groovy%20DSL%20examples%20%28sound%20off%20in%20the%20comments%20for%20those%20I%E2%80%99m%20not%20aware%20of%2C%20the%20more%20the%20better%29.%20I%E2%80%99ll%20go%20th" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Groovy%20DSL%20roundup%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;t=Groovy%20DSL%20roundup" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;title=Groovy%20DSL%20roundup&amp;annotation=This%20is%20my%20first%20attempt%20at%20categorizing%20some%20of%20the%20DSLs%20I%E2%80%99ve%20run%20across%20into%20some%20kind%20of%20logical%20grouping.%20First%20I%E2%80%99ll%20list%20out%20some%20Groovy%20DSL%20examples%20%28sound%20off%20in%20the%20comments%20for%20those%20I%E2%80%99m%20not%20aware%20of%2C%20the%20more%20the%20better%29.%20I%E2%80%99ll%20go%20th" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F04%2F24%2Fgroovy-dsl-roundup%2F&amp;title=Groovy%20DSL%20roundup" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/04/24/groovy-dsl-roundup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Portal/Portlet work continues</title>
		<link>http://www.warneronstine.com/2008/03/29/portal-portlet-work-continues/</link>
		<comments>http://www.warneronstine.com/2008/03/29/portal-portlet-work-continues/#comments</comments>
		<pubDate>Sat, 29 Mar 2008 14:32:00 +0000</pubDate>
		<dc:creator>Warner Onstine</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[portal]]></category>
		<category><![CDATA[tapestry]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[So I thought I’d update everyone on my progress so far with the Portal/Portlet component I’ve been working on, as well as some of the issues I’ve run into. Normally I would have posted this to my Tapestry 101 blog but I’m going to try and consolidate my blogs together and I’m extremely tired of [...]]]></description>
			<content:encoded><![CDATA[<p>So I thought I’d update everyone on my progress so far with the Portal/Portlet component I’ve been working on, as well as some of the issues I’ve run into.</p>
<p>Normally I would have posted this to my <a href="http://jroller.com/warneronstine/">Tapestry 101</a> blog but I’m going to try and consolidate my blogs together and I’m extremely tired of JRoller’s broken Textile formatting, such a pain in the ass (I have fallen in love with Markdown and code markup, it rocks!). I’ll be crossposting this, but soon I will stop updating the JRoller blog.</p>
<p>I now have a basic implementation of the Portal component complete and it consists of the following classes:</p>
<ul>
<li>Portal.java &#8211; Stores a TreeSet of columns</li>
<li>Portal.html &#8211; Adds in the portlet controls div and some custom CSS stuff (which I’ll talk about shortly)</li>
<li>PortalColumn &#8211; Stores a TreeSet of Portlets plus some configuration for viewing (width and background color)</li>
<li>Portlet &#8211; Stores the Portlet title, content and it’s location</li>
<li>portal/scripts/
<ul>
<li>Portal.script &#8211; includes all the JavaScript files and does some dynamic stuff (coming up shortly)</li>
<li>prototype/scriptaculous scripts</li>
<li>portal_hooks.js &#8211; the hooks for the portal actions (close, move, etc.)</li>
<li>portal.js &#8211; the actual JavaScript for the portal functionality that can be called by the portal_hooks.js file</li>
</ul>
</li>
<li>portal/css &#8211; portal.css</li>
<li>portal/images &#8211; all the images for the portal controls and rendering (rounded corners)</li>
</ul>
<p>Ok, so that’s the basics here are some of the specifics.</p>
<h2>Portal.script</h2>
<pre><code>&lt;input-symbol key="columns" required="yes" /&gt;
&lt;initialization&gt;
 function init() {
 portal = new Xilinus.Portal("#portal div", {onOverWidget: onOverWidget, onOutWidget: onOutWidget, onChange: onChange, onUpdate: onUpdate, removeEffect: Effect.SwitchOff});
   &lt;foreach key="column" expression="columns"&gt;
    &lt;foreach key="portlet" expression="column.portlets"&gt;
    portal.add(new Xilinus.Widget().setTitle('${portlet.title}').setContent('${portlet.content}'), ${column.index});
    &lt;/foreach&gt;
   &lt;/foreach&gt;
   // Add controls buttons
   portal.addWidgetControls("control_buttons");
 }
 Event.observe(window, "load", init);
&lt;/initialization&gt;
</code></pre>
<p>What I’m doing here is creating a new Portal (from Xilinus) and then I’m looping through each column and then each portlet inside of the column to add it’s content.</p>
<p>I dive into the hackish parts after the break.</p>
<h2>Portal.html</h2>
<p>This part contains some of the CSS hackish-ness I was hoping to avoid.</p>
<pre><code>&lt;span jwcid="@Script" script="Portal.script" columns="ognl:columns"/&gt;
&lt;div id="portal"&gt;
&lt;div jwcid="@For" value="ognl:column" source="ognl:columns"&gt;

    &lt;div jwcid="@Any" id="ognl:'widget_col_' + column.index" /&gt;
&lt;/div&gt;
&lt;/div&gt;
</code></pre>
<p>This first part just adds in the <code>Portal.script</code> and then declares the html <code>div</code> element we want to use (this element is used throughout the CSS and JavaScript files. The next piece loops over the <code>TreeSet</code> of columns and outputs one specially-named <code>div</code> for each column.</p>
<div id="control_buttons" style="display:none;float:left;"><a id="edit_button" href="#"></a><br />
<a id="delete_button" onclick="removeWidget(this); return false;" href="#"></a></p>
<div id="toggle"><a id="min_button" onclick="minimizeWidget(this);" href="#"><img src="ognl:minimizeButton" border="0" alt="Collapse Portlet" /></a></div>
</div>
<p>This just creates the HTML for the portlet controls (don’t know how customizable I’m going to make this yet).</p>
<p>Now comes the hack.</p>
<pre><code>&lt;style type="text/css"&gt;
&lt;span jwcid="@For" value="ognl:column" source="ognl:columns" renderTag="false"&gt;
#widget_col_&lt;span jwcid="@Insert" value="ognl:column.index"/&gt; {
  float:left;
  width: &lt;span jwcid="@Insert" value="ognl:column.width"/&gt;;
  background:&lt;span jwcid="@Insert" value="ognl:column.backgroundColor"/&gt;;
}
&lt;/span&gt;
#edit_button {
  background: url(&lt;span jwcid="@Insert" value="ognl:editButton.buildURL()"/&gt;);
}
#delete_button {
  background: url(&lt;span jwcid="@Insert" value="ognl:removeButton.buildURL()"/&gt;);
}
&lt;/style&gt;
</code></pre>
<p>Here you see I had to do some inline styles so that I could add in some new attributes for the columns, as well as images for the control buttons. I posted a query to the mailing list about 2 weeks ago, asking if there was anything like RCSS (Ruby CSS) where you could actually use Ruby to generate CSS stylesheets &#8211; which is exactly what I need here.</p>
<p>After talking with Howard there did not appear to be any good way of going about doing this. One solution discussed was to let the user drop in a replacement stylesheet, but to me this seems silly, they don’t need to recreate the whole style sheet.</p>
<p>Another solution was to create a Tapestry page that acted like a CSS file. This still holds some promise, but is technically going to be a bear to implement due to the fact that we have to change the mime-type. The kicker in all of this though is that this isn’t going to be easier in Tapestry 5, at least not right away.</p>
<p>The other issue that I have with implementing this is what a pain it is to work with JavaScript in this environment and now I completely understand why it wasn’t really worked with before. Customizing the JavaScript that I need to output is a truly a pain, using XML to do my looping for me feels…wrong. If there are two areas I would like to contribute to these are it &#8211; making JavaScript and CSS more first-class citizens. Outputting HTML isn’t everything you do in a Web application.</p>
<h2>What’s left?</h2>
<p>Not quite done with this yet. I still have the following items to clear up:</p>
<ul>
<li>Need to make the <code>Portal</code>, <code>Portlet</code>, and <code>PortalColumn</code> classes persistable</li>
<li>Once that’s done I need to modify the JavaScript hooks so that some kind of Ajax call happens whenever a user moves a portlet, adds or removes a portlet so that their selected portlets are saved in the database</li>
<li>Need a new Page so that a user can see all possible portlets to add to their custom page
<ul>
<li>For this page was kind of thinking of doing a slick sliding door effect, dunno yet</li>
</ul>
</li>
<li>Add in some further customizations</li>
<li>Replace default button images with ones that are easier to read/understand and fit with our internal scheme a bit better (these are customizable)</li>
</ul>
<p>I’m trying to get this code Open-Sourced, so it may take a little bit to get this code available but it shouldn’t be too much of a problem (and we have some other cool little items we’re going to release as well &#8211; just need to clean them up).</p>

<div class="sociable">
<div class="sociable_tagline">
<strong>Share and Enjoy:</strong>
</div>
<ul>
	<li class="sociablefirst"><a rel="nofollow"  href="http://www.printfriendly.com/print?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;partner=sociable" title="Print"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/printfriendly.png" title="Print" alt="Print" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;title=Portal%2FPortlet%20work%20continues&amp;bodytext=So%20I%20thought%20I%E2%80%99d%20update%20everyone%20on%20my%20progress%20so%20far%20with%20the%20Portal%2FPortlet%20component%20I%E2%80%99ve%20been%20working%20on%2C%20as%20well%20as%20some%20of%20the%20issues%20I%E2%80%99ve%20run%20into.%0D%0A%0D%0ANormally%20I%20would%20have%20posted%20this%20to%20my%20Tapestry%20101%20blog%20but%20I%E2%80%99m%20going%20to%20try%20and%20" title="Digg"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://reddit.com/submit?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;title=Portal%2FPortlet%20work%20continues" title="Reddit"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://delicious.com/post?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;title=Portal%2FPortlet%20work%20continues&amp;notes=So%20I%20thought%20I%E2%80%99d%20update%20everyone%20on%20my%20progress%20so%20far%20with%20the%20Portal%2FPortlet%20component%20I%E2%80%99ve%20been%20working%20on%2C%20as%20well%20as%20some%20of%20the%20issues%20I%E2%80%99ve%20run%20into.%0D%0A%0D%0ANormally%20I%20would%20have%20posted%20this%20to%20my%20Tapestry%20101%20blog%20but%20I%E2%80%99m%20going%20to%20try%20and%20" title="del.icio.us"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://twitter.com/home?status=Portal%2FPortlet%20work%20continues%20-%20http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F" title="Twitter"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.facebook.com/share.php?u=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;t=Portal%2FPortlet%20work%20continues" title="Facebook"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a></li>
	<li><a rel="nofollow"  href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;title=Portal%2FPortlet%20work%20continues&amp;annotation=So%20I%20thought%20I%E2%80%99d%20update%20everyone%20on%20my%20progress%20so%20far%20with%20the%20Portal%2FPortlet%20component%20I%E2%80%99ve%20been%20working%20on%2C%20as%20well%20as%20some%20of%20the%20issues%20I%E2%80%99ve%20run%20into.%0D%0A%0D%0ANormally%20I%20would%20have%20posted%20this%20to%20my%20Tapestry%20101%20blog%20but%20I%E2%80%99m%20going%20to%20try%20and%20" title="Google Bookmarks"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a></li>
	<li class="sociablelast"><a rel="nofollow"  href="http://www.dzone.com/links/add.html?url=http%3A%2F%2Fwww.warneronstine.com%2F2008%2F03%2F29%2Fportal-portlet-work-continues%2F&amp;title=Portal%2FPortlet%20work%20continues" title="DZone"><img src="http://www.warneronstine.com/wp-content/plugins/sociable/images/dzone.png" title="DZone" alt="DZone" class="sociable-hovers" /></a></li>
</ul>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.warneronstine.com/2008/03/29/portal-portlet-work-continues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

