<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" version="2.0">

<channel>
	<title>Glen Smith</title>
	
	<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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/glensmith" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="glensmith" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><image><url>http://blogs.bytecode.com.au/favicon.ico</url></image><item>
		<title>HipWall: HipChat for Plasma-sized team walls</title>
		<link>http://blogs.bytecode.com.au/glen/2012/04/25/hipwall-hipchat-for-plasma-sized-team-walls.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2012/04/25/hipwall-hipchat-for-plasma-sized-team-walls.html#comments</comments>
		<pubDate>Wed, 25 Apr 2012 05:10:57 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=716</guid>
		<description><![CDATA[This Friday, our little team is getting together for a &#8220;Learn Android&#8221; Hackathon. As it turns out, we&#8217;ve also recently had a spin evaluating HipChat. You can see the synergies developing right? So, given that HipChat has a rockin REST API, I thought I&#8217;d put together a little bit of JavaScript that ties up all the loose ends and gives me a nice mile-high display for displaying HipChat messages on the team plasma. And thus [...]]]></description>
			<content:encoded><![CDATA[<p>This Friday, our little team is getting together for a &#8220;Learn Android&#8221; Hackathon. As it turns out, we&#8217;ve also recently had a spin evaluating <a href="http://www.hipchat.com/">HipChat</a>. You can see the synergies developing right?</p>
<p>So, given that HipChat has a rockin <a href="https://www.hipchat.com/docs/api">REST API</a>, I thought I&#8217;d put together a little bit of JavaScript that ties up all the loose ends and gives me a nice mile-high display for displaying HipChat messages on the team plasma. And thus HipWall is born!</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-on-a-plasma.png"><img class="alignnone size-medium wp-image-718" title="hipchat-on-a-plasma" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-on-a-plasma-300x225.png" alt="" width="300" height="225" /></a></p>
<p>In the pic about I&#8217;ve connecting the HDMI port on an Acer A501 Android Tablet to display my little HipWall page on the big screen.</p>
<h3>Useful Tools for RESTful Tinkering</h3>
<p>I&#8217;ve been looking for a good Chrome plugin to test out RESTful services and I&#8217;ve found one that I love &#8211; <a href="https://chrome.google.com/webstore/detail/fdmmgilgnpjigdojojpjoooidkmcomcm">Postman REST</a>. This little tool lets you easily plugin in URL params and headers, and looks after pretty printing and history management to boot. Really sweet. Saved me a ton of time tinkering with the HipChat API.</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-via-postman.png"><img class="alignnone size-medium wp-image-719" title="hipchat-via-postman" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-via-postman-300x215.png" alt="" width="300" height="215" /></a></p>
<p>&nbsp;</p>
<h3>Mocking out those AJAX calls</h3>
<p>I&#8217;ve been getting into <a href="http://docs.jquery.com/Qunit">QUnit </a>for my JavaScript unit testing, and I&#8217;m having a ball. One thing I&#8217;ve never explored, however, was mocking out RESTful services. Enter <a href="https://github.com/appendto/jquery-mockjax">MockJax </a>- an awesome jQuery plugin for handling mocking of RESTful calls (<a href="http://ja.mesbrown.com/2012/04/adventures-in-mockjax/">good tutorial here</a>).</p>
<p>Needless to say, it&#8217;s very handy to be able to setup mock return values doing snazzy magic like this:</p>
<pre class="brush: javascript; gutter: true">module(&quot;Remote HipChat Mocked Calls&quot;, {
	setup: function() {

		$.mockjax({
		  url: /.*\/rooms\/list.*/,
		  responseTime: 150,
		  responseText: getRoomsMock()
		});

		$.mockjax({
		  url: /.*\/rooms\/history.*/,
		  responseTime: 150,
		  responseText: getHistoryMock()
		});

	}
});</pre>
<p>Huge timesaver. Can test our all my stuff with canned values and I don&#8217;t even need to muck about with API keys and whatnot.</p>
<h3>Getting Jiggy with Sweet Google Fonts</h3>
<p>This is also my first chance to have a good play with <a href="http://www.google.com/webfonts">Google Web Fonts</a>. In the sample, I use <a href="http://www.google.com/webfonts/specimen/Yanone+Kaffeesatz">Yanone Kaffeesatz</a> which I&#8217;ve always loved since seeing <a href="http://zachholman.com/talk/how-github-uses-github-to-build-github">Zac Holman&#8217;s rocking slides</a>. If you haven&#8217;t played with them before, they are definitely worth a look. Add a link</p>
<pre class="brush: html; gutter: true">&lt;link href=&#039;http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz&#039; rel=&#039;stylesheet&#039; type=&#039;text/css&#039;&gt;</pre>
<p>Then style away:</p>
<pre class="brush: css; gutter: true">.chat {
	font-family: &#039;Yanone Kaffeesatz&#039;, sans-serif;
	height: 23%;
}</pre>
<p>Nice!</p>
<h3>Add a touch of Date love</h3>
<p>This was also a good chance to have a look at <a href="http://momentjs.com/">moment.js</a> &#8211; a very cool JavaScript date library that can used for a range of parsing and presentation love. I was interested in those &#8220;human-friendly&#8221; type dates &#8211; &#8220;12 minutes ago&#8230;&#8221; and it supports them out of the box! Lovely.</p>
<pre class="brush: javascript; gutter: true">var timestamp = moment(element.date);
$(&#039;#chatlist&#039;).append(&quot;&lt;div class=&#039;chatauthor&#039;&gt;&quot; +
				timestamp.fromNow() + &quot; by &quot; +
				element.from.name + &quot;&lt;/div&gt;&quot;);</pre>
<p>&nbsp;</p>
<p>Very sweet. Good time-saver!</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-on-a-pc.png"><img class="alignnone size-medium wp-image-717" title="hipchat-on-a-pc" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2012/04/hipchat-on-a-pc-300x187.png" alt="" width="300" height="187" /></a></p>
<h3>Time to Battle Test!</h3>
<p>This Friday we&#8217;ll take it for a spin in a live hackathon scenario. When I work out a few of the kinks, I&#8217;ll throw it up on Github!</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2012/04/25/hipwall-hipchat-for-plasma-sized-team-walls.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Net Disconnect: Taking your Dev machine offline for productivity</title>
		<link>http://blogs.bytecode.com.au/glen/2012/04/19/net-disconnect-taking-your-dev-machine-offline-for-productivity.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2012/04/19/net-disconnect-taking-your-dev-machine-offline-for-productivity.html#comments</comments>
		<pubDate>Thu, 19 Apr 2012 07:25:27 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=712</guid>
		<description><![CDATA[After recently reading &#8220;The Shallows: What the Internet is doing to our brains&#8220;, I&#8217;ve been a bit provoked about how much time I waste online when getting things done. Chasing hyperlinks to all kinds of content, checking twitter, get distracted by mail. Major context switching! So I&#8217;m experimenting with a new workflow where I disable the network card on my PC , and just come online every few hours to clear the mailbox.  It&#8217;s been [...]]]></description>
			<content:encoded><![CDATA[<p>After recently reading &#8220;<a href="http://www.amazon.com/The-Shallows-Internet-Doing-Brains/dp/0393339750/">The Shallows: What the Internet is doing to our brains</a>&#8220;, I&#8217;ve been a bit provoked about how much time I waste online when getting things done. Chasing hyperlinks to all kinds of content, checking twitter, get distracted by mail. Major context switching!</p>
<p>So I&#8217;m experimenting with a new workflow where I disable the network card on my PC , and just come online every few hours to clear the mailbox.  It&#8217;s been quite a liberating experience so far.</p>
<h3>Tooling Up</h3>
<p>Initially I had a good surf around for tools that might fit the bill to help with my new disconnected life. There&#8217;s some nice Windows tools like <a href="http://getcoldturkey.com/">Cold Turkey</a> to keep you off social networking sites, and <a href="http://macfreedom.com/">Freedom </a>to keep you off the web altogether, but I was really just after something lightweight to turn off my Windows 7 network card!</p>
<h3>Scripting a Win</h3>
<p>Turns out that the easiest way is to script up the <a href="http://technet.microsoft.com/en-us/library/cc732279(WS.10).aspx">netsh.exe</a> tool that comes with Windows. With this bad boy, nicely discussed <a href="http://slecluyse.wordpress.com/2010/08/18/enable-or-disable%C2%A0nics/">on this blog</a>, I was up and running with a quick &#8220;online.bat&#8221; and &#8220;offline.bat&#8221; and was living the disconnected life. That magic shell command you need to disable your adaptor is:</p>
<pre class="brush: text; gutter: true">netsh interface set interface &quot;Local Area Connection&quot; DISABLED</pre>
<p>And of course, you&#8217;re back online with:</p>
<pre class="brush: text; gutter: true">netsh interface set interface &quot;Local Area Connection&quot; ENABLED</pre>
<p>Looking forward to reporting on my productivity wins with this new less-connected life!</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2012/04/19/net-disconnect-taking-your-dev-machine-offline-for-productivity.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>OSDC2011, PhoneGap and Google Spreadsheet Hacking</title>
		<link>http://blogs.bytecode.com.au/glen/2011/11/08/osdc2011-phonegap-and-google-spreadsheet-hacking.html</link>
		<comments>http://blogs.bytecode.com.au/glen/2011/11/08/osdc2011-phonegap-and-google-spreadsheet-hacking.html#comments</comments>
		<pubDate>Mon, 07 Nov 2011 20:21:13 +0000</pubDate>
		<dc:creator>Glen</dc:creator>
				<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://blogs.bytecode.com.au/glen/?p=660</guid>
		<description><![CDATA[I&#8217;m really looking forward to hanging out with the crew at osdc2011 next week in Canberra, and have been busy working on my sample code for my talks. I&#8217;ll be giving a talk titled, &#8220;Fake Your Way as a Mobile Developer Rockstar with PhoneGap&#8221; where I&#8217;ll be talking a little about a recent client project I was working on developing for iPhone,iPad,Android (phone + tablet), Blackberry, Playbook and WinPhone7. It was a true &#8220;write once, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m really looking forward to hanging out with the crew at <a href="http://osdc.com.au/">osdc2011</a> next week in Canberra, and have been busy working on my sample code for my talks.</p>
<p>I&#8217;ll be giving a talk titled, &#8220;<a href="http://osdc.com.au/schedule/#fakeyourwayasamob">Fake Your Way as a Mobile Developer Rockstar with PhoneGap</a>&#8221; where I&#8217;ll be talking a little about a recent client project I was working on developing for iPhone,iPad,Android (phone + tablet), Blackberry, Playbook and WinPhone7. It was a true &#8220;write once, test everywhere&#8221; experience!</p>
<p>Anyways, to show off a few of the key ideas, I spent a few hours yesterday morning whipping up a &#8220;Conference Schedule&#8221; app. The conf organisers kindly flicked me a schedule spreadsheet to use for the demo, which I prompted published as a <a href="https://docs.google.com/spreadsheet/pub?hl=en_US&amp;hl=en_US&amp;key=0AsIKXTGzbbNtdDYwZGF3NGtFeVZCRGJDTzhLLTI1YWc&amp;output=html">Google Spreadsheet</a>. All the data for the app is sourced from there, so Google Spreadsheets becomes my CMS for Schedule changes!</p>
<p><a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-home-page.png"><img class="alignnone size-medium wp-image-661" title="osdc-home-page" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-home-page-180x300.png" alt="" width="180" height="300" /></a> <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-schedule-page.png"><img class="alignnone size-medium wp-image-662" title="osdc-schedule-page" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-schedule-page-180x300.png" alt="" width="180" height="300" /></a> <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-speakers-page.png"><img class="alignnone size-medium wp-image-663" title="osdc-speakers-page" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-speakers-page-180x300.png" alt="" width="180" height="300" /></a> <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-sessions-page.png"><img class="alignnone size-medium wp-image-664" style="border-style: initial; border-color: initial;" title="osdc-sessions-page" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-sessions-page-180x300.png" alt="" width="180" height="300" /></a> <a href="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-details-page.png"><img class="alignnone size-medium wp-image-666" title="osdc-details-page" src="http://blogs.bytecode.com.au/glen/wp-content/uploads/2011/11/osdc-details-page-180x300.png" alt="" width="180" height="300" /></a></p>
<p>This session is going to be all about &#8220;faking it&#8221;, so while my graphic design skills are pretty rubbish, the amount you can get done using <a href="http://jquerymobile.com">jQueryMobile</a>, <a href="http://jquery.com/">jQuery</a>, <a href="http://www.handlebarsjs.com/">Handlebars.js</a>, <a href="http://phonegap.com/">PhoneGap</a> and a few JavaScript libraries in a few hours is pretty sensational.</p>
<p>To do all the Google Spreadsheet parsing, I&#8217;m using a nice little library called <a href="https://github.com/mikeymckay/google-spreadsheet-javascript">Google-Spreadsheet-Javascript</a> which has been perfect for the purpose of turning a spreadsheet into JSON! Based on the samples that come with the library (<a href="http://mikeymckay.github.com/google-spreadsheet-javascript/sample.html">try one here</a>), pulling data from a published spreadsheet is as simple as:</p>
<pre class="brush: javascript; gutter: true">      var osdc_url = "https://spreadsheets.google.com/pub?key=0AsIKXTGzbbNtdDYwZGF3NGtFeVZCRGJDTzhLLTI1YWc&amp;hl=en&amp;output=html";
      var googleSpreadsheet = new GoogleSpreadsheet();
      googleSpreadsheet.url(osdc_url);
      googleSpreadsheet.load(function(result) {
    	  alert("Remote OSDC Schedule Sync'd");
    	  osdcData = result;
      });</pre>
<p>The trickiest part was finding the &#8220;Publish to Web&#8221; option in the Google Spreadsheet itself (which is buried under the File menu rather than the normal Share menu). Now if only I can get Google Spreadsheets to present the dates in the right order I&#8217;ll be ready to roll&#8230;</p>
<p>See you there next week! (Oh, and all the <a href="https://github.com/glenasmith/phonegap-talk">source code</a> for the app is up on Github).</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.bytecode.com.au/glen/2011/11/08/osdc2011-phonegap-and-google-spreadsheet-hacking.html/feed</wfw:commentRss>
		<slash:comments>0</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>
	</channel>
</rss>

