<?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>Syntax Meditation</title>
	<atom:link href="http://www.sickenger.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sickenger.com</link>
	<description>A blog about code, coding and coders.</description>
	<lastBuildDate>Fri, 05 Aug 2011 20:49:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Pragmatic OOP</title>
		<link>http://www.sickenger.com/2011/07/pragmatic-oo/</link>
		<comments>http://www.sickenger.com/2011/07/pragmatic-oo/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 13:20:59 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=317</guid>
		<description><![CDATA[In my last blog post I talked about people pushing a process as the magic bullet when it is the people that matter. Having the wrong people on a team can cause havoc and kill a project. Sometimes these wrong people are cargo cult programmers. According to Wikipedia: &#8216;Object-oriented programming (OOP) is a programming paradigm [...]]]></description>
			<content:encoded><![CDATA[<p>In <a title="F*ck the process, embrace the team!" href="http://www.sickenger.com/2011/07/agile-fck-the-process-embrace-the-team/" target="_blank">my last blog post</a> I talked about people pushing a process as the magic bullet when it is the people that matter. Having the wrong people on a team can cause havoc and kill a project. Sometimes these wrong people are <a title="Wikipedia - Cargo Cult Programming" href="http://en.wikipedia.org/wiki/Cargo_cult_programming" target="_blank">cargo cult programmers</a>.</p>
<p><a title="wikipedia" href="http://en.wikipedia.org/wiki/Object-oriented_programming" target="_blank">According to Wikipedia</a>: &#8216;Object-oriented programming (OOP) is a programming paradigm using &#8220;objects&#8221; – data structures consisting of data fields and methods together with their interactions – to design applications and computer programs.&#8217;</p>
<p>OOP is supposed to be a practical way to organize a program into hierarchies of objects where similar objects can inherit behavior from each other and override that behavior when necessary. Objects can also contain other objects and that is a technique called composition. Certain programmers pick up OOP and fall in love with the rule-set without fully understanding it, or they over-apply the principles. These people are <a title="Wikipedia - Cargo Cult Programming" href="http://en.wikipedia.org/wiki/Cargo_cult_programming" target="_blank">cargo cult programmers</a>.<span id="more-317"></span></p>
<p>I have met programmers who believe that anywhere there is a conditional statement in OO code, there is cause to subclass, &#8220;because that is the OO way! &#8482;&#8221;. And they will defend it against any pragmatic reasoning. So anywhere you see an if/then/else or a switch statement, you should find a way to break the logic into seperate objects to avoid the logic. The dogma here is that conditional statements complicate things and are not strictly OO, so they must be minimized and preferable erased.</p>
<p>A Car and a Train and a Truck can all inherit behavior from a Vehicle object, adding their subtle differences. A Firetruck can inherit from the Truck object, and so on. Wait.. and so on? The thing about inheritance is that is so easy to create massive trees of objects. But what OO-bigots won&#8217;t tell you is that these trees will mess you up big time if you let them grow too deep, or grow for the wrong reasons.</p>
<p>Programming like this might not be a problem on a small to mid-sized one-man project, since there will be a limit to how much you will need to subclass to get a viable solution to whatever problem you are attacking. But on a 100KLOC+ sized project with thousands of classes, you get into big trouble. The project transforms from manageable inheritance trees and simple classes into an unmanageable mess, with stack traces so deep you need diving skills to reach the offending code. If you are really OOP obsessed and have been using interfaces to avoid being implementation-dependent, then you are in for a real treat. You will end up at the bottom of the stack trace looking at some offending code that clearly fails, but when backtracking to figure out how it got in this state all you encounter is interfaces. So you spend half the time finding out what implementation of said interface is being used and then find out that it is calling super.somemethod(..) which again calles super.somemethod(..) and so on all the way up the inheritance chain.</p>
<p>And then there is the issue of needing to change something in an object near the top of the inheritance stack, which in turn changes the behavior of the objects below in sometimes undefined ways. The deeper the inheritance tree, the worse things get when changing top-level objects. You can of course (and should) have unit tests and regression tests to ensure that the behavior remains the same, but these tests are just crutches that will help you dig yourself into a deeper hole.</p>
<p>The real problem here is that using inheritance too aggressively to simplify the internal logic of individual objects is a bad move. It&#8217;s using the <a href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank">KISS</a> (Keep It Simple Stupid) principle, but in the worst way possible. You might think you are adhering to good OOP practice, and your classes might be simple and conditional-free, but no one (including you) will be able to change or debug your code in a painless manner, even with unit tests and regression tests.</p>
<p>When wanting to keep things simple you should try to let the code flow in a linear fashion. Any related logic code should be kept as close as possible, even if it means using conditional statements. It is a lot easier to read code if most of the important bits are in the same object or file instead of spread out between multiple classes. You should of course use inheritance, but moderately and when necessary. You should also abstract out logic into appropriately named methods to keep a readable level of abstraction. And you can also use composition to add behavior to your objects. You want to maximize readability because that is what matters later on when you are maintaining or debugging. That is the pragmatic approach.</p>
<p>No one is impressed by how OO your code is if it is impossible to debug.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2011/07/pragmatic-oo/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>F*ck the process, embrace the team!</title>
		<link>http://www.sickenger.com/2011/07/agile-fck-the-process-embrace-the-team/</link>
		<comments>http://www.sickenger.com/2011/07/agile-fck-the-process-embrace-the-team/#comments</comments>
		<pubDate>Wed, 06 Jul 2011 21:17:44 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=308</guid>
		<description><![CDATA[Agile seems to be losing some of its shiny newness at last. This is great! It means we can start talking about agile without fanboys eagerly interrupting to spurt out some repeat-hyperbole from an Agile Evangelist meeting of some sort. It also means that I can  tell you this dirty little secret without too many [...]]]></description>
			<content:encoded><![CDATA[<p>Agile seems to be losing some of its shiny newness at last. This is great! It means we can start talking about agile without fanboys eagerly interrupting to spurt out some repeat-hyperbole from an Agile Evangelist meeting of some sort.</p>
<p>It also means that I can  tell you this dirty little secret without too many people choking on their agile-conference-coffee:</p>
<p>TDD, XP, Scrum, Kanban (and the rest) are all processes and tools. All their proponents claim you *have* to follow the process, no matter what. If Agile fails for you, then it is because you are not following the process!</p>
<p>The Manifesto for Agile Software Development tells us that we should value &#8221;Individuals and interactions over processes and tools&#8221;.  How is it that the Agile community has accepted the rigorous following of strict processes? I think it is because there is a market for selling processes. And those in the game of selling processes won&#8217;t tell you that sometimes the process just doesn&#8217;t work. The same way Toyota won&#8217;t tell you that sometimes their cars <a href="http://en.wikipedia.org/wiki/2009%E2%80%932011_Toyota_vehicle_recalls">unintentionally accelerate</a> and can kill you.</p>
<p>The real secret is that it&#8217;s the people that matter, not the process! Process is good. Formalizing development methods is good. But if you have the wrong people you will fail, no matter what process you use. Conversely, if you have the right people it doesn&#8217;t really matter what process you follow. You will most likely succeed.</p>
<p>It is time we stopped selling processes as the magic bullet. Agile is great, and methodologies like Scrum, TDD and XP can be good facilitators for getting from concept to release. But they do not solve the fundamental problem that   a bad team fails no matter what process it uses.</p>
<p>Programming is a human activity, as described in the classic book &#8216;<a href="http://www.amazon.com/Psychology-Computer-Programming-Silver-Anniversary/dp/0932633420">The Psychology of Computer Programming</a>&#8221; by Gerald Weinberg. Therefore the human and psychological aspect needs to be considered when forming a team.</p>
<p>The fact is: Some people don&#8217;t work well together no matter how well their skill sets match. Some people are useless within certain processes. And there are also people in the programming field that could be of more use doing something completely different.</p>
<p>We should strive to create the perfect team, not the perfect process.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2011/07/agile-fck-the-process-embrace-the-team/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Darkfall 2 year anniversary!</title>
		<link>http://www.sickenger.com/2011/03/darkfall-2-year-anniversary/</link>
		<comments>http://www.sickenger.com/2011/03/darkfall-2-year-anniversary/#comments</comments>
		<pubDate>Wed, 02 Mar 2011 21:18:58 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=302</guid>
		<description><![CDATA[Darkfall was released a little over 2 years ago, on the 25th of February 2009. Having been one of the original members of the team and one of the founders, I felt the urge to tell the story of the making of Darkfall. This my personal account, but I have tried to tell the story [...]]]></description>
			<content:encoded><![CDATA[<p>Darkfall was released a little over 2 years ago, on the 25th of February 2009.</p>
<p>Having been one of the original members of the team and one of the founders, I felt the urge to tell the story of the making of Darkfall.</p>
<p>This my personal account, but I have tried to tell the story as accurately as possible.  There are  enough details to fill a book, so I have selected the parts  that are  important to me in order to fit this into a readable post.</p>
<p><a title="The making of Darkfall – One developers perspective" href="http://www.sickenger.com/projects/the_making_of_darkfall/">Click here to read &#8216;The making of Darkfall &#8211; One developers perspective&#8217;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2011/03/darkfall-2-year-anniversary/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t optimize!</title>
		<link>http://www.sickenger.com/2011/02/dont-optimize/</link>
		<comments>http://www.sickenger.com/2011/02/dont-optimize/#comments</comments>
		<pubDate>Sun, 06 Feb 2011 21:57:13 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=217</guid>
		<description><![CDATA[Actually you should optimize, but not at the wrong places, or for the wrong reasons. But I&#8217;ll get back to that in a minute. I recently released a small XNA-based game together with my friends at Badgerpunch Games, and have been following the indie game development community through forums and twitter. Game developers are very [...]]]></description>
			<content:encoded><![CDATA[<p>Actually you should optimize, but not at the wrong places, or for the wrong reasons. But I&#8217;ll get back to that in a minute.</p>
<p>I recently released a small <a href="http://www.badgerpunch.com/?page_id=9" target="_blank">XNA-based game</a> together with my friends at <a title="Badgerpunch Website Link" href="http://www.badgerpunch.com" target="_blank">Badgerpunch Games</a>, and have been following the indie game development community through forums and twitter. Game developers are very concerned about performance, mostly for good reason. No one wants a game with choppy framerate. Because of all this worrying about performance, there is an array of optimization tips and articles that get passed around to alleviate the problem. The majority of the tips and articles are informative and useful, but hardly any of these articles touch on the main issue of optimization: When not to optimize and why not.</p>
<p><span id="more-217"></span>The thing about optimization is that you almost always can optimize code, but time-spent vs pay-off quickly goes bad. I remember when I was active in the Amiga Demo scene back in the early nineties. I had this 3D rotation assembly routine that I spent probably half a year optimizing. It ended up being about as optimized as was possible. The first few weeks I was cutting away at cpu cycles at a fantastic rate! The last couple of months I didn&#8217;t really save any cycles, and in the end I gave up.. My routine was super-fast, but still, other coders had 3D graphics that were faster, and I couldn&#8217;t understand how that was possible.</p>
<p>I found out how it was possible a few years later when learning about matrices in college. My routine with 9 multiplications per 3D point was an unoptimized matrix, and could be shortened to 6 multiplications  and two adds, saving hundreds of cycles per point.. man that pissed me off!</p>
<p>The moral of that story? You can optimize your code till it shines like a star, but if someone else has a better algorithm that does the same job faster, then you still lose.</p>
<p>Or do you lose? Only if it matters. In the story of optimizing performance of 3d-rotation on a limited 16-bit machine, where the fastest routine makes the most leet programmer,  then it matters a lot. <img src='http://www.sickenger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Which brings us back to the beginning. Don&#8217;t optimize &#8211; if it doesn&#8217;t matter. The important thing is keeping your code simple, easy to read and easy to change! When your code has these three properties it doesn&#8217;t matter that it isn&#8217;t optimized.</p>
<p>If the code is too slow, pick up a profiler and find out where you should optimize. Sometimes you don&#8217;t need a profiler, but you *always* need to base optimization on real data. When you identify the problem areas, you fix them in the simplest way possible, and see what effect it has. Eventually you should get to the point that the code does what it should with acceptable performance. And if it doesn&#8217;t, you might need to change the algorithm you based your code on. That is one reason to keep code simple and easy to change.</p>
<p>The main reason to keep the code simple, easy to read and easy to change is that finding bugs is an act of reading and changing the code. The easier it is to read, the easier it is to fix. It&#8217;s a no-brainer.. and still people insist on making things as complicated as possible just to stroke their own egos! I once saw a piece of Java code with  recursive multi-layered inline if-statements. One of the worst examples of unintended code-mangling. And of course full of bugs&#8230; almost made me cry.</p>
<p>Another reason to keep code simple is to inform the compiler in the simplest way what your intent is. A complier will have a better chance at optimizing simple code. And if you are running under a virtual machine with a JIT compiler, it is ever more important. With virtual machines and on-the-fly compilation then your code might run on a plethora of different versions of the VM. Most likely the newer the VM and the simpler your code is, the better chance that it will be optimized when run.</p>
<p>The early Java Virtual Machine versions did little compiling and no optimization, so things like backwards-counting for-loops were early tricks to save a few cycles. But the latest versions compile and optimize on the fly, and they optimize the most common for-loop variations. If you mangled your for-loop to get it running a few cycles faster in an early VM, your code might actually run slower today than a more common for-loop variant. Performance is a moving target on Virtual Machines, and code trickery might not pay off in the long run.</p>
<p>It all boils down to this: Don&#8217;t optimize until you know what to optimize. This does not mean you shouldn&#8217;t be thinking of performance. You should always have performance as a consideration. It should be a concern when choosing algorithms, designing and implementing, but your main focus should be keeping the code simple, easy to read, and easy to change.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2011/02/dont-optimize/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Game developer, and then what?</title>
		<link>http://www.sickenger.com/2011/01/game-developer-and-then-what/</link>
		<comments>http://www.sickenger.com/2011/01/game-developer-and-then-what/#comments</comments>
		<pubDate>Sun, 23 Jan 2011 23:07:37 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=203</guid>
		<description><![CDATA[Wow, it&#8217;s been almost two years since Darkfall (Online) was released! I was involved from the very beginning, in 1999 when we were a bunch of young inexperienced guys with a a dream of making &#8220;the best game evah&#8221; &#8482;. We started a company here in Norway in 2000, moved to Greece in 2003 and [...]]]></description>
			<content:encoded><![CDATA[<p>Wow, it&#8217;s been almost two years since <a href="http://www.darkfallonline.com" target="_blank">Darkfall (Online)</a> was released!</p>
<p>I was involved from the very beginning, in 1999 when we were a bunch of young inexperienced guys with a a dream of making &#8220;the best game evah&#8221; &#8482;. We started a company here in Norway in 2000, moved to Greece in 2003 and released Darkfall, a badass full-loot player versus player  mmo, on the 25th of February 2009. That pretty much amounts to 10 years making one single game.<span id="more-203"></span></p>
<p>I moved back to Norway when Darkfall was released, and continued working remotely for the company until September 2009 when I took a job as a<a href="http://www.webstep.no" target="_blank"> IT Consultant</a>, working mainly with insurance companies.</p>
<p>That was quite a career change! Or was it? Well, yes and no.. I am basically doing the same technical job (solving problems and programming) and am working with great people, but I am working less and being payed more. I love computer games, but my passion for programming is what counts. As an IT consultant I suddenly had a completely different set of problems to solve, using new set of libraries and tools, in a very different domain.</p>
<p>Coming from a game developer background I had a lot to learn, and the last year or so has been a great challenge in that respect. I also got to see the way the Dark side does things. Dark as in enterprisey, and enterprisey as in lets-use-this-overrated-bloated-library-to-solve-this-insignificant-problem-as-difficult-as-possible. The game developer attitude of lets-just-get-this-shit-working-don&#8217;t-look-at-the-spaghetti-code attitude doesn&#8217;t work that great either. I am exaggerating of course, but there are clear differences in attitude between these two camps, and coming from one to the other is a good way to evolve as a programmer. Being able to see the differences I am also aware of how both could become better by embracing some of the &#8220;methods&#8221; of each other.</p>
<p>The game company I helped build and worked for already has most of the traits it needs, and from what I have heard is continually improving after I left. A game company is agile by default, as a necessity. There is no known way yet to completely pre-design a game and then just start developing it without significant changes to gameplay and/or concept. Darkfall went through many changes from the original idea to the end result. Most of the changes were small things, and the main concept was kept throughout, but still, it meant the game design was a moving target, and we had to factor that into the implementation. The project started with no version control, no proper backup mechanisms, no test-servers or testers, but as the company evolved, all of these points were solved.  Now the team even runs Scrum sprints, embracing the true agile spirit! <img src='http://www.sickenger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Coming to an insurance company as a consultant, I was worried that everything would be designed top-down, full of bloated frameworks, and old enterprisey code, and I would be sifting through megabytes of xml to find the actual problem whenever anything bad happened. This is probably true for a lot of old insurance companies, but didn&#8217;t hold quite true for me. It turned out that while bloated Java web-frameworks were there and some people still adhered to omg-we-need-a-framework-for-this solutions, there are forces working to simplify things, cut the bloat and make things more agile. I am lucky to be working closely with some of those people, learning the domain and hopefully contributing a little too. Recently we introduced distributed version control and converted a bunch of projects, and started using the <a href="http://www.playframework.org/" target="_blank">Play Framework</a> too, which is great!</p>
<p>All in all, my experience in switching from game developer to IT consultant has been a pleasant one, and it gives me more time with the family too! Well, except for the fact that I am now making casual games in the evenings, under the banner of <a href="http://www.badgerpunch.com" target="_blank">BadgerPunch Games</a>. <img src='http://www.sickenger.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2011/01/game-developer-and-then-what/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Maven Dependency Management (Deptools)</title>
		<link>http://www.sickenger.com/2010/11/maven-dependency-management-deptools/</link>
		<comments>http://www.sickenger.com/2010/11/maven-dependency-management-deptools/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 21:32:47 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=198</guid>
		<description><![CDATA[Dependency management in Maven is a tricky business. At the company where I work we have several large projects that include many different libraries and all dependencies are managed by Maven.  These projects end up having transitive dependencies where the libraries our projects depend on have dependencies on yet other libraries. Maven does a good [...]]]></description>
			<content:encoded><![CDATA[<p>Dependency management in Maven is a tricky business. At the company where I work we have several large projects that include many different libraries and all dependencies are managed by Maven.  These projects end up having transitive dependencies where the libraries our projects depend on have dependencies on yet other libraries.</p>
<p>Maven does a good job of including all the transitive dependencies, but sometimes it resolves itself in such a way that Maven selects an older version of a library when given the choice between two different versions of the same library. This is extremely annoying when the older version contains bugs or lacks features that it&#8217;s dependent library needs.</p>
<p>A good colleague of mine, Morten Kjetland, has created an excellent Maven plugin called &#8216;<a href="https://github.com/mbknor/deptools">deptools</a>&#8216; that solves this issue by raising a compile error if it detects that an older transient dependency has been chosen instead of the newer version.</p>
<p><a href="https://github.com/mbknor/deptools">Deptools</a> has saved us from a lot of head-scratching and frustration, and could potentially do the same for you, so head on over to the <a href="https://github.com/mbknor/deptools">GitHub deptools repository</a> and download it. It is open source and written in <a href="http://en.wikipedia.org/wiki/Scala_%28programming_language%29">Scala</a>, but works as any other plugin for Maven 2 or 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2010/11/maven-dependency-management-deptools/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Weekend in Rome</title>
		<link>http://www.sickenger.com/2010/09/weekend-in-rome/</link>
		<comments>http://www.sickenger.com/2010/09/weekend-in-rome/#comments</comments>
		<pubDate>Tue, 21 Sep 2010 19:26:43 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=179</guid>
		<description><![CDATA[I spent this last weekend in Rome. I got to see the Colosseum, Pantheon, Saint Peters&#8217; Basilica, Piazza Navona and more. Colosseum was the most impressive building. Even today in its broken-down state, it still is incredibly impressive. I would love to be able to take a 3d-tour of the place as it was when [...]]]></description>
			<content:encoded><![CDATA[<p>I spent this last weekend in Rome. I got to see the <a href="http://en.wikipedia.org/wiki/Colosseum">Colosseum</a>, <a href="http://en.wikipedia.org/wiki/Pantheon,_Rome">Pantheon</a>, <a href="http://en.wikipedia.org/wiki/St._Peter%27s_Basilica">Saint Peters&#8217; Basilica</a>, <a href="http://en.wikipedia.org/wiki/Piazza_Navona">Piazza Navona</a> and more.</p>
<p>Colosseum was the most impressive building. Even today in its broken-down state, it still is incredibly impressive. I would love to be able to take a 3d-tour of the place as it was when it was built. A good second best will be watching <a href="http://en.wikipedia.org/wiki/Gladiator_%282000_film%29">The Gladiator</a> again soon!<span id="more-179"></span></p>
<p>Saturday and Sunday consisted of highly concentrated sight-seeing. And then on Sunday evening a visit to <a href="http://www.mirabelle.it/en/index">Ristorante Mirabelle</a>, a restaurant that carries a Michelin star. The food and wine was fantastic, and the view was to die for.</p>
<p>I had a walk around some of the small and atmospheric streets of Rome on Monday before catching the plane back to Bergen.</p>
<p>All in all a great trip! I will definitely be going back to Rome.</p>
<p>Here are some pictures of Rome, and a picture taken while flying over the alps (taken with a HTC Hero cellphone camera, so not great quality):</p>
<div id="attachment_184" class="wp-caption aligncenter" style="width: 210px"><a href="http://www.sickenger.com/wp-content/uploads/2010/09/rome003.jpg"><img class="size-medium wp-image-184 " title="The so-called &quot;wedding cake&quot; building." src="http://www.sickenger.com/wp-content/uploads/2010/09/rome003-200x300.jpg" alt="The so-called &quot;wedding cake&quot; building." width="200" height="300" /></a><p class="wp-caption-text">The so-called &quot;wedding cake&quot; building.</p></div>
<div id="attachment_183" class="wp-caption aligncenter" style="width: 210px"><a href="http://www.sickenger.com/wp-content/uploads/2010/09/rome002.jpg"><img class="size-medium wp-image-183 " title="Obelisk at Piazza Navona" src="http://www.sickenger.com/wp-content/uploads/2010/09/rome002-200x300.jpg" alt="Obelisk at Piazza Navona" width="200" height="300" /></a><p class="wp-caption-text">Obelisk at Piazza Navona</p></div>
<div id="attachment_182" class="wp-caption aligncenter" style="width: 210px"><a href="http://www.sickenger.com/wp-content/uploads/2010/09/rome001.jpg"><img class="size-medium wp-image-182 " title="Piazza Navona" src="http://www.sickenger.com/wp-content/uploads/2010/09/rome001-200x300.jpg" alt="Piazza Navona" width="200" height="300" /></a><p class="wp-caption-text">Piazza Navona</p></div>
<div id="attachment_181" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.sickenger.com/wp-content/uploads/2010/09/alps.jpg"><img class="size-medium wp-image-181 " title="Flying over the alps" src="http://www.sickenger.com/wp-content/uploads/2010/09/alps-300x200.jpg" alt="Flying over the alps" width="300" height="200" /></a><p class="wp-caption-text">Flying over the alps</p></div>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2010/09/weekend-in-rome/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ja Ja JavaZone</title>
		<link>http://www.sickenger.com/2010/09/ja-ja-javazone/</link>
		<comments>http://www.sickenger.com/2010/09/ja-ja-javazone/#comments</comments>
		<pubDate>Wed, 15 Sep 2010 21:40:56 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=174</guid>
		<description><![CDATA[I got back from JavaZone last week; a 2-day Java-oriented programming conference. JavaZone 2010 was a very enjoyable and educational experience. I got to attend quite a few really good talks, including some good lightning talks. The most memorable talks in no particular order: Emergent Design — Neal Ford How we blew our shot at [...]]]></description>
			<content:encoded><![CDATA[<p>I got back from <a href="http://www.javazone.no">JavaZone</a> last week; a 2-day Java-oriented programming conference. JavaZone 2010 was a very enjoyable and educational experience. I got to attend quite a few really good talks, including some good lightning talks. The most memorable talks in no particular order:</p>
<ul>
<li>
<div><a href="http://javazone.no/incogito10/events/JavaZone%202010/sessions/Emergent%20Design" target="_blank">Emergent Design</a> —                                         Neal Ford</div>
</li>
<li>
<div><a href="http://javazone.no/incogito10/events/JavaZone%202010/sessions/How%20we%20blew%20our%20shot%20at%20beating%20Spotify,%20spending%20two%20metric%20truckloads%20of%20cash%20doing%20it" target="_blank">How we blew our shot at beating Spotify, spending two metric truckloads of cash doing it</a> —                                         Espen Dalløkken</div>
</li>
<li>
<div><a href="http://javazone.no/incogito10/events/JavaZone%202010/sessions/It%20Is%20Possible%20to%20Do%20Object-Oriented%20Programming%20in%20Java" target="_blank">It Is Possible to Do Object-Oriented Programming in Java</a> —                                         Kevlin Henney</div>
</li>
<li>
<div><a href="http://javazone.no/incogito10/events/JavaZone%202010/sessions/Leveraging%20Open%20Source%20-%20Everything%20You%20Wanted%20to%20Know%20About%20Open%20Source%20that%20Nobody%20Told%20You%20%28including%20getting%20paid%20to%20do%20it%29" target="_blank">Leveraging Open Source &#8211; Everything You Wanted to Know About Open Source that Nobody Told You (including getting paid to do it)</a> —                                         Jeff Genender</div>
</li>
<li>
<div><a href="http://javazone.no/incogito10/events/JavaZone%202010/sessions/Hacking%20Your%20Brain%20for%20Fun%20and%20Profit" target="_blank">Hacking Your Brain for Fun and Profit</a> —                                         Nathaniel Schutta</div>
</li>
</ul>
<p>As you can see, most of these talks don&#8217;t have much to do with Java, but they were all great and might make me a better developer if I take just a bit of the wisdom to heart.</p>
<p>I was particularly impressed with the professional execution of the conference. Just about everything went smooth as could be (well, wifi at conferences is always a nightmare). Dinner and lunch was served to two thousand attendees with no more than a few minutes waiting once you queued up!</p>
<p>All in all a great conference! I am already looking forward to JavaZone 2011.</p>
<p>PS! If any of the above talks sound interesting, all the talks have been made available as videoes linked from the <a href="http://www.javazone.no/">Javazone</a> main page.</p>
<p>PPS! Here is the JavaZone 2010 music video:</p>
<p><object width="500" height="306"><param name="movie" value="http://www.youtube.com/v/Mk3qkQROb_k?fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Mk3qkQROb_k?fs=1" type="application/x-shockwave-flash" width="500" height="306" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2010/09/ja-ja-javazone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Code Quality game</title>
		<link>http://www.sickenger.com/2010/06/the-code-quality-game/</link>
		<comments>http://www.sickenger.com/2010/06/the-code-quality-game/#comments</comments>
		<pubDate>Thu, 03 Jun 2010 22:00:08 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=115</guid>
		<description><![CDATA[Most programmers think they can recognize good code and a lot of them think they produce good code, but the sad truth is that not a lot of programmers actually do. Between time constraints, feature creep, and laziness, programmers hardly ever end up producing super quality code. I remember reading articles about tools and methodologies [...]]]></description>
			<content:encoded><![CDATA[<p>Most programmers think they can recognize good code and a lot of them think they produce good code, but the sad truth is that not a lot of programmers actually do. Between time constraints, feature creep, and laziness, programmers hardly ever end up producing super quality code.<span id="more-115"></span></p>
<p>I remember reading articles about tools and methodologies to improve code quality back in 2006-2007. These articles included <a href="http://martinfowler.com/articles/continuousIntegration.html">Martin Fowlers seminal article on Continuous Integration (CI)</a>, and I ended up installing <a href="http://en.wikipedia.org/wiki/CruiseControl">Cruise Control</a> and linking it up to my Subversion repository on a Linux box. It was a pain to setup, but it was great watching Cruise Control retrieve my code from Subversion and build it. I also set up <a href="http://trac.edgewall.org/">Trac</a> and had full source browsing and task tracking for my home projects.</p>
<p>The tool I learnt the most from was <a href="http://en.wikipedia.org/wiki/FindBugs">FindBugs</a>, a static code analysis tool. It analyses compiled Java classes looking for patterns of bad programming and potential problems. I ran it on my projects at home and was pretty surprised with the results. While the FindBugs report does give you some false positives, it did find some potential flaws in my small projects.</p>
<p>The only problem was that I never had much time for my personal projects, and the fun of watching a build compile without errors or running FindBugs only lasts a little while.</p>
<p>I helped my company start using Trac, and we setup our own continuous integration build system. We would run FindBugs on our pretty large project now and again and find critical bugs long before they got us into serious trouble. These tools saved us a lot of problems.</p>
<div id="attachment_161" class="wp-caption alignnone" style="width: 310px"><a href="http://www.sickenger.com/wp-content/uploads/2010/06/lone-tree-mongolia-landscape_282.jpg"><img class="size-medium wp-image-161" title="lone-tree---mongolia-landscape_282" src="http://www.sickenger.com/wp-content/uploads/2010/06/lone-tree-mongolia-landscape_282-300x225.jpg" alt="" width="300" height="225" /></a><p class="wp-caption-text">By: TiareScott http://www.flickr.com/people/tiarescott/</p></div>
<p>Fast forward to 2009, and I am at a new company that also has Trac, Subversion, and a Continuous Integration server (<a href="http://en.wikipedia.org/wiki/Hudson_(software)">Hudson</a>). I had a look at the Hudson server, but based on my past experience, I didn&#8217;t see what a Continuous Integration server would do that I wasn&#8217;t already doing myself. I was doing a full Maven package before committing and deploying, and I was alone on my project, so build breaking wasn&#8217;t much of an issue.</p>
<p>A few weeks ago everything changed. One of the other developers installed the <a href="http://wiki.hudson-ci.org/display/HUDSON/The+Continuous+Integration+Game+plugin">Continous Integration Game Plugin</a> for Hudson that puts up a leader board link on the main Hudson page. This plugin scores your commits based on how good your code is, how much test-coverage you have, how complex the code is, and many other parameters. One of the tools it uses is FindBugs, and old friend and an excellent tool.</p>
<p>This turned Hudson into a completely different beast, at least from my perspective. Suddenly I could compete with the other developers based on code quality merits, and at the same be improving my code! <a href="http://www.sonarsource.org/">Sonar</a>, an &#8220;open source code quality management platform&#8221;, was also  integrated with Hudson, giving a detailed breakdown of the code by the same metrics as the CI Game.</p>
<p>Playing the CI game inspired me to start unit-testing. I had been on the fence for a while, and quite honestly been put off by all the evangelism behind Agile, Extreme Programming and Test Driven Development towards using Unit Testing as some kind of silver bullet. Having been to a TDD &amp; Web Driver workshop session a few weeks ago  I was looking for a reason to start using unit tests, and this was the perfect opportunity.</p>
<p>I started by setting up JUnit in Eclipse and moving some of the sanity tests I already had into unit tests. I ran them locally through maven, and committed them. A few minutes later Hudson had detected a code-change in Subversion and built and ran the tests, and increased my score on the leader board. In a couple of days I went from 0% test coverage to 30% test coverage. At the same time I was fixing problems found by FindBugs and other plugins, and saw the code quality metrics climb steadily. It is actually a great feeling!</p>
<p>From a management perspective Hudson and Sonar can be a bonus or a scary peek into a bad code base, depending on management and of course depending on the quality of the code. But the good thing is that you can easily see where there is potential for improvement, and when things do improve it will make both developers and management happy!</p>
<p>So, if you want to motivate developers to improve their code quality, and make them feel better about it at the same time, the Continuous Integration Game combined with Sonar can be a very good motivator. If you get management on board then you have an extra reason to spend time on code quality issues.</p>
<p>Go play the code quality game!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2010/06/the-code-quality-game/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Update</title>
		<link>http://www.sickenger.com/2009/10/update/</link>
		<comments>http://www.sickenger.com/2009/10/update/#comments</comments>
		<pubDate>Sun, 18 Oct 2009 21:46:27 +0000</pubDate>
		<dc:creator>Ricki Sickenger</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.sickenger.com/?p=91</guid>
		<description><![CDATA[I guess this is the post where I say: Welcome to my new and improved website! I&#8217;ve had a long pause in writing anything in this blog. Mostly due to laziness, but other contributing factors have been Getting Darkfall Released, followed by Moving Back To Norway, and last but in no way least: Becoming a [...]]]></description>
			<content:encoded><![CDATA[<p>I guess this is the post where I say: <strong>Welcome to my new and improved website!</strong></p>
<p>I&#8217;ve had a long pause in writing anything in this blog. Mostly due to laziness, but other contributing factors have been Getting Darkfall Released, followed by Moving Back To Norway, and last but in no way least: Becoming a Dad for The Second Time. That&#8217;s a time-consuming trilogy.</p>
<p>Well, all that has happened, and now I am back. I fixed my website (yay WordPress!), and I am going to be writing bits and pieces here again. At some point soon I am also hoping to put my experiences in the making of Darkfall into a post. When I do, it will be posted here.</p>
<p>Anyway, until the next post:</p>
<p>Have fun and code hard!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sickenger.com/2009/10/update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

