<?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>Enhance ICT :: Web Applications</title>
	<atom:link href="http://www.enhance-ict.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.enhance-ict.com</link>
	<description>Hans Westerbeek on Software Engineering</description>
	<lastBuildDate>Sat, 08 Oct 2011 17:33:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Koans: nicest way to learn a language</title>
		<link>http://www.enhance-ict.com/2011/09/18/koans-nicest-way-to-learn-a-language/</link>
		<comments>http://www.enhance-ict.com/2011/09/18/koans-nicest-way-to-learn-a-language/#comments</comments>
		<pubDate>Sun, 18 Sep 2011 19:24:14 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=210</guid>
		<description><![CDATA[Just a quick one to let everybody know how cool I think the &#8216;koans&#8217; idea is. I think the Ruby guys started out with their excellent Ruby Koans and I certainly had fun doing them. I have already been a Groovy user for a while, so didn&#8217;t really need to do go through its koans. [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick one to let everybody know how cool I think the &#8216;koans&#8217; idea is. I think the Ruby guys started out with their excellent <a href="http://rubykoans.com/" target="_blank">Ruby Koans</a> and I certainly had fun doing them.</p>
<p>I have already been a <a href="http://groovy.codehaus.org" target="_blank">Groovy</a> user for a while, so didn&#8217;t really need to do go through its koans. Still happy to find out someone had made the effort of writing some <a href="https://github.com/cjudd/groovy_koans">koans for Groovy</a>. There&#8217;s a few more, if you <a href="http://www.google.nl/search?q=groovy+koans" target="_blank">google them</a>. Now, I&#8217;m busy working my way through the <a href="https://bitbucket.org/dmarsh/scalakoansexercises/wiki/Home" target="_blank">Scala Koans</a>, which, truth be told, needs some work on its runner. That doesn&#8217;t get in the way of fun though, you can still find out in which order to solve the koans by reading the <a href="https://bitbucket.org/dmarsh/scalakoansexercises/src/d1b71e8cb89f/src/test/scala/org/functionalkoans/forscala/Koans.scala" target="_blank">right source file</a>.</p>
<p>Update: also, these <a href="https://github.com/liammclennan/JavaScript-Koans" target="_blank">Javascript Koans</a> look interesting.</p>
<p>Kudos to the <a href="http://rubykoans.com/#inspiration" target="_blank">Ruby community</a> for introducing this concept to programming universe.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/09/18/koans-nicest-way-to-learn-a-language/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Five bad habit of software developers</title>
		<link>http://www.enhance-ict.com/2011/09/12/five-bad-habits-software-developers/</link>
		<comments>http://www.enhance-ict.com/2011/09/12/five-bad-habits-software-developers/#comments</comments>
		<pubDate>Mon, 12 Sep 2011 07:50:50 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=193</guid>
		<description><![CDATA[Now that I have been in the software engineering game for about twelve years, I thought this would be the right time to list some bad developer habits. Some habits that may remind you of a few colleagues, and possibly yourself. It goes without saying that I have never exhibited any of them, personally. Anticipating [...]]]></description>
			<content:encoded><![CDATA[<p>Now that I have been in the software engineering game for about twelve years, I thought this would be the right time to list some bad developer habits. Some habits that may remind you of a few colleagues, and possibly yourself. It goes without saying that I have never exhibited any of them, personally.</p>
<p><span id="more-193"></span></p>
<h3>Anticipating future requirements</h3>
<p>Ah yes, the beauty of coming up with a software design that is &#8216;ready for the future&#8217;. &#8220;Implementing that one feature the client was talking about is going to be so easy thanks to my design!&#8221;. Guess what, <strong>you can&#8217;t predict what your client will want</strong> a month from now, let alone a year from now. The thing about the future is that it tends to pretends itself differently than you expected almost every time. And then you find yourself doing more refactoring than necessary because you need to remove parts of a system that are now dead weight. Plus, you made the initial implementation harder and more time-consuming then necessary. So just build what you know is needed <strong>now</strong>, and do that well. That will be difficult enough in most cases.</p>
<h3>Being a push-over</h3>
<p>How many times do I hear developers complaining about how management<a href="http://www.nomachetejuggling.com/2011/07/22/when-to-work-on-technical-debt/" target="_blank"> doesn&#8217;t give them any time</a> to do the right thing. Well then make management listen to you. &#8220;But I don&#8217;t like to be involved with politics,&#8221; I hear you say. Well, wake up and smell the roses because politics is sure involving itself with you. Stand up for the quality of your codebase.</p>
<h3>Elitism</h3>
<p>Please, no more scoffing at front-end development. Java (excuse me, &#8216;Enterprise Java&#8217;) developers that feel superior to front-end guys, evolution is going to take care of you. The time were you could say &#8220;oh but I&#8217;m a back-end guy&#8221; and not bother to read up on HTML, CSS and Javascript are behind us. Rest assured, the younger generation of developers knows this and is more than happy to replace you at the coolest projects. You can have fun in back-end legacy land until you retire.</p>
<h3>Believing the hype</h3>
<p>A new year, a new buzzword. XML, SOA, RIA, cloud, there&#8217;s no end to them. Really, there is no need to run after these things all the time. In fact, if you have a memory that functions you will remember some buzzwords that by now are dead and buried. And how many of them are just about the pendulum of computing swinging (think fat server, thin client vs thin server vs fat client). Know your classics.</p>
<h3>Mystification</h3>
<p>Yes, we&#8217;re geeks and we write software. It&#8217;s so easy to feel intellectually superior to those clueless marketing and management guys, isn&#8217;t it? And we&#8217;ll throw in some tech-lingo for good measure if they&#8217;re being annoying. Most of the times, non-technical people are quite good at getting their message across. Us developers however, struggle with explaining what we do to others. Now who&#8217;s being dumb here?</p>
<h3>Language fundamentalism</h3>
<p>Ruby vs Java vs Python vs C# vs PHP vs Scala etc etc. So often the tone of conversations about languages and tools gets so heated. Come on guys it&#8217;s only programming. Can we please just stick to acknowledging the core strength of each language? That should help us making a calm and rational decision about what to use for a project, instead of flame baiting the other camp with yet another crappy benchmark.</p>
<h3>Getting lost in a bubble of silence</h3>
<p>How cool is it work on some issue,  just program the day away, uninterrupted by thoughts of the context or weight of the problem at hand. Us developers just love to spend a lot of time this way. Some of us do get a nagging feeling &#8220;hmm maybe I shouldn&#8217;t be spending so much time on this detail,&#8221; then to ignore it and just continue hacking.</p>
<p><em>Yes you counted right, there&#8217;s seven bad habits here. I got on a roll.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/09/12/five-bad-habits-software-developers/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Weekend fun with the Dutch Railways API</title>
		<link>http://www.enhance-ict.com/2011/04/04/weekend-fun-with-the-dutch-railways-api/</link>
		<comments>http://www.enhance-ict.com/2011/04/04/weekend-fun-with-the-dutch-railways-api/#comments</comments>
		<pubDate>Mon, 04 Apr 2011 11:50:10 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[gaelyk]]></category>
		<category><![CDATA[google visualization api]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=178</guid>
		<description><![CDATA[Recently, Dutch Rail (called NS in Holland) made an API available. I thought I would put it to use.]]></description>
			<content:encoded><![CDATA[<p>A short while ago, NS made <a href="http://www.ns.nl/cs/Satellite/reizigers/api" target="_blank">an API</a> available. So I thought I&#8217;d put it to use and write a little app that shows delays of trains on the 20 busiest train stations in Holland.</p>
<p>I got a Google Appengine account, had a look around for the right technology stack and got going. <a href="http://spoorvertraging.appspot.com/" target="_blank">Here&#8217;s the result</a> (in Dutch).</p>
<p>A bit about the technologies involved:</p>
<ul>
<li>I needed an easy way of hosting. Appengine provided that. Getting up and going was extremely easy with IntelliJ.</li>
<li>I&#8217;m a Java guy, so I went for the Java version of Appengine. Lately though, I have been enjoying Groovy. Good thing that that will run just fine on Appengine.</li>
<li>I looked at running <a href="http://www.grails.org" target="_blank">Grails</a> on Appengine first but decided that <a href="http://gaelyk.appspot.com/" target="_blank">Gaelyk</a> would be<a href="http://stackoverflow.com/questions/4978879/grails-vs-gaelyk-for-new-groovy-appengine-application" target="_blank"> a better fit</a>. Using Grails would be a bit like working against the grain of Appengine, which is a different beast.</li>
<li>To display the chart, I used Google&#8217;s <a href="http://code.google.com/apis/visualization/documentation/gallery.html" target="_blank">Visualization API</a>. Sadly, it uses Flash under the hood. I might change the chart type soon.</li>
</ul>
<p>Gaelyk was fun to work with, doing a simple thing like this really suits it well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/04/04/weekend-fun-with-the-dutch-railways-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J2EE in 2011 AD</title>
		<link>http://www.enhance-ict.com/2011/03/30/j2ee-in-2011-ad/</link>
		<comments>http://www.enhance-ict.com/2011/03/30/j2ee-in-2011-ad/#comments</comments>
		<pubDate>Wed, 30 Mar 2011 14:51:12 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[j2ee]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[obsolete]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=176</guid>
		<description><![CDATA[Recently I enabled one of those "here's a contract you might like" email services again. I was horrified.]]></description>
			<content:encoded><![CDATA[<p>Why do so many contracts that companies put out there still even mention the term &#8216;<a href="http://en.wikipedia.org/wiki/J2ee" target="_blank">J2ee</a>&#8216;? Please, make it go away! <img src='http://www.enhance-ict.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li>Respectable Java developers have moved away from J2EE at least five years ago, and arguably longer ago than that.</li>
<li>If your codebase is, in fact, really based on J2EE you&#8217;re not going to find anybody decent that wants to maintain it. Kill your codebase now and rewrite it, or suffer the cost of the huge <a href="http://en.wikipedia.org/wiki/Technical_debt" target="_blank">technical debt</a> involved. The longer you wait, the higher the cost.</li>
<li>Recruiters: if you didn&#8217;t mean J2EE, but JEE5 or JEE6, or even &#8216;Java for companies&#8217;, then use those terms. &#8216;J2EE&#8217; puts good developers off because it was such horrible pain to work with.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/03/30/j2ee-in-2011-ad/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Musings of an independent start-up developer: a project postmortem</title>
		<link>http://www.enhance-ict.com/2011/03/25/musings-of-an-independent-start-up-developer-a-postmortem/</link>
		<comments>http://www.enhance-ict.com/2011/03/25/musings-of-an-independent-start-up-developer-a-postmortem/#comments</comments>
		<pubDate>Fri, 25 Mar 2011 21:09:20 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[startup]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=168</guid>
		<description><![CDATA[Over the past months, I have been working on my own niche social network site. In this rather personal post I try to look back and reflect, post-mortem. Maybe there's something in it for you.]]></description>
			<content:encoded><![CDATA[<p>It was November of 2010 and suddenly I got an idea while in a conversation with a friend. I have always devoted my skills to projects defined by others, but the prospect of starting my own has always been alluring. Finally I got that idea. It had long frustrated me that I could pretty much implement any concept other people threw at me but somehow couldn&#8217;t come up with a concept myself.</p>
<p>I think that one of the reasons that I was able to get the idea at all (let alone pursue it), was due to the fact that I was taking a voluntary break from contracts. I was lucky enough to have saved some cash so I wanted to spend time on some technologies that you don&#8217;t run into a lot in the enterprise Java world.</p>
<p>When I&#8217;m in the middle of a contract I am completely caught up in it and therefore don&#8217;t have time for other stuff, at least when it comes to my profession.</p>
<p>The idea I had wasn&#8217;t revolutionary, but something like it did not exist yet out there on the web and the audience for it ranged in the order of 15 million. What I wanted to do is create a social platform for people to communicate about a specific sport, let&#8217;s say mountain biking, to socialize it and to give the people that practice that sport insight into how they&#8217;re doing so that they might improve. Given the fact that the this specific sport is often more of a passion than just a casual hobby, I thought the site would have a chance of success. I still believe that.</p>
<p>I was lucky enough to be able to team up someone who is knowledgeable on both social media and the sport and soon enough we had come up with a pretty good list of features and I could start developing. Together we came up with requirements, I developed, he tested. We did about 45 incremental releases that way, got through all the boiler-plate functionality a social networking site needs and the UI was coming along nicely.</p>
<p>A couple of months passed, and I would spend at least 10 hours a day working on the site and things were looking good, not in the least thanks to<a href="http://www.enhance-ict.com/2011/03/16/my-experiences-with-grails/" target="_blank"> Grails, which I recently blogged about too</a>.</p>
<p>And then the big set-back came. A different website, well-established and catering to the same community, had also seen the light and had integrated a very <em>beta-ish</em> version of the same concept into their website, which already had a big audience. I was gutted.</p>
<p>It prompted me to step back and think about what I was doing. Here I was, on a huge, almost solo-effort to build something that in terms of complexity and labor required was best compared to <a href="http://foursquare.com/" target="_blank">FourSquare</a>. Sure, the thought had crossed my mind: is this really feasible? But my enthusiasm and the feedback from others made me continue. And there was more: having worked with many other web-software professionals, I had access to people that were willing to help me out on areas that I couldn&#8217;t handle myself, such as graphic design.</p>
<p>The obvious question is: why didn&#8217;t I seek investment upfront? I felt that investment would be easier to get once the concept of the site could be demonstrated. It is usually kind of hard to convince people of your concept when it only exists on paper. Just as we got to the point in time where I could look for investment, the other website mentioned earlier launched their take on the concept. And with this kind of concept, being the first mover is critical.</p>
<p>I did contact the biggest competitor of that website. At first they seemed to be very interested but after a conference call they asked for was cancelled they didn&#8217;t show a great deal of interest. I think that this deal went south in part due to the fact that they were based half-way around the world, and for our initially scheduled presentation I did not fly over. Big mistake.</p>
<p>So now it&#8217;s late March and I&#8217;m abandoning the project. I loved working on it but when I add up all of the things mentioned above, I think it&#8217;s wiser to give up.</p>
<p>What we <em>did</em> complete:</p>
<ul>
<li>A well-defined commercial strategy</li>
<li>All boiler-plate functionality for a social networking site implemented (follow, unfollow, sign up, find friends etc etc)</li>
<li>Security precautions (think <a href="http://www.owasp.org/index.php/Main_Page">OWASP</a>)</li>
<li>A nice asynchronous way of dealing with the heavy lifting that makes the social network tick.</li>
<li>A nice Ajaxified UI (thank you <a href="http://jqueryui.com/" target="_blank">jQuery UI</a>)</li>
<li>All the central concepts of the sport covered by functionality, so that users would see real benefit compared to just using Facebook or Twitter</li>
<li>Good test-coverage that inspired confidence in the quality of the implementation.</li>
</ul>
<p>What we <em>didn&#8217;t</em> complete:</p>
<ul>
<li>The companion iPhone and Android apps. I was considering just doing a HTML 5 mobile version but that was going to run into problems (access to the camera API being the most notable). I was going to focus on developing these after putting the website online.</li>
<li>Integrate a CMS to be able to easily update some pages with secondary content.</li>
</ul>
<p>Next time:</p>
<ul>
<li>I hope to be a bit more lucky in terms of timing <img src='http://www.enhance-ict.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
<li>I&#8217;ll try harder to get more developers involved full-time. I like to think of myself as a pretty productive developer but the amount of work required here was obviously exceeding what one man could finish in a reasonable amount of time.</li>
<li>When I demonstrate the product to a potential partner/investor I&#8217;ll insist on doing so face-to-face, no matter how far away they are.</li>
</ul>
<p>All in all, I really enjoyed working on it and I  learned a lot. This was just my first attempt at a start-up, so I guess the second time around is likely to be more successful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/03/25/musings-of-an-independent-start-up-developer-a-postmortem/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My experiences with Grails</title>
		<link>http://www.enhance-ict.com/2011/03/16/my-experiences-with-grails/</link>
		<comments>http://www.enhance-ict.com/2011/03/16/my-experiences-with-grails/#comments</comments>
		<pubDate>Wed, 16 Mar 2011 10:50:44 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[grails]]></category>
		<category><![CDATA[groovy]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=153</guid>
		<description><![CDATA[For a private project, I have been using Grails for a couple of months now, and altogether it was a very pleasant experience. In this post I would like to highlight some aspects of it.]]></description>
			<content:encoded><![CDATA[<p>For a private project, I have been using <a href="http://grails.org" target="_blank">Grails</a> for a couple of months now, and altogether it was a very pleasant experience. In this post I would like to highlight some aspects of it.</p>
<p><span id="more-153"></span>For me, being a Java developer, getting started with Grails was really easy. Here&#8217;s why:</p>
<ul>
<li>Grails builds upon usual suspects: Spring and Hibernate, each of which I have years of experience with</li>
<li>The conventions used in its convention-over-configuration mechanism made complete sense to me</li>
<li><a href="http://grails.org/doc/latest/" target="_blank">Documentation</a> is pretty good</li>
<li>It has a lively and supportive <a href="http://grails.1312388.n4.nabble.com/">user mailinglist</a></li>
<li>You gotta love <a href="http://groovy.codehaus.org/">Groovy</a>.</li>
<li>GSP (the grails counterpart of JSP) just does everything right</li>
<li><a href="http://spockframework.org">Spock</a> is a great unit testing framework</li>
</ul>
<p>I was developing in Grails with IntelliJ IDEA version 10, which has excellent support for Grails. Setting up a project is trivial.</p>
<p>A couple of things to be aware of / that I&#8217;ve learned:</p>
<ul>
<li>Grails pre-determines the Spring version that is in your project, and understandably so. With Grails 1.3.x it gets Spring artifacts from SpringSource&#8217;s EBR. This means that you have to be careful when including other artifacts that may refer to the regular maven-central style artifact names. Apparently this will change come Grails 1.4. You can deal with this problem by running &#8216;grails dependency-report&#8217; and excluding artifacts in BuildConfig.groovy</li>
<li>Grails controllers are request-scoped, unlike your familiar Spring MVC controllers</li>
<li>There are a lot of <a href="http://www.grails.org/plugins/">plugins</a> available for Grails, but they vary wildly in terms of quality. Do read the source.</li>
<li>Grails comes with the Prototype Javascript library, but it is really easy to switch to jQuery. Apparently,  jQuery will be the default as of Grails 1.4</li>
<li>If your application sends mail, the greenmail plugin is pretty nice. No more waiting for emails to arrive at development time.</li>
<li>When adding plugins, be aware of which controllers / services / meta-methods it adds. Sometimes you don&#8217;t want them to be exposed.</li>
<li>Pure unit tests run a bit slower than I would like, but on my 2009 Macbook Pro I can run a Spock unit test with about 10 test-cases within IntelliJ in about 5 seconds. That&#8217;s acceptable.</li>
<li>The Spring Security plugin is great, but<a href="http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/guide/5%20Configuring%20Request%20Mappings%20to%20Secure%20URLs.html"> pick your means of securing resources carefully</a>, as they are mutually exclusive.</li>
<li>The Hudson/Jenkins Grails plugin is nice and does the job. It would be nice though if it didn&#8217;t mark a build that has one failing test as &#8216;failed&#8217; but as &#8216;unstable&#8217;. But I believe this is caused by the grails command exiting with an error value when a test fails.</li>
<li>Only in rare cases do you have to restart your local app while developing, so turn-around time is very small.</li>
<li>Doing basic AJAX is really simple with Grails. Its GSP taglibs and JSON support help out a lot. Combined with the jQuery plugin life is easy.</li>
<li>Modularize your app by turning parts of it into plugins. It really is quite easy.</li>
<li>A great find was the <a href="http://www.grails.org/plugin/fixtures" target="_blank">fixtures-plugin</a> and its accompanying build-test-data plugin. Writing integration tests for complex queries was never easier.</li>
</ul>
<p>All in all, Grails allowed me to get productive very quickly. I did not spend time on setting up web.xml, configuring spring, configuring data sources etc etc. Instead, I could focus on the task at hand.</p>
<p>Given the fact that the Grails always offers you a way out if you need to do very specific stuff in Java, I think Grails is probably going to be my default weapon-of-choice in the time to come. People that think it isn&#8217;t enterprisy enough because it&#8217;s powered by a scripting language are misguided. Sure I had my annoyances with it, and maybe I&#8217;ll blog about those later on <img src='http://www.enhance-ict.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2011/03/16/my-experiences-with-grails/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Tricking Google Appengine into compiling jspx files</title>
		<link>http://www.enhance-ict.com/2010/06/16/tricking-google-appengine-into-compiling-jspx-files/</link>
		<comments>http://www.enhance-ict.com/2010/06/16/tricking-google-appengine-into-compiling-jspx-files/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 08:02:44 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[jsp]]></category>
		<category><![CDATA[jspx]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=143</guid>
		<description><![CDATA[I ran into a little gotcha the other day. Appengine was refusing to compile and process my .jspx files. The solution was horribly simple. The JSPX format is an xmlized (that is not a word, I know) version of JSP. Check out this question at stackoverflow if you would like to find out about JSPX. [...]]]></description>
			<content:encoded><![CDATA[<p>I ran into a little gotcha the other day. Appengine was refusing to compile and process my .jspx files. The solution was horribly simple.</p>
<p><span id="more-143"></span></p>
<p>The JSPX format is an xmlized (that is not a word, I know) version of JSP. Check out <a href="http://stackoverflow.com/questions/28235/should-i-be-doing-jspx-instead-of-jsp" target="_blank">this question at stackoverflow</a> if you would like to find out about JSPX.</p>
<p>Back to the issue at hand: Appengine precompiles all JSP&#8217;s at deploy time. The current version (1.3.4) of Appengine does not let the Jasper  compiler kick in if no .jsp files are found in the webapp. However, if  you add a dummy.jsp file to the webapp (say in WEB-INF), the Jasper compiler will  actually be started and it will pick up .jspx files.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2010/06/16/tricking-google-appengine-into-compiling-jspx-files/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GWT moves forward rapidly</title>
		<link>http://www.enhance-ict.com/2010/05/29/gwt-moves-forward-rapidly/</link>
		<comments>http://www.enhance-ict.com/2010/05/29/gwt-moves-forward-rapidly/#comments</comments>
		<pubDate>Sat, 29 May 2010 12:25:23 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[gwt]]></category>
		<category><![CDATA[mvp]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[spring roo]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=135</guid>
		<description><![CDATA[So much has been happening in the GWT community lately that I wanted to write a posting summarizing those developments and why they matter. At Google I/O 2009, Ray Ryan held a talk titled &#8216;Best Practices For Architecting Your GWT App&#8216;. In the talk, he layed down a design blueprint for real-world applications. One of [...]]]></description>
			<content:encoded><![CDATA[<p>So much has been happening in the GWT community lately that I wanted to write a posting summarizing those developments and why they matter.</p>
<p><span id="more-135"></span>At Google I/O 2009, Ray Ryan held a talk titled &#8216;<a href="http://www.youtube.com/watch?v=PDuhR18-EdM" target="_blank">Best Practices For Architecting Your GWT App</a>&#8216;. In the talk, he layed down a design blueprint for real-world applications. One of the most important aspects he talked about was Model-View-Presenter (MVP). I have seen how developers have struggled organizing the code in their GWT project. Much of that struggle can be attributed to the fact that many of us Java developers don&#8217;t really have any component-based UI experience. Not many of us have worked with Swing, instead we&#8217;ve been spitting out JSP&#8217;s and writing Controllers. GWT requires a different approach and up until Ray&#8217;s talk, not much guidance existed around the subject.</p>
<p>After Ray&#8217;s talk, quite a few developers jumped at the opportunity to implement a framework that formalized MVP, the client-side EventBus and Dependency Injection using <a href="http://code.google.com/p/google-gin/" target="_blank">GIN</a>. A couple of community projects appeared on Google Code:</p>
<ul>
<li><a href="http://code.google.com/p/gwt-mvp/" target="_blank">GWT-MVP</a></li>
<li><a href="http://code.google.com/p/gwt-dispatch/" target="_blank">GWT-Dispatch</a>. A Command Pattern implementation</li>
</ul>
<p>Those projects highlighted that a real need existed within the community to have some frameworks that help developers organize their code, much like Spring-MVC does on the serverside. With the <a href="http://googlewebtoolkit.blogspot.com/2010/05/gwt-21-milestone-1-is-now-available.html" target="_blank">announcement of GWT 2.1 M1</a> it seems that the core GWT team at Google have acknowledged that need. It packs an MVP framework, so from GWT 2.1 onwards the GWT-MVP will be obsolete (but their pioneering was very important!). If you&#8217;re interested in MVP, also <a href="http://code.google.com/webtoolkit/articles/mvp-architecture.html" target="_blank">read the article</a> on the official GWT documentation site.</p>
<p>The final development I&#8217;d like to mention is the integration between SpringSource&#8217;s great tool Spring Roo and GWT. I have been using Roo for quite a while and the new GWT support it adds is very exciting. Have a look at <a href="http://www.thescreencast.com/2010/05/how-to-gwt-roo.html" target="_self">these screencasts</a> (especially the second one, further down the page) and see how quickly you can get started with a GWT application. The code generated by Roo builds upon the MVP pattern. I for one will be monitoring the progress on GWT 2.1 and Spring Roo 1.1 closely!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2010/05/29/gwt-moves-forward-rapidly/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>&#8216;They won&#8217;t let me refactor!&#8217;</title>
		<link>http://www.enhance-ict.com/2010/05/25/they-wont-let-me-refactor/</link>
		<comments>http://www.enhance-ict.com/2010/05/25/they-wont-let-me-refactor/#comments</comments>
		<pubDate>Tue, 25 May 2010 20:14:41 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[politics]]></category>
		<category><![CDATA[refactorting]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=127</guid>
		<description><![CDATA[In recent projects, I have found that developers often avoid company politics, even if it is detrimental to the quality of the software they&#8217;re working on. I think they should join the political arena. An example: A team is put under some pressure, or at least feels like it is. Code is written that is [...]]]></description>
			<content:encoded><![CDATA[<p>In recent projects, I have found that developers often avoid company  politics, even if it is detrimental to the quality of the software  they&#8217;re working on. I think they should join the political arena.</p>
<p><span id="more-127"></span></p>
<p>An example:</p>
<ol>
<li>A team is put under some pressure, or at least feels like it is.</li>
<li>Code is written that is below standards and the team knows it.</li>
<li>As the team continues to add features, the burden of the suboptimal  code written earlier becomes heavier.</li>
<li>The business people wonder why everything is buggy and development  is at a low pace.</li>
<li>The team is frustrated and feels like it&#8217;s a victim of those  clueless business people. &#8220;We weren&#8217;t given any time do better&#8221;, the  team says.</li>
</ol>
<p>Now it would make me popular with the programming crowd if I would  argue that the business people should have known better and should have  allowed them more time to write code of higher quality. And sure, they  should be aware of these things. But often they&#8217;re not. or they forget  about it.</p>
<p>What I want to say is something else. I think that developers should  take responsibility for their code. That means that they should not  allow business people to just downplay the importance of refactoring, or  to postpone it. The team will just have to make them understand just  how important it is. Tools like <a href="http://www.enhance-ict.com/2010/02/22/sonar-an-invaluable-tool-for-every-java-shop/" target="_self">Sonar</a> can help developers conveying that message to  business people. And sure, that means playing your part in company  politics, especially when you&#8217;re the team&#8217;s lead developer. But whether  you like it or not, company politics are a fact of life. As a developer,  you can either be a sitting duck or get into the game and defend the  quality of your code base. You might even have to nag a bit, but in the  end when you&#8217;ve done your refactoring, you will have done everybody  involved a great service. That will be on more step in your company  becoming the great software shop you&#8217;d love to work in.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2010/05/25/they-wont-let-me-refactor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Appengine persistence: just say no to JPA and JDO?</title>
		<link>http://www.enhance-ict.com/2010/03/30/appengine-persistence-just-say-no-to-jpa-and-jdo/</link>
		<comments>http://www.enhance-ict.com/2010/03/30/appengine-persistence-just-say-no-to-jpa-and-jdo/#comments</comments>
		<pubDate>Tue, 30 Mar 2010 22:52:20 +0000</pubDate>
		<dc:creator>Hans Westerbeek</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[appengine]]></category>
		<category><![CDATA[datastore]]></category>
		<category><![CDATA[objectify]]></category>
		<category><![CDATA[simpleds]]></category>

		<guid isPermaLink="false">http://www.enhance-ict.com/?p=115</guid>
		<description><![CDATA[I have been experimenting with writing an application for the Java edition of Google Appengine, which I blogged about before. Back then, I was still trying to use JPA with the Datastore, but the longer I was trying, the more I got the feeling that JPA (and JDO)  just don&#8217;t fit Google&#8217;s Datastore very well. [...]]]></description>
			<content:encoded><![CDATA[<p>I have been experimenting with writing an application for the Java edition of Google Appengine, which I blogged about <a href="http://www.enhance-ict.com/2010/03/16/java-on-appengine-with-spring-not-a-walk-in-the-park/" target="_self">before</a>. Back then, I was still trying to use JPA with the Datastore, but the longer I was trying, the more I got the feeling that JPA (and JDO)  just don&#8217;t fit Google&#8217;s Datastore very well. And then I came across Objectify and SimpleDS.</p>
<p><span id="more-115"></span>It seems that by offering JPA and JDO, Google has attempted not to alienate developers too much. But the fact of the matter remains that the Appengine Datastore (some people call it &#8216;a huge HashMap&#8217;) is very different from an RDBMS and we as developers best accept that fact and get on with it.</p>
<p>A number of projects have been started that offer an alternative to using the datastore in your API: <a href="http://code.google.com/p/simpleds/" target="_self">simpleds</a> and <a href="http://code.google.com/p/objectify-appengine/" target="_blank">Objectify</a> being amongst the most notable. SimpleDS seems to be developed by a somebody who come from a JPA/Spring background and it has nice features such as such as <a href="http://code.google.com/p/simpleds/wiki/Transactions" target="_blank">declarative transaction management</a> through Spring. With Objectify, there is no out-of-the-box way to do that. Then again, it&#8217;s probably not that hard to develop a transaction manager for Objectify.</p>
<p>On the other hand, the documentation for Objectify seems to be more complete and it has a much more active user group. It&#8217;s tough making choices on the bleeding edge <img src='http://www.enhance-ict.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I have made some progress with Objectify and it was quite easy to get started. The interface of the Objectify interface looks a bit complicated and you find your self newing Key&lt;YourEntity&gt; objects all over the place. But, it works like a charm and is easy to write integration tests for.</p>
<p>Therefore, I will be evaluating both. Could both project join forces? That would probably benefit the community at large. Both projects are very much in early stages, even though Objectify has reached version 2.1 by now <img src='http://www.enhance-ict.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Update:</strong> I found an interview with the 3 lead developers of Twig, Objectify and SimpleDS. <a href="http://borglin.net/gwt-project/?page_id=689" target="_blank">Read it here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.enhance-ict.com/2010/03/30/appengine-persistence-just-say-no-to-jpa-and-jdo/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

