<?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>Better Code &#187; Software Development</title>
	<atom:link href="http://bettercode.se/wordpress/category/software-development/feed" rel="self" type="application/rss+xml" />
	<link>http://bettercode.se/wordpress</link>
	<description>better business</description>
	<lastBuildDate>Tue, 16 Apr 2013 08:30:36 +0000</lastBuildDate>
	<language></language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Bloggar på blog.crisp.se</title>
		<link>http://bettercode.se/wordpress/sv/548/blogging-on-the-crisp-blog</link>
		<comments>http://bettercode.se/wordpress/sv/548/blogging-on-the-crisp-blog#comments</comments>
		<pubDate>Tue, 16 Apr 2013 08:26:22 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Crisp AB]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=548</guid>
		<description><![CDATA[För tillfället bloggar jag mestadels på http://blog.crisp.se/author/maxwenzin så gå gärna dit och läs om &#8220;Five fundamental principles for building software development teams&#8220; eller andra inlägg av mig och mina Crisp-kollegor.]]></description>
				<content:encoded><![CDATA[<p>För tillfället bloggar jag mestadels på <a href="http://blog.crisp.se/author/maxwenzin">http://blog.crisp.se/author/maxwenzin</a> så gå gärna dit och läs om &#8220;<a href="http://blog.crisp.se/2012/10/22/maxwenzin/five-team-principles">Five fundamental principles for building software development teams</a>&#8220; eller andra inlägg av mig och mina Crisp-kollegor.</p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/548/blogging-on-the-crisp-blog/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Git and GitHub</title>
		<link>http://bettercode.se/wordpress/sv/297/git-and-github</link>
		<comments>http://bettercode.se/wordpress/sv/297/git-and-github#comments</comments>
		<pubDate>Wed, 11 May 2011 11:23:09 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Git]]></category>
		<category><![CDATA[MongoDB]]></category>
		<category><![CDATA[Scala]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=297</guid>
		<description><![CDATA[Jag har nu ett konto på GitHub och har börjat lära mig Git. Git är ett gratis, open-source, distribuerat system för versionshantering. Eftersom jag är van vid Perforce kommer jag sannolikt jämföra en hel del med hur Perforce fungerar&#8230; Igår gjorde jag mitt första (lilla!) bidrag till ett annat projekt. Blackened Systems bygger en webb-plattform [...]]]></description>
				<content:encoded><![CDATA[<p>Jag har nu ett konto på GitHub och har börjat lära mig Git. Git är ett gratis, open-source, distribuerat system för versionshantering. Eftersom jag är van vid Perforce kommer jag sannolikt jämföra en hel del med hur Perforce fungerar&#8230;</p>
<p>Igår gjorde jag mitt första (lilla!) bidrag till ett annat projekt. Blackened Systems bygger en webb-plattform i Scala och MongoDB och jag har beslutat mig för att hjälpa till för att lära mig dessa tekniker. I morse accepterades min &#8220;pull request&#8221; och mergades in i &#8220;blackened-parent&#8221;. (<a href="https://github.com/blackenedsystems/blackened-parent/pull/1">https://github.com/blackenedsystems/blackened-parent/pull/1</a>)</p>
<p>Mitt intryck av GitHub hittills är att det gör det mycket roligare att bidra till andra projekt!</p>
<p>Du kan följa Better Code (betrcode) på <a href="https://github.com/betrcode">https://github.com/betrcode</a></p>
<p>Intresserad av ett nytt system för versionshantering? Läs om Git på <a href="http://git-scm.com/">http://git-scm.com/</a></p>
<p>Sjukt trött på Oracles dåliga installationsrutin? Prova MongoDB! Packa upp och kör! <a href="http://www.mongodb.org/">http://www.mongodb.org/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/297/git-and-github/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expekt Release 3.6</title>
		<link>http://bettercode.se/wordpress/sv/269/expekt-release-3-6</link>
		<comments>http://bettercode.se/wordpress/sv/269/expekt-release-3-6#comments</comments>
		<pubDate>Tue, 03 May 2011 18:29:00 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Expekt.com]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=269</guid>
		<description><![CDATA[Expekt.com was updated to version 3.6 this morning! One of the changes is that pretty, SEO-friendly URLs have been introduced on the odds and sports event pages, and also in the content management system. Take a closer look at the URL. As you can see, the URL now contains the league name. This improves usability [...]]]></description>
				<content:encoded><![CDATA[<p>Expekt.com was updated to version 3.6 this morning! One of the changes is that pretty, SEO-friendly URLs have been introduced on the odds and sports event pages, and also in the content management system.</p>
<div id="attachment_271" class="wp-caption alignleft" style="width: 310px"><a href="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-sports-odds-premier-league.png"><img class="size-medium wp-image-271" title="expekt-3.6-sports-odds-premier-league" src="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-sports-odds-premier-league-300x225.png" alt="" width="300" height="225" /></a><p class="wp-caption-text">Screenshot of Expekt Sports Odds page for Premier League</p></div>
<p>Take a closer look at the URL.</p>
<div id="attachment_275" class="wp-caption alignleft" style="width: 310px"><a href="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-pretty-url-to-premier-league.png"><img class="size-medium wp-image-275" title="expekt-3.6-pretty-url-to-premier-league" src="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-pretty-url-to-premier-league-300x18.png" alt="" width="300" height="18" /></a><p class="wp-caption-text">Close-up of address bar</p></div>
<p>As you can see, the URL now contains the league name. This improves usability and search engine optimization (SEO).</p>
<p>If we click one of the sport matches, we will see that those URLs are now more readable aswell.</p>
<div id="attachment_279" class="wp-caption alignleft" style="width: 310px"><a href="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-event-page.png"><img class="size-medium wp-image-279" title="expekt-3.6-event-page" src="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-event-page-300x225.png" alt="" width="300" height="225" /></a><p class="wp-caption-text">Screenshot of match page</p></div>
<p>Take a closer look at the URL of the match page.</p>
<div id="attachment_281" class="wp-caption alignleft" style="width: 310px"><a href="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-pretty-url-on-event-page.png"><img class="size-medium wp-image-281" title="expekt-3.6-pretty-url-on-event-page" src="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.6-pretty-url-on-event-page-300x15.png" alt="" width="300" height="15" /></a><p class="wp-caption-text">Close-up of address bar for the match page</p></div>
<p>It now contains both the league name (&#8220;Eng. Premier League&#8221;) and a description of the sports event, in this case the two team names: &#8220;Everton &#8211; Manchester City&#8221;.</p>
<p>In a coming post, I will write about the techology behind these pretty URLs, why they are constructed the way they are, and what to think about when building SEO friendly URLs into your own web applications.</p>
<p>I will also be monitoring how Google will index these new URLs and make a special note if Google picks up just the english versions, or other languages aswell. My guess is that it will only index the default language (english) until Expekt has implemented language subdirectories.</p>
<h2>References</h2>
<ul>
<li> <a href="http://www.expekt.com/sports/odds/eng-premier-league/SOCMENEURENGFST">http://www.expekt.com/sports/odds/eng-premier-league/SOCMENEURENGFST</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/269/expekt-release-3-6/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t Repeat Yourself in PLSQL parameters</title>
		<link>http://bettercode.se/wordpress/sv/247/dont-repeat-yourself-in-plsql-parameters</link>
		<comments>http://bettercode.se/wordpress/sv/247/dont-repeat-yourself-in-plsql-parameters#comments</comments>
		<pubDate>Mon, 25 Apr 2011 20:46:01 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=247</guid>
		<description><![CDATA[When writing PLSQL in the Oracle database, you define parameters to a function/procedure like this: Instead of writing it like that, consider using a table.column definition as type for your parameter! This way, if you change your table, you will not also have to change your code! Example: Now, if you for some reason change [...]]]></description>
				<content:encoded><![CDATA[<p>When writing PLSQL in the Oracle database, you define parameters to a function/procedure like this:</p>
<pre class="brush: sql; title: ; notranslate">
FUNCTION getFullName(iUserId IN INTEGER) RETURN VARCHAR2
IS
BEGIN
   --TODO: Implement this
   RETURN &quot;&quot;;
END getFullname;
</pre>
<p>Instead of writing it like that, consider using a table.column definition as type for your parameter! This way, if you change your table, you will not also have to change your code!</p>
<p>Example:</p>
<pre class="brush: sql; title: ; notranslate">
FUNCTION getFullName(iUserId IN SIGNUP.ID%TYPE) RETURN VARCHAR2
IS
BEGIN
   --TODO: Implement this
   RETURN &quot;&quot;;
END getFullname;
</pre>
<p>Now, if you for some reason change the ID column in the SIGNUP table to be something other than INTEGER, you can leave the code as is! Much more DRY!</p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/247/dont-repeat-yourself-in-plsql-parameters/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unit testing plsql</title>
		<link>http://bettercode.se/wordpress/sv/200/unit-testing-plsql</link>
		<comments>http://bettercode.se/wordpress/sv/200/unit-testing-plsql#comments</comments>
		<pubDate>Sat, 23 Apr 2011 20:30:41 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Oracle]]></category>
		<category><![CDATA[PL/SQL]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Testing]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=200</guid>
		<description><![CDATA[My situation I currently have an assignment where there is a large PLSQL code base. It&#8217;s been developed actively for about 12 years and works quite well. I am not saying it&#8217;s flawless, but quite mature. There&#8217;s lots of room for improvement and lots of dead code that needs to be removed. Some of the [...]]]></description>
				<content:encoded><![CDATA[<h2>My situation</h2>
<p>I currently have an assignment where there is a large PLSQL code base. It&#8217;s been developed actively for about 12 years and works quite well. I am not saying it&#8217;s flawless, but quite mature. There&#8217;s lots of room for improvement and lots of dead code that needs to be removed.</p>
<p>Some of the plsql is called from the Java DAO layer of a front-end web application, but most of it is used for backoffice functionality. The parts that are accessed from the Java layer are tested through integration tests based on JUnit, but the large part that is only used from the backoffice has no unit test coverage.</p>
<h2>Doing something about it</h2>
<p>I&#8217;ve known about the utPLSQL framework for many years, but never gotten around to actually use it in a Continuous Integration environment. I decided it was time to do something about it and started by adding the installation of utPLSQL to the already in place automated database reinstallation build. The installation part was quite easy, I just dropped the utPLSQL install scripts into our own source control repository and made it part of our db install. Uninstalling utPLSQL was a bit tricker since it creates public synonyms and those are not dropped when the Oracle db user/schema is dropped. (And that&#8217;s how we &#8220;uninstall&#8221; our other schemas normally.) And if I let those public synonyms stay there, I would get errors on the next install. So I simply need to create a small script that dropped those public synonyms as part of the uninstall/install (reinstall <img src='http://bettercode.se/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ) process.</p>
<p>After utPLSQL was part of our db installation, I created a couple of sample utPLSQL tests and tried them out. No problems there. I could run them from the SQL prompt without problem. But what I really wanted was to make them part of the build process in Hudson. So I started writing a JUnit test that would wrap the utPLSQL tests and then it would be runnable from Hudson.</p>
<p>After I while it struck me that I was writing something that someone else had probably written already and after a quick google I found the maven-utplsql-plugin. (insert holy graal sound here) Since we use Maven for the builds, this seemed like a perfect match. However, there were some pitfalls.</p>
<h2>Some pitfalls</h2>
<p>The maven-utplsql-plugin is currently not available in any public Maven repository. So, I had to download it and install it add it manually to our local Maven repo. The only problem was that our Maven repo was setup not to accept SNAPSHOT releases, and since we didn&#8217;t want to change that, I had to HACK the source files in the zip file and replace SNAPSHOT with STABLE in order for our Maven repo to accept the new artifact. In fact, this may lead to that I have to do some contributions to the dev team of the maven-utplsql-plugin to get it up to a RELEASE version and maybe even up on a public repository?</p>
<h2>The happy ending</h2>
<p>Finally, I added a new task to our db-reinstall profile in Maven. The new task simply calls the plugin which runs the tests. SUCCESS!</p>
<h2>My sources</h2>
<p>This guy got around to doing this a lot sooner than me: <a href="http://www.theserverlabs.com/blog/2009/05/18/continuous-integration-with-oracle-plsql-utplsql-and-hudson/">http://www.theserverlabs.com/blog/2009/05/18/continuous-integration-with-oracle-plsql-utplsql-and-hudson/</a></p>
<p>Here&#8217;s the Maven plugin for utplsql: <a href="http://code.google.com/p/maven-utplsql-plugin/">http://code.google.com/p/maven-utplsql-plugin/</a></p>
<p>The utPLSQL project: <a href="https://sourceforge.net/projects/utplsql/">https://sourceforge.net/projects/utplsql/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/200/unit-testing-plsql/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ehcache Monitor is not free</title>
		<link>http://bettercode.se/wordpress/sv/204/ehcache-monitor-is-not-free</link>
		<comments>http://bettercode.se/wordpress/sv/204/ehcache-monitor-is-not-free#comments</comments>
		<pubDate>Fri, 25 Mar 2011 19:43:22 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=204</guid>
		<description><![CDATA[We use Ehcache in a software project I am involved in. The open source Ehcache project is licensed under the Apache 2.0 License and can therefore be used without having to pay a license fee. I love it, I think it&#8217;s GREAT. When I first tried Ehcache Monitor, I was happy to see that it [...]]]></description>
				<content:encoded><![CDATA[<p>We use Ehcache in a software project I am involved in. The open source Ehcache project is licensed under the Apache 2.0 License and can therefore be used without having to pay a license fee. I love it, I think it&#8217;s GREAT.</p>
<p>When I first tried Ehcache Monitor, I was happy to see that it solved a lot of our needs when it comes to monitoring and managing our caches across multiple servers in the cluster. However, it comes at a pretty high cost if you want to use it in a production environment. Terracotta do not currently sell it stand-alone, but only as a part of of the commercial versions of Ehcache (DX, EX or FX).</p>
<p>I currently have a dialogue going with a sales rep at Terracotta, and I hope they will start offering the monitor seperately, so that it can be used together with the open source version of Ehcache.</p>
<p><a href="http://ehcache.org/documentation/monitor.html">http://ehcache.org/documentation/monitor.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/204/ehcache-monitor-is-not-free/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expekt Release 3.0</title>
		<link>http://bettercode.se/wordpress/sv/138/expekt-release-3-0</link>
		<comments>http://bettercode.se/wordpress/sv/138/expekt-release-3-0#comments</comments>
		<pubDate>Tue, 09 Nov 2010 09:17:30 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[eGaming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=138</guid>
		<description><![CDATA[Today we released a major upgrade of the Expekt.com website! New re-design and a completely new odds section. Finally, we&#8217;re out of the frames! The removal of the outdated frame technology will hopefully bring better usability, better search engine coverage and&#8230; better code. There will be some polishing up to do over the next few [...]]]></description>
				<content:encoded><![CDATA[<div id="attachment_139" class="wp-caption alignleft" style="width: 310px"><a href="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.0-new-design.png"><img class="size-medium wp-image-139" title="expekt-3.0-new-design" src="http://bettercode.se/wordpress/wp-content/uploads/expekt-3.0-new-design-300x180.png" alt="" width="300" height="180" /></a><p class="wp-caption-text">Expekt website redesigned. Centered, wider and without frames!</p></div>
<p>Today we released a major upgrade of the Expekt.com website! New re-design and a completely new odds section. Finally, we&#8217;re out of the frames!</p>
<p>The removal of the outdated frame technology will hopefully bring better usability, better search engine coverage and&#8230; better code. <img src='http://bettercode.se/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  There will be some polishing up to do over the next few releases, but this is a major step forward for the Expekt website.</p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/138/expekt-release-3-0/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Attending the Nordic Atlassian User Group</title>
		<link>http://bettercode.se/wordpress/sv/99/attending-the-nordic-atlassian-user-group</link>
		<comments>http://bettercode.se/wordpress/sv/99/attending-the-nordic-atlassian-user-group#comments</comments>
		<pubDate>Tue, 07 Sep 2010 21:06:07 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=99</guid>
		<description><![CDATA[I have registered for the (free) Nordic Atlassian User Group! Should be interesting. Before then, I hope to have upgraded Jira from version 3 to 4! http://confluence.atlassian.com/display/AUG/Nordic+Atlassian+User+Group]]></description>
				<content:encoded><![CDATA[<p>I have registered for the (free) Nordic Atlassian User Group! Should be interesting. Before then, I hope to have upgraded Jira from version 3 to 4!</p>
<p><a href="http://confluence.atlassian.com/display/AUG/Nordic+Atlassian+User+Group">http://confluence.atlassian.com/display/AUG/Nordic+Atlassian+User+Group</a></p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/99/attending-the-nordic-atlassian-user-group/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joel Test #9: Do you use the best tools money can buy?</title>
		<link>http://bettercode.se/wordpress/sv/92/joel-test-9-do-you-use-the-best-tools-money-can-buy</link>
		<comments>http://bettercode.se/wordpress/sv/92/joel-test-9-do-you-use-the-best-tools-money-can-buy#comments</comments>
		<pubDate>Mon, 06 Sep 2010 19:57:43 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=92</guid>
		<description><![CDATA[As you may know, I am very fond of The Joel Test. Currently, I am writing specifications for new hardware (dev computers) for the three Scrum teams that I manage. I wonder where the limit for &#8220;the best tools money can buy&#8221; is? 2 monitors? 3? RAIDed Solid State Drives? I suppose it depends on [...]]]></description>
				<content:encoded><![CDATA[<p>As you may know, I am very fond of The Joel Test.</p>
<p>Currently, I am writing specifications for new hardware (dev computers) for the three Scrum teams that I manage. I wonder where the limit for &#8220;the best tools money can buy&#8221; is? 2 monitors? 3? RAIDed Solid State Drives? I suppose it depends on whos money it is!</p>
<p>Anyway, when the new computers arrive I hope we can give ourselves a better score at the Joel Test #9: Do you use the best tools money can buy?</p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/92/joel-test-9-do-you-use-the-best-tools-money-can-buy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sprint Planning with Jira</title>
		<link>http://bettercode.se/wordpress/sv/72/sprint-planning-with-jira</link>
		<comments>http://bettercode.se/wordpress/sv/72/sprint-planning-with-jira#comments</comments>
		<pubDate>Mon, 09 Aug 2010 19:27:45 +0000</pubDate>
		<dc:creator>Max Wenzin</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://bettercode.se/wordpress/?p=72</guid>
		<description><![CDATA[Did Sprint Planning with 3 Scrum Teams at Expekt today, using Jira. Hoping to get to try out the Atlassian Greenhopper add-on soon! Automatic burn-downs would be sweet!]]></description>
				<content:encoded><![CDATA[<p>Did Sprint Planning with 3 Scrum Teams at Expekt today, using Jira. Hoping to get to try out the Atlassian Greenhopper add-on soon! Automatic burn-downs would be sweet!</p>
]]></content:encoded>
			<wfw:commentRss>http://bettercode.se/wordpress/sv/72/sprint-planning-with-jira/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
