<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Glen Smith &#187; Groovy</title>
	<atom:link href="http://blogs.bytecode.com.au/glen/category/groovy/feed" rel="self" type="application/rss+xml" />
	<link>http://blogs.bytecode.com.au/glen</link>
	<description>Java, XML and all that Jazz... from Canberra, Australia</description>
	<lastBuildDate>Wed, 25 Apr 2012 05:10:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Making Grails Apps Native in a Microsoft Environment</title>
		<link>http://blogs.bytecode.com.au/glen/2012/03/07/making-grails-apps-native-in-a-microsoft-environment.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2012/03/07/making-grails-apps-native-in-a-microsoft-environment.html#comments</comments>
		<pubDate>Wed, 07 Mar 2012 08:53:52 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=699</guid>
		<description><![CDATA[It&#8217;s a little-known fact that I&#8217;m a part-owner of one of the most uncool Grails startups in the known world. We don&#8217;t have Webscale issues, we don&#8217;t have staff beanbags,  in fact we don&#8217;t even offer a cloud-based solution. We install Grails-based software on hosts inside corporate environments. We do compliance software. Like Health and Safety and IT Security stuff. Nerdy in the extreme. But also very fun to work on, and, shock-horror, a sustainable [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s a little-known fact that I&#8217;m a part-owner of one of the most uncool Grails startups in the known world. We don&#8217;t have Webscale issues, we don&#8217;t have staff beanbags,  in fact we don&#8217;t even offer a cloud-based solution. We install <a href="http://www.gmarc.com.au">Grails-based software</a> on hosts inside corporate environments. We do compliance software. Like Health and Safety and IT Security stuff. Nerdy in the extreme. But also very fun to work on, and, shock-horror, a sustainable business from year one!</p>
<p>Lots of our customers are &#8220;Microsoft Shops&#8221; from soup to nuts &#8211; SQL Server, Active Directory, Internet Explorer &#8211; you know the drill. So we&#8217;ve been working hard to make our Grails-based offering run just lovely alongside existing Enterprise apps.</p>
<h3>Grails and SQL Server</h3>
<p>First things first, we&#8217;ll need a SQL Server JDBC driver so we can play nice with common SQL Server versions (viz. 2005/2008R2). We evaluated a couple of Microsoft SQL Drivers including: the <a href="http://msdn.microsoft.com/en-us/sqlserver/aa937724">Microsoft</a> One, and the <a href="http://jtds.sourceforge.net/">jTDS </a>one. Both worked fine, but we ended up going with the jTDS one since it seemed faster in our smoke testing. And it was in a Maven repo.</p>
<p><strong>jTDS DataSource Configuration</strong></p>
<p>We experimented for this for for quite some time to get everything just so, so I&#8217;d thought I&#8217;d take some notes for you to to lean on. First of all, if you&#8217;re going dataSource config, you&#8217;ll want something like this:</p>
<pre class="brush: groovy; gutter: true">dataSource {
	pooled = true
	dialect = org.hibernate.dialect.SQLServer2008Dialect
	driverClassName = &quot;net.sourceforge.jtds.jdbcx.JtdsDataSource&quot;
	url = &quot;jdbc:jtds:sqlserver://yourhost:1433/GMARC;useNTLMv2=true;domain=yourDomain&quot;
	dbCreate = &quot;none&quot;
}</pre>
<p>There are some excellent docs on the <a href="http://jtds.sourceforge.net/faq.html#urlFormat">URL Formats</a> for jTDS but I found the useNTLMv2 switch was essential in the client&#8217;s environment. Apparently v1 (the default) is full of security holes, and there are standard NT group policies that disable NTLMv1 entirely. I also found that the domain switch needed to be provided otherwise we were hosed.</p>
<p><strong>Going Managed</strong></p>
<p>If you&#8217;re walking the Tomcat-managed DataSource, you&#8217;ll need to use the matching context.xml version of the above:</p>
<pre class="brush: xml; gutter: true">&lt;Resource name=&quot;jdbc/gmarc&quot; auth=&quot;Container&quot; type=&quot;javax.sql.DataSource&quot;
        driverClassName=&quot;net.sourceforge.jtds.jdbc.Driver&quot;
        url=&quot;jdbc:jtds:sqlserver://yourhost:1433/GMARC;useNTLMv2=true;domain=yourDomain&quot;
        maxActive=&quot;20&quot;
        maxIdle=&quot;10&quot;
    	validationQuery=&quot;select 1&quot; /&gt;</pre>
<p>Then, of course, you&#8217;ll make your configuration datasource of the JNDI variety&#8230; Perhaps something like</p>
<pre class="brush: groovy; gutter: true">dataSource {
    jndiName = &quot;java:comp/env/jdbc/gmarc&quot;
}</pre>
<p>One of the advantages of using the Container-managed variety of DataSources is that you can run somethink like <a href="http://code.google.com/p/psi-probe/">PSI-Probe</a> (a fork of the old Lambda probe) to validate your data source connections without going anywhere near your Grails config. Useful stuff. We&#8217;ll do more of that.</p>
<p><strong>A Note on SQL Server Port Weirdness</strong></p>
<p>If you&#8217;ve had a few SQL Server installs concurrent on your Dev box, the SQL port will move off the standard 1433 and onto some random port. We&#8217;ve had issues on our dev machines with this one, so head in the SQL Server Config Manager, have a look at the Network Configuration/Protocols/TCPIP then scroll to the bottom of the IP Address and find the TCP Dynamic Ports setting you need. What a snack <img src='http://blogs.bytecode.com.au/glen/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/03/sql-express-config.png"><img class="alignnone size-medium wp-image-704" title="sql-express-config" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/03/sql-express-config-300x267.png" alt="" width="300" height="267" /></a></p>
<p>&nbsp;</p>
<p><strong>Integrated Security &amp; Sticking Files Where They Belong</strong></p>
<p>You&#8217;ll notice neither of the above has username or passwords. Most SQL Server Admins despise Mixed Mode security (where you setup special usernames and passwords inside SQL Server itself). Microsoft has gone to the trouble of writing security white papers telling you to turn off Mixed Mode, so Integrated Security is your best friend in most MS enterprise shops.</p>
<p>With Integrated Security, you run your Tomcat service as a Active Directory Domain Account, then your credentials are remoted to SQL Server automatically. To get jTDS to work that way, you&#8217;ll want to make sure that you have place the DLL that ships with the driver in the right spot.</p>
<p>You&#8217;ll want to dump your jtds-1.2.5.jar file into &lt;TOMCAT_HOME&gt;/lib, but if you want to use Integrated Security, you&#8217;ll need to put that ntlmauth.dll file somewhere too. It has to be somewhere in your Windows path (we normally use Windows\system32), but you can happily put it into &lt;TOMCAT_HOME&gt;/bin and it seems to find it.</p>
<p>Word to the Wise: You need to match the right version of the DLL to your target operating system. I foolishly copied the 32bit version of the DLL onto a 64bit Windows install and wondered why I didn&#8217;t get a connection (nor did I get an error message that helped me out, so be warned).</p>
<p>Further Word to the Wise: We had to run the Tomcat service using the &#8220;@&#8221; format of domain account. So instead of &#8220;yourDomain\yourAccount&#8221;, we ran the service as &#8220;yourAccount@yourDomain&#8221;. Didn&#8217;t even know that worked! I&#8217;m such a MS noob these days..</p>
<p>Enough SQL Config. It&#8217;s time to have a look at AD integration.</p>
<h3>Grails &amp; Active Directory</h3>
<p>Given that we&#8217;re using the amazing Spring Security plugin for Auth, it was a  no-brainer to head down the <a href="http://burtbeckwith.github.com/grails-spring-security-ldap/docs/manual/index.html">Spring Security LDAP plugin</a> path and tune things for Active Directory. Our config is pretty vanilla per the sample docs, but we externalise it so we can tune it after deployment:</p>
<p>&nbsp;</p>
<pre class="brush: groovy; gutter: true">// Turn this switch on to enable Active Directory/LDAP Integration
grails.plugins.springsecurity.ldap.active = false

// LDAP config
// In particular, the Admin Account is only required to located the full DN of the user within the search base.
// Once that&#039;s found you can just bind as the real user.
grails.plugins.springsecurity.ldap.context.managerDn = &#039;CN=LdapSearchAccount,OU=My Users,DC=bytecode,DC=com,DC=au&#039;
grails.plugins.springsecurity.ldap.context.managerPassword = &#039;yourClearTextPasswords&#039;

// User-specific LDAP Configuration
grails.plugins.springsecurity.ldap.context.server = &#039;ldap://dir1.bytecode.com.au:389/&#039;
grails.plugins.springsecurity.ldap.authorities.ignorePartialResultException = true // typically needed for Active Directory
grails.plugins.springsecurity.ldap.search.base = &#039;OU=My Users,DC=bytecode,DC=com,DC=au&#039;
grails.plugins.springsecurity.ldap.search.filter=&quot;sAMAccountName={0}&quot; // for Active Directory you need this
grails.plugins.springsecurity.ldap.search.searchSubtree = true
grails.plugins.springsecurity.ldap.auth.hideUserNotFoundExceptions = false

// Role-specific LDAP config
grails.plugins.springsecurity.ldap.useRememberMe = false
grails.plugins.springsecurity.ldap.authorities.retrieveGroupRoles = true
grails.plugins.springsecurity.ldap.authorities.groupSearchBase =&#039;OU=My Groups,DC=bytecode,DC=com,DC=au&#039;
grails.plugins.springsecurity.ldap.authorities.groupSearchFilter = &#039;member={0}&#039;</pre>
<p>&nbsp;</p>
<p><strong>Determining DNs</strong></p>
<p>We found that getting the right DNs for Groups and Users was a bit of a pain. Lots of the samples use CNs for the different containers, but in the wild we have found that OUs rule the roost.  We found that Microsoft&#8217;s <a href="http://technet.microsoft.com/en-us/sysinternals/bb963907">AD Explorer</a> tool was a good way to work our the correct DN for the containers for users and groups (spaces in names seem to work fine too &#8211; yah!).</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/03/adexplorer.jpg"><img class="alignnone size-medium wp-image-703" title="AD Explorer in Action" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/03/adexplorer-300x197.jpg" alt="" width="300" height="197" /></a></p>
<p>Our only snag was that cleartext manager password. I should get motivated and write a patch for that (following the same patterns as the encrypted datastore passwords).</p>
<p>We use AD-based ROLES for all our app-based security stuff. Creating groups in Active Directory called &#8220;GMARC_Admin&#8221; will result in the mapping becoming ROLE_GMARC_ADMIN once the user authenticates, which makes sense, so cater for that in your mapping. We ended up using DB-based security mapping rules so we can reconfigure the app&#8217;s security after deployment. Turns out that was a good decision!</p>
<p><strong>What about Browser-based SSO?</strong></p>
<p>We&#8217;ve been toying with the idea of a full SPNEGO/Kerberos SSO deal, but have yet to make that leap. For starters, our clients were happy enough to be able to login to our app using their username/passwords (this is going to be a problem down the track for agencies that use some kind of token-based logon, so we&#8217;ll probably go full-on Kerberos in our next major rev and deal with the browser-fallout when it happens!).</p>
<p><strong>How&#8217;s it working out for you?</strong></p>
<p>Once we&#8217;d shaken down the basic config problems, and come up with some diagnostic tools, we&#8217;ve been pretty happy with the result. SQL Server seems to perform pretty snappily. And Tomcat runs just great on Windows. Only only big hurdle left is a nice Windows-based installer. Sounds like a 1.1.x feature <img src='http://blogs.bytecode.com.au/glen/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2012/03/07/making-grails-apps-native-in-a-microsoft-environment.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Some Personal Tech Goals for 2012</title>
		<link>http://blogs.bytecode.com.au/glen/2012/01/20/some-personal-tech-goals-for-2012.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2012/01/20/some-personal-tech-goals-for-2012.html#comments</comments>
		<pubDate>Thu, 19 Jan 2012 23:41:24 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=686</guid>
		<description><![CDATA[Building on last year&#8217;s effort, I&#8217;ve been spending some time with the Pragmatic Thinking and Learning book to start thinking about my knowledge portfolio for the year ahead. I&#8217;m still not entirely clear on the fine print, but there are some themes that are really starting to run in my thinking, so I figure I should get accountable and blog it up. Here&#8217;s my stab at the tech areas I&#8217;m interested in getting across in [...]]]></description>
			<content:encoded><![CDATA[<p>Building on <a title="Some Personal Tech Goals for 2011…" href="http://blogs.bytecode.com.au/glen/2011/01/07/some-personal-tech-goals-for-2011.html">last year&#8217;s effort</a>, I&#8217;ve been spending some time with the <a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking and Learning</a> book to start thinking about my knowledge portfolio for the year ahead. I&#8217;m still not entirely clear on the fine print, but there are some themes that are really starting to run in my thinking, so I figure I should get accountable and blog it up.</p>
<p>Here&#8217;s my stab at the tech areas I&#8217;m interested in getting across in 2012:</p>
<ul>
<li><strong>Grails 2.0 Deep Dive.</strong> <a href="http://www.manning.com/gsmith/">Grails In Action</a> has a completed TOC and a slated release schedule for 2nd Edition. So I guess most of the hard work is already done <img src='http://blogs.bytecode.com.au/glen/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  No doubt there will be many adventures posted here in the days to come.</li>
<li><strong>GUI Applications.</strong> I know everyone is giddy with mobile at the moment and I spent plenty of time building mobile apps for every possible device on a project last year. This year I&#8217;ve ended up with a couple of major Swing gigs on the timeline, so this is a great chance to catch up on Frankenstein GUI skills (for all platforms, not just Swing). Native Android might be a good experiment area here too. And <a href="http://griffon.codehaus.org/">Griffon</a> goes without saying. It&#8217;s much harder when you don&#8217;t have a &#8220;Twitter Bootstrap&#8221; for Native GUIs!</li>
<li><strong>Integration Testing.</strong> I&#8217;ve flirted with <a href="http://www.gebish.org/">Geb </a>after Luke&#8217;s sessions at 2GX, and I&#8217;m also keen to explore more native Web-centric tools (like <a href="http://funcunit.com/">FuncUnit</a>) to explore what kinds of tools are productive for me.  I went live with my first major piece of Grails Commercial Software late last year, but my biggest snags have been browser-specific issues! I&#8217;m hoping some functional testing will help.</li>
<li><strong>JBoss.</strong> Ok this one is definitely a little left of centre. But I live in a (mostly) Websphere town and I&#8217;m really tired of dealing with the insanity and wastefulness of that platform. I&#8217;d really love to have a full-stack alternative (SOA is big in Canberra) that I could offer clients as a migration strategy. I think <a href="http://www.jboss.com/products/community-enterprise/">JBoss </a>is worth exploring here for that reason alone.</li>
<li><strong>MongoDB.</strong> Of all the NoSQL options, Mongo looks the most interesting to me. I own a <a href="http://www.manning.com/banker/">couple </a>of <a href="http://shop.oreilly.com/product/0636920001096.do">books</a>, and the Grails support for NoSQL is pretty rocking right now. I think the trickiest part here is actually getting a feel for NoSQL Schema design in document stores. It&#8217;s not like there&#8217;s an easy &#8220;<a href="http://en.wikipedia.org/wiki/Third_normal_form">Third Normal Form</a>&#8221; type refactoring to apply.</li>
</ul>
<div>And the softer non-software stuff?</div>
<ul>
<li><strong>Training Skills.</strong> A lot of the ideas in <a href="http://pragprog.com/book/ahptl/pragmatic-thinking-and-learning">Pragmatic Thinking and Learning</a> apply specifically to how to train and mentor people. I really want to experiment with this over the course of the year by running some experimental training sessions and see how people cope with alternate presentation/learning courseware. Should have a good impact on the book too!</li>
<li><strong>Leadership.</strong> I&#8217;m now serving on the leadership board of several for-profit and non-for-profit organisations. I bring plenty of technical horsepower, but don&#8217;t really contribute much in vision casting, strategic planning and people development. All my non-tech reading this year is going to be along the lines of &#8220;developing people&#8221; but in a Glen-kinda-way rather than just a <a href="http://www.amazon.com/21-Irrefutable-Laws-Leadership-Follow/dp/0785288376/ref=sr_1_3?s=books&amp;ie=UTF8&amp;qid=1327015831&amp;sr=1-3">John-Maxwell</a>-regurgitate kinda way. Honestly there is so much junk written about leadership that is passed on unprocessed&#8230;But that&#8217;s for another &lt;rant/&gt;</li>
<li><strong>Minimalism.</strong> I&#8217;ve actually been applying a bunch of the ideas from &#8220;<a href="http://www.amazon.com/Joy-Less-Minimalist-Living-Guide/dp/0984087311">The Joy of Less</a>&#8221; that I&#8217;ve found really helpful in building a much more conducive living and working space. Think of it as &#8220;Eliminate Waste&#8221; but applied to your whole life rather than just your code! Lots to learn here, and lots of habits to unlearn to.</li>
</ul>
<p>Well that should keep me busy for a while&#8230;. At least for 2012&#8230;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2012/01/20/some-personal-tech-goals-for-2012.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Reviewing Personal Tech Goals for 2011</title>
		<link>http://blogs.bytecode.com.au/glen/2012/01/05/reviewing-personal-tech-goals-for-2011.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2012/01/05/reviewing-personal-tech-goals-for-2011.html#comments</comments>
		<pubDate>Wed, 04 Jan 2012 22:47:26 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=682</guid>
		<description><![CDATA[I went through a tech goal-setting process last year, and found it pretty help, so I&#8217;m lining up for another Tech Goals plan in 2012. I commend the process to you! First let&#8217;s review last year&#8217;s list: JavaScript &#8211; Yup! I can certainly tick this one off. Did several pieces of hardcore JavaScript work for clients (some without framework support), learned enough QUnit to be dangerous, and even did a bit of Backbone.js. Android/HTML5/CSS3 &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>I went through a tech goal-setting process last year, and found it pretty help, so I&#8217;m lining up for another Tech Goals plan in 2012. I commend the process to you!</p>
<p>First let&#8217;s review <a title="Some Personal Tech Goals for 2011…" href="http://blogs.bytecode.com.au/glen/2011/01/07/some-personal-tech-goals-for-2011.html">last year&#8217;s list</a>:</p>
<ul>
<li><strong>JavaScript</strong> &#8211; Yup! I can certainly tick this one off. Did several pieces of hardcore JavaScript work for clients (some without framework support), learned enough <a href="http://docs.jquery.com/QUnit">QUnit </a>to be dangerous, and even did a bit of <a href="http://documentcloud.github.com/backbone/">Backbone.js</a>.</li>
<li><strong>Android/HTML5/CSS3</strong> &#8211; Check. I&#8217;m bundling these together since I ended up doing a major <a href="http://phonegap.com/">PhoneGap </a>project for a client this year. Had a chance to building a HTML5/CSS3 app for them on iPhone/iPad/Android/Blackberry/WinPhone7. If nothing else, I&#8217;m now pretty solid on CSS3 media queries and device toolkits!</li>
<li><strong>Grails Testing</strong> &#8211; Check (but lots more work to do). Spent a lot more time writing <a href="http://code.google.com/p/spock/">Spock </a>tests this year and I&#8217;m definitely further along the road towards productivity here. Actually, the most useful TDD resource I came across this year was the PragProg <a href="http://pragprog.com/screencasts/v-kbtdd/test-driven-development">screencasts of Kent Beck</a> doing TDD. So practical and non-preachy. Really great. Went ahead and read the original <a href="http://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530">TDD book</a> and found that helpful too!</li>
<li><strong>Graphic Design</strong>. Well. I&#8217;ve discovered that I&#8217;m fighting city hall on this one. I&#8217;ve put too much energy into this for very little result. What I did discover this year was that I can happily customise templates to my cause (<a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a>, anyone?) and it&#8217;s more productive to outsource the rest!</li>
</ul>
<p>Also had  chance to do several Grails talks this year including a <a title="Grails Code Camp: Wellington – where Yaks were kept hairy (mostly)" href="http://blogs.bytecode.com.au/glen/2011/09/01/grails-code-camp-wellington-where-yaks-were-kept-hairy-mostly.html">Grails Code Camp</a> in New Zealand, <a title="SpringOne2GX 2011 was one Groovy Show!" href="http://blogs.bytecode.com.au/glen/2011/10/31/springone2gx-2011-was-one-groovy-show.html">SpringOne2GX</a> in Chicago, and <a title="Grails, PhoneGap and Fun @ OSDC2011" href="http://blogs.bytecode.com.au/glen/2011/11/16/grails-phonegap-and-fun-osdc2011.html">GR8Conf/OSDC</a> in Canberra.</p>
<p>So what&#8217;s on the agenda for 2012? That&#8217;s the topic for the next post&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2012/01/05/reviewing-personal-tech-goals-for-2011.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails, PhoneGap and Fun @ OSDC2011</title>
		<link>http://blogs.bytecode.com.au/glen/2011/11/16/grails-phonegap-and-fun-osdc2011.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/11/16/grails-phonegap-and-fun-osdc2011.html#comments</comments>
		<pubDate>Wed, 16 Nov 2011 05:21:43 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=671</guid>
		<description><![CDATA[I&#8217;ve had a great couple of days at OSDC 2011! Tuesday I was hanging out at the First Ever Australian GR8 Conference, spent Tuesday night with the CJUG boys, then have been presenting today on PhoneGap to the broader OSDC conference. Great times! Interesting this is definitely one of the hardest core developer communities I have hung out with. Hardly any Macbooks/iPhones in sight and Linux laptops and Android phones everywhere! People are really committed [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve had a great couple of days at <a href="http://osdc.com.au/">OSDC</a> 2011! Tuesday I was hanging out at the First Ever <a href="http://gr8confau.org/">Australian GR8 Conference</a>, spent Tuesday night with the <a href="http://cjugaustralia.org/">CJUG</a> boys, then have been presenting today on PhoneGap to the broader OSDC conference. Great times!</p>
<p>Interesting this is definitely one of the hardest core developer communities I have hung out with. Hardly any Macbooks/iPhones in sight and Linux laptops and Android phones everywhere! People are really committed to the Open Source way here.</p>
<h3>The First Ever GR8 Conf in .au</h3>
<p>It was great to hang out with a bunch of the awesome team from the local Groovy and Grails community. I gave a shortened version of my SpringOne talk on Grails UI refactors. The slides are up on <a href="http://www.slideshare.net/glen_a_smith/does-my-div-look-big-in-this-10179139">SlideShare</a> if you missed it:</p>
<div id="__ss_10179139" style="width: 425px;">
<p><strong style="display: block; margin: 12px 0 4px;"><a title="Does my DIV look big in this?" href="http://www.slideshare.net/glen_a_smith/does-my-div-look-big-in-this-10179139" target="_blank">Does my DIV look big in this?</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10179139" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/glen_a_smith" target="_blank">glen_a_smith</a></div>
</div>
<p>After a fantastic day of talks from a bunch of great speakers, we had a  chance to kick back with Paul King, Steve Dalton, Craig Aspinall, Peter McNeil, Dean Macaulay, Paul Kilpatrick, James Swann and a bunch of CJUGers at the local watering hole.</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-relaxing.jpg"><img class="alignnone size-medium wp-image-674" title="osdc-relaxing" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-relaxing-179x300.jpg" alt="" width="179" height="300" /></a></p>
<h3>Hacking PhoneGap for Fun and Profit</h3>
<p>Earlier today I had great fun presenting to an enthusiastic crowd of mobile developers on the joy of PhoneGap. Again, the slides are on <a href="http://www.slideshare.net/glen_a_smith/fake-your-way-as-a-mobile-developer-rockstar-with-phonegap-10179146">SlideShare</a>.</p>
<div id="__ss_10179146" style="width: 425px;"><strong style="display: block; margin: 12px 0 4px;"><a title="Fake Your Way as a Mobile Developer Rockstar with PhoneGap" href="http://www.slideshare.net/glen_a_smith/fake-your-way-as-a-mobile-developer-rockstar-with-phonegap-10179146" target="_blank">Fake Your Way as a Mobile Developer Rockstar with PhoneGap</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10179146" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="425" height="355"></iframe></p>
<div style="padding: 5px 0 12px;">View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/glen_a_smith" target="_blank">glen_a_smith</a></div>
</div>
<p>One of the great facilities they had at the conference centre was an old-school data projector. We put it to good use showing off the deployment of <a href="http://blogs.bytecode.com.au/glen/2011/11/08/osdc2011-phonegap-and-google-spreadsheet-hacking.html">our little conference app</a> to my actual Android phone. Ever though a few of the demos snagged, it was all part of the fun of deploying to real devices!</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-glen-talking-on-phonegap.jpg"><img class="alignnone size-medium wp-image-675" title="osdc-glen-talking-on-phonegap" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-glen-talking-on-phonegap-300x225.jpg" alt="" width="300" height="225" /></a> <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-phonegap-talk.jpg"><img class="alignnone size-medium wp-image-672" title="osdc-phonegap-talk" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-phonegap-talk-300x224.jpg" alt="" width="300" height="224" /></a>   <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-projector.jpg"><img class="alignnone size-medium wp-image-673" title="osdc-projector" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-projector-200x300.jpg" alt="" width="200" height="300" /></a></p>
<p>Thanks to <a href="https://twitter.com/#!/spidie">@spidie</a>, <a href="http://twitter.com/#!/jamedmondson">@jamedmonson</a>, and <a href="https://twitter.com/#!/davocode">@davecode</a> for the pics!</p>
<p>Had a fantastic time hanging out with everyone too! Great conference so far!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/11/16/grails-phonegap-and-fun-osdc2011.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>SpringOne2GX 2011 was one Groovy Show!</title>
		<link>http://blogs.bytecode.com.au/glen/2011/10/31/springone2gx-2011-was-one-groovy-show.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/10/31/springone2gx-2011-was-one-groovy-show.html#comments</comments>
		<pubDate>Mon, 31 Oct 2011 04:20:09 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=631</guid>
		<description><![CDATA[What a fantastic time we all had at SpringOne 2GX in Chicago over the last week. My head is jam packed full of information and I have so many new things to add to my list of cool Groovy tech to explore! If you&#8217;ve never made it to one (this was my first), I can highly recommend it! First things First: Relationships trump everything The absolute best part of these events is the chance to [...]]]></description>
			<content:encoded><![CDATA[<p>What a fantastic time we all had at <a href="http://springone2gx.com/conference/chicago/2011/10/home">SpringOne 2GX</a> in Chicago over the last week. My head is jam packed full of information and I have so many new things to add to my list of cool Groovy tech to explore! If you&#8217;ve never made it to one (this was my first), I can highly recommend it!</p>
<h3>First things First: Relationships trump everything</h3>
<p>The absolute best part of these events is the chance to hang out with our awesome Groovy community making new friends and catching up with old ones. Just have a scan of the Wed night Groovy and Grails BOF (click picture for a closeup) to get a feel for how fantastic our community is (somewhere in this picture are heaps of the names you&#8217;ve run across Scott Davis, Graeme Rocher, Burt Beckwith, Guillaume Laforge, Dierk Koenig, Paul King, Colin Harringon, Bobby Warner, Dave Klein, Jim Shingler and many more). The audio will be up on <a href="http://grailspodcast.com/">grailspodcast.com</a> shortly.</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/PA270088.jpg"><img class="size-medium wp-image-645 aligncenter" title="Groovy and Grails BOF" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/PA270088-300x225.jpg" alt="" width="300" height="225" /></a></p>
<p>&nbsp;</p>
<h3>Friends Old and New</h3>
<p>There&#8217;s nothing better than catching up with old friends from the Grails community: Andres, Dierk, Scott, Graeme, Jeff, James, Paul, Peter, Luke, Dave &amp; Ken. And it was doubly wonderful to make a whole bunch new friends: Colin Harrington (Grails Testing Guru), Tim Berglund (of the Tim &amp; Matt Git Video fame), Peter Niederwieser (Spock author), Andy Clement (STS Grails IDE support and Agent Reloading) and Jim Shingler (thanks for the insights on Grails in the large!).</p>
<p>And then there is seeing all the great guys from the community including Bob Rullo, Bryan, Jeff Gortatowsky, and too many others to name. So great to see you all!</p>
<p><img class="alignright size-medium wp-image-656" title="Glen at SpringOne2GX 2011" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/glen-smith-225x300.jpg" alt="" width="225" height="300" /></p>
<h3>Grails In Action, 2nd Edition</h3>
<p>You asked for, and it&#8217;s happening! The most common question heard at the Manning SpringOne2GX desk this week was &#8220;Grails in Action, second edition. When?&#8221; Thanks so much for your interest (signed heaps of books over the week too!). If you&#8217;d like one on the cheap, head over to the <a href="http://www.manning.com/gsmith/">Grails in Action</a> page, and use code <strong>spring3911</strong> for a 39% discount!</p>
<p>The good news is that <a href="http://www.cacoethes.co.uk/blog/">Peter Ledbrook</a> and I sat down the Mike Stephens from Manning and thrashed out a plan to get this bad boy up and running. Stay tuned for some MEAP annoucements early 2011. Peter has already started talking about NoSQL coverage, testing deepdive, resources and dependency resolution coverage and tons of other refreshed Grails 2.0 content. I feel tired already! Can&#8217;t wait to get started! (Drop us a line if you have specific things you want covered &#8211; now is the time to get your requests in!)</p>
<h3>Core Inspirations: where to from here?</h3>
<p>In case you were interested in the topics covered from the sessions I went to, here are the things on my todo list after 2GX:</p>
<ul>
<li>Geb and Functional Specs (Luke session got me thinking here)</li>
<li>Next Level Spock (Peter Niederwieser is such a champion &#8211; and sounds *exactly* like Arnie)</li>
<li>Taking the Grails Testing movement forward (Colin Harrington really charged me up for this)</li>
<li>NoSQL perspectives (Graeme&#8217;s session on Grails NoSQL was awesome! Super excited about this)</li>
<li>Coffeescript &amp; Node (not sold on this one, but Scott has persuaded me to at least have a look at Node)</li>
</ul>
<h3>Glen&#8217;s Sessions</h3>
<p>The 90 minute session format makes it really hard to maintain audience interest, but fortunately I had fantastic people in my session! I ran two sessions, one on refactoring the Grails view tier titled &#8220;Does my DIV look big in this?&#8221; (lots of Charlie Sheen references lead to a spate of #winning and #tigerblood tweets &#8211; it was such a fun crowd we had a ball).</p>
<p>For my second session, I put together a talk titled &#8220;Grails Hacker Triage: 10 Grails code smells and refactors&#8221; (crowd shown below). This talk was a little experimental and I had quite a few snags pulling it off, but again the crowd were really understanding and had great ideas for improvement next time. Thanks team! I&#8217;m going to turn this talk into 10 blog posts over the next month, so stay tuned to dump some &#8220;better practices&#8221; ideas on me.</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/PA280089.jpg"><img class="size-medium wp-image-644 aligncenter" title="Grails Hacks and Refactors Audience" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/PA280089-300x225.jpg" alt="" width="300" height="225" /></a></p>
<h3>So In Summary</h3>
<p>This was one of best Grails events I&#8217;ve ever been to (so glad I skipped J1 this year to make it!). If you have a chance to get there next year, make sure you do. Great people and Groovy/Grails content made for some fantastic discussions and hangouts. Recommended!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/10/31/springone2gx-2011-was-one-groovy-show.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DRYer Grails views? Learn less.css, backbone.js, twitter bootstrap and more @ 2GX</title>
		<link>http://blogs.bytecode.com.au/glen/2011/10/20/dryer-grails-views-learn-less-css-backbone-js-twitter-bootstrap-and-more.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/10/20/dryer-grails-views-learn-less-css-backbone-js-twitter-bootstrap-and-more.html#comments</comments>
		<pubDate>Wed, 19 Oct 2011 22:26:04 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=629</guid>
		<description><![CDATA[I&#8217;m just putting the final demo together for one of my sessions at SpringOne 2GX called &#8220;Does my DIV look big in this?&#8221; This talk brings together a whole bunch of technologies that I&#8217;ve been experimenting with for a while that help keep your view tier DRYer, namely: Grails Resources (for shrinking your dependencies) Various Grails and non-Grails DRY view technologies (including bean-fields, navigation, validation and other jQuery related goodness) Less.css for keeping your CSS [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m just putting the final demo together for one of my sessions at <a href="http://www.springone2gx.com/">SpringOne 2GX</a> called &#8220;<a href="http://www.springone2gx.com/conference/chicago/2011/10/session?id=23417">Does my DIV look big in this?</a>&#8221; This talk brings together a whole bunch of technologies that I&#8217;ve been experimenting with for a while that help keep your view tier DRYer, namely:</p>
<ul>
<li><a href="http://grails.org/plugin/resources">Grails Resources</a> (for shrinking your dependencies)</li>
<li>Various Grails and non-Grails DRY view technologies (including <a href="http://grails.org/plugin/bean-fields">bean-fields</a>, <a href="http://grails.org/plugin/navigation">navigation</a>, validation and other jQuery related goodness)</li>
<li><a href="http://lesscss.org/">Less.css</a> for keeping your CSS nice and DRY</li>
<li><a href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a> (for gridding and standardised layouts)</li>
<li><a href="http://documentcloud.github.com/backbone/">Backbone.js</a> for giving some rigor to my JavaScript views (and painless REST sync)</li>
</ul>
<p>If any of those technologies are on your radar, make sure you come along! I&#8217;m really keen to hear your views on what has worked for you and how we can move towards more low friction Grails views.</p>
<p>We&#8217;ll be taking a noisy and loveless default UI:</p>
<div><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/seefooddiet_before.gif"><img class="alignnone size-full wp-image-632" title="See Food Diet Before Makeover" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/seefooddiet_before.gif" alt="" width="400" height="276" /></a></div>
<p>And giving it a solid makeover for markup, layout and behaviour:</p>
<div><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/seefooddiet_after.gif"><img class="alignnone size-full wp-image-633" title="See Food Diet After Makeover" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/10/seefooddiet_after.gif" alt="" width="400" height="276" /></a></div>
<p>It&#8217;s gonna be a blast! See you in Chicago!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/10/20/dryer-grails-views-learn-less-css-backbone-js-twitter-bootstrap-and-more.html/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Patching bean-fields on 2.0.0.M2</title>
		<link>http://blogs.bytecode.com.au/glen/2011/09/20/patching-bean-fields-on-2-0-0-m2.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/09/20/patching-bean-fields-on-2-0-0-m2.html#comments</comments>
		<pubDate>Tue, 20 Sep 2011 08:39:06 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=608</guid>
		<description><![CDATA[If you&#8217;re having troubles with the Bean-Fields plugin on Grails 2.0.0.M2, there&#8217;s a quick workaround to get up and running. So if you see something like&#8230; Caused by GrailsTagException: Error executing tag &#60;bean:form&#62;: Cannot get property 'class' on null object You know you&#8217;ve tripped the issue. I&#8217;ve logged the issue in GPBEANFIELDS-40 but the root cause is actually not beanfields at all. It&#8217;s a breaking change introduced in Grails 2.0.0-M2 for performance improvements (GRAILS-8001). The change [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re having troubles with the Bean-Fields plugin on Grails 2.0.0.M2, there&#8217;s a quick workaround to get up and running. So if you see something like&#8230;</p>
<pre class="brush: groovy; gutter: true">Caused by GrailsTagException: Error executing tag &lt;bean:form&gt;: Cannot get property 'class' on null object</pre>
<p>You know you&#8217;ve tripped the issue.</p>
<p>I&#8217;ve logged the issue in <a href="http://jira.grails.org/browse/GPBEANFIELDS-40">GPBEANFIELDS-40</a> but the root cause is actually not beanfields at all. It&#8217;s a breaking change introduced in Grails 2.0.0-M2 for performance improvements (<a href="http://jira.grails.org/browse/GRAILS-8001">GRAILS-8001</a>). The change has since been made backward compatible for RC1, so the break only occurs on 2.0.0-M2.</p>
<p>Line 922 of BeanFieldsTagLib needs a mod&#8230; Comment it out and replace with the mod below</p>
<pre class="brush: groovy; gutter: true">//attrs._BEAN.bean = attrs.remove('bean') ?: pageScope.variables[attrs._BEAN.beanName]
attrs._BEAN.bean = attrs.remove('bean') ?: pageScope.getVariable(attrs._BEAN.beanName)</pre>
<p>And you&#8217;re in business!</p>
<p>Remember, this ONLY applies to 2.0.0-M2, all will be well in RC1!</p>
<p>Enjoy those DRY forms&#8230; And go buy <a href="http://www.anyware.co.uk/2005/">Marc Palmer</a> a nice wine next time you&#8217;re in the UK. I plan on it.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/09/20/patching-bean-fields-on-2-0-0-m2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Grails Hacker Triage: When Bad Code happens to Good Developers</title>
		<link>http://blogs.bytecode.com.au/glen/2011/09/16/grails-hacker-triage-when-bad-code-happens-to-good-developers.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/09/16/grails-hacker-triage-when-bad-code-happens-to-good-developers.html#comments</comments>
		<pubDate>Thu, 15 Sep 2011 22:35:24 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=611</guid>
		<description><![CDATA[We&#8217;ve all been there. Maybe you were in a rush to get your latest Grails app out the door, or maybe it was a hobby project you were doing in your spare time and things just got out of hand. Hack code, click refresh, hack code, click refresh, (pause to complain about why Grails needs a restart), hack code, click refresh. You know the drill. Refresh-driven development (RDD). Either way you find yourself with a [...]]]></description>
			<content:encoded><![CDATA[<p>We&#8217;ve all been there. Maybe you were in a rush to get your latest Grails app out the door, or maybe it was a hobby project you were doing in your spare time and things just got out of hand. Hack code, click refresh, hack code, click refresh, (pause to complain about why Grails needs a restart), hack code, click refresh. You know the drill. Refresh-driven development (RDD).</p>
<p>Either way you find yourself with a steaming pile of Grails application, and you dread updating the thing because of the carefully crafted house of cards that it&#8217;s become.</p>
<p>I know *you* wouldn&#8217;t do that. But I would. In a heartbeat. But I&#8217;m repenting. And changing. I hope.</p>
<p>I&#8217;m starting a blog series cataloguing the biggest and shamless Grails hacks that have slowed me down, and I&#8217;d like you to join in the conversation. The end result is going to be a talk at <a href="http://www.springone2gx.com/conference/chicago/2011/10/home">SpringOne 2GX in October</a> called <strong>Grails Hacker Triage</strong>, where we&#8217;ll talk about some strategies for treating these shameless hacks.</p>
<p>So, over the next few weeks, I&#8217;m hoping to write about my personal &#8220;Top 5 Hacks of Shame&#8221;:</p>
<ol>
<li><strong>The Fat Controller:</strong> who needs any other artefact when you have this Golden Hammer! Use implicit transactions, generate markup, do querying. What can&#8217;t it do when you get creative?</li>
<li><strong>The Skinny Model:</strong>  You wouldn&#8217;t want to clutter up your domain classes with domain logic right?</li>
<li><strong>The Nosey Magic Service:</strong>  it turns an untyped params object into all kinds of business magic, and has Dr Phil-style  co-dependency problems.</li>
<li><strong>The TagLib that ate Tokyo:</strong>  it lives and breathes embedded html with a rich tapestry of business logic for good measure. And does a little querying to stay holistic.</li>
<li><strong>The 100KLOC view:</strong>  With so many logic taglibs built into Grails, why not use them all? And let&#8217;s get polyglot by embedding a bunch of JavaScript and CSS FTW.</li>
</ol>
<p>I suspect I have good examples of all of these pattern in my personal Grails app archive, so I&#8217;m off to do some painful researching and personal contemplation.</p>
<p>Look forward to your input on some great personal hacks and remediations along the way!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/09/16/grails-hacker-triage-when-bad-code-happens-to-good-developers.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Grails Code Camp: Wellington &#8211; where Yaks were kept hairy (mostly)</title>
		<link>http://blogs.bytecode.com.au/glen/2011/09/01/grails-code-camp-wellington-where-yaks-were-kept-hairy-mostly.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/09/01/grails-code-camp-wellington-where-yaks-were-kept-hairy-mostly.html#comments</comments>
		<pubDate>Wed, 31 Aug 2011 23:58:42 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=600</guid>
		<description><![CDATA[I&#8217;m just back from a fantastic time in Wellington, New Zealand, where I was doing some Grails training and speaking duties for Asia/Pacific User Group of SunGardHE. Wellington is a very beautiful place (albeit a little cold &#8211; and I *live* in a cold place!) and the local hosting team of Andrew/Dale/Keiryn where just fantastic in sorting everything out! On the first day I had a chance to speak with around 100 managers on the benefits [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m just back from a fantastic time in Wellington, New Zealand, where I was doing some Grails training and speaking duties for Asia/Pacific User Group of <a href="http://www.sungardhe.com.au/">SunGardHE</a>. Wellington is a very beautiful place (albeit a little cold &#8211; and I *live* in a cold place!) and the local hosting team of Andrew/Dale/Keiryn where just fantastic in sorting everything out!</p>
<p>On the first day I had a chance to speak with around 100 managers on the benefits of Grails (it was quite a challenge putting together a Grails talk targetted to a non-technical audience!). We covered off three big ideas:</p>
<ol>
<li>What is Grails?</li>
<li>Why do people choose Grails? (and who has already moved there)</li>
<li>How do I transition my team to Grails? (in their case, from Oracle PL/SQL)</li>
</ol>
<p>Then I couldn&#8217;t resist doing a small Grails demo where we built a conference registration app with evolving requirements, then skinned it with the APSUG logo and colours. Even though the crowd was largely non-technical, they were right into the live coding demo! That was a real eye opener. I think people really enjoy things being created before their eyes (whether that&#8217;s live painting or live coding!).</p>
<p>The other thing they *really* resonated with was the whole concept of Yak Shaving. For a lot of them, they relate the whole idea of convention-over-configuration to a reduction in Yak Shaving &#8211; something which had a clear mental model for them!</p>
<p><a title="yak shaving by LiminalMike, on Flickr" href="http://www.flickr.com/photos/revcyborg/22883042/"><img src="http://farm1.static.flickr.com/17/22883042_01f3a1a3d2.jpg" alt="yak shaving" width="500" height="386" /></a></p>
<p>The second day we ran a code camp for around 10 of the university developers from the conference. SunGard had put together some great training materials to work through, which I couldn&#8217;t resist tweaking a little for the local crowd!</p>
<p>One of the coolest parts of the day was when <a href="http://twitter.com/#!/BobRullo">Bob Rullo</a> from SunGardHE in the States skyped in and took the students through the actual SunGardHE source code for the commercial Grails app they&#8217;ll be customising for their own universities. The students were so jazzed to see the same type of Grails Domain Classes and Services that they&#8217;d be tinkering with during the camp.</p>
<p>Big thank you to all the folk who brought me over (particularly <a href="http://www.victoria.ac.nz/home/default.aspx">Victoria University of Wellington</a>), and the great students in the code camp who had to do a little Yak Shaving around the &#8220;perfect storm&#8221; of Grails 1.3.7, Java 7 and Gemfire! We even prototyped a &#8220;grails yak-shave&#8221; command to keep us focussed!</p>
<p>Oh. And if you even get to Wellington, make sure you head over to <a href="http://www.wellingtonzoo.com/">Wellington Zoo</a> to catch the Kiwi Hut and the extremely cute <a href="http://www.wellingtonzoo.com/net/explore/animals.aspx?id=47">brown kiwis</a>. Those Kiwis are a really awesome and distinctive native animal!</p>
<p>Oh. And I also had a great time catching up with NZ Grails champs <a href="http://twitter.com/pragmaticgeek" rel="nofollow" data-screen-name="pragmaticgeek">@pragmaticgeek</a> <a href="http://twitter.com/wakaleo" rel="nofollow" data-screen-name="wakaleo">@wakaleo</a> <a href="http://twitter.com/nigel_charman" rel="nofollow" data-screen-name="nigel_charman">@nigel_charman</a>. Looks like we might get a few of the NZ boys over for the GR8 conf that looks like happening in Canberra on Nov 14. Can&#8217;t wait!</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/09/01/grails-code-camp-wellington-where-yaks-were-kept-hairy-mostly.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Grails 1.3.7 and the dreaded SAXParseException</title>
		<link>http://blogs.bytecode.com.au/glen/2011/08/27/grails-1-3-7-and-the-dreaded-saxparseexception.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/08/27/grails-1-3-7-and-the-dreaded-saxparseexception.html#comments</comments>
		<pubDate>Fri, 26 Aug 2011 21:38:56 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Grails]]></category>
		<category><![CDATA[Groovy]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=594</guid>
		<description><![CDATA[I&#8217;ve run into this one a few times on Grails 1.3.x, and every time I have to go googling to sort it out &#8211; it&#8217;s time to write it down to speed up my Google searches! The error I end up with is typically something like: java.lang.LinkageError: loader constraint violation: loader (instance of &#60;bootloader&#62;) previously initiated loading for a different type with name &#8220;org/xml/sax/SAXParseException&#8221; If you get this on a project after installing a new [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve run into this one a few times on Grails 1.3.x, and every time I have to go googling to sort it out &#8211; it&#8217;s time to write it down to speed up my Google searches!</p>
<p>The error I end up with is typically something like:</p>
<p><strong>java.lang.LinkageError: loader constraint violation: loader (instance of &lt;bootloader&gt;) previously initiated loading for a different type with name &#8220;org/xml/sax/SAXParseException&#8221;</strong></p>
<p>If you get this on a project after installing a new Grails plugin, this is probably some xml-api clash that the plugin has introduced. The workaround is nicely documented <a href="http://arrogantprogrammer.blogspot.com/2010/07/grails-linkageerror-for.html">here</a>. Just a matter of excluding xml-api in your BuildConfig and you&#8217;re away.</p>
<p>But what if you get this error when running a &#8220;grails create-app&#8221;? It&#8217;s too early to exclude anything &#8211; you haven&#8217;t even created the project!</p>
<p>To save you reinstalling your JDK/Grails/Groovy distros, it&#8217;s time to just blow away your IVY cache &#8211; (%USERPROFILE%/.ivy2/cache on Windows) and move on with your life! There&#8217;s a <a href="http://grails.1312388.n4.nabble.com/Grails-XML-error-with-clean-install-td2311587.html">nice discussion</a> on the Grails list about tracking down the offending jars using the JAVA_OPS=-verbose option and seeing exactly what is loading those XML classes!</p>
<p>Just wanted to write this down so I can find it later.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/08/27/grails-1-3-7-and-the-dreaded-saxparseexception.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

