<?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>The Kaptain on ... stuff &#187; Griffon</title>
	<atom:link href="http://www.kellyrob99.com/blog/tag/griffon/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.kellyrob99.com/blog</link>
	<description>Tales of development, life and the folly that goes along with both</description>
	<lastBuildDate>Sun, 04 Dec 2011 21:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>Gource Visualizations of the Groovy/Grails/Griffon Projects</title>
		<link>http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=gource-visualizations-of-the-groovygrailsgriffon-projects</link>
		<comments>http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 01:58:41 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Cool Toys]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Concurrent Versions System]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git-svn]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[MacPorts]]></category>
		<category><![CDATA[Mercurial]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Revision control]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[SVN]]></category>
		<category><![CDATA[theKaptain]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=1226</guid>
		<description><![CDATA[That&#8217;s a whole lot of Gr8ness in the title, don&#8217;t you think? Ok, ok &#8211; I apologize for the pun. I whipped these up using the open source Gource visualization software and with HD content free on Youtube now, I just had to try that out too. Gource Gource is a software version control visualization [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/01/07/bamboo-grails-and-git-for-continuous-integration/' rel='bookmark' title='Bamboo, Grails and Git for Continuous Integration'>Bamboo, Grails and Git for Continuous Integration</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/06/02/a-grails-app-demoing-the-stackexchange-api/' rel='bookmark' title='A Grails App Demoing the StackExchange API'>A Grails App Demoing the StackExchange API</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/10/25/grails-ui-datatable-using-xml-for-a-model/' rel='bookmark' title='Grails-UI DataTable using XML for a model'>Grails-UI DataTable using XML for a model</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s a whole lot of Gr8ness in the title, don&#8217;t you think? Ok, ok &#8211; I apologize for the pun. I whipped these up using the open source <a href="http://code.google.com/p/gource/">Gource</a> visualization software and with <a href="http://www.google.com/support/youtube/bin/answer.py?hl=en&amp;answer=153665">HD content free on Youtube</a> now, I just had to try that out too.</p>
<h2>Gource</h2>
<p>Gource is a software <a class="zem_slink" href="http://en.wikipedia.org/wiki/Revision_control" title="Revision control" rel="wikipedia">version control</a> visualization program with support for <a class="zem_slink" href="http://git-scm.com/" title="Git (software)" rel="homepage">Git</a>, <a class="zem_slink" href="http://mercurial.selenic.com/" title="Mercurial" rel="homepage">Mercurial</a>, and with a tiny bit of extra effort, <a class="zem_slink" href="http://www.nongnu.org/cvs" title="Concurrent Versions System" rel="homepage">CVS</a> and <a href="http://subversion.tigris.org/">Subversion</a>. It&#8217;s available as a macport install, as is the ffmpeg program used to stitch together a series of screenshots into the final video.&nbsp; All of these visualizations were created with Git or Git-svn. When the Gource program is running it brings up an interactive window so you can interact with it to a degree, affecting the camera, zoom, etc.&nbsp; The default resolution is 1024&#215;768 but I tried to bump it up to 1920&#215;1080. I&#8217;m assuming that stretched the limits of the rendering, as there&#8217;s quite a bit of pixellation in the final product; either that or the ffmpeg params need to be tweaked. The three visualizations on this page were all created using this one-liner command line invocation (broken down here over several lines for readability).</p>
<pre class="brush: bash; title: ; notranslate">
gource -1920x1080 --highlight-all-users --bloom-intensity .3 -a 1 -s .01
     --hide-dirnames --hide-filenames --stop-at-end --output-ppm-stream -
     | ffmpeg -y -b 3000K -r 60 -f image2pipe -vcodec ppm -i -
     -vcodec libx264 -vpre default  gource.mp4
</pre>
<h2>Groovy</h2>
<p>From the initial commit on August 28, 2003, Groovy has come a long way. I tried the Gource provided python script to translate an svn log file into the required format the first time, but cloning the repository with git-svn seemed to produce better results. It&#8217;s interesting to see that the overall structure of the Groovy project doesn&#8217;t look like is has changed very much over the years. I recognized a lot of the names you see on the screen. Be sure to watch the <a class="zem_slink" href="http://en.wikipedia.org/wiki/1080p" title="1080p" rel="wikipedia">1080p</a> version if you&#8217;re having trouble reading the text and see if you can&#8217;t find some recognizable committers.</p>
<p><a href="http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/"><em>Click here to view the embedded video.</em></a></p>
<h2>Grails</h2>
<p>Starting on Sunday March 14, 2004 here&#8217;s how it all unfolded, at least  from the perspective of the public Git repository. Grails looks like it grew a little more spontaneously than Groovy; there are more frequent restructurings and some transitions that seem to cover a whole lot of ground in very little time. In particular watch out for the burst of activity in the summer of 2009.</p>
<p><a href="http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/"><em>Click here to view the embedded video.</em></a></p>
<h2>Griffon</h2>
<p>September 17, 2008 marks the first commit for Griffon and this short but sweet video explodes right from the start. Benefiting greatly from the Grails model this project shows a lot of progress in a very short time indeed. Most, if not all, of the names you see here you probably caught in the previous two videos as well.<br />
<p><a href="http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/"><em>Click here to view the embedded video.</em></a></p></p>
<h2>What&#8217;s the Point?</h2>
<p>Watching these gives me (and maybe you) some appreciation for how much effort over time it takes to bring a new language/framework/technology to maturity and all of the individual contributions that go into it. Gource provides a lot more detail into the actual structure if you want to dig in. For purposes of keeping these images fairly uncluttered I removed file and directory names and just focused on the committers and the general structure. I think I gained a git of insight into how a codebase can evolve, and properly appreciate that organizing the increasing complexity of an ever-growing system over time is not a simple job. Plus they look cool. Enjoy!</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/2f2c3e09-4284-4248-b30f-d47242fd57a1/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=2f2c3e09-4284-4248-b30f-d47242fd57a1" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<!-- AdSense Now! V1.95 -->
<!-- Post[count: 2] -->
<div class="adsense adsense-leadout" style="float:right;margin: 12px;"><script type="text/javascript"><!--
google_ad_client = "pub-6955914197200080";
/* 728x90, created 8/3/09 */
google_ad_slot = "4051815125";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></div><p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/01/07/bamboo-grails-and-git-for-continuous-integration/' rel='bookmark' title='Bamboo, Grails and Git for Continuous Integration'>Bamboo, Grails and Git for Continuous Integration</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/06/02/a-grails-app-demoing-the-stackexchange-api/' rel='bookmark' title='A Grails App Demoing the StackExchange API'>A Grails App Demoing the StackExchange API</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/10/25/grails-ui-datatable-using-xml-for-a-model/' rel='bookmark' title='Grails-UI DataTable using XML for a model'>Grails-UI DataTable using XML for a model</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>A One Day Griffon Application/Presentation</title>
		<link>http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-one-day-griffon-applicationpresentation</link>
		<comments>http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/#comments</comments>
		<pubDate>Fri, 12 Feb 2010 05:15:57 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[beta]]></category>
		<category><![CDATA[Collections]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[kellyrob99]]></category>
		<category><![CDATA[plugin architecture]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[slideware]]></category>
		<category><![CDATA[Source code]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[TestNG]]></category>
		<category><![CDATA[theKaptain]]></category>
		<category><![CDATA[Transitions2D]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=1072</guid>
		<description><![CDATA[I took the opportunity this past weekend to test drive the latest beta version of Griffon and along with it the as-of-yet unreleased slideware plugin. If you&#8217;re not already aware, Griffon is a Grails inspired framework for creating Java Swing applications. The project lead, Andres Almiray, has given several presentations using this plugin and it [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/' rel='bookmark' title='Achieving Groovy-like Fluency in Java with Google Collections'>Achieving Groovy-like Fluency in Java with Google Collections</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/' rel='bookmark' title='Fun day playing with new Stuff'>Fun day playing with new Stuff</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I took the opportunity this past weekend to test drive the latest beta version of <a href="http://griffon.codehaus.org/">Griffon</a> and along with it the as-of-yet unreleased slideware plugin. If you&#8217;re not already aware, Griffon is a Grails inspired framework for creating <a class="zem_slink" href="http://en.wikipedia.org/wiki/Swing_%28Java%29" title="Swing (Java)" rel="wikipedia">Java Swing</a> applications. The project lead, Andres Almiray, has given several presentations using this plugin and it provides an excellent platform for showcasing both the power of Swing and the capabilities of Griffon to make it all look so easy.</p>
<p>The slideware plugin provides a framework for creating presentations with a little twist &#8211; you can execute code live from the presentation software.  If you&#8217;ve ever given a presentation about programming you probably are fully aware of the transition from presentation software to your preferred environment for demonstrating code samples. Well, now you can stay entirely within the same application, editing and running code live.</p>
<p>The plugin itself isn&#8217;t available from the Griffon repository but source code and a built 0.2 version can be <a href="http://github.com/aalmiray/Presentations">found on github</a>.  Considering both the youth of the plugin and the beta status of the framework, it worked impressively well AND had a rich feature set.  All of the expected &#8220;powerpoint&#8221; features are there: themes, layout control, styling, slide transitions and export are all pretty easy to incorporate and configure. The code editor view also works very well. A great variety of additional plugins are harnessed to put all the pieces together and as a result building one of these applications is a great way to tour the platform.</p>
<p></p>
<h2>Theming</h2>
<p>Applying a theme to the presentation is simply selecting a Java Look and Feel to apply in Initialize.groovy. The Substance jar is included with the plugin so I test drove a few of the nice setups in there and finally settled on the SubstanceMagmaLookAndFeel. There is definitely a wide variety of L&amp;F&#8217;s to choose from in that bundle alone and, although I haven&#8217;t done it myself, they seem pretty tweakable as well. Plus any old L&amp;F should plug in nicely, I would imagine. </p>
<pre class="brush: groovy; title: ; notranslate">
//Initialize.groovy
SwingBuilder.lookAndFeel('org.jvnet.substance.skin.SubstanceMagmaLookAndFeel',
       'mac', 'nimbus', 'gtk', ['metal', [boldFonts: false]])
</pre>
<p></p>
<h2>Layout</h2>
<p>Controlling the page composition is a standard Swing Layout or, in the case of the default slide you get with the included &#8220;create-slide&#8221; script, a MigLayout. Framing the standard variety of slides is very simple. Bulleted pages, title slides, code slides and custom layouts are very easy to accomplish. I don&#8217;t have a lot of experience using this particular layout but the presentations Andres has made available on github have a good diversity of examples of how they look in practice.</p>
<pre class="brush: groovy; title: ; notranslate">
//the default create-slide generated template
import net.miginfocom.swing.MigLayout

slide(id: &quot;slide0&quot;, layout: new MigLayout(&quot;fill&quot;,&quot;[center]&quot;,&quot;[center]&quot;)) {
    label(&quot;Insert your text here&quot;)
}
</pre>
<p></p>
<h2>Styling</h2>
<p>Styling is supplied by the css plugin, on which slideware has a dependency. The default style.css file sets out just some reasonable defaults for the fonts used in different parts of the app, and I didn&#8217;t see any real need to fiddle with it. Especially happy to see the nice monospace code font. On a totally related note I recently installed the <a href="http://www.levien.com/type/myfonts/inconsolata.html">Inconsolata</a> monospace font to try for development and I&#8217;ve been very happy seeing it in my editor, but it&#8217;s still nice to see this kind of polish applied to the presentation. The code editor view even includes syntax highlighting! More on that coming right up&#8230;</p>
<p></p>
<h2>Slide Transitions</h2>
<p>Moving between slides with style is the responsibility of the <a href="http://griffon.codehaus.org/Transitions+Plugin">transitions plugin</a>. You can see see all of the animations this plugin enables over here at <a href="http://javagraphics.blogspot.com/2007/04/slideshows-transitions-swf.html">this page describing Transitions and Transition2Ds</a>. Pretty slick stuff and defined as simply as a parameter to each &#8220;slide&#8221; node in a script.</p>
<pre class="brush: groovy; title: ; notranslate">
slide(id: &quot;slide3&quot;, layout: new MigLayout(&quot;fill&quot;,&quot;3%[center]3%&quot;,&quot;3%[center]3%&quot;),
        title: &quot;Junit3&quot;,
        transition: new FlurryTransition2D(Transition2D.OUT)) {
    scrollPane(constraints: &quot;grow&quot;) {
        widget(createEditor(text: script))
    }
}
</pre>
<p></p>
<h2>Code Editor</h2>
<p>Code slides embed an editable widget and allow for composing and executing Groovy scripts or classes of arbitrary complexity. You can execute the code with a keyboard shortcut and a window will open displaying the console output. The code itself is executed through a GroovyShell, enabling pretty much anything you might want to do. If you have an internet connection and the required repositories configured, Grapes simplifies packaging the dependencies for the application as your code samples can directly Grab the jars they need. Basically, the first time you execute a code slide you&#8217;ll have to put up with a small pause while Ivy downloads to your local repository, unless of course the required dependencies are already there.  In my case I changed strategies from including jars in the application lib directory to a Grapes approach and I think it&#8217;s a better way to go.</p>
<p>I was surprised to find that the editor even included undo functionality. It&#8217;s definitely not close to a full blown IDE, and there&#8217;s absolutely no reason that it should be. For the task of demoing simple code examples it&#8217;s more than up to the task, even to the point of maintaining your edits between slide transitions, allowing you to move back and forth through the slide deck without any state problems.<br />

<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-47-04-pm.png" title="Code slide with JUnit4 and Hamcrest matcher example" class="shutterset_singlepic38" >
	<img class="ngg-singlepic" src="http://www.kellyrob99.com/blog/wp-content/gallery/cache/38__x_screen-shot-2010-02-11-at-7-47-04-pm.png" alt="Code slide with JUnit4 and Hamcrest matcher example" title="Code slide with JUnit4 and Hamcrest matcher example" />
</a>
</p>
<p></p>
<h2>Export</h2>
<p>The application includes a &#8220;Print&#8221; feature which iterates through the entire slide deck and renders it to a pdf. Distribution of one of these presentations is really very easy, including the ability to create installers for all major platforms simply by adding the packaging plugin.</p>
<p></p>
<h2>Test Application</h2>
<p>The test app I built while looking into this is pretty simple. It&#8217;s got a title slide, a bullet slide and 4 code slides. The code simply demonstrates how you can create test classes and make assertions for Junit 3(with GroovyTestCase), Junit 4 and TestNG. GroovyShell recognizes all 3 of these test files by interface or annotation and executes them appropriately. In each case the console output of the test framework is the result, including the new Spock inspired ascii art assert failure renderings. The Test result files are also written to disk, and that TestNG html output is what I&#8217;m used to looking at anyhow. Show me the Green!</p>
<p>The last code slide is just a slightly updated version of an example script on the Grapes page, using the current version of Google Collections and intentionally introducing a failure- mostly just to show off that new assert rendering I mentioned a moment ago. VERY helpful at highlighting the exact nature of a failure. It also encourages me to pay more attention to how I name variables, something I&#8217;m sure every developer that has ever worked with me will cheer at. Man, I suck at naming things.</p>
<p>I also developed a brute force test that loads each slide and executes scripts if finds embedded there. Failures are hard to detect since the direct output is simply a text block, but some fairly simple regex&#8217;s applied to the output make me at least moderately confident that the code won&#8217;t fail at show time.</p>
<p></p>
<h2>Overall Impression</h2>
<p>It took a couple of afternoons(six hours or so total) to download the source code from github, explore it, create a simple presentation and document the experience. I won&#8217;t begin to suggest that I&#8217;m fully aware of all the details happening behind the scenes, but the end user experience is pretty fluid: create a slide, tailor the layout, add content and then repeat. The included examples were more than enough documentation on how to hit the ground running. The plugin code itself is a great example of the MVC nature of Griffon, not a whole lot of code, but a great deal of power and expressability. There were a couple of glitches happening in the background, mostly just logging to the console with no visible effect to the application, but overall it functioned as well as (not) advertised. For publicly unreleased software it was an absolute pleasure to work with and I plan on continuing with the development of this particular presentation.</p>
<p>Everything you need to build and run this stuff yourself is publicly available. In my case, Griffon generally has a recent Macport available for both the released(griffon @0.2.1) and development versions(griffon-devel @0.3-BETA-2). Switching versions is relatively painless and, for applications this simple, testing out upgrades is basically just going through the presentation once in a functional test. Versions for other platforms can be downloaded from the <a href="http://griffon.codehaus.org/Download">Griffon download page</a>.</p>
<p></p>
<h2>Deliverables</h2>
<p>Source code for the sample application is <a href="http://github.com/kellyrob99/Groovy-Testing-Presentation">available on github here</a>. Please just leave a comment on this page if you have any problems running it.</p>
<p>Here&#8217;s the pdf produced by the application &#8216;Print&#8217; feature: <a class="downloadlink" href="http://www.kellyrob99.com/blog/wp-content/plugins/download-monitor/download.php?id=2" title="Version0.1 downloaded 252 times" >Groovy Testing Presentation (252)</a></p>
<p>And if you don&#8217;t feel like downloading anything, here&#8217;s how it all looks in pretty pictures.<br />

<div class="ngg-galleryoverview" id="ngg-gallery-9-1072">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/?show=slide">
			[Show as slideshow]		</a>
	</div>

	<!-- Piclense link -->
	<div class="piclenselink">
		<a class="piclenselink" href="javascript:PicLensLite.start({feedUrl:'http://www.kellyrob99.com/blog/wp-content/plugins/nextgen-gallery/xml/media-rss.php?gid=9&amp;mode=gallery'});">
			[View with PicLens]		</a>
	</div>
	
	<!-- Thumbnails -->
		
	<div id="ngg-image-35" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-46-46-pm.png" title="Title slide" class="shutterset_set_9" >
								<img title="Title slide" alt="Title slide" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-46-46-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-36" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-46-50-pm.png" title="Bullet slide" class="shutterset_set_9" >
								<img title="Bullet slide" alt="Bullet slide" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-46-50-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-37" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-47-00-pm.png" title="Code slide with JUnit 3 example" class="shutterset_set_9" >
								<img title="Code slide with JUnit 3 example" alt="Code slide with JUnit 3 example" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-47-00-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-38" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-47-04-pm.png" title="Code slide with JUnit4 and Hamcrest matcher example" class="shutterset_set_9" >
								<img title="Code slide with JUnit4 and Hamcrest matcher example" alt="Code slide with JUnit4 and Hamcrest matcher example" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-47-04-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-39" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-47-08-pm.png" title="Code slide with TestNG example" class="shutterset_set_9" >
								<img title="Code slide with TestNG example" alt="Code slide with TestNG example" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-47-08-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-40" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-11-at-7-47-13-pm.png" title="Code slide with Google Collections example" class="shutterset_set_9" >
								<img title="Code slide with Google Collections example" alt="Code slide with Google Collections example" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-11-at-7-47-13-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-41" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/screen-shot-2010-02-08-at-8-53-43-pm.png" title="Help screen showing keyboard shortcuts" class="shutterset_set_9" >
								<img title="Help screen showing keyboard shortcuts" alt="Help screen showing keyboard shortcuts" src="http://www.kellyrob99.com/blog/wp-content/gallery/groovy-testing-presentation-with-griffon/thumbs/thumbs_screen-shot-2010-02-08-at-8-53-43-pm.png" width="99" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>

</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/a9a507d7-67b9-4178-bf0f-e90f2cc1d0a6/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=a9a507d7-67b9-4178-bf0f-e90f2cc1d0a6" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/' rel='bookmark' title='Achieving Groovy-like Fluency in Java with Google Collections'>Achieving Groovy-like Fluency in Java with Google Collections</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/' rel='bookmark' title='Fun day playing with new Stuff'>Fun day playing with new Stuff</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>A Techno-Geek&#8217;s Guide to Encyclopedic Knowledge</title>
		<link>http://www.kellyrob99.com/blog/2009/09/09/a-techno-geeks-guide-to-encyclopedic-knowledge/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=a-techno-geeks-guide-to-encyclopedic-knowledge</link>
		<comments>http://www.kellyrob99.com/blog/2009/09/09/a-techno-geeks-guide-to-encyclopedic-knowledge/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 02:31:49 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Reader]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[knowledge]]></category>
		<category><![CDATA[Lifehacker]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[training]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=739</guid>
		<description><![CDATA[Do you make keeping up with technology a priority? Have you found a way to prevent drowning in the vast sea of content AND still keep abreast of everything you want to? Me neither, but here&#8217;s where I go to learn new things, find solutions and keep up with the general state of the union [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/' rel='bookmark' title='Gource Visualizations of the Groovy/Grails/Griffon Projects'>Gource Visualizations of the Groovy/Grails/Griffon Projects</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/06/02/a-grails-app-demoing-the-stackexchange-api/' rel='bookmark' title='A Grails App Demoing the StackExchange API'>A Grails App Demoing the StackExchange API</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Do you make keeping up with technology a priority? Have you found a way to prevent drowning in the vast sea of content AND still keep abreast of everything you want to? Me neither, but here&#8217;s where I go to learn new things, find solutions and keep up with the general state of the union regarding software I use; not to mention keeping track of what new tools are available to speed development.  This is far from an exhaustive list but I wanted to concentrate on primarily free sources of information and tooling. Yes ladies and gentlemen pretty much everything mentioned on this page requires at most an internet connection and a web browser to use.</p>
<p><strong>DISCLAIMER</strong>: yes, this is heavily geared towards(but not exclusive to) Groovy-esque sources. What can I say &#8211; it&#8217;s where I spend most of my time.</p>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Google&#8230; in General</span></h2>
<p>If you want to find something &#8211; well let&#8217;s just say any service that is so pervasive it <a href="http://www.thefreedictionary.com/Google">becomes a verb</a> in the language might be useful.  Learning how to harness the power of the Google architecture can greatly enhance your learning experience. And I can&#8217;t see myself Bing&#8217;ing anytime soon.</p>
<ol>
<li><strong><a href="http://www.google.com">Google Search</a>:</strong> Knowing and using the <a href="http://www.googleguide.com/advanced_operators_reference.html">Google search syntax</a> properly can be a very powerful tool for finding specific tech-geekie knowledge.</li>
<li><strong><a href="http://www.google.com/reader">Google Reader</a>:</strong> Listening to the right content can save you a lot of time when it comes to getting the most out of your code. Even if you don&#8217;t read it everyday, combined with <a class="zem_slink" title="Google Gears" rel="homepage" href="http://gears.google.com/">Gears</a> and searchability this provides another tool in the fight against techno-ignorance that doesn&#8217;t rely on an internet connection.</li>
<li><strong><a href="https://mail.google.com">Google Mail</a>:</strong> I combine mailing list subscriptions with filters to automatically organize content. Incoming messages from lists are archived and labeled accordingly by filter rules. With Gears installed I&#8217;ve got an off-line searchable database of grassroots questions and answers, similar to what an on-line service like<a href="http://markmail.org/"> MarkMail</a> provides. It&#8217;s hard to be the ongoing discussion of community members sharing their best tips, tricks and gotchas.</li>
<li><a href="http://code.google.com/search/#q=groovy"><strong>Google code</strong></a>: A great place to find open source projects that can assist you at work and provide valuable  learning materials. And yes, the link targets Groovy <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .</li>
</ol>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Aggregators</span></h2>
<p>Some kind people do most of the work for you &#8211; taking themed content and putting it all together in one place.</p>
<ol>
<li><a href="http://www.dzone.com"><strong>DZone</strong></a>: One of my favorite sources of  techie style news.</li>
<li><a href="http://www.groovyblogs.org"><strong>GroovyBlogs</strong></a>: A great example of &#8216;eating your own dog food&#8217;, this is a Grails powered site courtesy of one of the authors of <a href="http://www.manning.com/gsmith/">Grails in Action</a>. Most of the Groovy related blog articles I read come from this source.</li>
<li><a href="http://www.grailstutorials.com"><strong>Grails Tutorials</strong></a>: A nice collection of tutorial articles related to Grails and Groovy.</li>
<li><a href="http://gr8forums.org"><strong>GR8Forums</strong></a>: Brand new, this site has the potential to be a great discussion spot.</li>
</ol>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Community Sharing</span></h2>
<p>There are certain places that encourage community and knowledge sharing more than others.</p>
<ol>
<li><strong><a href="http://groovyconsole.appspot.com/">Groovy Console in The Cloud</a>: </strong>This is an amazing example of an application exposing a Groovy console on the Google AppEngine, complete with community support for running, saving and commenting example code.  Since the code is freely available, there&#8217;s also already a <a href="http://code.google.com/p/spock/">Spock</a> console <a href="http://meetspock.appspot.com/">here in the cloud </a> forked/cloned from it.</li>
<li><strong><a href="http://github.com/">Github</a> and <a href="http://gist.github.com/gists">Gists</a>: </strong>More places to share code<strong> </strong>in project and/or snippet form.</li>
<li><a href="http://stackoverflow.com/"><strong>StackOverflow</strong></a>: A community effort to put together almost 300,000(and rising) questions and answers related to programming. If you have a question to ask, head over here &#8211; chances are someone else has already given an answer. It really is impressive how well this still evolving site functions.</li>
<li><strong>Podcasts</strong>: <a href="http://javaposse.com/">JavaPosse</a> and the <a href="http://grailspodcast.com/blog/list">Grails podcast</a> are on top of my list and usually get listened to during my commute to work.There are hundreds of tech related podcasts out there; pick one or two and give them a listen,  you won&#8217;t regret it.</li>
<li><strong><a href="http://mrhaki.blogspot.com/">mrhaki</a></strong><strong> :</strong> OK, this guy gets special mention just for busting out code examples for pretty much every Groovy feature you can possibly imagine. Seriously the guy posts 20+ times a month on average.</li>
</ol>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Home Pages</span></h2>
<p>These aren&#8217;t necessarily up to date at all times, but are great places to start looking for generalized knowledge and additional resource material.</p>
<ol>
<li><a href="http://groovy.codehaus.org/"><strong>Groovy</strong></a>: Pay particular attention to the &#8216;Cookbook Examples&#8217; and the &#8216;Modules&#8217; available to quickly add functionality.</li>
<li><a href="http://grails.org/"><strong>Grails</strong></a>: A particularly rich and well organized site &#8211; with the latest update it&#8217;s also very pretty.</li>
<li><a href="http://griffon.codehaus.org/"><strong>Griffon</strong></a>: The builder documentation linked from here, combined with the example scripts included with <a href="http://www.jroller.com/aalmiray/entry/announcing_swingpad_0_3">SwingPad</a>, get you up to speed quickly on all of the buildery goodness available in Griffon.</li>
</ol>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Useful and Inspiring</span></h2>
<p>These are resources I use to step out of the box and to remind myself that it&#8217;s not only in elegant code that geekiness lies.</p>
<ol>
<li><a href="http://lifehacker.com"><strong>Lifehacker</strong></a>: I get into trouble a lot for this one; in my house whenever someone asks me &#8220;How do I do {fill in the blank}?&#8221; I invariably respond with &#8220;Well what does Lifehacker say?&#8221; My personal favorite is the <a href="http://lifehacker.com/301435/pack-like-a-pro-with-the-bundled-wrapping-method">bundle wrapping method</a>. With a nice mix of techie and common sense goodness, I love to follow this site.</li>
<li><a href="http://makezine.com/"><strong>Make magazine</strong></a>: In need of a DIY project to fill up the weekend? From the <a href="http://makezine.com/mintyboost/">Minty Boost</a> for a $20 portable USB charger to <a href="http://makezine.com/19/">robots</a> this place takes geeking out entirely to the next level. </li>
<li><strong><a href="http://www.jonathancoulton.com/">Jonathon Coulton</a></strong>: With eye-popping geekiness, Jonathon brings us such wonderful classics as &#8220;Code Monkey&#8221; and &#8220;Re Your Brains&#8221; &#8211; and under a Creatives Commons license as well!</li>
</ol>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Twitter</span></h2>
<p>Use with caution. More than any other source of data, this one can end up being seriously distracting. I&#8217;m careful about who I listen to, while simultaneously trying to remind myself that nobody cares what I had for breakfast or how much I enjoyed it. Have you tried Twitter yet? Not as easy as it sounds buster, believe you me. Just wait and see. If you can keep yourself from jumping every time a new Tweet lands at your desktop, this can be the freshest, fastest way to satisfy your tech cravings.</p>
<p><br class="spacer_" /></p>
<h2><span style="text-decoration: underline;">Books</span></h2>
<p>OK, so these aren&#8217;t free, but if you want to jumpstart your knowledge on a particular piece of technology, software or framework, picking up a recent book on the subject can truly help. I try to add a new book to the library every month, but the hard part is really finding the time to read and apply the new knowledge.</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p>I don&#8217;t expect that these suggestions are for everyone, but hopefully a few of you out there in the interwebs will find some of them helpful. And feel free to share what works for you if I&#8217;ve missed anything.</p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/7d9558be-298b-4093-8276-447473a3f4d5/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=7d9558be-298b-4093-8276-447473a3f4d5" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><br />
<script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></p>
<p><br class="spacer_" /></p>
<p><br class="spacer_" /></p>
<p></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/03/21/gource-visualizations-of-the-groovygrailsgriffon-projects/' rel='bookmark' title='Gource Visualizations of the Groovy/Grails/Griffon Projects'>Gource Visualizations of the Groovy/Grails/Griffon Projects</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/06/02/a-grails-app-demoing-the-stackexchange-api/' rel='bookmark' title='A Grails App Demoing the StackExchange API'>A Grails App Demoing the StackExchange API</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/09/09/a-techno-geeks-guide-to-encyclopedic-knowledge/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>VIJUG Griffon/Groovy Presentation</title>
		<link>http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vijug-griffongroovy-presentation</link>
		<comments>http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/#comments</comments>
		<pubDate>Fri, 28 Aug 2009 07:36:12 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Keynote]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[SwingWorker]]></category>
		<category><![CDATA[Vancouver Island]]></category>
		<category><![CDATA[VIJUG]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=658</guid>
		<description><![CDATA[I had a great time tonite geeking out with Griffon in front of an audience. My thanks to everyone that attended, and especially to Manfred Moser and VIJUG for the chance to show off some Groovy and Griffon Swing code! The venue was great &#8211; very nice that the Vancouver Island Tech Park is kind [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/' rel='bookmark' title='Presenting a Groovy/Griffon talk'>Presenting a Groovy/Griffon talk</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I had a great time tonite geeking out with <a class="zem_slink" title="Griffon (framework)" rel="homepage" href="http://griffon.codehaus.org">Griffon</a> in front of an audience. My thanks to everyone that attended, and especially to Manfred Moser and VIJUG for the chance to show off some Groovy and Griffon Swing code!</p>
<p>The venue was great &#8211; very nice that the <a href="http://www.vitp.ca/">Vancouver Island Tech Park</a> is kind enough to host meetings. Next time I&#8217;ll have to come early enough to figure out how to make the projector do better than 800X600 resolution, however. Hard to show much other than a slide deck presentation with that little space. Then again I may be a little spoiled when my usual is 1920X1200.</p>
<p>I love using <a class="zem_slink" title="Keynote (presentation software)" rel="homepage" href="http://www.apple.com/iwork/keynote/">Keynote</a> for presentations with the <a class="zem_slink" title="Apple" rel="homepage" href="http://www.apple.com">Apple</a> infrared remote. Between the presenter view with notes to guide what I wanted to say(and to remind me when to step out and demo some code) and the timer to keep me on track, it went really pretty smooth. That&#8217;s my story, and I&#8217;m sticking to it. The software, both Griffon and Keynote, worked flawlessly so if things weren&#8217;t perfect, there&#8217;s only me to blame.</p>
<p>SwingPad seemed to make quite an impression, which is not hard to understand considering how little effort it takes to start showing results on the screen. Put that together with the recent CSSBuilder integration and the rich samples for other builders and I think more than a couple of <a class="zem_slink" title="Java (software platform)" rel="homepage" href="http://java.sun.com">Java</a> developers will be installing it soon.</p>
<p>The question came up enough that I want to directly reference this blog post <a href="http://www.jroller.com/aalmiray/entry/griffon_gsql_mini_howto">from Andres Almiray regarding GSQL in Griffon</a>. Apparently people like to have databases handy at all times</p>
<p> <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>And a big thanks to Andres for sharing two free copies of the upcoming Griffon In Action that he is co-authoring for raffle prizes tonite. Through the magic of <a class="zem_slink" title="Twitter" rel="homepage" href="http://twitter.com">Twitter</a> he was very supportive about 20 seconds after the original announcement went out. Now if only they can kill all those nasty spam-bots, etc that are messing with my Twittiness!</p>
<p>I&#8217;ve uploaded the <a href="http://github.com/kellyrob99/GriffonDemo/tree/master">demonstration application at github</a>. It shows a simple Griffon app with three tabs. The first is a minor port of Andres&#8217; <a href="http://www.jroller.com/aalmiray/entry/griffon_making_animations_with_gfx">Trident/GfxBuilder example</a> to show animation. The second is a simple demo of the @Bindable <a class="zem_slink" title="Abstract syntax tree" rel="wikipedia" href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">AST</a> transformation along with the SwingBuilder syntax for accesing SwingUtilities; it comes along with an accompanying <a href="http://code.google.com/p/fest/">Fest</a> test. The third requires an internet connection as it parses out the DZone rss feed and delivers it into a <a href="http://www.publicobject.com/glazedlists/">GlazedList</a>, demonstrating usage of <a class="zem_slink" title="SwingWorker" rel="wikipedia" href="http://en.wikipedia.org/wiki/SwingWorker">SwingWorker</a> courtesy of the <a href="http://groovy.codehaus.org/SwingXBuilder">SwingXBuilder</a>.  I showed those samples along with <a href="http://docs.codehaus.org/display/GRIFFON/Installer+Plugin">installer plugin</a> built versions of some of the included Griffon sample applications. WeatherWidget is a one fine looking translucent UI example!</p>
<p>Please ping me if you have any problems running this Griffon app, as I did trim out a bunch of the extraneous project files and test reports right before uploading. This was my first time &#8216;really&#8217; using <a class="zem_slink" title="Git (software)" rel="homepage" href="http://git-scm.com/">Git</a> for source control so it&#8217;s bound to be a bit messy &#8211; nevertheless the Git experience has been great so far. I also tried to get the slides up on SlideShare, but that appears to&#8230; not be happening(been uploading now for over 20 minutes this time- about to kill it, again). So <a href="http://www.kellyrob99.com/blog/wp-content/uploads/2009/08/GriffonPresentation.pdf">here&#8217;s the pdf</a>.<br />
<span style="font-size: large;"><a title="Source down for the demo hosted at github" href="http://github.com/kellyrob99/GriffonDemo/tree/master">Source code download here.</a></span></p>
<p><span style="font-size: large;"><a title="A pdf of the Keynote presentation." href="http://www.kellyrob99.com/blog/wp-content/uploads/2009/08/GriffonPresentation.pdf">Slidedeck download here.</a></span></p>
<div style="width:425px;text-align:left" id="__ss_1921982"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/buttita/griffon-presentation-1921982" title="Griffon Presentation">Griffon Presentation</a><object style="margin:0px" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=griffonpresentation-090828194024-phpapp01&#038;stripped_title=griffon-presentation-1921982" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=griffonpresentation-090828194024-phpapp01&#038;stripped_title=griffon-presentation-1921982" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/buttita">The Kaptain</a>.</div>
</div>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/cc92f489-148d-4e3c-b156-a7dcf8688412/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=cc92f489-148d-4e3c-b156-a7dcf8688412" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/' rel='bookmark' title='Presenting a Groovy/Griffon talk'>Presenting a Groovy/Griffon talk</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Griffon support in latest Intellij EAP</title>
		<link>http://www.kellyrob99.com/blog/2009/08/14/griffon-support-in-latest-intellij-eap/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=griffon-support-in-latest-intellij-eap</link>
		<comments>http://www.kellyrob99.com/blog/2009/08/14/griffon-support-in-latest-intellij-eap/#comments</comments>
		<pubDate>Sat, 15 Aug 2009 06:23:18 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[eap]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Integrated development environment]]></category>
		<category><![CDATA[IntelliJ IDEA]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[NetBeans]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[SpringSource]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=608</guid>
		<description><![CDATA[The IDE world just started to look a little greener for Griffon programmers. Today&#8217;s latest early access version of JetBrains IntelliJ version Maia has initial support for Griffon! It appeared on the JetBrains blogroll a couple of weeks ago, and indeed may have showed up in an earlier release, but today was the first time [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/18/my-favorite-intellij-resources-tips-and-tricks/' rel='bookmark' title='My Favorite IntelliJ Resources, Tips and Tricks'>My Favorite IntelliJ Resources, Tips and Tricks</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/21/developing-faster-with-the-atlassian-intellij-connector/' rel='bookmark' title='Developing Faster with the Atlassian IntelliJ Connector'>Developing Faster with the Atlassian IntelliJ Connector</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The <a class="zem_slink" href="http://en.wikipedia.org/wiki/Integrated_development_environment" title="Integrated development environment" rel="wikipedia">IDE</a> world just started to look a little greener for <a class="zem_slink" href="http://griffon.codehaus.org" title="Griffon (framework)" rel="homepage">Griffon</a> programmers. Today&#8217;s latest <a href="http://www.jetbrains.net/confluence/display/IDEADEV/Maia+EAP">early access version of JetBrains IntelliJ version Maia</a> has initial support for Griffon!</p>
<p>It appeared on the <a href="http://blogs.jetbrains.com/idea/2009/07/initial-griffon-support/">JetBrains blogroll a couple of weeks ago</a>, and indeed may have showed up in an earlier release, but today was the first time I saw it in action. I couldn&#8217;t find anything about this new feature mentioned explicitly in the release notes but sure enough, it&#8217;s there. Given the similar project structure between <a class="zem_slink" href="http://grails.org" title="Grails (framework)" rel="homepage">Grails</a> and Griffon, and the first class Grails support already available in IntelliJ, it&#8217;s really not too hard to see how this platform is in an ideal position to expand Griffon support.  Beyond that the general Groovy support seems to get better in every release. The EAP is free to try for any holder of an IntelliJ 8.x license and seems to be pretty stable despite the disclaimers &#8211; I highly recommend taking it for a spin, especially if you&#8217;re already using this IDE.  You get properly configured source directories and dependency paths, access to Griffon&#8217;s command line scripts, and even that awesome new Griffon icon shown to mark out the project. What more could you ask for?</p>
<p>JetBrains was beaten to the punch by a <a href="http://blogs.sun.com/geertjan/entry/griffon_alpha_plugin_for_netbeans">NetBeans plugin for Griffon</a> that was released in its initial version before this year&#8217;s Java One conference. I&#8217;m not a NetBeans user myself, but I am a frequent reader of Geertjan Wielenga&#8217;s blog &#8211; he&#8217;s published some great Groovy examples. Even the <a class="zem_slink" href="http://www.eclipse.org/" title="Eclipse (software)" rel="homepage">Eclipse</a> community has finally gotten around to putting out some real Groovy support, largely due to <a class="zem_slink" href="http://www.springsource.com" title="SpringSource" rel="homepage">SpringSource</a>&#8216;s commitment.</p>
<p> Hopefully their recent acquisition by <a class="zem_slink" href="http://www.vmware.com/" title="VMware" rel="homepage">VMWare</a> won&#8217;t distract them from developing it too much <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Regardless of which development environment you feel most comfortable with, there&#8217;s no questioning this is a great time to be a Groovy/Grails/Griffon developer so enjoy!</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/f3cf704d-a4a4-4a92-b52f-5c56053d78cd/" title="Reblog this post [with Zemanta]"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=f3cf704d-a4a4-4a92-b52f-5c56053d78cd" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/18/my-favorite-intellij-resources-tips-and-tricks/' rel='bookmark' title='My Favorite IntelliJ Resources, Tips and Tricks'>My Favorite IntelliJ Resources, Tips and Tricks</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/21/developing-faster-with-the-atlassian-intellij-connector/' rel='bookmark' title='Developing Faster with the Atlassian IntelliJ Connector'>Developing Faster with the Atlassian IntelliJ Connector</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/08/14/griffon-support-in-latest-intellij-eap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Presenting a Groovy/Griffon talk</title>
		<link>http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=presenting-a-groovygriffon-talk</link>
		<comments>http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 05:37:46 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Apache Camel]]></category>
		<category><![CDATA[Camel]]></category>
		<category><![CDATA[Genologics]]></category>
		<category><![CDATA[GMaven]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[Vancouver Island]]></category>
		<category><![CDATA[VJUG]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=496</guid>
		<description><![CDATA[I&#8217;ve been asked by my friend and co-worker Manfred Moser to give a presentation at next month&#8217;s Vancouver Island Java user&#8217;s group meeting, and silly me I said yes before remembering that speaking in front of people always makes me feel quesy and light-headed. Thanks Manfred for the kind invitation; I&#8217;ll do my best to [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/' rel='bookmark' title='Achieving Groovy-like Fluency in Java with Google Collections'>Achieving Groovy-like Fluency in Java with Google Collections</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been asked by my friend and co-worker <a href="http://www.mosabuam.com/">Manfred Moser</a> to give a presentation at next month&#8217;s <a href="http://www.mosabuam.com/vijug/blog/2009/07/26/august-2009-vijug-meeting-griffon/">Vancouver Island Java user&#8217;s group meeting</a>, and silly me I said yes before remembering that speaking in front of people always makes me feel quesy and light-headed. Thanks Manfred for the kind invitation; I&#8217;ll do my best to make it a good show.</p>
<p>No sooner had Manfred let loose a message on the Tweetosphere than <a href="http://www.jroller.com/aalmiray/">Andres Almiray</a> very graciously offered up some free copies of the upcoming book <a href="http://www.manning.com/almiray/">Griffon in Action</a> to give away at the meeting. Thanks for that Andres!</p>
<p>The company I work for, <a href="http://genologics.com/">Genologics</a>, also gave me permission to publish a presentation that I gave recently at work as a Groovy primer for other members of the development staff. Thanks for that Cliff!</p>
<p>I demonstrated some code in SwingPad and created an application using a <a href="http://groovy.codehaus.org/GMaven">GMaven</a> archetype to show off some of the sweetness that Groovy adds to the Java toolbox. It&#8217;s worth noting that even though that page doesn&#8217;t say it, GMaven recently released a 1.0 final verison(NICE!)</p>
<p>I&#8217;ve attached the presentation and some of the source code examples for anyone who might be interested, including the maven project that contains a variety of MOP, builder and GDK extension samples.</p>
<p><a rel="attachment wp-att-522" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/groovytalk-3/">GroovyTalk</a></p>
<p><a rel="attachment wp-att-499" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/groovydemo/">groovyDemo</a></p>
<p><a rel="attachment wp-att-501" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/swingpad1/">SwingPad1</a></p>
<p><a rel="attachment wp-att-502" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/groovymailroute/">GroovyMailRoute</a></p>
<p><a rel="attachment wp-att-503" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/prefusebuilder/">Prefusebuilder</a></p>
<p><a rel="attachment wp-att-504" href="http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/swingthreadingexample/">SwingThreadingExample</a></p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Reblog this post [with Zemanta]" href="http://reblog.zemanta.com/zemified/0148208a-a39e-4433-b233-3dc914a7f1ab/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=0148208a-a39e-4433-b233-3dc914a7f1ab" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/05/15/achieving-groovy-like-fluency-in-java-with-google-collections/' rel='bookmark' title='Achieving Groovy-like Fluency in Java with Google Collections'>Achieving Groovy-like Fluency in Java with Google Collections</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/07/16/presenting-a-groovygriffon-talk/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>More Groovy/Griffon/FEST Testing</title>
		<link>http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=more-griffonfest-testing</link>
		<comments>http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/#comments</comments>
		<pubDate>Fri, 10 Apr 2009 19:47:23 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[JXBusyLabel]]></category>
		<category><![CDATA[JXColorSelectionButton]]></category>
		<category><![CDATA[Model–view–controller]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[SwingBuilder]]></category>
		<category><![CDATA[SwingX]]></category>
		<category><![CDATA[TestNG]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=261</guid>
		<description><![CDATA[In my continuing exploration of FEST testing using Groovy and the Griffon framework, I&#8217;ve added some tests for the ability to change the JXBusyLabel coloration on the fly. Since FEST allows you to alter the properties of the widgets directly, I didn&#8217;t have to do anything special to trigger actions on the JXColorSelectionButton. At first [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/' rel='bookmark' title='SwingX busy label demo in Griffon and Groovy'>SwingX busy label demo in Griffon and Groovy</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>In my continuing exploration of FEST testing using Groovy and the Griffon framework, I&#8217;ve added some tests for the ability to change the JXBusyLabel coloration on the fly.</p>
<p>Since FEST allows you to alter the properties of the widgets directly, I didn&#8217;t have to do anything special to trigger actions on the JXColorSelectionButton. At first look, I thought that specifying mouse click point locations would be necessary, but after digging a(very little) bit I discoveregroovyd that FEST exposes the underlying Component its&#8217; Fixture classes wrap as an internal &#8216;target&#8217;. Simply grabbing that Component and settings the background color directly was sufficient.<br />
Here is the new definition of the JXBusyLabel and the 3 buttons which controls its color changes. You can see that two of the three color changes happen automagically due to Groovy binding &#8211; setting the background color of the label didn&#8217;t appear to work for some reason that I have yet to puzzle out, so it gets a PropertyChangeListener &#8216;old school style&#8217;.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
baseColBtn = colorButton(name: 'baseColBtn', background: model.baseColor)
highColBtn = colorButton(name: 'highColBtn', background: model.busyColor)
backColBtn = colorButton(name: 'backColBtn', background: PaintUtils.BLUE_EXPERIENCE.getColor1())
backColBtn.addPropertyChangeListener(&quot;background&quot;, {PropertyChangeEvent evt -&gt;
      label.setBackground((Color) evt.getNewValue())
      label.setOpaque(true)
} as PropertyChangeListener)

label = jxbusyLabel(name: 'busyLabel',
      preferredSize: new Dimension(model.W / 2 as int, model.H / 2 as int),
      busyPainter: busyPainter(
      highlightColor: bind { highColBtn.background }, baseColor: bind {baseColBtn.background},
      points: bind {slider.value}, trailLength: bind {tSlider.value}),
      opaque: false,
      horizontalAlignment: JLabel.CENTER,
      delay: bind {speedSlider.value},
      background: bind{backColBtn.background})
</pre>
<p>The three associated tests are essentially using the same recipe, so here&#8217;s just one of them to give you the idea.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
 /**
 * Test that changing the 'baseColBtn' background color simultaneously
 * changes the busy label's base color.
 */
 @Test void testBaseColorChange() {
       startAnimation()
       def button = window.button('baseColBtn')
       def busyLabel = findBusyLabel()
       Color start = button.target.background
       Color busyStart = busyLabel.busyPainter.baseColor
       Assert.assertEquals(busyStart, start)

       button.target.background = Color.RED

       Assert.assertFalse(button.target.background == start)
       Assert.assertFalse(busyLabel.busyPainter.baseColor == busyStart)
       Assert.assertEquals(busyLabel.busyPainter.baseColor, Color.RED)
 }
</pre>
<p>Running the test suite takes less than a minute, and most of that time is spend dragging sliders. Those tests are presently going through the entire range of the slider, which is reassuring when actually watching the tests run, but probably overkill in terms of testing.  Considering that, running the test suite is pretty painless and quick(the new tests execute in &lt; 1s for instance). And of course the test results are available in the standard, pleasing, and hopefully all green, TestNG output. Which has, by the way, just <a href="http://beust.com/weblog/archives/000511.html">announced another release</a> thanks very much to its creator Cedric Beust.</p>
<p>I am still having some difficulties in responding to change events on the other sliders in the demo, but I think that I just need to decompose the parts into the MVC structure a little more coherently. In particular, when some sliders are moved, it should trigger some calculations and a repaint of the busy label to reflect the changes(not simple properties that can utilize binding directly).  While the original code declares the method inline, I&#8217;ve moved it to the controller class and run into some circular dependency problems between the components referenced therein &#8211; Component A needs Component B but it hasn&#8217;t been instantiated yet in the view, etc. It looks like what is happening is that the change listener is being triggered once when it is assigned to the component, which might be a problem anywhere in Swing/Groovy/Griffon/my implementation. My money is on my own impl, mostly based on the common sense that when you&#8217;re writing code in an unfamiliar area you&#8217;re bound to meet problems that don&#8217;t immediately suggest a solution.</p>
<p>We&#8217;ll just have to keep digging and see. <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>

<div class="ngg-galleryoverview" id="ngg-gallery-2-261">

	<!-- Slideshow link -->
	<div class="slideshowlink">
		<a class="slideshowlink" href="http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/?show=slide">
			[Show as slideshow]		</a>
	</div>

	<!-- Piclense link -->
	<div class="piclenselink">
		<a class="piclenselink" href="javascript:PicLensLite.start({feedUrl:'http://www.kellyrob99.com/blog/wp-content/plugins/nextgen-gallery/xml/media-rss.php?gid=2&amp;mode=gallery'});">
			[View with PicLens]		</a>
	</div>
	
	<!-- Thumbnails -->
		
	<div id="ngg-image-11" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/griffonswingset/griffonswingset_jxcolorselectionbutton.png" title=" " class="shutterset_set_2" >
								<img title="griffonswingset_jxcolorselectionbutton.png" alt="griffonswingset_jxcolorselectionbutton.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/griffonswingset/thumbs/thumbs_griffonswingset_jxcolorselectionbutton.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 		
	<div id="ngg-image-12" class="ngg-gallery-thumbnail-box"  >
		<div class="ngg-gallery-thumbnail" >
			<a href="http://www.kellyrob99.com/blog/wp-content/gallery/griffonswingset/griffonswingset_testng.png" title=" " class="shutterset_set_2" >
								<img title="griffonswingset_testng.png" alt="griffonswingset_testng.png" src="http://www.kellyrob99.com/blog/wp-content/gallery/griffonswingset/thumbs/thumbs_griffonswingset_testng.png" width="100" height="75" />
							</a>
		</div>
	</div>
	
		
 	 	
	<!-- Pagination -->
 	<div class='ngg-clear'></div>
 	
</div>


<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/' rel='bookmark' title='SwingX busy label demo in Griffon and Groovy'>SwingX busy label demo in Griffon and Groovy</a></li>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Griffon SwingX Fest testing</title>
		<link>http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=griffon-swingx-fest-testing</link>
		<comments>http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 06:33:38 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[fest]]></category>
		<category><![CDATA[Graphical user interface]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[SwingX]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=236</guid>
		<description><![CDATA[This is the third installment of my Griffon SwingSet experiment. If you&#8217;re coming late to the party (and would like to know just what the heck I&#8217;m talking about) you can catch up by reading this and this. So the SwingX demo has 3 sliders that affect integer values on the JXBusyLabel. Using the Groovy [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/' rel='bookmark' title='More Groovy/Griffon/FEST Testing'>More Groovy/Griffon/FEST Testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/' rel='bookmark' title='SwingX busy label demo in Griffon and Groovy'>SwingX busy label demo in Griffon and Groovy</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>This is the third installment of my Griffon SwingSet experiment. If you&#8217;re coming late to the party (and would like to know just what the heck I&#8217;m talking about) you can catch up by reading <a href="http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/">this</a> and <a href="http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-la…emo-in-griffon/">this</a>.</p>
<p>So the SwingX demo has 3 sliders that affect integer values on the JXBusyLabel. Using the Groovy &#8216;bind&#8217; syntax, responding to changes in these events is simple to say the least.</p>
<p>And as promised in the last post, I&#8217;ve written some FEST tests to validate that everything is working as expected. Stay tuned to the end of the post to see a video of the running tests <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>FEST provides some convenience wrappers for UI elements that allows easy access to common operations. Looking up a JSlider in the UI for instance, returns a JSliderFixture object with a nice little &#8216;slideTo&#8217; method.<br />
First off, here are the UI components under test. Yes, this is the entire code, including all necessary wiring to trigger updates automagically as the sliders are changed.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
speedSlider = slider(
        name: 'speedSlider',
        sliderModel: boundedRangeModel(
                min: 1, max: model.SPEED_MAX - 1, value: model.SPEED_MAX - 1, extent: 0),
        opaque: true)

slider = slider(
        name: 'slider',
        sliderModel: boundedRangeModel(
                min: 1, max: 50, value: 8, extent: 0), opaque: true)

tSlider = slider(
        name: 'tSlider',
        sliderModel: boundedRangeModel(
                min: 1, max: 20, value: 4, extent: 0), opaque: true)

label = jxbusyLabel(name: 'busyLabel',
        preferredSize: new Dimension(model.W / 2 as int, model.H / 2 as int),
        busyPainter: busyPainter(
                highlightColor: bind { model.busyColor }, baseColor: bind {model.baseColor},
                points: bind{slider.value}, trailLength: bind{tSlider.value}),
        opaque: false,
        horizontalAlignment: JLabel.CENTER,
        delay: bind{speedSlider.value})
........
buttons.addLine(button(name: model.START_NAME, action:startAction))
</pre>
<p>And then the tests run against them. Each test moves a slider sequentially from the minimum to the maximum values and checks at each change to ensure that the same change is reflected on the bound JXBusyLabel property. Because the JXBusyLabel does not have a ready corresponding FEST built in fixture class, we just look it up as a Component by inspecting the UI for the appropriate named Component. The Groovy dynamic type system makes accessing its internal properties trivial after that.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
/**
   * Start the animation and then ensure that changing the speed slider changes the delay.
   */
   @Test void testSpeedSlider() {
     def button = window.button(JXBusyLabelDemoModel.START_NAME)
     button.click()
     def JSliderFixture slider = window.slider('speedSlider')
     ComponentFinder finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
     def busyLabel = finder.findByName(app.appFrames[0], 'busyLabel')
     Assert.assertNotNull(slider)
     Assert.assertNotNull(busyLabel)
     (1..JXBusyLabelDemoModel.SPEED_MAX - 1).each { speed -&gt;
       slider.slideTo(speed)
       Assert.assertEquals(busyLabel.delay, speed)
     }
   }

  /**
   * Start the animation and then ensure that changing the points slider changes the
   * number of points.
   */
   @Test void testPointsSlider() {
     def button = window.button(JXBusyLabelDemoModel.START_NAME)
     button.click()
     def JSliderFixture slider = window.slider('slider')
     ComponentFinder finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
     def busyLabel = finder.findByName(app.appFrames[0], 'busyLabel')
     Assert.assertNotNull(slider)
     Assert.assertNotNull(busyLabel)
     (1..50).each { points -&gt;
       slider.slideTo(points)
       Assert.assertEquals(busyLabel.busyPainter.points, points)
     }
   }

  /**
   * Start the animation and then ensure that changing the trail slider changes
   * the trailLength.
   */
   @Test void testTrailSlider() {
     def button = window.button(JXBusyLabelDemoModel.START_NAME)
     button.click()
     def JSliderFixture slider = window.slider('tSlider')
     ComponentFinder finder = BasicComponentFinder.finderWithCurrentAwtHierarchy();
     def busyLabel = finder.findByName(app.appFrames[0], 'busyLabel')
     Assert.assertNotNull(slider)
     Assert.assertNotNull(busyLabel)
     (1..20).each { trailLength -&gt;
       slider.slideTo(trailLength)
       Assert.assertEquals(busyLabel.busyPainter.trailLength, trailLength)
     }
   }
</pre>
<p>It&#8217;s particular amusing to note that the test code is more verbose than the Swing component setup. Man, after all of the Swing code I&#8217;ve written, WHY WAS NONE OF IT EVER THIS EASY!<br />
Sorry for the shouting, but it&#8217;s late and updating this code to use binding instead of change listeners AND writing the tests AND writing this blog post took all of about 45 minutes. So you&#8217;ll have to forgive me for getting excited and all.</p>
<p>Here is the promised video <a href="http://www.kellyrob99.com/blog/wp-content/uploads/2009/04/griffonswingxfesttesting.swf">showing the FEST test suite being run.</a>. Give it a second as the first round of tests(not shown in the code above) do a bunch of assertions to make sure that all of the expected Components can be found. Not terribly interesting to watch, but a great win for Java GUI testing!</p>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/' rel='bookmark' title='More Groovy/Griffon/FEST Testing'>More Groovy/Griffon/FEST Testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/' rel='bookmark' title='SwingX busy label demo in Griffon and Groovy'>SwingX busy label demo in Griffon and Groovy</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SwingX busy label demo in Griffon and Groovy</title>
		<link>http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=swingx-busy-label-demo-in-griffon</link>
		<comments>http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/#comments</comments>
		<pubDate>Sun, 05 Apr 2009 19:05:18 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[SwingLabs]]></category>
		<category><![CDATA[SwingX]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=169</guid>
		<description><![CDATA[The first demonstration panel in the SwingLabs demo is for the JXBusyLabel, a simple component that does exactly what it says &#8211; inform Users of the application that progress is occurring. The setup is highly configurable, allowing changes to the color, shape and size of the rendered label. The SwingX demonstration makes use of an [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/' rel='bookmark' title='More Groovy/Griffon/FEST Testing'>More Groovy/Griffon/FEST Testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>The first demonstration panel in the  <a class="zem_slink" title="SwingLabs" rel="homepage" href="https://swinglabs.dev.java.net/">SwingLabs</a> demo is for the JXBusyLabel, a simple component that does exactly what it says &#8211; inform Users of the application that progress is occurring.  The setup is highly configurable, allowing changes to the color, shape and size of the rendered label.</p>
<p>The SwingX demonstration makes use of an inner &#8216;DetailsPane&#8217; class that nicely handles a lot of the gridbag layout details, but I didn&#8217;t really want to spend the extra time Groovifying a perfectly good and already implemented helper class, so I just threw the java code in the <a class="zem_slink" title="Griffon (framework)" rel="homepage" href="http://groovy.codehaus.org/Griffon">Griffon</a> src directory and that was that. Being able to seamlessly mix <a class="zem_slink" title="Java (software platform)" rel="homepage" href="http://java.sun.com">Java</a> and Groovy is a definite plus, let me tell you. Below is an example of adding a new DetailsPane using the builder DSL, utilizing a GridBagConstants variable named &#8216;gbc&#8217; and assigning the foreground color based on a model property.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
genPane = jxpanel(constraints: gbc,
                              new DetailsPane(&quot;General settings:&quot;, model.FOREGROUND))
</pre>
<p>Here is a side-by-side comparison of Java and then the equivalent Groovy code for creating and initializing a new JXBusyLabel. At first they don&#8217;t look a whole lot different, but if you notice, the Groovy version is actually a one-liner, and uses the bind() syntax to set colors based on a model backed property.</p>
<pre class="brush: java; smart-tabs: true; title: ; notranslate">
 label = new JXBusyLabel(new Dimension((int) (W / 2), (int) (H / 2)));
 label.getBusyPainter().setHighlightColor( new Color(44, 61, 146).darker());
 label.getBusyPainter() .setBaseColor(new Color(168, 204, 241).brighter());
 label.setOpaque(false);
 label.setHorizontalAlignment(JLabel.CENTER);
</pre>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
label = jxbusyLabel(
       preferredSize: new Dimension(model.W / 2 as int,model.H / 2 as int),
       busyPainter: busyPainter(highlightColor: bind{ model.busyColor },
       baseColor: bind{model.baseColor}), opaque: false, horizontalAlignment: JLabel.CENTER)
</pre>
<p>SwingX contains a specialized button that wraps a color chooser component, and here we can look at the differences between the Java and Groovy syntax for instantiating one.  The JXColorSelectionButton class isn&#8217;t actually a node made available by the SwingXBuilder, but adding to the builder syntax dynamically is simple to say the least using a call to &#8216;registerBeanFactory&#8217;. Also in the Groovy version, here we&#8217;re not directly updating the color on the label, we&#8217;re updating the model. While the background color change seems to be correctly updated through the bound &#8216;baseColor&#8217; model property, it does not repaint automagically. I&#8217;m sure there&#8217;s a way to do this, it just hasn&#8217;t popped up yet.</p>
<pre class="brush: java; smart-tabs: true; title: ; notranslate">
JXColorSelectionButton baseColBtn = new JXColorSelectionButton();
baseColBtn.setBackground(label.getBusyPainter().getBaseColor());
baseColBtn.addPropertyChangeListener(&quot;background&quot;, new PropertyChangeListener() {
      public void propertyChange(PropertyChangeEvent evt) {
           label.getBusyPainter().setBaseColor((Color) evt.getNewValue());
           label.repaint();
      }});
</pre>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
registerBeanFactory('colorButton', JXColorSelectionButton.class)
baseColBtn = colorButton(background: model.baseColor)
baseColBtn.addPropertyChangeListener(&quot;background&quot;,
      {PropertyChangeEvent evt -&gt;
           model.baseColor = (Color) evt.getNewValue()
           label.repaint()     //need to figure out how to remove this call!!!
      } as PropertyChangeListener)
</pre>
<p>The Java code uses an anonymous inner class to kick off the process.</p>
<pre class="brush: java; smart-tabs: true; title: ; notranslate">
new JButton(new AbstractAction(&quot;Start&quot;) {
      public void actionPerformed(ActionEvent e) {
           label.setBusy(!label.isBusy());
           putValue(Action.NAME, label.isBusy() ? &quot;Stop&quot; : &quot;Start&quot;);
      }
 })
</pre>
<p>No anonymous inner classes in Groovy, and with the Griffon framework we can separate the concerns a bit better anyhow. This code is split up between the view and the controller classes. Note that the controller can reference(and update) the action by acting through its injected view component.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
/* action and button defined in the view */
actions {
      action(id: &quot;startAction&quot;,
      name: model.START_NAME,
      mnemonic: &quot;S&quot;,
      accelerator: shortcut(&quot;S&quot;),
      closure: controller.start)
 }
button(startAction)
...
/* controller action */
def start =  { ActionEvent evt -&gt;
      view.label.setBusy(!view.label.isBusy())
      view.startAction.putValue(Action.NAME, view.label.isBusy() ? &quot;Stop&quot; : &quot;Start&quot;)
 }
</pre>
<p>Finally, here&#8217;s a code sample of how to add a listener to an existing component and bind the action to a method on the controller:</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
     xSlider.addChangeListener(controller.&amp;fcl as ChangeListener)
</pre>
<p>In most cases, the sample code here is not trying very hard to shorten the syntax; there&#8217;s a lot of room for improvement and further Groovification. I&#8217;m sure there&#8217;s a better way to add listeners, for instance. Anyhow, aside from a few details, the application is up and running and doing the same thing as the original. Total effort expended: probably about 10 hours, a good portion of it spend  Googling and reading. Next step is to write some tests to get better at that side of the equation.  I&#8217;d be including more links about the excellent SwingX components in this post, but the SwingLabs website has been reporting <a href="http://www.google.ca/search?q=%22Maximum+Connections+Reached%3A+4096+--+Retry+later%22&amp;ie=utf-8&amp;oe=utf-8&amp;aq=t&amp;rls=org.mozilla:en-US:official&amp;client=firefox-a">&#8220;Maximum Connections Reached: 4096 &#8212; Retry later&#8221;</a> all day.  Hope everything gets fixed soon guys!</p>
<p>If you&#8217;re interested in seeing this demo live and  in action, there&#8217;s a link to a short <a class="zem_slink" title="Jing" rel="homepage" href="http://jingproject.com">Jing</a> video below.</p>
<p><a href="http://www.kellyrob99.com/blog/wp-content/uploads/2009/04/griffonswingset3_jxbusylabel.swf">Click here for video of the JXBusyLabel demo running on Griffon.</a></p>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/10/more-griffonfest-testing/' rel='bookmark' title='More Groovy/Griffon/FEST Testing'>More Groovy/Griffon/FEST Testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/04/05/swingx-busy-label-demo-in-griffon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Griffon bash completion&#8230;</title>
		<link>http://www.kellyrob99.com/blog/2009/04/03/griffon-bash-completion/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=griffon-bash-completion</link>
		<comments>http://www.kellyrob99.com/blog/2009/04/03/griffon-bash-completion/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 05:18:13 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Bash]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[MacPorts]]></category>
		<category><![CDATA[maven]]></category>
		<category><![CDATA[mvn]]></category>
		<category><![CDATA[Shell]]></category>
		<category><![CDATA[Unix]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=152</guid>
		<description><![CDATA[&#8230; means I don&#8217;t have to remember all of the available Griffon commands. My primary development platform is a Mac, so I used MacPorts to install the bash-completion package long ago. This script is based entirely on the excellent maven completion script documented here on willcodeforbeer. It does the same job for Griffon and includes [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/14/groovy-and-bash-can-scripting-get-much-easier/' rel='bookmark' title='Groovy and Bash &#8211; can scripting get much easier?'>Groovy and Bash &#8211; can scripting get much easier?</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>&#8230; means I don&#8217;t have to remember all of the available Griffon commands. My primary development platform is a Mac, so I used <a href="http://www.macports.org/">MacPorts</a> to install the <a href="http://www.caliban.org/bash/#completion">bash-completion</a> package long ago.<br />
This script is based entirely on the excellent maven completion script documented here on <a href="http://willcode4beer.com/tips.jsp?set=tabMaven">willcodeforbeer</a>. It does the same job for Griffon and includes commands for the plugins I&#8217;m using.</p>
<pre class="brush: bash; smart-tabs: true; title: ; notranslate">
# Griffon completion for the bash shell
#
_griffon()
{
   local cmds cur colonprefixes
   cmds=&quot;bootstrap clean compile console create-app           \
      create-fest-test create-integration-test create-mvc     \
      create-plugin create-script  create-unit-test           \
      create-fest-test run-fest -cobertura help init          \
      install-plugin list-plugins package package-plugin      \
      plugin-info release-plugin run-app run-applet run-fest  \
      run-webstart set-proxy set-version shell stats test-app \
      test-app-cobertura uninstall-plugin upgrade&quot;
   COMPREPLY=()
   cur=${COMP_WORDS[COMP_CWORD]}
   # Work-around bash_completion issue where bash interprets a colon
   # as a separator.
   # Work-around borrowed from the darcs work-around for the same
   # issue.
   colonprefixes=${cur%&quot;${cur##*:}&quot;}
   COMPREPLY=( $(compgen -W '$cmds'  -- $cur))
   local i=${#COMPREPLY[*]}
   while [ $((--i)) -ge 0 ]; do
      COMPREPLY[$i]=${COMPREPLY[$i]#&quot;$colonprefixes&quot;}
   done

        return 0
} &amp;&amp;
complete -F _griffon griffon
</pre>
<p>Add this to your .bash_profile file and you&#8217;re good to go for saving a whole bunch of keystrokes and calls to &#8216;griffon help&#8217;. </p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/86bba6a2-47f8-4f4d-ab3c-18b78b9e3fa5/" title="Zemified by Zemanta"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=86bba6a2-47f8-4f4d-ab3c-18b78b9e3fa5" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/14/groovy-and-bash-can-scripting-get-much-easier/' rel='bookmark' title='Groovy and Bash &#8211; can scripting get much easier?'>Groovy and Bash &#8211; can scripting get much easier?</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/04/03/griffon-bash-completion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SwingSet on Griffon</title>
		<link>http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=swingset-on-griffon</link>
		<comments>http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/#comments</comments>
		<pubDate>Sat, 04 Apr 2009 03:57:47 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[cobertura]]></category>
		<category><![CDATA[fest]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Model-view-controller]]></category>
		<category><![CDATA[Swing]]></category>
		<category><![CDATA[SwingSet]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=103</guid>
		<description><![CDATA[So as&#160; as learning experience, I&#8217;ve decided to try cutting the&#160; SwingSet demo application over to Groovy and Griffon. To make it a little more interesting, I&#8217;m going to base it off of the SwingX version. The SwingX widgets have been a pleasure to work with in the past, and with the swingX plugin, it [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/' rel='bookmark' title='Fun day playing with new Stuff'>Fun day playing with new Stuff</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>So as&nbsp; as learning experience, I&#8217;ve decided to try cutting the&nbsp; <a href="https://swingset3.dev.java.net/">SwingSet demo application</a> over to Groovy and <a class="zem_slink" href="http://groovy.codehaus.org/Griffon" title="Griffon (framework)" rel="homepage">Griffon</a>. To make it a little more interesting, I&#8217;m going to base it off of the <a href="http://swinglabs.org/demos.jsp">SwingX version</a>.</p>
<p>The SwingX widgets have been a pleasure to work with in the past, and with the <a href="http://griffon.codehaus.org/SwingxBuilder+Plugin">swingX plugin</a>, it takes not a single line of extra code in order to use them.&nbsp; The underlying <a href="http://groovy.codehaus.org/SwingXBuilder">SwingXBuilder</a> provides factories which override the standard <a href="http://groovy.codehaus.org/Swing+Builder">SwingBuilder</a> syntax to replace the standard widget set with the SwingX equivalents. Simply add the prefix &#8216;jx&#8217; to the standard SwingBuilder node calls and you&#8217;re in business.</p>
<p>Along the way I&#8217;m going to incorporate the <a href="http://griffon.codehaus.org/Fest+Plugin">fest</a> and <a href="http://griffon.codehaus.org/CodeCoverage+Plugin">cobertura</a> plugins to test out the UI. I&#8217;ve never used fest before but it seems that the only real requirement is to remember to give your components a uniquely identifiable id. There are additional ways of looking up components with fest, for sure, but unique ids should cover this application&#8217;s needs quite nicely. Using both together is a simple exercise on the command line.</p>
<pre class="brush: groovy; title: ; notranslate">griffon run-fest -cobertura</pre>
<p>Under the hood, Griffon uses <a href="http://testng.org/doc/index.html">TestNG</a>, so the test class can also take advantage of some nice familiar annotations to assist configuration. Code coverage and testing results are provided by default in an html format, which anyone who likes their test coverage will be infinitely familiar with.&nbsp; All in all, the experience of setup and execution of the testing framework is pretty painless.</p>
<p>The SwingSet demo is actually laid out pretty nicely for testing in the first place. There&#8217; s a top level MainWindow class, which accepts a DemoPanel parameter. The full demo launches with a SwingXDemo subclass of DemoPanel that aggregates other subclasses of the same into a tabbed pane. Tests are free to call the MainWindow class with any of the individual panels as a parameter, so testing them on their own using fest looks like it would be a cinch.&nbsp; In Griffon terms this roughly translates to a root MVC group that composes another MVC group that is specified by id. Easier to show than to explain, with an example of a call that would go in the controller:</p>
<pre class="brush: groovy; title: ; notranslate">
createMVCGroup(mvcGroupIDParam, uid,   [... param map ...] )
</pre>
<p>The first thing created in the SwingSet UI is the menu, so that&#8217;s what I created first as well. In the view class:</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
 actions {
    action(id: &quot;quitAction&quot;,
            name: model.QUIT_NAME,
            mnemonic: &quot;Q&quot;,
            accelerator: shortcut(&quot;Q&quot;),
            closure: controller.quit)
  }

  menuBar {
    menu(model.MENU_NAME) {
      menuItem(name: model.QUIT_NAME, action:quitAction)
    }
  }
</pre>
<p>The component names are defined in the model class so that they can easily be extracted later for testing purposes.<br />
Including the fest plugin with Griffon adds a target which is used to create a new test, which will prompt you for a test name.</p>
<pre class="brush: groovy; title: ; notranslate">create-fest-test</pre>
<p>The new test class is created with all of the necessary code to let fest launch the base application frame. This first test is very simple, just making sure that our single menu item is present in the GUI.</p>
<pre class="brush: groovy; smart-tabs: true; title: ; notranslate">
  @Test
  void testQuitMenuItemPresent()
  {
    Assert.assertNotNull( window.menuItem(GriffonSwingSet3Model.QUIT_NAME) )
  }
</pre>
<p>That&#8217;s really all it takes to launch a new application using the test harness and verify UI component state. Man, can I think of a couple of times in the past where that might have come in handy <img src='http://www.kellyrob99.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Next, step is cutting over the first SwingSet DemoPanel, a demonstration of JXBusyLabel &#8211; 635 lines of the usual Swing inner classes and boilerplate GridBagLayout constraints code. Really looking forward to seeing how it looks in Groovy.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" href="http://reblog.zemanta.com/zemified/16488263-27eb-48d8-a2e7-387ff800c515/" title="Zemified by Zemanta"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=16488263-27eb-48d8-a2e7-387ff800c515" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related pretty-attribution"><script type="text/javascript" src="http://static.zemanta.com/readside/loader.js" defer="defer"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2009/04/08/griffon-swingx-fest-testing/' rel='bookmark' title='Griffon SwingX Fest testing'>Griffon SwingX Fest testing</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/' rel='bookmark' title='Fun day playing with new Stuff'>Fun day playing with new Stuff</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/08/27/vijug-griffongroovy-presentation/' rel='bookmark' title='VIJUG Griffon/Groovy Presentation'>VIJUG Griffon/Groovy Presentation</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fun day playing with new Stuff</title>
		<link>http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=fun-day-playing-with-new-stuff</link>
		<comments>http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 19:56:46 +0000</pubDate>
		<dc:creator>TheKaptain</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Grails]]></category>
		<category><![CDATA[Griffon]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Model-view-controller]]></category>
		<category><![CDATA[Swing]]></category>

		<guid isPermaLink="false">http://www.kellyrob99.com/blog/?p=50</guid>
		<description><![CDATA[Today was a pretty great day, I must say. I got a chance to work with the brand new Griffon framework and must say &#8211; the combination of clear MVC architecture, Grails style convention over configuration and already powerful plugin selection make it pretty sexy. The early support for cobertura code coverage and fest GUI [...]
Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/07/playing-with-the-new-grails/' rel='bookmark' title='Playing with the new Grails :)'>Playing with the new Grails :)</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Today was a pretty great day, I must say.</p>
<p>I got a chance to work with the brand new <a class="zem_slink" title="Griffon (framework)" rel="homepage" href="http://groovy.codehaus.org/Griffon">Griffon</a> framework and must say &#8211; the combination of clear <a class="zem_slink" title="Model-view-controller" rel="wikipedia" href="http://en.wikipedia.org/wiki/Model-view-controller">MVC</a> architecture, <a class="zem_slink" title="Grails (framework)" rel="homepage" href="http://grails.org">Grails</a> style convention over configuration and already powerful plugin selection make it pretty sexy.</p>
<p>The early support for cobertura <a class="zem_slink" title="Code coverage" rel="wikipedia" href="http://en.wikipedia.org/wiki/Code_coverage">code coverage</a> and fest <a class="zem_slink" title="GUI software testing" rel="wikipedia" href="http://en.wikipedia.org/wiki/GUI_software_testing">GUI testing</a> are both appealing to any developer that appreciates the need for testing your application.  I&#8217;m still undecided on the Grails-like adoption of storing project information in a &#8220;.griffon&#8221; folder in the user directory and completely outside of the actual project directory structure. With luck, future versions will allow for incorporating maven to handle dependency management and get me past my FUD on that one, something that the latest Grails supports. I haven&#8217;t yet tried that new feature out in Grails out so I&#8217;m not entirely sure how well it works, but the docs say that there is a provided archetype and that all of the familiar Grails targets are <a href="http://www.grails.org/Maven+Integration">mirrored in the maven goals</a>.</p>
<p>Being able to add additional Groovy style builders as plugins is about as transparent as it gets &#8211; install the plugin and you can immediately incorporate that builder anywhere in the application.  The only builder component set that I have had a chance to work with previously is <a href="https://swingx.dev.java.net/">SwingX</a>, but anyone who&#8217;s had the opportunity to use a JXTable in place of the vanilla JTable can immediately see the advantage! And the JDirectoryChooser from <a href="http://www.l2fprod.com/">l2fprod</a> is a powerful alternative to the <a class="zem_slink" title="Swing (Java)" rel="wikipedia" href="http://en.wikipedia.org/wiki/Swing_%28Java%29">Swing</a> built-in JFileChooser.</p>
<p>The crown jewel so far however seems to be  the <a href="http://griffon.codehaus.org/Wizard+Plugin">wizard plugin</a>. This addresses what is  a very common scenario in any process related application:</p>
<ul>
<li> collect User input in a series of steps</li>
<li>validate the input at each step</li>
<li>allow the User  to go back and review or change any inputs</li>
<li>apply all of the input to an underlying business process</li>
<li>provide feedback as to the result</li>
</ul>
<p>The <a href="https://wizard.dev.java.net/">wizard framework</a> worked pretty much as advertised right out of the box and, although the project seems to have stalled (couldn&#8217;t seem to  find any updates since mid-2008) , when integrated so well with Griffon it seems a very good candidate for building lightweight applications &#8211; installers in particular jump to mind.</p>
<p>Any way you look at it &#8211; for a project as newly arrived as Griffon, it&#8217;s already promising to be a very powerful enabler. Thanks to <a href="http://www.jroller.com/aalmiray/">Andres Almiray</a> and everyone else involved in the project. I look forward to using Griffon more in the future.</p>
<div class="zemanta-pixie"><a class="zemanta-pixie-a" title="Zemified by Zemanta" href="http://reblog.zemanta.com/zemified/a8105dd0-7c00-4551-8e80-5731041a87c6/"><img class="zemanta-pixie-img" src="http://img.zemanta.com/reblog_c.png?x-id=a8105dd0-7c00-4551-8e80-5731041a87c6" alt="Reblog this post [with Zemanta]" /></a><span class="zem-script more-related"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
<p>Related posts:<ol>
<li><a href='http://www.kellyrob99.com/blog/2010/02/11/a-one-day-griffon-applicationpresentation/' rel='bookmark' title='A One Day Griffon Application/Presentation'>A One Day Griffon Application/Presentation</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/03/07/playing-with-the-new-grails/' rel='bookmark' title='Playing with the new Grails :)'>Playing with the new Grails :)</a></li>
<li><a href='http://www.kellyrob99.com/blog/2009/04/03/swingset-on-griffon/' rel='bookmark' title='SwingSet on Griffon'>SwingSet on Griffon</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.kellyrob99.com/blog/2009/03/15/fun-day-playing-with-new-stuff/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

