<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-883349787615020641</id><updated>2012-01-25T11:55:53.165-05:00</updated><category term='gConfig'/><category term='Grails'/><category term='BGG'/><category term='Gr8'/><category term='Book'/><category term='RefCode'/><category term='Java'/><category term='AbeilleForm'/><category term='Griffon'/><category term='Groovy'/><category term='CSS Groovy'/><category term='Web'/><title type='text'>Shingler's Thoughts</title><subtitle type='html'>Jim Shingler's thoughts about Java, Grails, Groovy, Eclipse RCP, and life in general</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-3516380967864653568</id><published>2010-01-14T16:31:00.003-05:00</published><updated>2010-01-14T16:57:16.115-05:00</updated><title type='text'>Upgrading Beginning Groovy and Grails to Grails 1.2</title><content type='html'>&lt;a href="http://beginninggroovyandgrails.com"&gt;Beginning Groovy and Grails (BGG)&lt;/a&gt;  was the first book using &lt;a href="http://grails.org"&gt;Grails&lt;/a&gt; 1.0.  Since then, Grails 1.1.X and now Grails 1.2 have been released.  &lt;br /&gt;&lt;br /&gt;We have received several requests to upgrade the book code.  I've started the process to upgrade the book code to Groovy 1.7 and Grails 1.2.  You can find it on my &lt;a href="http://github.com/jshingler/BGG_Grails1.2"&gt;GitHub Site: http://github.com/jshingler/BGG_Grails1.2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-3516380967864653568?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/jshingler/BGG_Grails1.2' title='Upgrading Beginning Groovy and Grails to Grails 1.2'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/3516380967864653568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=3516380967864653568' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3516380967864653568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3516380967864653568'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2010/01/upgrading-beginning-groovy-and-grails.html' title='Upgrading Beginning Groovy and Grails to Grails 1.2'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4246899791851160249</id><published>2009-11-26T21:31:00.004-05:00</published><updated>2009-11-26T22:22:17.733-05:00</updated><title type='text'>Griffon Painter Demo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/Sw86O8DvVNI/AAAAAAAAAGA/fn_iM8CWCIQ/s1600/GriffonPainterDemo.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 194px; height: 80px;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/Sw86O8DvVNI/AAAAAAAAAGA/fn_iM8CWCIQ/s400/GriffonPainterDemo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5408605705809646802" /&gt;&lt;/a&gt;&lt;br /&gt;I was looking at the Swing Labs site and ran across the page on painters(&lt;a href="http://swinglabs.org/docs/frameworks/painters/index.jsp"&gt;http://swinglabs.org/docs/frameworks/painters/index.jsp&lt;/a&gt;) and thought the code looked pretty straight forward.  Then I had the thought,  Well Griffon uses SwingX I wonder, . . .  the result is the image above.&lt;br /&gt;&lt;br /&gt;Griffon code:  PainterView.groovy&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;import java.awt.*&lt;br /&gt;import org.jdesktop.swingx.painter.*&lt;br /&gt;&lt;br /&gt;GlossPainter gloss = new GlossPainter(new Color(1.0f, 1.0f, 1.0f, 0.2f),&lt;br /&gt; GlossPainter.GlossPosition.TOP)&lt;br /&gt;&lt;br /&gt;PinstripePainter stripes = new PinstripePainter(&lt;br /&gt; paint: new Color(1.0f, 1.0f, 1.0f, 0.17f),&lt;br /&gt; spacing:5.0&lt;br /&gt; )&lt;br /&gt;MattePainter matte = new MattePainter(new Color(51, 51, 51));&lt;br /&gt;&lt;br /&gt;application(title:'painter',&lt;br /&gt;   //size:[320,480],&lt;br /&gt;   pack:true,&lt;br /&gt;   //location:[50,50],&lt;br /&gt;   locationByPlatform:true,&lt;br /&gt;   iconImage: imageIcon('/griffon-icon-48x48.png').image,&lt;br /&gt;   iconImages: [imageIcon('/griffon-icon-48x48.png').image,&lt;br /&gt;               imageIcon('/griffon-icon-32x32.png').image,&lt;br /&gt;               imageIcon('/griffon-icon-16x16.png').image]&lt;br /&gt;) {&lt;br /&gt;    jxpanel(id: "header",&lt;br /&gt;            backgroundPainter: new CompoundPainter(matte, stripes, gloss)) {&lt;br /&gt;     label('Griffon Painter Demo', &lt;br /&gt;           icon: imageIcon(resource:'griffon-icon-48x48.png'), &lt;br /&gt;           foreground: Color.white)&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4246899791851160249?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4246899791851160249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4246899791851160249' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4246899791851160249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4246899791851160249'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/11/griffon-painter-demo.html' title='Griffon Painter Demo'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-rQyacBJqn8/Sw86O8DvVNI/AAAAAAAAAGA/fn_iM8CWCIQ/s72-c/GriffonPainterDemo.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-2508962809217394803</id><published>2009-11-10T18:58:00.002-05:00</published><updated>2009-11-10T19:04:09.524-05:00</updated><title type='text'>COJUG: Eclipse Demo Camp Links</title><content type='html'>Here are the Links for my COJUG: Eclipse Demo Camp Groovy and Grails Plugins discussion&lt;br /&gt;&lt;br /&gt;You can use these links to download the Eclipse Groovy V2 plugin and SpringSource Tool Suite.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groovy.codehaus.org/Eclipse+Plugin+V2+FAQ#EclipsePluginV2FAQ"&gt;http://groovy.codehaus.org/Eclipse+Plugin+V2+FAQ#EclipsePluginV2FAQ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/"&gt;http://blog.springsource.com/2009/07/30/a-groovier-eclipse-experience/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.codehaus.org/pages/viewpage.action?pageId=133464433"&gt;http://docs.codehaus.org/pages/viewpage.action?pageId=133464433&lt;/a&gt;&lt;br /&gt;&lt;a href="http://grails.org/STS+Integration"&gt;http://grails.org/STS+Integration&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.springsource.com/products/springsource-tool-suite-download"&gt;http://www.springsource.com/products/springsource-tool-suite-download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-2508962809217394803?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/2508962809217394803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=2508962809217394803' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2508962809217394803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2508962809217394803'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/11/cojug-eclipse-demo-camp-links.html' title='COJUG: Eclipse Demo Camp Links'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-2648769047138224920</id><published>2009-09-10T07:34:00.002-04:00</published><updated>2009-09-10T08:06:06.392-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>The Griffon Celebrates</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://media.xircles.codehaus.org/_projects/griffon/_logos/medium.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 310px; height: 100px;" src="http://media.xircles.codehaus.org/_projects/griffon/_logos/medium.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;WooHooo!  &lt;a href="http://griffon.codehaus.org"&gt;Griffon &lt;/a&gt;celebrates the first anniversary of its public release today.  Griffon was first released Sept. 10, 2008.  It is hard to believe it has only been a year.&lt;br /&gt;&lt;br /&gt;It has been a very productive first year.  Griffon is maturing and the word is getting out. For me, the most notable event was &lt;a href="http://glaforge.free.fr/weblog/"&gt;Guillaume Laforge&lt;/a&gt; winning the Java One 2009 Scriptbowl with an application called &lt;a href="http://github.com/griffon/twittersphere/tree/master"&gt;Twittersphere&lt;/a&gt;.  Twittersphere was build using Griffon and Groovy.&lt;br /&gt;&lt;br /&gt;The founding fathers of Griffon (&lt;a href="http://shemnon.com/speling/"&gt;Danno Ferrin&lt;/a&gt;, &lt;a href="http://www.jroller.com/aalmiray/"&gt;Andres Almiray&lt;/a&gt;, &lt;a href="http://jameswilliams.be/blog/entry/index"&gt;James Williams&lt;/a&gt;)  have done an absolutely fabulous job.  Their work and dedication have enabled it to become what it is today. &lt;br /&gt;&lt;br /&gt;Well Done guys!&lt;br /&gt;&lt;br /&gt;PS Keep your ears open, . . .  you might hear some Griffon news soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-2648769047138224920?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://griffon.codehaus.org' title='The Griffon Celebrates'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/2648769047138224920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=2648769047138224920' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2648769047138224920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2648769047138224920'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/09/griffon-celebrates.html' title='The Griffon Celebrates'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4723271232151671032</id><published>2009-09-05T15:35:00.003-04:00</published><updated>2009-09-05T15:49:53.951-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='gConfig'/><title type='text'>ANN: gConfig  0.1.2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s1600-h/gConfig-intro.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s400/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331396774383682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am pleased to announce the release of gConfig 0.1.2, a configuration tool for &lt;a href="http://griffon.codehaus.org"&gt;Griffon&lt;/a&gt;, a Groovy Technology.&lt;br /&gt;&lt;br /&gt;This release is an upgrade to Griffon 0.1.2 and resolves a LogManager not found issue.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Background&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;While building Griffon applications, I found myself doing the same repeatative steps when I started building the application.  Install these sets of plugins, get those additional 3rd party jars, and oh ya, I want a menubar, toolbar, statusbar, . . . ,  you get the drift.&lt;br /&gt;&lt;br /&gt;I felt like I was spending too much time doing boilerplate code.  So I did what any good IT person would do, made it easier through automation.  The result is &lt;a href="http://dist.codehaus.org/griffon/gConfig-0.1.2-installer.jar"&gt;gConfig&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After creating the application, you run gConfig.  gConfig is a wizard that will present you with a list of the currently available plugins.  You pick which ones you one and the move on to select some popular predefined 3rd party jars.  Finally, you are presented with a collection of templates (Menubar, ToolBar, StatusBar, About, and Tips) to install. &lt;br /&gt;&lt;br /&gt;When you have completed your selections, gConfig will do the rest.  Install the plugins, download the jars, and install the selected templates.&lt;br /&gt;&lt;br /&gt;It saves a load of time.&lt;br /&gt;&lt;br /&gt;Give it a &lt;a href="http://dist.codehaus.org/griffon/gConfig-0.1.2-installer.jar"&gt;try&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Screen Shots:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/ShyraZj887I/AAAAAAAAAFg/A0C8Bp6GDD4/s1600-h/gConfig-intro.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/ShyraZj887I/AAAAAAAAAFg/A0C8Bp6GDD4/s320/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331728181195698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqiGHvZaI/AAAAAAAAAE4/wGfduzcZGOc/s1600-h/gConfig-project.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqiGHvZaI/AAAAAAAAAE4/wGfduzcZGOc/s320/gConfig-project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330760889918882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqqgJpZCI/AAAAAAAAAFA/OzWErWj3Wmw/s1600-h/gConfig-plugins.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqqgJpZCI/AAAAAAAAAFA/OzWErWj3Wmw/s320/gConfig-plugins.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330905316189218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-rQyacBJqn8/ShyqzExY7cI/AAAAAAAAAFI/NjuamXEwIM8/s1600-h/gConfig-thirdparty.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://3.bp.blogspot.com/_-rQyacBJqn8/ShyqzExY7cI/AAAAAAAAAFI/NjuamXEwIM8/s320/gConfig-thirdparty.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331052585512386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/Shyq5s-XTsI/AAAAAAAAAFQ/w6H9OP8ZhO8/s1600-h/gConfig-templates.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/Shyq5s-XTsI/AAAAAAAAAFQ/w6H9OP8ZhO8/s320/gConfig-templates.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331166456565442" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4723271232151671032?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dist.codehaus.org/griffon/gConfig-0.1.2-installer.jar' title='ANN: gConfig  0.1.2'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4723271232151671032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4723271232151671032' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4723271232151671032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4723271232151671032'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/09/ann-gconfig-012.html' title='ANN: gConfig  0.1.2'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s72-c/gConfig-intro.png' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7946099101947900155</id><published>2009-08-03T09:15:00.003-04:00</published><updated>2009-08-03T12:49:15.491-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RefCode'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>ANN: Grails RefCode Plugin 0.2</title><content type='html'>&lt;a href="http://marceloverdijk.blogspot.com/2008/05/ref-code-plugin.html"&gt;Marcel Overdijk&lt;/a&gt; released &lt;a href="http://www.grails.org/Ref+Code+Plugin"&gt;RefCode plugin&lt;/a&gt; May 2008.  The plugin provides an easy solution for 'code/description' reference/lookup data. Often in your business model you have simple reference/lookup tables with just code and description columns; e.g. Country (uk=United Kingdom, nl=Netherlands, ...), OrderStatus (C=Cancelled, N=New, P=Pending, S=Shipped), OrganizationType, ...&lt;br /&gt;&lt;br /&gt;The latest release of the plugin include the refCode Custom Constraint to make validation against the domain valued even easier.&lt;br /&gt;&lt;br /&gt;Assuming you a have a domain of "USStates", you can now setup a constraint like so:&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;class Person {&lt;br /&gt;    String name&lt;br /&gt;    String street&lt;br /&gt;    String city&lt;br /&gt;    String state&lt;br /&gt;    String zip&lt;br /&gt;&lt;br /&gt;    static constraints = {&lt;br /&gt;        name()&lt;br /&gt;        street()&lt;br /&gt;        city()&lt;br /&gt;        state(refCode:"USStates")&lt;br /&gt;        zip()&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You can find out more about the RefCode Plugin at: &lt;a href="http://www.grails.org/Ref+Code+Plugin"&gt;http://www.grails.org/Ref+Code+Plugin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7946099101947900155?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.grails.org/Ref+Code+Plugin' title='ANN: Grails RefCode Plugin 0.2'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7946099101947900155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7946099101947900155' title='85 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7946099101947900155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7946099101947900155'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/08/ann-grails-refcode-plugin-02.html' title='ANN: Grails RefCode Plugin 0.2'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>85</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7849837300239363579</id><published>2009-06-05T10:23:00.006-04:00</published><updated>2009-06-05T10:35:29.722-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>J1 Thirsty Head : Groovy, Grails Griffon Videos</title><content type='html'>Scott Davis of &lt;a href="http://thirstyhead.com/"&gt;Thirsty Head&lt;/a&gt; was able to get some Gr8 interviews at Java One.&lt;br /&gt;&lt;br /&gt;They include many of the leaders of the &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;, &lt;a href="http://grails.org"&gt;Grails&lt;/a&gt;, &amp; &lt;a href="http://griffon.codehaus.org"&gt;Griffon &lt;/a&gt;community.&lt;br /&gt;&lt;br /&gt;Here they are all in one place.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2194835"&gt;Interview with Dierk Koenig&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2195084"&gt;Interview with Danno Ferrin, James Williams of Griffon&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2197817"&gt;Interview with Graeme Rocher&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2197838"&gt;Interview with Dave Klein&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2197859"&gt;Interview with Geertjan Wielenga&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2197953"&gt;Interview with Andres Almiray&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2198373"&gt;Interview with Sven Haiges and Glen Smith&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2201209"&gt;Interview with Guillaume Laforge&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blip.tv/file/2202297"&gt;Interview with Robert Fischer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7849837300239363579?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7849837300239363579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7849837300239363579' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7849837300239363579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7849837300239363579'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/06/j1-thirsty-head-groovy-grails-griffon.html' title='J1 Thirsty Head : Groovy, Grails Griffon Videos'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4687228553763151397</id><published>2009-06-02T21:03:00.011-04:00</published><updated>2009-06-02T22:10:29.481-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='AbeilleForm'/><title type='text'>ANN: AbeilleForm-Builder 0.1 - Griffon Plugin</title><content type='html'>I am pleased to announce the first release of AbeilleForm Builder.  The AbeilleForm Builder makes it possible to easily use Abeille Forms in your Groovy swingbuilder and Griffon applications&lt;br /&gt;&lt;br /&gt;Abeille Forms Designer is a GUI builder for Java applications. Developers and designers can create complex, professional forms in minutes. Designers can drag and drop components onto a WYSIWYG editor. Full support for undo/redo and copy/paste is provided. Components can be easily customized by adding images or modifying their properties. Advanced fill effects are supported such as textures and gradients.&lt;br /&gt;&lt;br /&gt;With the AbeilleForm Builder, you can use the .jfrm file in your application and access the form components.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installation &lt;/h2&gt;&lt;br /&gt;The builder is installed as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;griffon install-plugin abeilleform-builder&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Usage&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;application(title:'taf',&lt;br /&gt;  //size:[320,480],&lt;br /&gt;  pack:true,&lt;br /&gt;  //location:[50,50],&lt;br /&gt;  locationByPlatform:true,&lt;br /&gt;  iconImage: imageIcon('/griffon-icon-48x48.png').image,&lt;br /&gt;  iconImages: [imageIcon('/griffon-icon-48x48.png').image,&lt;br /&gt;               imageIcon('/griffon-icon-32x32.png').image,&lt;br /&gt;               imageIcon('/griffon-icon-16x16.png').image]&lt;br /&gt;) {&lt;br /&gt;    build(Actions)&lt;br /&gt;    formPanel(id: "cf", "countForm.jfrm")&lt;br /&gt;    countButton.action = clickAction&lt;br /&gt;    bind(source: model ,sourceProperty: "count", target: countLabel, targetProperty: "text" )&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Notice the node "formPanel".  The "formPanel" node loads the ".jfrm" form created in the AbeilleForm Designer into your griffon application.  During the process of loading the form, the builder creates a bean reference for the form components.  This allows us to address the form component by name.  E.g "countButton" and "countLabel"&lt;br /&gt;&lt;br /&gt;You can learn more about AbeilleForms at &lt;a href="http://abeille.dev.java.net"&gt;http://abeille.dev.java.net&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4687228553763151397?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://griffon.codehaus.org/AbeilleformBuilder+Plugin' title='ANN: AbeilleForm-Builder 0.1 - Griffon Plugin'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4687228553763151397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4687228553763151397' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4687228553763151397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4687228553763151397'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/06/ann-abeilleform-builder-01-griffon.html' title='ANN: AbeilleForm-Builder 0.1 - Griffon Plugin'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7322877027987667133</id><published>2009-05-26T22:24:00.018-04:00</published><updated>2009-05-29T08:08:30.515-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='gConfig'/><title type='text'>ANN gConfig 0.1 - a Configuration tool for Griffon</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s1600-h/gConfig-intro.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 240px;" src="http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s400/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331396774383682" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am pleased to announce the first public release of gConfig 0.1, a configuration tool for &lt;a href="http://griffon.codehaus.org"&gt;Griffon&lt;/a&gt;, a Groovy Technology.&lt;br /&gt;&lt;br /&gt;While building Griffon applications, I found myself doing the same repeatative steps when I started building the application.  Install these sets of plugins, get those additional 3rd party jars, and oh ya, I want a menubar, toolbar, statusbar, . . . ,  you get the drift.&lt;br /&gt;&lt;br /&gt;I felt like I was spending too much time doing boilerplate code.  So I did what any good IT person would do, made it easier through automation.  The result is &lt;a href="http://dist.codehaus.org/griffon/gConfig-0.1-installer.jar"&gt;gConfig&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;After creating the application, you run gConfig.  gConfig is a wizard that will present you with a list of the currently available plugins.  You pick which ones you one and the move on to select some popular predefined 3rd party jars.  Finally, you are presented with a collection of templates (Menubar, ToolBar, StatusBar, About, and Tips) to install. &lt;br /&gt;&lt;br /&gt;When you have completed your selections, gConfig will do the rest.  Install the plugins, download the jars, and install the selected templates.&lt;br /&gt;&lt;br /&gt;It saves a load of time.&lt;br /&gt;&lt;br /&gt;Give it a &lt;a href="http://dist.codehaus.org/griffon/gConfig-0.1-installer.jar"&gt;try&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Screen Shots:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/ShyraZj887I/AAAAAAAAAFg/A0C8Bp6GDD4/s1600-h/gConfig-intro.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/ShyraZj887I/AAAAAAAAAFg/A0C8Bp6GDD4/s320/gConfig-intro.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331728181195698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqiGHvZaI/AAAAAAAAAE4/wGfduzcZGOc/s1600-h/gConfig-project.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqiGHvZaI/AAAAAAAAAE4/wGfduzcZGOc/s320/gConfig-project.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330760889918882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqqgJpZCI/AAAAAAAAAFA/OzWErWj3Wmw/s1600-h/gConfig-plugins.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/_-rQyacBJqn8/ShyqqgJpZCI/AAAAAAAAAFA/OzWErWj3Wmw/s320/gConfig-plugins.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340330905316189218" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-rQyacBJqn8/ShyqzExY7cI/AAAAAAAAAFI/NjuamXEwIM8/s1600-h/gConfig-thirdparty.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://3.bp.blogspot.com/_-rQyacBJqn8/ShyqzExY7cI/AAAAAAAAAFI/NjuamXEwIM8/s320/gConfig-thirdparty.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331052585512386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/Shyq5s-XTsI/AAAAAAAAAFQ/w6H9OP8ZhO8/s1600-h/gConfig-templates.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/Shyq5s-XTsI/AAAAAAAAAFQ/w6H9OP8ZhO8/s320/gConfig-templates.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5340331166456565442" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7322877027987667133?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dist.codehaus.org/griffon/gConfig-0.1-installer.jar' title='ANN gConfig 0.1 - a Configuration tool for Griffon'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7322877027987667133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7322877027987667133' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7322877027987667133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7322877027987667133'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/05/ann-gconfig-01-configuration-tool-for.html' title='ANN gConfig 0.1 - a Configuration tool for Griffon'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-rQyacBJqn8/ShyrHG-aUEI/AAAAAAAAAFY/dq8y_eIZyXM/s72-c/gConfig-intro.png' height='72' width='72'/><thr:total>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7703321667063915880</id><published>2009-05-24T16:00:00.003-04:00</published><updated>2009-05-24T20:52:47.066-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Gr8'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Gr8Conf (Denmark 2009) - Photos</title><content type='html'>The following photos contain pics from Gr8Conf, the Groovy Technologies Conference.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=15rX"&gt;http://mypict.me/show.php?id=15rX&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=15IO"&gt;http://mypict.me/show.php?id=15IO&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=16Qh"&gt;http://mypict.me/show.php?id=16Qh&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=16ab"&gt;http://mypict.me/show.php?id=16ab&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=19nn"&gt;http://mypict.me/show.php?id=19nn&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=19jW"&gt;http://mypict.me/show.php?id=19jW&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=19dl"&gt;http://mypict.me/show.php?id=19dl&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=15IO"&gt;http://mypict.me/show.php?id=15IO&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mypict.me/show.php?id=15AS"&gt;http://mypict.me/show.php?id=15AS&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitpic.com/5jsa2"&gt;http://twitpic.com/5jsa2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://twitpic.com/5hqf2"&gt;http://twitpic.com/5hqf2&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.flickr.com/photos/frankvilhelmsen/sets/72157618368303059/"&gt;http://www.flickr.com/photos/frankvilhelmsen/sets/72157618368303059/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tweets from Gr8Conf:&lt;br /&gt;&lt;a href="http://www.twazzup.com/search?q=gr8conf"&gt;http://www.twazzup.com/search?q=gr8conf&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.twazzup.com/search?q=gr8conf"&gt;http://www.twazzup.com/search?q=gr8conf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Griffon Shirt:&lt;br /&gt;&lt;a href="http://www.cafepress.com/griffongroovy"&gt;http://www.cafepress.com/griffongroovy&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7703321667063915880?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gr8conf.org' title='Gr8Conf (Denmark 2009) - Photos'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7703321667063915880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7703321667063915880' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7703321667063915880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7703321667063915880'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/05/gr8cong-denmark-2009-photos.html' title='Gr8Conf (Denmark 2009) - Photos'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4946624529984009905</id><published>2009-05-23T21:01:00.002-04:00</published><updated>2009-05-23T21:04:39.302-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Gr8'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Gr8Cong - Griffon Code @GitHub</title><content type='html'>The Code for the Griffon Desktop Front-end application to Graeme's Twitter Clone is available at &lt;a href="http://github.com/jshingler/gr8conf_2009/tree/master"&gt;GitHub&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4946624529984009905?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/jshingler/gr8conf_2009/tree/master' title='Gr8Cong - Griffon Code @GitHub'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4946624529984009905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4946624529984009905' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4946624529984009905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4946624529984009905'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/05/gr8cong-griffon-code-github.html' title='Gr8Cong - Griffon Code @GitHub'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7722126113847803788</id><published>2009-05-23T20:41:00.002-04:00</published><updated>2009-05-23T21:00:21.282-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Gr8'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Really Good Blog post covering Gr8Conf</title><content type='html'>Really Good Blog post covering Gr8Conf: &lt;a href="http://gettinggroovy.wordpress.com/category/gr8/"&gt;http://gettinggroovy.wordpress.com/category/gr8/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7722126113847803788?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gettinggroovy.wordpress.com/category/gr8/' title='Really Good Blog post covering Gr8Conf'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7722126113847803788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7722126113847803788' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7722126113847803788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7722126113847803788'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/05/really-good-blog-post-covering-gr8conf.html' title='Really Good Blog post covering Gr8Conf'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1368604286612278334</id><published>2009-05-23T20:35:00.002-04:00</published><updated>2009-05-23T20:38:19.237-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Gr8'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Gr8 Conf  - Outstanding Success</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://groovy.codehaus.org/download/attachments/1871/banner120x246.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 246px;" src="http://groovy.codehaus.org/download/attachments/1871/banner120x246.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Well the Gr8Conf was an outstanding success. The organizers &lt;a href="http://www.version2.dk/bruger/3721"&gt;Soeren Glasius&lt;/a&gt; and &lt;a href="http://glaforge.free.fr/weblog/index.php?catid=2&amp;blogid=1"&gt;Guillaume Laforge&lt;/a&gt; put on Gr8 Conference, it will be hard to top.&lt;br /&gt;&lt;br /&gt;Guillaume Laforge, Graeme Rocher, Paul King, Dierk Koenig, Jochen Theodorou, and many other Groovy technology giants were there.  It was an honor to be in the presence of all that Groovy brain power, . . .&lt;br /&gt;&lt;br /&gt;The attendees were pretty sharp too, . . . there were some gr8 questions and ideas shared.  I've already started following on the Griffon ideas.&lt;br /&gt;&lt;br /&gt;And Copenhagen, . . .  What a wonderful place.  Everyone was very kind and helpful.  And the sights, . . .  Many wonderful things to see and do.&lt;br /&gt;&lt;br /&gt;I would like to give a special Thank you to Soeren for being such a Gr8 Host.  He really took Gr8 care of everyone and made everyone feel at home.  I would especially like to thank him for helping me and my family have fun and seeing the sights of Copenhagen and Denmark.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1368604286612278334?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://gr8conf.org' title='Gr8 Conf  - Outstanding Success'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1368604286612278334/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1368604286612278334' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1368604286612278334'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1368604286612278334'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/05/gr8-conf-outstanding-success.html' title='Gr8 Conf  - Outstanding Success'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1842080587396837254</id><published>2009-04-28T22:15:00.004-04:00</published><updated>2009-04-28T22:22:01.552-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>ANN: Griffon Splash Plugin Updated</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://svn.codehaus.org/griffon/plugins/griffon-splash/trunk/griffon-app/resources/splash.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 381px; height: 123px;" src="http://svn.codehaus.org/griffon/plugins/griffon-splash/trunk/griffon-app/resources/splash.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am pleased to announce the release of the Griffon plugin, Splash 0.1.1. Splash has been updated to use the new Griffon Banner and enhanced as per &lt;a href="http://jira.codehaus.org/browse/GRIFFON-38?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;focusedCommentId=174469#action_174469 "&gt;GRIFFON-38&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1842080587396837254?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1842080587396837254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1842080587396837254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1842080587396837254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1842080587396837254'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/04/ann-griffon-splash-plugin-updated.html' title='ANN: Griffon Splash Plugin Updated'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1928294588134109187</id><published>2009-01-18T18:39:00.007-05:00</published><updated>2009-01-18T19:07:46.324-05:00</updated><title type='text'>ANN: Griffon Splash Screen Plugin</title><content type='html'>I am pleased to announce the release of my first Griffon plugin, Splash.  Splash is a Griffon splash screen plugin based upon Roy Ratcliff's Java Splash Screen paper &lt;a href="http://www.randelshofer.ch/oop/javasplash/Java%20Splash%20Screen.pdf"&gt;http://www.randelshofer.ch/oop/javasplash/Java%20Splash%20Screen.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Installation&lt;/h2&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;griffon install-plugin splash&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The "initialize.groovy" script causes the splash screen to be displayed.  The splash screen is disposed of by the "ready.groovy" script.  Griffon executes teh initialize script then creates and initialize the controller, model, and view.  Durring the initialization process, the splash screen status can be updated using the following technique.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;SplashScreen.getInstance().showStatus("Initializing the Controller")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The plugin also provides the ability to provide your own image. this is accomplished in the &lt;pre&gt;initialize.groovy&lt;/pre&gt; script using the following technique.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;def splashScreen = SplashScreen.getInstance()&lt;br /&gt;&lt;br /&gt;// Setting a splash image&lt;br /&gt;URL url = this.class.getResource("mySplash.jpg")&lt;br /&gt;splashScreen.setImage(url)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Keep an eye on: &lt;a href="http://griffon.codehaus.org/Splash+Plugin"&gt;http://griffon.codehaus.org/Splash+Plugin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A special thanks to &lt;a href="http://www.jroller.com/aalmiray/"&gt;Andres Almiray&lt;/a&gt; for helping me and all of the Griffon Team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1928294588134109187?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://griffon.codehaus.org/Splash+Plugin' title='ANN: Griffon Splash Screen Plugin'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1928294588134109187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1928294588134109187' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1928294588134109187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1928294588134109187'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/01/ann-griffon-splash-screen-plugin.html' title='ANN: Griffon Splash Screen Plugin'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5003009598242374734</id><published>2009-01-17T22:35:00.023-05:00</published><updated>2009-01-18T00:28:01.601-05:00</updated><title type='text'>Testing new SyntaxHighlighting Plugin</title><content type='html'>This is a simple post to test syntax highlighting &lt;br /&gt;&lt;pre name="code" class="java"&gt;&lt;br /&gt;public void printHello(){  &lt;br /&gt;     System.out.println("Hello World");  &lt;br /&gt;}  &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Let's try some Groovy code now&lt;br /&gt;&lt;pre name="code" class="groovy"&gt;&lt;br /&gt;&lt;br /&gt;class MyController {&lt;br /&gt;    // these will be injected by Griffon&lt;br /&gt;    def model&lt;br /&gt;    def view&lt;br /&gt;&lt;br /&gt;    void mvcGroupInit(Map args) {&lt;br /&gt;        // this method is called after model and view are injected&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /*&lt;br /&gt;    def action = { evt = null -&gt;&lt;br /&gt;    }&lt;br /&gt;    */&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I hope it works&lt;br /&gt;&lt;br /&gt;Got it working, . . .  &lt;br /&gt;&lt;br /&gt;Keys to getting it working:&lt;br /&gt;&lt;a href="http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html"&gt;http://fahdshariff.blogspot.com/2008/07/syntax-highlighting-code-in-webpages.html&lt;/a&gt;&lt;/ br&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/syntaxhighlighter/wiki/BloggerMode"&gt;http://code.google.com/p/syntaxhighlighter/wiki/BloggerMode&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Borrowed Groovy Highlighting from: &lt;a href="http://grails.org/SyntaxHighlighter+Plugin"&gt;http://grails.org/SyntaxHighlighter+Plugin&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5003009598242374734?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5003009598242374734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5003009598242374734' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5003009598242374734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5003009598242374734'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/01/testing-new-syntaxhighlighting-plugin.html' title='Testing new SyntaxHighlighting Plugin'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-3230285952351302095</id><published>2009-01-11T15:33:00.002-05:00</published><updated>2009-01-11T15:39:14.310-05:00</updated><title type='text'>CodeMash 2009 - Griffon in Front Grails in Back</title><content type='html'>I uploaded the slides from my Griffon in Front Grails in Back session at CodeMash 2009.&lt;br /&gt;&lt;br /&gt;For Those of you who attend the talk, I enhanced the counting application based upon your questions.  The code in the counting example now includes @bindable.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Slides: &lt;a href="http://www.slideshare.net/jshingler/griffon-in-front-grails-in-back-presentation"&gt;http://www.slideshare.net/jshingler/griffon-in-front-grails-in-back-presentation&lt;/a&gt;&lt;br /&gt;gCollabTodo Code: &lt;a href="http://github.com/jshingler/gcollabtodo/tree/master"&gt;http://github.com/jshingler/gcollabtodo/tree/master&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-3230285952351302095?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/3230285952351302095/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=3230285952351302095' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3230285952351302095'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3230285952351302095'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/01/codemash-2009-griffon-in-front-grails.html' title='CodeMash 2009 - Griffon in Front Grails in Back'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-8036556697866849353</id><published>2009-01-09T14:37:00.002-05:00</published><updated>2009-01-09T14:40:37.717-05:00</updated><title type='text'>CodeMash 2009 - Groovy and Grails Precompile</title><content type='html'>Just uploaded the Slides and Code from the Precompile Presentation that Chris Judd and I did at CodeMash 2009 on Groovy and Grails.  &lt;br /&gt;&lt;br /&gt;The presentation went really well. &lt;br /&gt;&lt;br /&gt;Slides:   &lt;a href="http://www.slideshare.net/jshingler/gg-code-mash2009-20090106-presentation/"&gt;http://www.slideshare.net/jshingler/gg-code-mash2009-20090106-presentation/&lt;/a&gt;&lt;br /&gt;Code: &lt;a href="http://github.com/jshingler/codemash2009precompile/tree/master"&gt;http://github.com/jshingler/codemash2009precompile/tree/master&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-8036556697866849353?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/8036556697866849353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=8036556697866849353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/8036556697866849353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/8036556697866849353'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2009/01/codemash-2009-groovy-and-grails.html' title='CodeMash 2009 - Groovy and Grails Precompile'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-320195840894715358</id><published>2008-11-27T10:55:00.004-05:00</published><updated>2008-11-27T11:09:27.259-05:00</updated><title type='text'>Griffon Collab Todo Example</title><content type='html'>Okay, it is still a work in progress, . . . But, I have pushed the Griffon Collab Todo application to &lt;a href="http://github.com/jshingler/gcollabtodo/wikis"&gt;Github (http://github.com/jshingler/gcollabtodo/wikis)&lt;/a&gt;.  Griffon Collab Todo is a reimplementation of the Swing Client found in Chapter 13 of &lt;a href="http://www.beginninggroovyandgrails.com"&gt;Beginning Groovy and Grails&lt;/a&gt; using Griffon.&lt;br /&gt;&lt;br /&gt;The application is a &lt;a href="http://griffon.codehaus.org"&gt;Griffon&lt;/a&gt; (Groovy &amp; Swing) client to a &lt;a href="http://grails.org"&gt;Grails&lt;/a&gt; Web Application.  It communicates with the Grails application using a JSON Restful approach.&lt;br /&gt;&lt;br /&gt;While it is still a work in progress, . . .  It does give you an idea of they types of things you can do with Griffon.&lt;br /&gt;&lt;br /&gt;Stay tuned, as time permits, I will blog more info on my experiences with Griffon.  BTW, it has been fun.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.shemnon.com/speling/"&gt;Danno&lt;/a&gt;, &lt;a href="http://www.jroller.com/aalmiray/"&gt;Andres&lt;/a&gt;, and &lt;a href="http://jameswilliams.be"&gt;James&lt;/a&gt; have done a Great Job with Griffon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-320195840894715358?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://github.com/jshingler/gcollabtodo/wikis' title='Griffon Collab Todo Example'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/320195840894715358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=320195840894715358' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/320195840894715358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/320195840894715358'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/11/okay-it-is-still-work-in-progress.html' title='Griffon Collab Todo Example'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-999958964672742221</id><published>2008-11-24T13:19:00.001-05:00</published><updated>2008-11-24T13:22:41.944-05:00</updated><title type='text'>Installing Griffon Snapshot</title><content type='html'>Griffon is to Desktop as Grails is to Web Apps.&lt;br /&gt;&lt;br /&gt;Here are some instructions for installing the latest Griffon Dev Snapshot on Windows.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Assumptions:&lt;/span&gt; java is already installed.&lt;br /&gt;&lt;br /&gt;   1. Download the source (http://svn.codehaus.org/griffon) using your favorite Subversion tool. I like SmartSVN (http://www.syntevo.com/smartsvn)&lt;br /&gt;   2. cd download\core\trunk&lt;br /&gt;   3. run ant to build the code&lt;br /&gt;   4. create an installer. ant create-installer-izpack (look in ant\build\installer.xml for other options)&lt;br /&gt;   5. execute trunk\dist\griffon-installer-0.1.SNAPSHOT.jar (java -jar griffon-installer-0.1.SNAPSHOT.jar)&lt;br /&gt;&lt;br /&gt;NOTE: Depending upon when you download the source, there is an error in the windows installer. It puts a PATH entry in the User variables that contains ${OLD_PATH_VALUE}. This creates a problem. A work around is to delete the PATH entry in User Variables and add the appropriate info to the System PATH variable. You should also make sure that GRIFFON_HOME has been defined.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-999958964672742221?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/999958964672742221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=999958964672742221' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/999958964672742221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/999958964672742221'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/11/installing-griffon-snapshot.html' title='Installing Griffon Snapshot'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-9217485562061110620</id><published>2008-11-02T19:23:00.003-05:00</published><updated>2008-11-02T19:38:21.952-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Griffon'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='BGG'/><title type='text'>Griffon Collab-Todo</title><content type='html'>Coming Soon! In Chapter 13 of "Beginning Groovy and Grails" I built a Swing GUI using SwingXBuilder that interacted with a Grails RESTFul Web Service.  I am finishing the process of creating a Griffon version of the same application.  It is starting to look good.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-rQyacBJqn8/SQ5HNCDlYUI/AAAAAAAAADc/_yzPmnjyQbI/s1600-h/CollabTodoGriffon.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 262px; height: 320px;" src="http://2.bp.blogspot.com/_-rQyacBJqn8/SQ5HNCDlYUI/AAAAAAAAADc/_yzPmnjyQbI/s320/CollabTodoGriffon.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5264223303658463554" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will be uploading the source to the &lt;a href="http://www.BeginningGroovyAndGrails.com"&gt;Beginning Groovy and Grails&lt;/a&gt; website in the near future.  Stay tuned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-9217485562061110620?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/9217485562061110620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=9217485562061110620' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/9217485562061110620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/9217485562061110620'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/11/griffon-collab-todo.html' title='Griffon Collab-Todo'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-rQyacBJqn8/SQ5HNCDlYUI/AAAAAAAAADc/_yzPmnjyQbI/s72-c/CollabTodoGriffon.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4941341235775237720</id><published>2008-10-23T13:01:00.003-04:00</published><updated>2008-10-23T13:06:12.486-04:00</updated><title type='text'>Aug 12 COJUG - Groovy / Grails Presentation</title><content type='html'>Groovy and Grails have given us the ability to leverage the strength of the Java Platform (and Eco System) and the productivity of "Convention over Configuration" to construct websites.  But what if the User Interface requirements of your new application is best solved with the type of interaction a desktop application provides?&lt;br /&gt;&lt;br /&gt;Groovy brings the same productivity gain to desktop applications that Grails brings to web applications.  This session will use the Groovy SwingBuilder and popular open source libraries to build a desktop application to interact with a Grails backend.&lt;br /&gt;&lt;br /&gt;Here is the link to the Groovy and Grails presentation I did on August 12, 2008.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cojug.org/downloads/Swing%20in%20Front%20Grails%20in%20Back.pdf"&gt;COJUG 8/12 Groovy / Grails Presentation&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4941341235775237720?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4941341235775237720/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4941341235775237720' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4941341235775237720'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4941341235775237720'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/10/aug-12-cojug-groovy-grails-presentation.html' title='Aug 12 COJUG - Groovy / Grails Presentation'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-994679757258781550</id><published>2008-08-05T11:24:00.001-04:00</published><updated>2008-08-05T11:25:55.357-04:00</updated><title type='text'>BGG - Apress book of the day</title><content type='html'>HURRY, Beginning Groovy and Grails is the Apress book of the day, you can get the PDF at a reduced price.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.apress.com/info/dailydeal"&gt;http://www.apress.com/info/dailydeal&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-994679757258781550?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/994679757258781550/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=994679757258781550' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/994679757258781550'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/994679757258781550'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/08/bgg-apress-book-of-day.html' title='BGG - Apress book of the day'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1583056510595635177</id><published>2008-07-03T22:39:00.003-04:00</published><updated>2008-07-03T23:24:39.728-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Phone Number Custom Constraint for Grails</title><content type='html'>Grails contains really great &lt;a href="http://grails.org/Validation+Reference"&gt;Validators&lt;/a&gt; that you can use in your constraints. But it is missing one that I need for a project I am working on, . . . There is no PhoneNumber constraint.  Luckily, I ran across Geoff Lane's Post: &lt;a href="http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/"&gt;  Build a Custom Validator in Grails with a Plugin&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In Chapter 2 Regular Expressions section of &lt;a href="http://www.amazon.com/gp/product/1430210451?ie=UTF8&amp;tag=jshinglerblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210451"&gt;Beginning Groovy and Grails&lt;/a&gt;, we show using a regular expression to validate phone numbers.  Well, now I had all of the parts required to make a PhoneNumber Custom Validator.&lt;br /&gt;&lt;br /&gt;Usage:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;class party {&lt;br /&gt;  String name&lt;br /&gt;  String workPhone&lt;br /&gt;&lt;br /&gt;  static constraints = = {&lt;br /&gt;       workPhone(phoneNumber:true)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The Constraint: &lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import org.codehaus.groovy.grails.validation.AbstractConstraint&lt;br /&gt;import org.springframework.validation.Errors&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Phone Number Constraint&lt;br /&gt; *&lt;br /&gt; * The phone number constraint is used to validate phone number formats&lt;br /&gt; *&lt;br /&gt; * Registering the Constraint.&lt;br /&gt; *&lt;br /&gt; * App Registration  Config.groovy&lt;br /&gt; * &lt;code&gt;&lt;br /&gt; * org.codehaus.groovy.grails.validation.ConstrainedProperty.registerNewConstraint(&lt;br /&gt; *  PhoneNumberConstraint.NAME, PhoneNumberConstraint.class)&lt;br /&gt; * &lt;/code&gt;&lt;br /&gt; *&lt;br /&gt; * Plugin Registration   MyPlugin.groovy:&lt;br /&gt; * &lt;code&gt;&lt;br /&gt; * def doWithSpring = {&lt;br /&gt; *      ConstrainedProperty.registerNewConstraint(PhoneNumberConstraint.NAME, PhoneNumberConstraint.class);&lt;br /&gt; *  }&lt;br /&gt; * &lt;/code&gt;&lt;br /&gt; *&lt;br /&gt; * This plugin is based upon the following posts:&lt;br /&gt; * &lt;br /&gt; * http://www.zorched.net/2008/01/25/build-a-custom-validator-in-grails-with-a-plugin/&lt;br /&gt; * http://www.zorched.net/2008/01/26/custom-validators-in-grails-in-a-single-app/&lt;br /&gt; *&lt;br /&gt; * @author Jim Shingler ShinglerJim at gmail.com&lt;br /&gt; */&lt;br /&gt;class PhoneNumberConstraint extends AbstractConstraint {&lt;br /&gt;&lt;br /&gt;    private static final String DEFAULT_MESSAGE_CODE = "default.phoneNumber.invalid.message";&lt;br /&gt;    public static final String NAME = "phoneNumber";&lt;br /&gt;&lt;br /&gt;    private boolean validateConstraint&lt;br /&gt;&lt;br /&gt;    public void setParameter(Object constraintParameter) {&lt;br /&gt;        if (!(constraintParameter instanceof Boolean))&lt;br /&gt;            throw new IllegalArgumentException("Parameter for constraint ["&lt;br /&gt;                    + NAME + "] of property ["&lt;br /&gt;                    + constraintPropertyName + "] of class ["&lt;br /&gt;                    + constraintOwningClass + "] must be a boolean value");&lt;br /&gt;&lt;br /&gt;        this.validateConstraint = ((Boolean) constraintParameter).booleanValue()&lt;br /&gt;        super.setParameter(constraintParameter);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    protected void processValidate(Object target, Object propertyValue, Errors errors) {&lt;br /&gt;        if (validateConstraint &amp;&amp; !validate(target, propertyValue)) {&lt;br /&gt;            def args = (Object[]) [constraintPropertyName, constraintOwningClass,&lt;br /&gt;                    propertyValue]&lt;br /&gt;            super.rejectValue(target, errors, DEFAULT_MESSAGE_CODE,&lt;br /&gt;                    "not." + NAME, args);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    boolean supports(Class type) {&lt;br /&gt;        return type != null &amp;&amp; String.class.isAssignableFrom(type);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    String getName() {&lt;br /&gt;        return NAME;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    /**&lt;br /&gt;     * This is where the real work is.  Use a regular expression to validate&lt;br /&gt;     * the phone number.&lt;br /&gt;     *&lt;br /&gt;     * The core logic of the constraint is implemented as its own method to make the&lt;br /&gt;     * constraint easier to test.&lt;br /&gt;     */&lt;br /&gt;    boolean validate(target, propertyValue) {&lt;br /&gt;        propertyValue ==~ /^[01]?\s*[\(\.-]?(\d{3})[\)\.-]?\s*(\d{3})[\.-](\d{4})$/&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The real work is in the validate function.&lt;br /&gt;&lt;br /&gt;As you can see, creating a custom constraint is really pretty easy.  Just make sure that you follow the directions in the constraint class comments to register the constraint.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1583056510595635177?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1583056510595635177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1583056510595635177' title='46 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1583056510595635177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1583056510595635177'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/07/phone-number-custom-constraint-for.html' title='Phone Number Custom Constraint for Grails'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>46</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5108049438553959865</id><published>2008-06-13T23:36:00.004-04:00</published><updated>2008-06-18T14:32:36.827-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><category scheme='http://www.blogger.com/atom/ns#' term='BGG'/><title type='text'>BGG – Beginning Groovy and Grails – June 23</title><content type='html'>BGG is imminent.  It is scheduled for release on June 23.  &lt;br /&gt;&lt;br /&gt;Here is a brief overview of the books structure.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 1 - Introduction to Groovy &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter defines Groovy, explains hot to install it, and then through example, demonstrates its power, flexibility, and readability compared to the Java language&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 2 – Groovy Basics&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains the basic Groovy syntax, structures, and tools&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 3 – More Advanced Groovy&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter goes beyond the Groovy basics to cover unit testing, XML processing, templating, and metaprograming.  In includes a discussion on domain-specific languages (DSL).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chapter 4 – Introduction to Grails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter defines the Grails architecture and its features.  It then explains how to install Grails and get started developing applications with scaffolding.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chapter 5 – Building the User Interface&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains how to combine Groovy Server Pages (GSP), controllers, Grails tags, templates, and Cascading Style Sheets (CSS) to build a basic user interface.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 6 – Building Domains and Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains how Grails uses a domain-driven approach to developing applications and how domain objects can be persisted using the powerful Grails Object Relational Mapping (GORM) framework.  The chapter concludes by showing how you organize application logic into reusable and injectable services.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chapter 7 – Security in Grails&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains and demonstrates the alternative security options available in Grails.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 8 – Web 2.0 – Ajax and Friends&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains how to add usability to your application through adding Ajax functionality, searching, and RSS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chapter 9 – Web Services&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter shows how to expose parts of your application to other clients using representational state transfer (REST) web services.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 10 – Reporting&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter explains how to use JasperReports and iReports to expose reports in multiple formats, including PDF, HTML, XML, and XLS.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Chapter 11 – Batch Processing&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter showcases how to schedule jobs to run automatically and how to generate e-mail messages.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 12 – Deploying and Upgrading&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter describes how to configure, package, and deploy Grails applications to alternative database and application servers.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;Chapter 13 – Alternative Clients&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This chapter builds a Swing client using Groovy that interacts with the Grails application through the RESTful web services built in Chapter 9&lt;br /&gt;&lt;br /&gt;You can order your copy from Amazon, &lt;a href="http://www.amazon.com/gp/product/1430210451?ie=UTF8&amp;tag=jshinglerblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210451"&gt;Beginning Groovy and Grails&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5108049438553959865?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/gp/product/1430210451?ie=UTF8&amp;tag=jshinglerblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210451' title='BGG – Beginning Groovy and Grails – June 23'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5108049438553959865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5108049438553959865' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5108049438553959865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5108049438553959865'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/06/bgg-beginning-groovy-and-grails-june-23.html' title='BGG – Beginning Groovy and Grails – June 23'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-152887179252978930</id><published>2008-05-21T20:52:00.003-04:00</published><updated>2008-05-22T22:56:57.772-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Book'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><category scheme='http://www.blogger.com/atom/ns#' term='BGG'/><title type='text'>Beginning Groovy and Grails - New Book</title><content type='html'>You want to learn Groovy and Grails and don’t know where to start. The wait is almost over and your journey is about to begin.  Beginning Groovy and Grails (BGG) is an ideal primer for learning Groovy and Grails.&lt;br /&gt;&lt;br /&gt;BGG will take you from installation of Groovy and Grails all the way to developing a Collaborative Todo web application and a Groovy Swing user interface.  Along the way, you will learn how to uses Web 2.0 and AJAX with Grails.  You will explore 3 different security plugins.  You will learn how use Jasper Reports and Quartz Plugin.  You will develop RESTful web services.  By the time you have completed your journey you will have a solid understanding of Groovy and Grails.  You will be ready to start you’re your next assignment using Groovy and Grails.&lt;br /&gt;&lt;br /&gt;Stay tuned to this Blog, . . . more information is coming.  You can pre-order your copy of &lt;a href="http://www.amazon.com/gp/product/1430210451?ie=UTF8&amp;tag=jshinglerblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210451"&gt;Beginning Groovy and Grails from Amazon&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-152887179252978930?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.amazon.com/gp/product/1430210451?ie=UTF8&amp;tag=jshinglerblog-20&amp;linkCode=as2&amp;camp=1789&amp;creative=9325&amp;creativeASIN=1430210451' title='Beginning Groovy and Grails - New Book'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/152887179252978930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=152887179252978930' title='146 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/152887179252978930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/152887179252978930'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/05/beginning-groovy-and-grails-new-book.html' title='Beginning Groovy and Grails - New Book'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>146</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-3002480018144480446</id><published>2008-05-15T19:34:00.002-04:00</published><updated>2008-05-15T19:41:55.399-04:00</updated><title type='text'>ACORD Enterprise Architecture - Round Table</title><content type='html'>I had the pleasure of participating on the ACORD / LOMA Forum Enterprise Architecture Best Practices round table.  It was great.  We had a good round table panel and the audience asked some very thought full questions.  The time just flew by.&lt;br /&gt;&lt;br /&gt;I would like to thank all of Round Table participants, Frank Neugebauer and ACORD for putting the round table together.  I look forward to working with you on the Information Model Advisory committee.&lt;br /&gt;&lt;br /&gt;Enterprise Architecture Best Practices&lt;br /&gt;Presenter(s): Gwen Smith, AXIS Capital; Salvador Sierra, AXIS Insurance; William Duym, AIG; Rich Maynard, The Hartford; Jim Shingler, Nationwide; Frank Neugebauer, ACORD&lt;br /&gt;This panel of enterprise architects will discuss their experiences with using disciplined best practices to create well-defined enterprise architectures that meet business needs. Learn from their collective experiences, but will start with a base discussion of The Open Group Architecture Framework, including how ACORD Standards (including the ACORD Standards Framework) fit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-3002480018144480446?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.acordlomaforum.org/2008/sessions.aspx' title='ACORD Enterprise Architecture - Round Table'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/3002480018144480446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=3002480018144480446' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3002480018144480446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3002480018144480446'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/05/acord-enterprise-architecture-round.html' title='ACORD Enterprise Architecture - Round Table'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5803019996205202796</id><published>2008-03-30T12:44:00.013-04:00</published><updated>2008-03-30T16:52:41.240-04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Holy Grail of 3 Column Layout</title><content type='html'>While Grails really makes the MVC portion of web development easier,  Cascading Style Sheets (CSS) is still really tough.   I wanted a 3 Column layout with a header and footer created using CSS.  This sounds easy enough, but it was more difficult than you would think.  Especially if you want it to work with multiple browsers.&lt;br /&gt;&lt;br /&gt;I spent several hours working on it, more than I would like to admit.  Then I ran across &lt;a href="http://matthewjamestaylor.com/"&gt;Matthew James Talyor's&lt;/a&gt; work on &lt;a href="http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm"&gt;3 column liquid layouts&lt;/a&gt;.  Matthew did a really nice job and it works exactly as you would expect.  So I tried to weave it into a site I was creating.  I was using Firefox and everything was going great until I tried to bring it up in Explorer.  Ooops!&lt;br /&gt;&lt;br /&gt;To make a long store short,  I went back to the beginning and scrapped all my pre-existing CSS and started from Matthews.  That did the trick.  It rendered correctly in Firefox and Explorer both.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-rQyacBJqn8/R-_GxUiar3I/AAAAAAAAABo/z6tAO_IZjwA/s1600-h/holygrail_3_col.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_-rQyacBJqn8/R-_GxUiar3I/AAAAAAAAABo/z6tAO_IZjwA/s320/holygrail_3_col.png" alt="" id="BLOGGER_PHOTO_ID_5183580246755684210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was so happy figured I would probably use this layout again.  So, I created a generic Grails application preconfigured to use the 3 column  layout.  As you would expect, all of the real work is in main.gsp and a new css file I created css file holygrail.css.&lt;br /&gt;&lt;br /&gt;So in the spirit of hoping to make someone else's life a little easier,  here are the main.gsp and holygrail.css files.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;main.gsp&lt;/span&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head&gt;&lt;br /&gt;    &amp;lt;title&gt;&amp;lt;g:layoutTitle default="www.Grails.org"/&gt;&amp;lt;/title&gt;&lt;br /&gt;    &amp;lt;link rel="stylesheet" href="${createLinkTo(dir: 'css', &lt;br /&gt;           file: 'holygrail.css')}"/&gt;&lt;br /&gt;    &amp;lt;meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8"/&gt;&lt;br /&gt;    &amp;lt;meta name="description" content="The Holy Grail 3 column Liquid Layout. Pixel widths. Cross-Browser. Equal Height Columns."/&gt;&lt;br /&gt;    &amp;lt;meta name="keywords" content="The Holy Grail 3 column Liquid Layout. Pixel widths. Cross-Browser. Equal Height Columns."/&gt;&lt;br /&gt;    &amp;lt;meta name="robots" content="index, follow"/&gt;&lt;br /&gt;    &amp;lt;link rel="shortcut icon" href="${createLinkTo(dir: 'images', file: 'favicon.ico')}" type="image/x-icon"/&gt;&lt;br /&gt;    &amp;lt;g:layoutHead/&gt;&lt;br /&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;&amp;lt;!--  &lt;br /&gt;  This is a Grails example of the Holy Grail 3 column Liquid Layout work by Mathew Taylor.&lt;br /&gt;  For more information, please see his original work at:&lt;br /&gt;  &lt;br /&gt;     http://matthewjamestaylor.com/blog/ultimate-3-column-holy-grail-pixels.htm &lt;br /&gt;--&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="header"&gt;&lt;br /&gt;    &amp;lt;!-- Header start --&gt;&lt;br /&gt;    &amp;lt;g:render template="/common/header"/&gt;&lt;br /&gt;    &amp;lt;!-- Header end --&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;div class="colmask holygrail"&gt;&lt;br /&gt;    &amp;lt;div class="colmid"&gt;&lt;br /&gt;        &amp;lt;div class="colleft"&gt;&lt;br /&gt;            &amp;lt;div class="col1wrap"&gt;&lt;br /&gt;                &amp;lt;div class="col1"&gt;&lt;br /&gt;                    &amp;lt;!-- Column 1 start --&gt;&lt;br /&gt;                    &amp;lt;g:layoutBody/&gt;&lt;br /&gt;                    &amp;lt;!-- Column 1 end --&gt;&lt;br /&gt;                &amp;lt;/div&gt;&lt;br /&gt;            &amp;lt;/div&gt;&lt;br /&gt;            &amp;lt;div class="col2"&gt;&lt;br /&gt;                &amp;lt;!-- Column 2 start --&gt;&lt;br /&gt;                &amp;lt;g:render template="/common/leftbar"/&gt;&lt;br /&gt;                &amp;lt;!-- Column 2 end --&gt;&lt;br /&gt;            &amp;lt;/div&gt;&lt;br /&gt;            &amp;lt;div class="col3"&gt;&lt;br /&gt;                &amp;lt;!-- Column 3 start --&gt;&lt;br /&gt;                &amp;lt;g:render template="/common/rightbar"/&gt;&lt;br /&gt;                &amp;lt;!-- Column 3 end --&gt;&lt;br /&gt;            &amp;lt;/div&gt;&lt;br /&gt;        &amp;lt;/div&gt;&lt;br /&gt;    &amp;lt;/div&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&amp;lt;div id="footer"&gt;&lt;br /&gt;    &amp;lt;!-- Footer start --&gt;&lt;br /&gt;    &amp;lt;g:render template="/common/footer"/&gt;&lt;br /&gt;    &amp;lt;!-- Footer end --&gt;&lt;br /&gt;&amp;lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;holygrail.css&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;    &lt;br /&gt; /* General styles */&lt;br /&gt;    body {&lt;br /&gt;        margin:0;&lt;br /&gt;        padding:0;&lt;br /&gt;        border:0;   /* This removes the border around the viewport in old versions of IE */&lt;br /&gt;        width:100%;&lt;br /&gt;        background:#fff;&lt;br /&gt;        min-width:600px;    /* Minimum width of layout - remove line if not required */&lt;br /&gt;       /* The min-width property does not work in old versions of Internet Explorer */&lt;br /&gt;  font-size:90%;&lt;br /&gt;    }&lt;br /&gt; a {&lt;br /&gt;     color:#369;&lt;br /&gt; }&lt;br /&gt; a:hover {&lt;br /&gt;  color:#fff;&lt;br /&gt;  background:#369;&lt;br /&gt;  text-decoration:none;&lt;br /&gt; }&lt;br /&gt;    h1, h2, h3 {&lt;br /&gt;        margin:.8em 0 .2em 0;&lt;br /&gt;        padding:0;&lt;br /&gt;    }&lt;br /&gt;    p {&lt;br /&gt;        margin:.4em 0 .8em 0;&lt;br /&gt;        padding:0;&lt;br /&gt;    }&lt;br /&gt; img {&lt;br /&gt;  margin:10px 0 5px;&lt;br /&gt; }&lt;br /&gt; /* Header styles */&lt;br /&gt;    #header {&lt;br /&gt;        clear:both;&lt;br /&gt;        float:left;&lt;br /&gt;        width:100%;&lt;br /&gt;    }&lt;br /&gt; #header {&lt;br /&gt;  border-bottom:1px solid #000;&lt;br /&gt; }&lt;br /&gt; #header p,&lt;br /&gt; #header h1,&lt;br /&gt; #header h2 {&lt;br /&gt;     padding:.4em 15px 0 15px;&lt;br /&gt;        margin:0;&lt;br /&gt; }&lt;br /&gt; #header ul {&lt;br /&gt;     clear:left;&lt;br /&gt;     float:left;&lt;br /&gt;     width:100%;&lt;br /&gt;     list-style:none;&lt;br /&gt;     margin:10px 0 0 0;&lt;br /&gt;     padding:0;&lt;br /&gt; }&lt;br /&gt; #header ul li {&lt;br /&gt;     display:inline;&lt;br /&gt;     list-style:none;&lt;br /&gt;     margin:0;&lt;br /&gt;     padding:0;&lt;br /&gt; }&lt;br /&gt; #header ul li a {&lt;br /&gt;     display:block;&lt;br /&gt;     float:left;&lt;br /&gt;     margin:0 0 0 1px;&lt;br /&gt;     padding:3px 10px;&lt;br /&gt;     text-align:center;&lt;br /&gt;     background:#eee;&lt;br /&gt;     color:#000;&lt;br /&gt;     text-decoration:none;&lt;br /&gt;     position:relative;&lt;br /&gt;     left:15px;&lt;br /&gt;  line-height:1.3em;&lt;br /&gt; }&lt;br /&gt; #header ul li a:hover {&lt;br /&gt;     background:#369;&lt;br /&gt;  color:#fff;&lt;br /&gt; }&lt;br /&gt; #header ul li a.active,&lt;br /&gt; #header ul li a.active:hover {&lt;br /&gt;     color:#fff;&lt;br /&gt;     background:#000;&lt;br /&gt;     font-weight:bold;&lt;br /&gt; }&lt;br /&gt; #header ul li a span {&lt;br /&gt;     display:block;&lt;br /&gt; }&lt;br /&gt; /* 'widths' sub menu */&lt;br /&gt; #layoutdims {&lt;br /&gt;  clear:both;&lt;br /&gt;  background:#eee;&lt;br /&gt;  border-top:4px solid #000;&lt;br /&gt;  margin:0;&lt;br /&gt;  padding:6px 15px !important;&lt;br /&gt;  text-align:right;&lt;br /&gt; }&lt;br /&gt; /* column container */&lt;br /&gt; .colmask {&lt;br /&gt;  position:relative;  /* This fixes the IE7 overflow hidden bug and stops the layout jumping out of place */&lt;br /&gt;     clear:both;&lt;br /&gt;     float:left;&lt;br /&gt;        width:100%;    /* width of whole page */&lt;br /&gt;  overflow:hidden;  /* This chops off any overhanging divs */&lt;br /&gt; }&lt;br /&gt; /* holy grail 3 column settings */&lt;br /&gt; .holygrail {&lt;br /&gt;     background:#ff9;     /* Right column background colour */&lt;br /&gt; }&lt;br /&gt;    .holygrail .colmid {&lt;br /&gt;        float:left;&lt;br /&gt;        width:200%;&lt;br /&gt;        margin-left:-200px;  /* Width of right column */&lt;br /&gt;        position:relative;&lt;br /&gt;        right:100%;&lt;br /&gt;        background:#fff;     /* Centre column background colour */&lt;br /&gt;    }&lt;br /&gt;    .holygrail .colleft {&lt;br /&gt;        float:left;&lt;br /&gt;        width:100%;&lt;br /&gt;        margin-left:-50%;&lt;br /&gt;        position:relative;&lt;br /&gt;        left:400px;          /* Left column width + right column width */&lt;br /&gt;        background:#FFD8B7;     /* Left column background colour */&lt;br /&gt;    }&lt;br /&gt;    .holygrail .col1wrap {&lt;br /&gt;        float:left;&lt;br /&gt;     width:50%;&lt;br /&gt;     position:relative;&lt;br /&gt;     right:200px;         /* Width of left column */&lt;br /&gt;     padding-bottom:1em;  /* Centre column bottom padding. Leave it out if it's zero */&lt;br /&gt; }&lt;br /&gt; .holygrail .col1 {&lt;br /&gt;        margin:0 215px;      /* Centre column side padding:&lt;br /&gt;                             Left padding = left column width + centre column left padding width&lt;br /&gt;                             Right padding = right column width + centre column right padding width */&lt;br /&gt;        position:relative;&lt;br /&gt;     left:200%;&lt;br /&gt;     overflow:hidden;&lt;br /&gt; }&lt;br /&gt;    .holygrail .col2 {&lt;br /&gt;        float:left;&lt;br /&gt;        float:right;   /* This overrides the float:left above */&lt;br /&gt;        width:170px;         /* Width of left column content (left column width minus left and right padding) */&lt;br /&gt;        position:relative;&lt;br /&gt;        right:15px;          /* Width of the left-had side padding on the left column */&lt;br /&gt;    }&lt;br /&gt;    .holygrail .col3 {&lt;br /&gt;        float:left;&lt;br /&gt;        float:right;   /* This overrides the float:left above */&lt;br /&gt;        width:170px;         /* Width of right column content (right column width minus left and right padding) */&lt;br /&gt;        margin-right:45px;   /* Width of right column right-hand padding + left column left and right padding */&lt;br /&gt;        position:relative;&lt;br /&gt;        left:50%;&lt;br /&gt;    }&lt;br /&gt; /* Footer styles */&lt;br /&gt; #footer {&lt;br /&gt;        clear:both;&lt;br /&gt;        float:left;&lt;br /&gt;        width:100%;&lt;br /&gt;        text-align: center;&lt;br /&gt;        border-top:1px solid #000;&lt;br /&gt;    }&lt;br /&gt;    #footer p {&lt;br /&gt;        padding:10px;&lt;br /&gt;        margin:0;&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-3999637-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5803019996205202796?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5803019996205202796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5803019996205202796' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5803019996205202796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5803019996205202796'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/03/holy-grail-of-3-column-layour.html' title='Holy Grail of 3 Column Layout'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-rQyacBJqn8/R-_GxUiar3I/AAAAAAAAABo/z6tAO_IZjwA/s72-c/holygrail_3_col.png' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-3407351033326022773</id><published>2008-03-21T21:14:00.002-04:00</published><updated>2008-03-21T21:18:08.276-04:00</updated><title type='text'>Grails Filters, Form Submission workaround - Revisited</title><content type='html'>Good News! Grails 1.0.2 resolves the Filters, Form Submission problem.&lt;br /&gt;&lt;br /&gt;I downloaded Grails 1.0.2 and retested with the application below.  The workaround is no longer needed.  Filters work as expected when submitting an edit, update, or delete request from a form.&lt;br /&gt;&lt;br /&gt;Big Thanks to the Grails Team.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-3407351033326022773?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/3407351033326022773/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=3407351033326022773' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3407351033326022773'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/3407351033326022773'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/03/grails-filters-form-submission_21.html' title='Grails Filters, Form Submission workaround - Revisited'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-4703236246668142521</id><published>2008-03-19T00:00:00.005-04:00</published><updated>2008-03-19T07:08:50.393-04:00</updated><title type='text'>Grails Filters, Form Submission workaround</title><content type='html'>Grails Filters are very cool.  Much better than action interceptors in my opinion.  So much better that I will be surprised if I write another action interceptors.&lt;br /&gt;&lt;br /&gt;There is just one small hiccup in the current version of Grails (1.0.1).&lt;br /&gt;&lt;br /&gt;Lets say you create a &lt;span style="font-weight: bold;"&gt;User &lt;/span&gt;object and have your standard CRUD actions on it.  What if you want to make sure that the only person allowed to update the user record is the actual user.  You would neet to put guard logic on the &lt;span style="font-weight: bold;"&gt;UserController&lt;/span&gt;'s &lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;, and &lt;span style="font-weight: bold;"&gt;Delete &lt;/span&gt;actions.  You could do that or create a filter.&lt;br /&gt;&lt;br /&gt;Give it a try using the filter below.&lt;code&gt;&lt;br /&gt;class UserFilters {&lt;br /&gt;def filters =&lt;br /&gt;  userModificationCheck(controller:'user', action:'*') {&lt;br /&gt;     before = {&lt;br /&gt;       def currActionName = (actionName == null ? 'index' : actionName)&lt;br /&gt;       println "=================&gt; BEFORE: The actionName is now ${currActionName}"&lt;br /&gt;     }&lt;br /&gt;     after = {&lt;br /&gt;       def currActionName = (actionName == null ? 'index' : actionName)&lt;br /&gt;       println "=================&gt; AFTER: The actionName is now ${currActionName}"&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is a simple filter that prints the action name.  After all you only want to do this for edit, update, and delete actions. So you want to make sure you can get the action names.&lt;br /&gt;&lt;br /&gt;What you will find is that you use use a fully pathed URL such as http://localhost:8080/myApp/user/edit/1, everything works fine.  But if you go to the  User Listing &gt; Select a User &gt; and press the form's Edit button, . . . Ooops the action in the before filter doesn't say &lt;span style="font-weight: bold;"&gt;edit&lt;/span&gt;, is says &lt;span style="font-weight: bold;"&gt;index&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Probably not what you expected, I know I didn't.  There is a bug in Grails 1.01, it is scheduled to be fixed in 1.0.2.&lt;br /&gt;&lt;br /&gt;Luckly, there is a simple work around for this problem.  In the filter, try printing out the params.  You will discover a &lt;span style="font-weight: bold;"&gt;_action_****&lt;/span&gt; entry in the params.  Grails uses the entry to determine which action to call on the controller.&lt;br /&gt;&lt;br /&gt;Try replacing the currActionName line with the following:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;def currActionName = actionName ?: params.find {it.key ==~ "_action_.*"}?.value?.toLowerCase()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;It uses a regular expression to find a key beginning with &lt;span style="font-weight: bold;"&gt;_action_&lt;/span&gt; and graps the value.&lt;br /&gt;&lt;br /&gt;This little work around should get you going again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-4703236246668142521?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/4703236246668142521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=4703236246668142521' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4703236246668142521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/4703236246668142521'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/03/grails-filters-form-submission.html' title='Grails Filters, Form Submission workaround'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7416594197297884228</id><published>2008-03-03T09:19:00.002-05:00</published><updated>2008-03-03T09:23:00.265-05:00</updated><title type='text'>Grails Podcast is BACK!</title><content type='html'>&lt;p&gt;The Grails Podcast is BACK!&lt;/p&gt;&lt;p&gt;Glen Smith (Groovy Blogs, Gravel), has joined Seven as a cohost on the Grails Podcast.&lt;/p&gt;&lt;p&gt;In the &lt;a href="http://hansamann.podspot.de/post/grails-podcast-episode-49-catching-up-glen-smith-joins"&gt;latest podcast&lt;/a&gt;, Seven and Glen bring us upto speed on the latest Groovy and Grails, and the G2X conference.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7416594197297884228?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://hansamann.podspot.de/post/grails-podcast-episode-49-catching-up-glen-smith-joins' title='Grails Podcast is BACK!'/><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7416594197297884228/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7416594197297884228' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7416594197297884228'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7416594197297884228'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/03/grails-podcast-is-back.html' title='Grails Podcast is BACK!'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-8069260014778074300</id><published>2008-03-01T10:49:00.002-05:00</published><updated>2008-03-01T10:56:59.804-05:00</updated><title type='text'>Groovy Closures and Java Methods</title><content type='html'>Steven Devijver has posted a couple of &lt;span style="font-weight: bold;"&gt;VERY &lt;/span&gt;good articles on &lt;a href="http://groovy.dzone.com"&gt;Groovy DZone&lt;/a&gt; about Groovy Closures and Java Methods.  I highly recommend these articles.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groovy.dzone.com/news/higher-order-functions-groovy-"&gt;Higher Order functions with Groovy, part 1&lt;/a&gt;, &lt;a href="http://groovy.dzone.com/news/higher-order-functions-groovy-0"&gt;part 2&lt;/a&gt;, &lt;a href="http://groovy.dzone.com/news/higher-order-functions-groovy-1"&gt;part 3&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;They do a good job of explaining all of the ins and outs of closures and methods in Groovy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-8069260014778074300?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/8069260014778074300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=8069260014778074300' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/8069260014778074300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/8069260014778074300'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/03/groovy-closures-and-java-methods.html' title='Groovy Closures and Java Methods'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5682369880111119262</id><published>2008-02-26T23:59:00.002-05:00</published><updated>2008-02-27T00:09:29.711-05:00</updated><title type='text'>FallME 0.6 Released</title><content type='html'>&lt;a href="https://fallme.dev.java.net/"&gt;FallME (https://fallme.dev.java.net)&lt;/a&gt; 0.6 has been released.&lt;br /&gt;&lt;br /&gt;FallME functionality was enhance to make configuration of Form injection easier.&lt;br /&gt;&lt;br /&gt;This release include a simple sample application that demonstrates using FallME.  We hope to have additional examples and documentation available shortly.  In the meantime,  . . .  you can start to get a feel for FallME by looking at the sample application.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Start by looking at the PreferencesBeanConfigs.java.  It shows how to configure the IOC.&lt;/li&gt;&lt;li&gt;Take a look at the PreferencesMobile.java (Midlet).  It shows how to bootstrap the application container.&lt;/li&gt;&lt;li&gt;Finally, look at MainFormBuilder.java.  When the Midlet asks the BeanFactory for the MainForm, the BeanFactory uses the MainFormBuilder to construct the Form.&lt;/li&gt;&lt;/ol&gt;Take a look and let us know what you think&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5682369880111119262?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5682369880111119262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5682369880111119262' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5682369880111119262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5682369880111119262'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/02/fallme-06-released.html' title='FallME 0.6 Released'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-2598743365189958180</id><published>2008-01-30T07:25:00.000-05:00</published><updated>2008-02-08T07:27:28.713-05:00</updated><title type='text'>FallME Released</title><content type='html'>I am proud to announce a new open source project for the Java mobile and embedded community. Chris Judd and myself have released the first version of FallME version 0.5. FallME is a Java ME framework based on the popular &lt;a href="http://www.springframework.org/"&gt;Spring Framework&lt;/a&gt; but designed for mobile devices including those running MIDP. This framework provides an IoC container as well as a RecordStoreTemplate. You can download it and find more details at &lt;a href="https://fallme.dev.java.net/"&gt;https://fallme.dev.java.net/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-2598743365189958180?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/2598743365189958180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=2598743365189958180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2598743365189958180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2598743365189958180'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/02/fallme-released.html' title='FallME Released'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-6463845802281717243</id><published>2008-01-25T21:09:00.000-05:00</published><updated>2008-01-25T21:18:21.081-05:00</updated><title type='text'>New Groovy Eclipse Plugin</title><content type='html'>A new version of the Groovy Eclipse plug is available (Version 1.5.1.200801232227) the update site is: &lt;a href="http://dist.codehaus.org/groovy/distributions/update" target="_blank" rel="nofollow"&gt;http://dist.codehaus.org/groovy/distributions/update&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just installed it, it is definitely worth upgrading, it contains several new features that make the plugin more usable and closer to what you would expect (JDT).  It also contains several bug fixes there were a little annoying.&lt;br /&gt;&lt;br /&gt;A Couple of the more noticable enhancements:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support of java doc  /*&lt;/li&gt;&lt;li&gt;Code completion  improvements Ctrl-space&lt;/li&gt;&lt;li&gt;Quick Outline Ctrl-O&lt;/li&gt;&lt;li&gt;Project Explorer shows groovy methods&lt;br /&gt;(Not working in my environment)&lt;/li&gt;&lt;/ul&gt;Nice Job All, Keep up the good work.  I think that the Groovy Eclipse plugin is critical to Groovy's success.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-6463845802281717243?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/6463845802281717243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=6463845802281717243' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/6463845802281717243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/6463845802281717243'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/01/new-groovy-eclipse-plugin.html' title='New Groovy Eclipse Plugin'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-2331357582759571046</id><published>2008-01-25T19:34:00.000-05:00</published><updated>2008-01-25T19:44:45.130-05:00</updated><title type='text'>Rod Johnson speaks at COJUG</title><content type='html'>Last night, Columbus was privileged to have &lt;a href="http://www.springsource.com/web/guest/people/rjohnson"&gt;Rod Johnson&lt;/a&gt;, the father of the &lt;a href="http://www.springframework.org/"&gt;Spring Framework&lt;/a&gt;, speak at the &lt;a href="http://www.cojug.org"&gt;Central Ohio Java Users Group (COJUG)&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Rod spoke about Spring 2.5 features and SpringSource's focus.  It sounds like SpringSource is going to be make a strong commitment to the Web space.  They are focusing on Spring Webflow, Spring MVC, and providing more support for JSF, and web frameworks.&lt;br /&gt;&lt;br /&gt;It was a great night for the COJUG.&lt;br /&gt;&lt;br /&gt;I look forward to seeing you all there at next months meeting.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-2331357582759571046?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/2331357582759571046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=2331357582759571046' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2331357582759571046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2331357582759571046'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/01/rod-johnson-speaks-at-cojug.html' title='Rod Johnson speaks at COJUG'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5262649137075721557</id><published>2008-01-13T10:17:00.000-05:00</published><updated>2008-01-13T12:54:13.980-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Groovy is a Better Java</title><content type='html'>At Code Mash, &lt;a href="http://www.nealford.com/"&gt;Neal Ford&lt;/a&gt;, &lt;a href="http://juddsolutions.blogspot.com/"&gt;Chris Judd&lt;/a&gt;, and I had a interesting chat about Groovy as a Better Java.  The question that we came to ask : &lt;span style="font-weight: bold;"&gt;Is Groovy Java 3.0 or is it what JDK 2.0 should have been?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The one thing that we all agreed to is: &lt;span style="font-weight: bold;"&gt;Groovy is a Better Java.&lt;br /&gt;&lt;br /&gt;What do you think?&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5262649137075721557?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5262649137075721557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5262649137075721557' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5262649137075721557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5262649137075721557'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/01/groovy-is-better-java.html' title='Groovy is a Better Java'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1535618273346889884</id><published>2008-01-07T22:06:00.000-05:00</published><updated>2008-01-07T22:10:21.137-05:00</updated><title type='text'>Going to Code Mash</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_lKjDDuAEo1Q/Rzhvg8_3D2I/AAAAAAAAAAM/CQxnDZGeiro/S240/codemash.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px;" src="http://1.bp.blogspot.com/_lKjDDuAEo1Q/Rzhvg8_3D2I/AAAAAAAAAAM/CQxnDZGeiro/S240/codemash.JPG" border="0" alt="" /&gt;www.codemash.org&lt;/a&gt;&lt;br /&gt;&lt;br/&gt;Hey Code Mash starts this week. I am looking forward to it.  Hopefully, I'll have an opportunity to blog about some of the sessions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1535618273346889884?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1535618273346889884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1535618273346889884' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1535618273346889884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1535618273346889884'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2008/01/going-to-code-mash.html' title='Going to Code Mash'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_lKjDDuAEo1Q/Rzhvg8_3D2I/AAAAAAAAAAM/CQxnDZGeiro/s72-c/codemash.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5431336406281121263</id><published>2007-12-28T17:25:00.000-05:00</published><updated>2008-01-13T10:27:15.843-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><title type='text'>Groovy Encode / Decode</title><content type='html'>Recently, I needed to encode and decode some information for a project I was working on.  I wrote a quick little snippet to show encoding and decoding a string in the same program.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;CODE:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;               def me = "Jim Shingler"&lt;br /&gt; println "Me: ${me}"&lt;br /&gt;&lt;br /&gt; // Encode it&lt;br /&gt; def encoded = me.bytes.encodeBase64()&lt;br /&gt; println "encoded: ${encoded}"&lt;br /&gt;&lt;br /&gt; // because I need a string for decoding&lt;br /&gt; StringWriter sw = new StringWriter()&lt;br /&gt; encoded.writeTo(sw)&lt;br /&gt;&lt;br /&gt; // Decode it&lt;br /&gt; String decoded = new String(sw.toString().decodeBase64())&lt;br /&gt; assert decoded == me&lt;br /&gt; println "decoded: ${decoded}"&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;b&gt;OUTPUT:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;Me: Jim Shingler&lt;br /&gt;encoded: SmltIFNoaW5nbGVy&lt;br /&gt;decoded: Jim Shingler&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5431336406281121263?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5431336406281121263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5431336406281121263' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5431336406281121263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5431336406281121263'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/12/groovy-encode-decode.html' title='Groovy Encode / Decode'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-46237782599309961</id><published>2007-12-11T17:41:00.000-05:00</published><updated>2008-01-13T10:27:49.853-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Grails 1.1 RC3 - Released</title><content type='html'>Grails 1.1 RC-3 has been released and it includes Groovy 1.5.&lt;br /&gt;&lt;br /&gt;Wow, This is really getting exciting.&lt;br /&gt;&lt;br /&gt;You can download it at &lt;a href="http://www.grails.org/Download"&gt;http://www.grails.org/Download&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-46237782599309961?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/46237782599309961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=46237782599309961' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/46237782599309961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/46237782599309961'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/12/grails-11-rc3-released.html' title='Grails 1.1 RC3 - Released'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-7891905028983330544</id><published>2007-12-09T20:32:00.000-05:00</published><updated>2007-12-09T20:35:36.238-05:00</updated><title type='text'>Groovy 1.5 Released</title><content type='html'>Congrats!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; 1.5 has been released.&lt;br /&gt;&lt;br /&gt;You can download it &lt;a href="http://groovy.codehaus.org/Download"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-7891905028983330544?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/7891905028983330544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=7891905028983330544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7891905028983330544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/7891905028983330544'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/12/groovy-15-released.html' title='Groovy 1.5 Released'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5349015858665649397</id><published>2007-12-02T11:54:00.000-05:00</published><updated>2008-01-13T10:28:19.849-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Groovy'/><category scheme='http://www.blogger.com/atom/ns#' term='Grails'/><title type='text'>Grails Exchange 2007 - Presentations posted</title><content type='html'>The Grails Exchange 2007 Presentations are Podcasts have been posted.&lt;br /&gt;&lt;br /&gt;You can find it on the Grails Exchange site: &lt;a href="http://grails-exchange.com/"&gt;http://grails-exchange.com/.  &lt;/a&gt;(Just click on the sessions, you will find a PDF of the slides and &lt;a href="http://video.google.com/videosearch?q=grails+exchange+2007&amp;amp;sitesearch="&gt;google video&lt;/a&gt;.)&lt;br /&gt;&lt;br /&gt;I have listed to many of the Podcasts, It looks like it was a really good conference.  I wish I could have been there.&lt;br /&gt;&lt;br /&gt;Check it out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5349015858665649397?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5349015858665649397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5349015858665649397' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5349015858665649397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5349015858665649397'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/12/grails-exchange-2007-presentations.html' title='Grails Exchange 2007 - Presentations posted'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-2399159369441219137</id><published>2007-11-13T21:43:00.000-05:00</published><updated>2007-11-13T21:48:46.588-05:00</updated><title type='text'>IOC Container for JavaME - FallME</title><content type='html'>How would you like to have a Inversion of Control container on the JavaME platform?&lt;br /&gt;&lt;br /&gt;Chris Judd, a good friend, and I were developing a couple of JavaME applications and found ourselves wanting an IOC container on the JavaME platform.  After some searching, we found that there aren't any.&lt;br /&gt;&lt;br /&gt;So like all good IT Professionals, . . .  If the tool you need doesn't exist, build it.  And so we did.&lt;br /&gt;&lt;br /&gt;As a play on words, we named it FallME.&lt;br /&gt;&lt;br /&gt;Check out FallMe at:  &lt;a href="https://fallme.dev.java.net/"&gt;https://fallme.dev.java.net/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-2399159369441219137?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/2399159369441219137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=2399159369441219137' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2399159369441219137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/2399159369441219137'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/11/ioc-container-for-javame-fallme.html' title='IOC Container for JavaME - FallME'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1190900011999228465</id><published>2007-11-13T21:02:00.000-05:00</published><updated>2007-11-13T21:12:34.836-05:00</updated><title type='text'>Grails Book</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.apress.com/resource/bookcover/9781590599747?size=medium"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px;" src="http://www.apress.com/resource/bookcover/9781590599747?size=medium" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I am currently writing a new Grails book with two good friends based upon Grails 1.0.  The book is setup to compliment "The Definitive Guide to Grails".  It will be available April 2008.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.apress.com/book/view/1590599748"&gt;Practical Grails Projects: Agile Web Development for the Java Platform using Groovy and Grails&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1190900011999228465?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1190900011999228465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1190900011999228465' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1190900011999228465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1190900011999228465'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/11/grails-book.html' title='Grails Book'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-1503119190450603501</id><published>2007-01-20T12:37:00.000-05:00</published><updated>2007-01-20T12:50:34.785-05:00</updated><title type='text'>Eclipse RCP and Handy Aspects</title><content type='html'>I finally figure out how to get HandyAspects (java.net) working within an Eclipse RCP application.  At least I think I did.  I have to verify it.&lt;br /&gt;&lt;br /&gt;The Secret is:  -Xset:pipelineCompilation=false&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-rQyacBJqn8/RbJVw8xdCiI/AAAAAAAAAAc/nD_ULZKUo3w/s1600-h/pipeline.gif"&gt;&lt;img style="cursor: pointer;" src="http://1.bp.blogspot.com/_-rQyacBJqn8/RbJVw8xdCiI/AAAAAAAAAAc/nD_ULZKUo3w/s400/pipeline.gif" alt="" id="BLOGGER_PHOTO_ID_5022170833907157538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This appears to be a bug in the AspectJ compiler.  See this link&lt;br /&gt;&lt;a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=153380"&gt;https://bugs.eclipse.org/bugs/show_bug.cgi?id=153380&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-1503119190450603501?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/1503119190450603501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=1503119190450603501' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1503119190450603501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/1503119190450603501'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/01/eclipse-rcp-and-handy-aspects.html' title='Eclipse RCP and Handy Aspects'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-rQyacBJqn8/RbJVw8xdCiI/AAAAAAAAAAc/nD_ULZKUo3w/s72-c/pipeline.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-883349787615020641.post-5328652838330008828</id><published>2007-01-20T11:47:00.000-05:00</published><updated>2007-11-13T21:40:48.013-05:00</updated><title type='text'>Trying out blogger.com</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s1600-h/Shingler_HeadShot3.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5132520352049962210" /&gt;&lt;/a&gt;&lt;br /&gt;I am looking at moving my Blog from Jroller to blogger.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/883349787615020641-5328652838330008828?l=jshingler.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jshingler.blogspot.com/feeds/5328652838330008828/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=883349787615020641&amp;postID=5328652838330008828' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5328652838330008828'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/883349787615020641/posts/default/5328652838330008828'/><link rel='alternate' type='text/html' href='http://jshingler.blogspot.com/2007/01/trying-out-bloggercom.html' title='Trying out blogger.com'/><author><name>Jim Shingler</name><uri>http://www.blogger.com/profile/08784772625961834908</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://bp3.blogger.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s200/Shingler_HeadShot3.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_-rQyacBJqn8/RzpgESJmnOI/AAAAAAAAABU/vtttNXPBLEo/s72-c/Shingler_HeadShot3.jpg' height='72' width='72'/><thr:total>2</thr:total></entry></feed>
