<?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>Pramatr Blog &#187; Software</title>
	<atom:link href="http://www.pramatr.com/blog/tag/software/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pramatr.com/blog</link>
	<description>A collection of articles from pramatr.com on technology, security, software and anything we find interesting</description>
	<lastBuildDate>Mon, 29 Mar 2010 19:48:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Fun with Grails</title>
		<link>http://www.pramatr.com/blog/2009/07/19/fun-with-grails/</link>
		<comments>http://www.pramatr.com/blog/2009/07/19/fun-with-grails/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 16:20:04 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Resources]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=905</guid>
		<description><![CDATA[Anyone that has been following @pramatrdev on Twitter will have seen the numerous tweets recently about Grails. I first started looking at Grails back in 2006? after a recommendation from a work collegue. It looked quite interesting and I managed to hack together something quite simple but it was a little hard work in places [...]]]></description>
			<content:encoded><![CDATA[<p>Anyone that has been following <a href="http://twitter.com/pramatrdev">@pramatrdev</a> on Twitter will have seen the numerous <a href="http://twitter.com/#search?q=%23grails">tweets</a> recently about <a href="http://www.grails.org/">Grails</a>. I first started looking at <a href="http://www.grails.org/">Grails</a> back in 2006? after a recommendation from a work collegue. It looked quite interesting and I managed to hack together something quite simple but it was a little hard work in places to get what I wanted out of it. It was early days for the project however and it looked very promising.</p>
<p>I&#8217;ve since recommended it several times to other people who were interested in building applications new applications. Most of the this feedback has been extremely positive so I&#8217;ve managed to get around to having another look at it recently. After <a href="http://twitter.com/snaglepus">@snaglepus</a> suggested I check out <a href="http://www.springsource.com/webinar/building-twitter-with-grails-40-minutes">Build twitter in Grails in 40 minutes</a> (registration is required) I have to say I was very impressed. Since watching that I&#8217;ve gone from knowing absolutely nothing about Grails (three years it too long to keep information in memory) to building a sample application very quickly. After finding plugins for many of the tasks I wanted, I&#8217;ve implemented the logic I need and let the tool do the rest of the heavy lifting work which led to a very productive evening of coding.</p>
<p>I really love it when you find technology which just seems to work and does exactly what you expect it to do. There is still much I want to learn about Grails and I&#8217;m sure there are many other tips and tricks I can pick up along the way. At the minute I&#8217;m just looking through the many Grails books to find a winner and I think I have in <a href="http://www.apress.com/book/view/9781590599952">The Definitive Guide to Grails, Second Edition</a>. If you haven&#8217;t looked at Grails before, I really recommend you check it out and see what it can do for you. And if you aren&#8217;t following me on Twitter, I&#8217;m <a href="http://twitter.com/pramatrdev">@pramatrdev</a> and I&#8217;m sure there will be a few more tweets about Grails before the month is over <img src='http://69.89.31.94/~pramatrc/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/07/19/fun-with-grails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentation: Update It Or Lose It</title>
		<link>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/</link>
		<comments>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/#comments</comments>
		<pubDate>Tue, 17 Feb 2009 06:43:31 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Refactoring]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Improvement]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Smells]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Structure]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=17</guid>
		<description><![CDATA[Over time I&#8217;m frequently restructuring and refactoring the code I work on to improve the design and simplify many of the balls of mud I find along the way. If I break some of that code my unit tests shout at me and if they don&#8217;t my continuous integration environment shouts at me when I&#8217;ve [...]]]></description>
			<content:encoded><![CDATA[<p>Over time I&#8217;m frequently <a href="http://pramatr.com/2008/09/26/yes-you-are-making-changes-but-that-doesnt-make-it-refactoring/">restructuring and refactoring</a> the code I work on to improve the design and simplify many of the <a href="http://www.laputan.org/mud/mud.html#BigBallOfMud">balls of mud</a> I find along the way. If I break some of that code my unit tests shout at me and if they don&#8217;t my <a>continuous integration</a> environment shouts at me when I&#8217;ve <a>broken</a> one of the integration tests. One area of the code that doesn&#8217;t receive the same attention however is the documentation.</p>
<p>I love a well documented API as much as the next developer. I also am fighting a constant battle to improve my JavaDoc <a href="http://java.sun.com/j2se/javadoc/writingdoccomments/">skills</a>, trying to write to the same quality that I see in many other projects. But is excellent documentation really enough? It can&#8217;t just be excellent when it&#8217;s written it needs to be constantly maintained to this same level over time.</p>
<p>It&#8217;s a pretty common occurrence that I can look at a section of code and find documentation that has nothing to do with the method it belongs to. The <a href="http://www.c2.com/cgi/wiki/wiki?IntentionRevealingNames">intention revealing name</a> sounds nothing like the documentation which describes what it&#8217;s supposed to be doing. Somewhere in the mists of time, the intention of the method and the documentation parted company; it is documentation no more it is ex-documentation. The problem here however is that there&#8217;s nothing to catch this issue. If an extra argument is added, Eclipse might display a warning telling me it&#8217;s missing from the documentation, but the actual context of the documentation can be completely wrong and I am none the wiser.</p>
<p>Although this incorrect documentation may seem fairly harmless to some, the reason it was supposed to be there in the first place is to the give the user of the API information on the method contract and the expected outcomes. If this information is completely wrong however it introduces confusion and also potential misuse of the API. After much wasted time and several grey hairs later I recently filed a couple of JIRA reports about popular open source frameworks which did exactly this. After my code just didn&#8217;t work and the unit tests failed, it took me a number of minutes to realise that the JavaDoc description of expected events just didn&#8217;t reflect what was actually going on in the code.</p>
<p>One approach to solving this problem is to include the documentation in the <a href="http://pramatr.com/2009/01/27/frequent-code-reviews-the-key-to-success/">frequent code reviews</a>. Code that doesn&#8217;t have documentation or has incorrect documentation can&#8217;t be considered complete, thus doesn&#8217;t pass the review. Developers need to make sure however, that they treat the documentation with the same respect that they give to their code and their tests. When dealing with documentation I&#8217;d much sooner see a method with no documentation than something that is completely wrong. I do want a good level of documentation in the code I work on but there is a very simple rule; update it or lose it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/17/documentation-update-it-or-lose-it/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Playing The Blame Game: A Better Way?</title>
		<link>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/</link>
		<comments>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/#comments</comments>
		<pubDate>Tue, 10 Feb 2009 06:00:17 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[Code Review]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Discipline]]></category>
		<category><![CDATA[Improvement]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=638</guid>
		<description><![CDATA[Success! We&#8217;ve just released a new version of our software, this calls for a celebration. All the team march down to the local bar for a well earned beer or an orange juice for the designated driver. But what&#8217;s that annoying noise in my jacket pocket, my mobile phone&#8217;s ringing and it&#8217;s the boss. Some [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.sxc.hu/photo/867352"><img class="alignleft size-full wp-image-650" title="family-game" src="http://pramatr.files.wordpress.com/2009/02/family-game.jpg" alt="family-game" width="300" height="200" /></a>Success! We&#8217;ve just released a new version of our software, this calls for a celebration. All the team march down to the local bar for a well earned beer or an orange juice for the designated driver. But what&#8217;s that annoying noise in my jacket pocket, my mobile phone&#8217;s ringing and it&#8217;s the boss. Some customers have just upgraded and now they are reporting serious problems with their systems, looks like we better get ready to play the blame game.</p>
<p>For those people who have never played the blame game before, we need to set out the rules. The rules are actually quite simple, if in doubt seek the advice of a seasoned player. The first rule of the blame game is, <em>it&#8217;s never your fault</em>. The second rule of the blame game is, <em>it&#8217;s <strong>never</strong> your fault</em>. The third rule of the blame game is, <em>it&#8217;s <strong>always</strong> some one else&#8217;s fault</em>. So now we&#8217;ve established the rules, we need to work out some tactics to work out whose fault it actually is.</p>
<p>The first candidate for blame <strong>always</strong> has to be the last person to leave the company. Anything that&#8217;s wrong can easily be blamed on them, after all they can&#8217;t defend themselves so they make an ideal target. The next candidate can be chosen from any of the temporary staff you currently employ, the shorter the contract the better. If you aren&#8217;t going to have to see these people for much longer, this should work out quite nicely. The next candidate is anyone that&#8217;s working for the company in another location (if it&#8217;s another country this works even better). You might have to work with these people again, but you&#8217;re probably not going to see them on a daily basis, it shouldn&#8217;t be too awkward. Now this is where your choices start to become a little tricky, you&#8217;re down to the people that you work with everyday.</p>
<p>You have to keep this simple and align yourselves with the strongest members of the team, after all this is survival of the fittest. Fit yourself nicely into the crowd and look for anyone that doesn&#8217;t quite fit, this is real back to basics school ground behaviour. Pick off the weak and vulnerable first as these shouldn&#8217;t put up much of a resistance, then work your way up the power hierarchy until you find your <a href="http://www.thefreedictionary.com/patsy">patsy</a>. So there you have it, those are the basic tactics for the blame game you might have to tweak as appropriate within your organisation but the general approach should apply.</p>
<p>The most important decision you face when presented with the blame game is do you <strong>really</strong> want to play? If you decide that it&#8217;s really not for you, the best way to deal with it is to simply throw out all of the rules, rip the board in half, stamp your feet as hard as you can and shout out loud, <em>&#8220;I refuse to play&#8221;</em>. It is often said that; <em>&#8220;we work in a blame free culture, until something goes wrong&#8221;</em>. Are you really interested in finding someone to blame when something goes wrong? Will it really help the customer solve their problem any sooner if you&#8217;ve found the person to carry the can for the failure? In the time it takes to sit there and rack your brains for potential candidates to take the blame, you could already be investigating the cause of the problems and attempting to fix them. In his recent <a href="http://www.artima.com/weblogs/viewpost.jsp?thread=246513">post</a> Sean Landis said;</p>
<blockquote><p><em>Successful Agile development presupposes that team members will all act like adults. That&#8217;s a euphemism for being competent and professional. Agile teams are expected to accept a high level of responsibility and accountability. When they don&#8217;t, things can fall apart really fast.</em></p></blockquote>
<p>Regardless of how bullet proof a process claims to be, there are always going to be issues that weren&#8217;t found prior to the release. If issues are always going to occur, should teams really be allowed to turn on each other in response to them, will this really lead to a better working relationship? The most important thing is that problems are dealt with promptly and professionally when they arise. Instead of trying to assign blame, people should be responsible for their own actions, they need to learn from the experience and measures should be put in place (if possible) to prevent this happening again. Next time your team is out celebrating your latest release and your mobile phone starts to ring, do you really want to start playing the blame game?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/10/playing-the-blame-game-a-better-way/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Businesses Counting Cost Of Bad Weather: How Can Technology Help?</title>
		<link>http://www.pramatr.com/blog/2009/02/05/businesses-counting-cost-of-bad-weather-how-can-technology-help/</link>
		<comments>http://www.pramatr.com/blog/2009/02/05/businesses-counting-cost-of-bad-weather-how-can-technology-help/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 10:49:37 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Communication]]></category>
		<category><![CDATA[Resources]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Team]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=579</guid>
		<description><![CDATA[The BBC reported on Tuesday that the recent disruptions caused by the heavy snowfall could cost UK businesses about £1bn (or $1.4bn as of 05/02/2009). It was also estimated that about 20% of the UK&#8217;s working population, or 6.4 million people, were absent from work. The bad weather has continued this week and is forecast [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-582" title="dsc00181" src="http://pramatr.files.wordpress.com/2009/02/dsc00181.jpg?w=300" alt="dsc00181" width="300" height="225" />The BBC <a href="http://news.bbc.co.uk/1/hi/business/7864804.stm">reported</a> on Tuesday that the recent disruptions caused by the heavy snowfall could cost UK businesses about £1bn (or $1.4bn as of 05/02/2009). It was also estimated that about 20% of the UK&#8217;s working population, or 6.4 million people, were absent from work. The bad weather has continued this week and is forecast to <a href="http://news.bbc.co.uk/1/hi/uk/7871247.stm">continue</a> into the weekend. With the huge potential loses to the economy how can technology help?</p>
<p>Currently the roads are covered in snow, buses, trains and planes are cancelled and I&#8217;m stuck at home, and I&#8217;m costing my employer money. Some employers might expect you to turn up regardless of the weather. Some employers might take the <em>&#8220;snow day&#8221;</em> out of of next months wages. Some employers provide the means to let their employees work from home. It is obviously not logistically possible for every business to allow working from home, but what about the ones that can? In a quote from the BBC report, Keith Tilley said;</p>
<blockquote><p><em>&#8220;Employers need to do everything they can to allow staff to work from home and ensure that those that do manage to travel to work are well looked after, with overnight accommodation if necessary.&#8221;</em></p></blockquote>
<p>Many businesses <a href="http://software.silicon.com/applications/0,39024653,11008059,00.htm">are</a> turning to technology to allow their employees to not only work from home during periods of bad weather but also during peak demand. These virtual call centres are <a href="http://www.callcentrehelper.com/is-home-working-finally-set-to-take-off-649.htm">proving</a> extremely popular with more businesses turning to this technology to provide a more permanent solution. Many businesses <em>could</em> benefit from this approach but lack the technology to actually make it possible. Is this technology too expensive, too complicated or is there simply a lack of knowledge about it&#8217;s usage?</p>
<p>A quick search in Google yields a range of solutions that can make working from home very possible, one of the best is a VPN. At one end of the spectrum is <a href="http://openvpn.net/">OpenVPN</a> which retails at £0 (or $0). It&#8217;s open source; download it, install it, configure it and you&#8217;re ready to go. There is obviously an associated learning curve, but for most people with a technological persuasion it should be quite straight forward. If you don&#8217;t want to have to install and maintain software, another top result is <a href="http://www.barracudanetworks.com/ns/products/sslvpn_overview.php">Barracuda SSL VPN</a> which starts to retail at £1250 (or $1800). It&#8217;s an appliance; turn it on, configure it and you&#8217;re ready to go. Both solutions provide the means to be virtually on the network without having to be physically in the office. Access can be provided to email, file servers, internal Web sites and office workstations. As a developer I can access <a href="http://www.nongnu.org/cvs/">CVS</a>, <a href="http://subversion.tigris.org/">SVN</a>, our <a href="http://maven.apache.org/">Maven</a> repository, <a href="https://hudson.dev.java.net/">Hudson</a> build system and any other resource I use during my normal working day. I can be just as productive (often more so) as if I&#8217;m really in the office.</p>
<p>There are a whole range of products that allow employees to work from home, but there really should be something to suit every businesses budget. Some businesses <a href="http://www.productivity501.com/convince-your-boss-to-let-you-work-from-home/122/">worry</a> about letting employees work from home, but even if the technology is only used for extreme or emergency purposes, at least a business can suffer near zero downtime. Even if the technology is only used once or twice a year, it can still provide a return on investment for the smallest of companies. We currently have six team members connected to our SSL VPN, our business is counting the cost of the bad weather, but fortunately for us it should be somewhere near £0 ($0).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/02/05/businesses-counting-cost-of-bad-weather-how-can-technology-help/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Google Reports The Entire Internet As Malware</title>
		<link>http://www.pramatr.com/blog/2009/01/31/google-reports-the-entire-internet-as-malware/</link>
		<comments>http://www.pramatr.com/blog/2009/01/31/google-reports-the-entire-internet-as-malware/#comments</comments>
		<pubDate>Sat, 31 Jan 2009 16:28:47 +0000</pubDate>
		<dc:creator>pramatr</dc:creator>
				<category><![CDATA[Opinion]]></category>
		<category><![CDATA[Bugs]]></category>
		<category><![CDATA[Malware]]></category>
		<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://pramatr.com/?p=396</guid>
		<description><![CDATA[For about twenty minutes today google has been reporting every single website as malware. Any search within google returned the normal search results, but every result also included a report that &#8220;this site may harm your computer&#8220;. Attempting to click on the search result and progress to the actual website returns a warning page with [...]]]></description>
			<content:encoded><![CDATA[<p>For about twenty minutes today google has been reporting every single website as malware. Any search within google returned the normal search results, but every result also included a report that <em>&#8220;<a href="http://www.google.com/support/websearch/bin/answer.py?answer=45449&amp;topic=360&amp;hl=en&amp;ei=EGWESb6YMYaR-gbTu40o&amp;sa=X&amp;oi=malwarewarninglink&amp;resnum=1&amp;ct=help">this site may harm your computer</a>&#8220;</em>. Attempting to click on the search result and progress to the actual website returns a warning page with no possible way of clicking through to the resulting page. Google was effectively blocking every single search result from reaching it&#8217;s destination.</p>
<p><img src="http://pramatr.files.wordpress.com/2009/01/googlemalware1.jpg" alt="googlemalware" title="googlemalware" width="538" height="135" class="aligncenter size-full wp-image-401" /></p>
<p>I read a thorough <a href="http://www.codinghorror.com/blog/archives/000859.html">discussion</a> of the malware behaviour many months ago, but I don&#8217;t think this is quite what google were looking for when they implemented the feature. I&#8217;m sure there are a great many retailers who are cursing at potentially lost revenue and users who are now unsure if a website is harmful or not. False positives are never helpful to users who are unsure about their actions at the best of times. Thankfully, the problem seems to be sorting itself out and only seemed to last for twenty minutes. It&#8217;s not yet apparent whether the issue has been rectified or simply that the feature has been disabled altogether. It will be very interesting to see how this one is explained!</p>
<p><strong>Update:</strong> It seems the problem was <a href="http://news.bbc.co.uk/1/hi/technology/7862840.stm">bigger</a> than I thought.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pramatr.com/blog/2009/01/31/google-reports-the-entire-internet-as-malware/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
