<?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>CodeUtopia - The blog of Jani Hartikainen</title>
	<atom:link href="http://codeutopia.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeutopia.net/blog</link>
	<description>Software development with a focus on web-related technologies</description>
	<lastBuildDate>Thu, 02 Sep 2010 14:25:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>NetBeans Platform 6.9 Developer&#8217;s Guide review coming soon</title>
		<link>http://codeutopia.net/blog/2010/09/02/netbeans-platform-6-9-developer-guide-review-coming-soon/</link>
		<comments>http://codeutopia.net/blog/2010/09/02/netbeans-platform-6-9-developer-guide-review-coming-soon/#comments</comments>
		<pubDate>Thu, 02 Sep 2010 14:24:35 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Books]]></category>
		<category><![CDATA[Review]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=363</guid>
		<description><![CDATA[I have recently received a review copy of Jürgen Petri&#8217;s book, NetBeans Platform 6.9 Developer&#8217;s Guide, and I will be posting a review of it after I finish reading it in the coming weeks. You can check the book out on Packt&#8217;s store page. Some of you may recall I was also doing a review [...]]]></description>
			<content:encoded><![CDATA[<p><img style="float:right" src="http://codeutopia.net/blog-images/nb69devguide_s.jpg" alt="Cover" /> I have recently received a review copy of Jürgen Petri&#8217;s book, <a href="https://www.packtpub.com/netbeans-platform-6-9-developers-guide/book">NetBeans Platform 6.9 Developer&#8217;s Guide</a>, and I will be posting a review of it after I finish reading it in the coming weeks.</p>
<p>You can check the book out on <a href="https://www.packtpub.com/netbeans-platform-6-9-developers-guide/book">Packt&#8217;s store page</a>.</p>
<p>Some of you may recall I was also doing a review of <a href="http://codeutopia.net/blog/2009/10/12/going-to-review-zend-framework-18-web-application-development/">Zend Framework 1.8 Web Application Development</a>. This review was delayed becayse of me being the usual me and forgetting things, so I&#8217;d like to apologize to anyone who has been waiting for it. I&#8217;m going to post my review of it next week &#8211; I already have it written too and it just needs minor edits, so this time I&#8217;m not going to forget about it <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/09/02/netbeans-platform-6-9-developer-guide-review-coming-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Now you can write PHP code&#8230; without writing any code</title>
		<link>http://codeutopia.net/blog/2010/08/26/now-you-can-write-php-code-without-writing-any-code/</link>
		<comments>http://codeutopia.net/blog/2010/08/26/now-you-can-write-php-code-without-writing-any-code/#comments</comments>
		<pubDate>Thu, 26 Aug 2010 15:17:38 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=355</guid>
		<description><![CDATA[Yes, you heard that right! You can now code in PHP without having to write a single line of code &#8211; amazing, right? The application that makes this possible is called Lemon ADE, and it runs on the iPad. In this post I&#8217;ll go over how Lemon ADE works, and I have also recorded a [...]]]></description>
			<content:encoded><![CDATA[<p>Yes, you heard that right! You can now code in PHP without having to write a single line of code &#8211; amazing, right?</p>
<p>The application that makes this possible is called <strong>Lemon ADE</strong>, and it runs on the iPad. </p>
<p>In this post I&#8217;ll go over how Lemon ADE works, and I have also recorded a short video demonstrating coding with the app.</p>
<p><span id="more-355"></span></p>
<h3>How can you code PHP without coding?</h3>
<p>Lemon ADE is an <a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree">abstract syntax tree</a> editor. This is similar to what the PHP parser does when converting written PHP code into something it can execute.</p>
<p>I think the video is the best way to explain how the app works, so here it is:</p>
<p><object width="480" height="385"><param name="movie" value="http://www.youtube.com/v/HR6BUlS_Eig?fs=1&amp;hl=en_US"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/HR6BUlS_Eig?fs=1&amp;hl=en_US" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"></embed></object></p>
<h3>Lemon ADE features</h3>
<p>As you can see from the video, Lemon ADE has a list of blocks you use to create your code. It currently supports enough stuff for being actually able to write an application, but it&#8217;s lacking things such as classes or arrays.</p>
<p>Once you have managed to construct your application with it, you can export the code to an FTP server. The code itself isn&#8217;t always formatted very well, for example indentation occasionally breaks, but it outputs working PHP code.</p>
<p>From a usability standpoint, the application is quite easy to use once you get the hang of it. However, it becomes tedious when you have a lot of code, as the code becomes difficult to browse and even more difficult to find what you need from the entire mess.</p>
<h3>In closing</h3>
<p>While Lemon ADE is a pretty cool concept, it&#8217;s far from being actually useful for day-to-day programming. However, I think it has promise, so perhaps with further abstraction (so you need to type less and add fewer blocks) and UI modifications (so you can actually find things) it may become at least semi-useful one day.</p>
<p>Lemon ADE is a <a href="http://itunes.apple.com/us/app/the-lemon-ade/id369025015?mt=8#">free download for the iPad</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/08/26/now-you-can-write-php-code-without-writing-any-code/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Exceptions and abstraction</title>
		<link>http://codeutopia.net/blog/2010/08/14/exceptions-and-abstraction/</link>
		<comments>http://codeutopia.net/blog/2010/08/14/exceptions-and-abstraction/#comments</comments>
		<pubDate>Sat, 14 Aug 2010 21:30:23 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software design/architecture]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=330</guid>
		<description><![CDATA[So you already know how to handle your errors properly. Even if you&#8217;re already using exceptions, there are some nuances to the use of exceptions that are important to know and understand in order to write code that is easier to reuse and more decoupled. Let&#8217;s talk about exceptions and how they relate to your [...]]]></description>
			<content:encoded><![CDATA[<p>So you already know <a href="http://codeutopia.net/blog/2010/07/28/the-do-x-or-die-pattern-must-die/">how to handle your errors properly</a>. Even if you&#8217;re already using exceptions, there are some nuances to the use of exceptions that are important to know and understand in order to write code that is <em>easier to reuse</em> and <em>more decoupled</em>.</p>
<p>Let&#8217;s talk about exceptions and how they relate to your classes and abstraction.</p>
<p><span id="more-330"></span></p>
<h3>Classes and abstraction?</h3>
<p>You might already know what I will be referring to when I talk about abstraction, but for the sake of this article let&#8217;s establish a base:</p>
<p>Say you have a class for database access. Maybe it&#8217;s called <code>MysqlDatabase</code>. You could also have a <code>PostgreDatabase</code> class in addition.</p>
<p>These two classes abstract how you access these specific databases. They both have a <code>connect</code> method which takes the same arguments &#8211; essentially, all you need to know is that this is a database class which conforms to the specific interface (maybe you have a separate <code>IDatabase</code> interface)</p>
<h3>Okay, so what do exceptions have to do with this?</h3>
<p>Your database classes throw exceptions when something goes wrong. Let&#8217;s say they throw instances of the standard <code>Exception</code>. When using these classes you catch this type of exception. Easy!</p>
<p>Let&#8217;s add another class to the mix. Say it&#8217;s some class which uses the database to fetch some specific sort of objects &#8211; let&#8217;s call it <code>FooRepository</code>. We would like to handle exceptions from the database and from the new class nicely, so we add a new exception type, <code>MysqlException</code>.</p>
<p>Now our MySQL class is throwing MySQL exceptions.</p>
<p>But now you decide to use PostgreSQL and you must change all your code to catch <code>PostgreException</code>s.</p>
<p>You also must change all code using <ocde>FooRepository</code>, because any code using it may have to deal with a database exception coming from this class.</p>
<p>Now that we know what will go wrong with our plan, how do we fix this? </p>
<p><strong>There are two ways to improve this situation</strong></p>
<ul>
<li>Designing our exception classes better</li>
<li>Wrapping less relevant exceptions</li>
</ul>
<p>Let's look at these next...</p>
<h3>Designing exception classes better</h3>
<p>Firstly, to combat the issue we face when swapping the implementation of the database connection classes...</p>
<p>To fix this, we can use inheritance to our benefit: Create a base exception type, from which the implementation-specific exceptions inherit from.</p>
<p>Say we create a base <code>DatabaseException</code> class, and both <code>MysqlException</code> and <code>PostgreException</code> inherit from it. Now we can just catch a <code>DatabaseException</code> in our catch-block. Easy fix while keeping all the benefits.</p>
<h3>Wrapping less relevant exceptions</h3>
<p>When you have a class with a collaborator, or multiple collaborators, we face the problem of having to catch all sorts of exceptions in our user code. Our user code may not even care that the class we are using uses the database (or maybe the filesystem), and as such, we should do something to hide this fact in our exceptions too.</p>
<p>A very good example is that our <code>FooRepository</code> class uses the database, and as such, you would need to catch database exceptions when using it. But what if we changed the implementation of FooRepository so, that it uses a web service or perhaps the filesystem? We would again need to change all our code using this class to catch the new possible exceptions.</p>
<p>To fix this sort of thing, we must make sure to catch everything in <code>FooRepository</code>, and wrap them into a <code>RepositoryException</code>. This way code which uses the repository will only need to be aware of and catch the repository-specific exception.</p>
<p>In most languages, we can do something like this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">try <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Do something with the DB which may throw an exception</span>
    <span style="color: #000088;">$db</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">doSomething</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
catch<span style="color: #009900;">&#40;</span>DatabaseException <span style="color: #000088;">$ex</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">//Wrap the exception in another to keep abstraction</span>
    throw <span style="color: #000000; font-weight: bold;">new</span> RepositoryException<span style="color: #009900;">&#40;</span><span style="color: #000088;">$ex</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<h3>Conclusion</h3>
<p>To use exceptions in an efficient way we must consider the whole application and not just the immediate code.</p>
<p>Give your exceptions base classes they inherit from - this will make it easier to write reusable code, especially if you're using something like the <a href="http://en.wikipedia.org/wiki/Adapter_pattern">adapter pattern</a>.</p>
<p>Make sure you catch and wrap exceptions of objects you use. This may seem a bit pointless occasionally, but as with using inheritance to your advantage, this will make your code easier to use.</p>
<p>Both of these approaches will also help in decoupling your code - you can make changes without having to change everything using the code.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/08/14/exceptions-and-abstraction/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The &#8220;do X or die()&#8221; pattern must die</title>
		<link>http://codeutopia.net/blog/2010/07/28/the-do-x-or-die-pattern-must-die/</link>
		<comments>http://codeutopia.net/blog/2010/07/28/the-do-x-or-die-pattern-must-die/#comments</comments>
		<pubDate>Wed, 28 Jul 2010 16:33:21 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software design/architecture]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=332</guid>
		<description><![CDATA[What&#8217;s the most common pattern for error handling you see in beginner&#8217;s PHP code? &#8211; That&#8217;s right, do_X() or die('do_X failed);. That&#8217;s nice and all, as at least you have some sort of error handling, but I think this way of handling errors must go. There is no place for it in modern PHP code [...]]]></description>
			<content:encoded><![CDATA[<p>What&#8217;s the most common pattern for error handling you see in beginner&#8217;s PHP code? &#8211; That&#8217;s right, <code>do_X() or die('do_X failed);</code>. </p>
<p>That&#8217;s nice and all, as at least you have some sort of error handling, but I think this way of handling errors must go. There is no place for it in modern PHP code &#8211; it&#8217;s the worst way to handle errors, not much better than not handling them at all.</p>
<p><span id="more-332"></span></p>
<h3>Background</h3>
<p>So you are a newbie and want to learn how to do MySQL in PHP.</p>
<p>Okay, let&#8217;s do a google search: PHP MySQL tutorial</p>
<p>I&#8217;ll let you guess how many of the first 10 use &#8220;or die()&#8221; to catch failing queries.</p>
<p>One?</p>
<p>Nope.</p>
<p>Five?</p>
<p>Nope.</p>
<p><strong>All ten of them use &#8220;or die&#8221;!</strong> (and some even use the <a href="http://php.net/manual/en/language.operators.errorcontrol.php">evil error eating @ operator</a>)</p>
<p>So is it any wonder why it is so common? </p>
<p>If you&#8217;re a beginner, I&#8217;m not blaming you &#8211; how could you know of a better way if everything you can find talks about the bad way to do it?</p>
<p>How hard can it be to do error handling properly?</p>
<h3>Never use die()</h3>
<p>So why is <code>die()</code> so bad?</p>
<p>For starters, it may be a decent approach. However, when the size of the codebase grows, it becomes more and more difficult to locate problems.</p>
<p>If your code dies, you won&#8217;t know the line. You won&#8217;t know the function, and not the file. You won&#8217;t be able to graciously handle the error either &#8211; The application will just stop right there, right then.</p>
<p>There are two other approaches that are better:</p>
<ul>
<li><code>trigger_error</code> (or <code>user_error</code>)</li>
<li>Exceptions</li>
</ul>
<h3>trigger_error</h3>
<p><a href="http://php.net/trigger_error">trigger_error</a> is, in a way, the next step from <code>die()</code>. Despite being the obvious next step, it&#8217;s still a much better approach.</p>
<ol class="biggerMargins">
<li>You&#8217;ll get better output: Not only will it show you the line number, it will tell you the filename too, so you know where to look. Even better, if you have <a href="http://www.xdebug.org/">Xdebug</a>, you&#8217;ll get stack traces and other useful information.</li>
<li>You will actually get output in the error log from this one.</li>
<li>You can &#8220;catch&#8221; errors triggered by code using <a href="http://php.net/manual/en/function.set-error-handler.php">set_error_handler</a>. This will allow you to maybe automatically display a nice &#8220;oops something went wrong&#8221; type of page or other such stuff</li>
</ol>
<p>And perhaps also good is that you can use trigger_error in a very similar fashion as die:<br />
<code>do_X() or trigger_error('I have a boo boo', E_USER_ERROR);</code> </p>
<p>This makes it very easy to make the jump to better error handling, and it can even be done with relative ease with an automatic search and replace.</p>
<h3>Exceptions</h3>
<p><a href="http://php.net/Exceptions">Exceptions</a> are in my opinion <em>the</em> way to handle errors. </p>
<ol class="biggerMargins">
<li>Exceptions are flexible: You can have use the standard exceptions or create custom ones to better describe the error.</li>
<li>They can convey extra information: A custom exception class can, for example, include additional fields &#8211; it is an object afterall</li>
<li>Using a try-catch block, you can easily handle exceptions on a case-by-case basis, making it easy to choose how to recover from specific exceptions.</li>
</ol>
<p>Of course, the benefits mentioned for trigger_error also apply: Uncaught exceptions will provide good output (and better with Xdebug) and will cause output in the error log.</p>
<p>The only downside of using exceptions is that it&#8217;ll make your code a little more verbose. Except I lied when I said it&#8217;s a downside &#8211; more verbose code can be a good thing too.</p>
<h3>Conclusion</h3>
<p>Stop using <code>or die()</code> to handle errors.</p>
<p>Using either of the approaches mentioned here is much, much better. You&#8217;ll get output that makes it much easier to debug your code, the error log will actually become useful and you can handle your error cases much better in code, so that the application will not crap on the user.</p>
<p>You have no reason to use die() when encountering an error.</p>
<p>ps: Never make your error message say &#8220;I have a boo boo&#8221; <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/07/28/the-do-x-or-die-pattern-must-die/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Wicket from the point of view of a PHP developer</title>
		<link>http://codeutopia.net/blog/2010/07/14/wicket-from-the-point-of-view-of-a-php-developer/</link>
		<comments>http://codeutopia.net/blog/2010/07/14/wicket-from-the-point-of-view-of-a-php-developer/#comments</comments>
		<pubDate>Wed, 14 Jul 2010 14:55:10 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=324</guid>
		<description><![CDATA[Not long ago, I had to learn some Wicket. What is that? In this case it has nothing to do with cricket &#8211; The Wicket I&#8217;m talking about is a Java web application framework. I&#8217;ve mostly used PHP and Python to do server-side web application sort of programming. Compared to what I&#8217;m used to, Wicket [...]]]></description>
			<content:encoded><![CDATA[<p>Not long ago, I had to learn some Wicket. What is that? In this case it has nothing to do with cricket &#8211; The Wicket I&#8217;m talking about is a Java web application framework.</p>
<p>I&#8217;ve mostly used PHP and Python to do server-side web application sort of programming. Compared to what I&#8217;m used to, Wicket is <em>way</em> different. </p>
<p>Read on to find out about a different way to develop web applications.</p>
<p><span id="more-324"></span></p>
<h3>My starting point</h3>
<p>My starting point with Wicket was basically zero, at least Java-wise: I had never used any Java web app framework, so I didn&#8217;t really know what to expect.</p>
<p>Since as I said I&#8217;ve mostly used PHP and Python, I assumed the program flow would be something like in them:</p>
<ul>
<li>Bootstrap</li>
<li>Routing etc. handled by framework, goes to a controller</li>
<li>Controller checks things like whether this is a POST or a GET, maybe decides to load data from models</li>
<li>View is rendered. PHP or a template language is used to print values from controller in the view</li>
</ul>
<p>Of course, this was a completely wrong assumption.</p>
<h3>Form submit: PHP vs. Wicket</h3>
<p>Wicket in my experience has much more in common with traditional desktop application frameworks than with web stuff. Whether this is a pro or a con, I can&#8217;t say at this point.</p>
<p>Consider a very typical case of handling a form. What I had done before it was something like this:</p>
<ul>
<li>Is this POST? If so, save stuff</li>
<li>Display form, with values from POST if there was a validation error</li>
</ul>
<p>In Wicket, it works something like this:</p>
<ul>
<li>Display form</li>
</ul>
<p>Of course, there is a bit more to it than just that.</p>
<p>First, we would create the HTML markup. In PHP, you typically would just put a bunch of echo statements here to display values. Wicket however does things completely differently: You add special attributes to the tags &#8211; in the case of a form, we would add wicket ID attributes to the form element and any fields and buttons we might have. </p>
<p>Next, we tell Wicket what components our page has. The reason we put special ID attributes into the markup is so that Wicket knows what elements to associate with which components. So we tell Wicket that we want a form component, input components for input fields, and a button for the submit button. We can also add validators to each component. Also needed is a model, which for sake of simplicity you can assume is a bunch of key-value pairs automatically serialized to some storage (You can actually have something like this pretty easily).</p>
<p>In PHP we would typically tell the view object what values to assign to variables that we echo in the form. We might also test if the method is POST and perform validation and model stuff there.</p>
<p>In Wicket we don&#8217;t need to give the form an action and we don&#8217;t need to check whether the form was submitted or anything &#8211; Wicket does all this for us. The model can even persist things automatically without us having to lift a finger.</p>
<p>So if you compare this explanation (which is not very in depth), it is a lot like a desktop application in Wicket. We don&#8217;t tell it anything about the web stuff that happens around it &#8211; we just tell it that this is how our document looks and this is how our document behaves. In Windows Forms, you tell the same things. In PHP you need to take care of the logic of the web too, such as handling POST or determining the URL where the form needs to be submitted for it to work.</p>
<h3>Conclusion</h3>
<p>Wicket is a lot like desktop app development, since you work with components &#8211; in desktop apps, you work with controls. Desktop developers don&#8217;t need to worry about where stuff goes when the page changes, saving the state, because there are no page changes. Wicket developers don&#8217;t need to worry about that either, because Wicket persists things &#8211; in a somewhat similar fashion to PHP&#8217;s session storage, but automatically and much more extensively.</p>
<p>I was working with Wicket in a portlet environment, so I probably didn&#8217;t see all of basic Wicket stuff. Also bear in mind that I only have little experience working with Wicket, so there probably is more than just this.</p>
<p>One case where Wicket&#8217;s automatic state persistence and other features might be useful is web applications where you perform actions with multiple steps. Other than this, it does feel somewhat heavy, and occasionally repetitive for the markup and component parts.</p>
<p>Nevertheless, it is an interesting way to do things and if you have the chance, I&#8217;d recommend giving it a shot.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/07/14/wicket-from-the-point-of-view-of-a-php-developer/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>How to learn from Stack Overflow without asking questions</title>
		<link>http://codeutopia.net/blog/2010/07/08/how-to-learn-from-stack-overflow-without-asking-questions/</link>
		<comments>http://codeutopia.net/blog/2010/07/08/how-to-learn-from-stack-overflow-without-asking-questions/#comments</comments>
		<pubDate>Thu, 08 Jul 2010 00:50:12 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=318</guid>
		<description><![CDATA[Stack Overflow is great for finding answers to programming questions. But did you know it&#8217;s good for learning even if you don&#8217;t ask any questions &#8211; just answer them? You may be familiar with Code Katas &#8211; basically small programming challenges &#8211; which I&#8217;ve seen pop up a lot lately. To solve a Code Kata [...]]]></description>
			<content:encoded><![CDATA[<p>Stack Overflow is great for finding answers to programming questions.</p>
<p>But did you know it&#8217;s good for learning even if you don&#8217;t ask any questions &#8211; just answer them?</p>
<p><span id="more-318"></span></p>
<p>You may be familiar with <a href="http://en.wikipedia.org/wiki/Code_Kata">Code Katas</a> &#8211; basically small programming challenges &#8211; which I&#8217;ve seen pop up a lot lately.</p>
<p>To solve a Code Kata (I never bothered <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ) you need to exercise your knowledge and maybe learn new things.</p>
<p>Heck, to solve <strong>any programming problem</strong> you have to exercise your knowledge and maybe learn new things.</p>
<p>This also applies to answering questions on Stack Overflow. You actually have to think about the problem at hand and come up with a good solution &#8211; assuming you actually want to answer the question properly. </p>
<p>You could even go as far as pick tags you want to learn more about and try answering those questions.</p>
<p>So one more thing to keep everyone using SO. It&#8217;s great for finding answers, somehow addictive <em>and</em> you even learn things by just answering!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/07/08/how-to-learn-from-stack-overflow-without-asking-questions/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Unity: The best game development platform?</title>
		<link>http://codeutopia.net/blog/2010/07/01/unity-the-best-game-development-platform/</link>
		<comments>http://codeutopia.net/blog/2010/07/01/unity-the-best-game-development-platform/#comments</comments>
		<pubDate>Thu, 01 Jul 2010 15:29:46 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=313</guid>
		<description><![CDATA[One day I saw a webpage which had some game, and wanted me to download the Unity web player plugin for my browser. I thought &#8220;What crap is this? I&#8217;m not going to install it!&#8221;. That was stupid, because Unity rocks as a game development tool! Why Unity rocks (in my opinion) In a matter [...]]]></description>
			<content:encoded><![CDATA[<p>One day I saw a webpage which had some game, and wanted me to download the Unity web player plugin for my browser.</p>
<p>I thought &#8220;What crap is this? I&#8217;m not going to install it!&#8221;. That was stupid, because Unity rocks as a game development tool!</p>
<p><span id="more-313"></span></p>
<h3>Why Unity rocks (in my opinion)</h3>
<p>In a matter of a few hours, I wrote a third person shooter prototype. </p>
<p>Of course, this was after I spent some days to get familiar with the environment. </p>
<p>The basic features my game had in about 8 or so hours:</p>
<ul>
<li>3D 3rd person &#8220;over the shoulder&#8221; camera</li>
<li>Enemies who moved around</li>
<li>The enemies could smartly aim at your current location</li>
<li>A spawner system where I could place a spawner object anywhere and it would automatically spawn more enemies</li>
<li>A waypoint based movement system</li>
<li>A simple user interface which displayed health and some other stuff</li>
</ul>
<h3>What is Unity?</h3>
<p><a href="http://unity3d.com/">Unity</a> is basically a game engine with an IDE sort of editor tool. It can be used to develop games for multiple platforms and the web (which uses their browser plugin).</p>
<p>It has a fast 3D engine, a PhysX based physics engine and libraries to work with all sorts of things you might need when developing a game (GUI, collisions, even multiplayer is quite straightforward to do).</p>
<p>The editor itself is kind of like a level editor for a 3D game &#8211; think Valve Hammer or WorldCraft &#8211; but it also has an asset list, scenes, input management etc. quite easily straight from the UI.</p>
<p>Oh, and did I mention it also works on Macs and not just Windows, and that you can write scripts for your game in JavaScript, C# or Boo?</p>
<h3>If you develop games, for fun or for profit, Unity is worth checking out</h3>
<p>Now I&#8217;m not very familiar with other 3D game engines, but Unity is the best I&#8217;ve seen. It does require some getting used to, especially how the scripts are attached into the game, but I can&#8217;t really think of many bad things about it.</p>
<p>ps: I&#8217;m not going to attach a screenshot of my game because it&#8217;s basically just a bunch of boxes. I&#8217;m not a 3D modeller, sorry <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/07/01/unity-the-best-game-development-platform/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Refactoring explained to an absolute beginner</title>
		<link>http://codeutopia.net/blog/2010/06/26/refactoring-explained-to-an-absolute-beginner/</link>
		<comments>http://codeutopia.net/blog/2010/06/26/refactoring-explained-to-an-absolute-beginner/#comments</comments>
		<pubDate>Sat, 26 Jun 2010 16:46:54 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Refactoring]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=307</guid>
		<description><![CDATA[Recently while on a drive with a non-programmer friend, I talked with him about code complexity and manageability, how very complicated code is detrimental to productivity and stuff like that. Later on, I decided to explain it to him with actual code examples, although the most he has ever done was some HTML back in [...]]]></description>
			<content:encoded><![CDATA[<p>Recently while on a drive with a non-programmer friend, I talked with him about code complexity and manageability, how very complicated code is detrimental to productivity and stuff like that. </p>
<p>Later on, I decided to explain it to him with actual code examples, although the most he has ever done was some HTML back in elementary school.</p>
<p>Here&#8217;s what I told him&#8230;</p>
<p><span id="more-307"></span></p>
<h3>A simple example with HTML, PHP and SQL</h3>
<p>I used HTML, PHP and SQL to create a very simple example: A simple webpage which displays a list of things loaded from a database.</p>
<p>The reason I chose these three is because they allowed me to present a very simple example, but still would allow me to create a scenario where it would be easy to show how code can become complex, and how you would change it to improve.</p>
<h3>Stage 1: HTML/PHP/SQL-soup</h3>
<p>The first stage is the most straightforward way you could do this:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;html&gt;
 &lt;head&gt;
  &lt;title&gt;Listing&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
  &lt;h1&gt;List&lt;/h1&gt;
  <span style="color: #000000; font-weight: bold;">&lt;?php</span>
  <span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'database'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM lista ORDER BY id DESC'</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000000; font-weight: bold;">?&gt;</span>
  &lt;ul&gt;
    <span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;li&gt;'</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$row</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;/li&gt;'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #000000; font-weight: bold;">?&gt;</span>
  &lt;/ul&gt;  
 &lt;/body&gt;
&lt;/html&gt;
<span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">mysql_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></div></div>

<p>So in this example, we have a page that is very typical for a PHP beginner: It mixes everything together in one file.</p>
<h3>Stage 2: Split output and data processing</h3>
<p>To improve from stage 1, we can split the processing of data and output. We do this to achieve <a href="http://en.wikipedia.org/wiki/Separation_of_concerns">separation of concerns</a>.</p>
<p>This time, we have two files: index.php and a template file index.phtml</p>
<p><strong>index.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'localhost'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'username'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'database'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM lista ORDER BY id DESC'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$list</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$list</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #990000;">mysql_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">require</span> <span style="color: #0000ff;">'index.phtml'</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>index.phtml</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&lt;html&gt;
 &lt;head&gt;
  &lt;title&gt;Listing&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
  &lt;h1&gt;List&lt;/h1&gt;
  &lt;ul&gt;
   <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$list</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
    &lt;li&gt;<span style="color: #000000; font-weight: bold;">&lt;?=</span> <span style="color: #000088;">$item</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'name'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/li&gt;
   <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
  &lt;/ul&gt;  
 &lt;/body&gt;
&lt;/html&gt;</pre></div></div>

<p>As you can see, now our data processing code is in index.php and the HTML markup is in the index.phtml template file. It&#8217;s now much more clear what the structure of our HTML markup is (and we could now reuse it etc.)</p>
<h3>Stage 3: Reusable functions</h3>
<p>We can still perform some improvements to the code. Let&#8217;s extract the data processing code into separate functions. By doing this, we will improve the readability of the index.php file and if needed, we could easily reuse the data processing code.</p>
<p>We will create a new file, called database.php, which will include our functions:</p>
<p><strong>database.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000000; font-weight: bold;">function</span> connect_db<span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$host</span><span style="color: #339933;">,</span> <span style="color: #000088;">$dbname</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_connect</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">,</span> <span style="color: #000088;">$pass</span><span style="color: #339933;">,</span> <span style="color: #000088;">$host</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #990000;">mysql_select_db</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dbname</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$db</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">function</span> get_list<span style="color: #009900;">&#40;</span><span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$sql</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'SELECT * FROM lista ORDER BY id DESC'</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$sql</span><span style="color: #339933;">,</span> <span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #000088;">$list</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$row</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_fetch_assoc</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$list</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$row</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #b1b100;">return</span> <span style="color: #000088;">$list</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>We will also change index.php to reflect the extraction of the code:</p>
<p><strong>index.php</strong></p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require</span> <span style="color: #0000ff;">'database.php'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$db</span> <span style="color: #339933;">=</span> connect_db<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'user'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'pass'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'address'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'database'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$list</span> <span style="color: #339933;">=</span> get_list<span style="color: #009900;">&#40;</span><span style="color: #000088;">$db</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">require</span> <span style="color: #0000ff;">'index.phtml'</span><span style="color: #339933;">;</span></pre></div></div>

<p>As you can now see, the code is much easier to understand as we can clearly see from the function naming what it does and the index.php file is also much shorter.</p>
<h3>Conclusion</h3>
<p>By splitting code into their separate places, you can easily improve your code. You don&#8217;t need to be a rocket scientist to understand the basic points.</p>
<p>I did omit some things here, though: in reality I did give a brief introduction of HTML, PHP and SQL to my friend, and gave him an example of how the resulting page would look and stuff like that. Oh, we used Google Wave for it, and it worked pretty well, so maybe it isn&#8217;t as useless as it sometimes seems <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/06/26/refactoring-explained-to-an-absolute-beginner/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>The best old &#8220;indie&#8221; games</title>
		<link>http://codeutopia.net/blog/2010/06/19/the-best-old-indie-games/</link>
		<comments>http://codeutopia.net/blog/2010/06/19/the-best-old-indie-games/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 12:28:52 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Games]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=297</guid>
		<description><![CDATA[Just for fun, here&#8217;s a list of the best old shareware/freeware games I played before Windows XP and such even existed&#8230; The word indie is quoted because these games would probably be called that nowadays, but weren&#8217;t back then Finnish games Slicks &#8216;n&#8217; Slide &#8211; A great top-down racer with a track editor. I made [...]]]></description>
			<content:encoded><![CDATA[<p>Just for fun, here&#8217;s a list of the best old shareware/freeware games I played before Windows XP and such even existed&#8230; The word indie is quoted because these games would probably be called that nowadays, but weren&#8217;t back then <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><span id="more-297"></span></p>
<h3>Finnish games</h3>
<ul class="biggerMargins">
<li><a href="http://www.digitalfootmark.com/?pr=slix">Slicks &#8216;n&#8217; Slide</a> &#8211; A great top-down racer with a track editor. I made a similar <a href="http://widgets.opera.com/widget/5681/">JavaScript based top down racer</a>.</li>
<li><a href="http://en.wikipedia.org/wiki/Triplane_Turmoil_series">Triplane Turmoil</a> &#8211; Side-scrolling multiplayer shooting with triplanes</li>
<li><a href="http://koti.mbnet.fi/~mvirpioj/wings/index.html">Wings</a> &#8211; Side-scrolling cave flying shooter with tons of weapons and maps etc. etc.</li>
<li><a href="http://www.youtube.com/watch?v=SCnUH5gqBb8&#038;">Minebombers</a> &#8211; Top-down shooter, a combination of bomberman and miner</li>
<li><a href="http://www.youtube.com/watch?v=hqyEjCU3-6A">Tapan Kaikki</a> &#8211; Top-down shooter</li>
<li><a href="http://www.youtube.com/watch?v=KE2XtQaMb5I">Liero</a> &#8211; Side-scrolling shooter where you are a worm and as usual the goal is to kill the other worms</li>
<li>Koiratappelu &#8211; Couldn&#8217;t find anything in english about this. This game was a bit like Triplane Turmoil</li>
<li>Areena 4 &#8211; As with Koiratappelu couldn&#8217;t find anything about this in english either. A great strategy game where you manage a team of gladiators in a fantasy world and fight in different leagues to be the best.</li>
<li><a href="http://www.pelikulma.net/pelit/raiskinta-ja-actionpelit/duck-mr-duck/">Duck, Mr. Duck</a> (in finnish, has a screenshot) &#8211; A very Worms-like turn-based shooter, except this time you are a duck.</li>
<li><a href="http://www.dosgamesonline.com/index/game/551/Alien_Phobia.html">Alien Phobia</a> &#8211; Top-down shooter, simple and fun: The only goal is to survive against an endless flood of aliens out to kill you. There is also <a href="http://www.redlynx.com/phobiaIII/download.html">Alien Phobia III</a>.</li>
</ul>
<h3>Others</h3>
<ul class="biggerMargins">
<li><a href="http://www.youtube.com/watch?v=6ULVtCOfbns">Action Supercross</a> &#8211; Possibly one of the first good physics based games? Side-scrolling motocross puzzle game</li>
<li><a href="http://www.dosgames.com/ss.php?filename=assaulttrooper.gif">Assault Trooper</a> &#8211; Isometric shooter</li>
<li><a href="http://en.wikipedia.org/wiki/C-Dogs">C-Dogs</a> &#8211; Isometric shooter with two-player support and I think there also was a map editor</li>
</ul>
<h3>What&#8217;s your favorite?</h3>
<p>I spent countless hours playing the above games, although there probably were others that I forgot about.</p>
<p>Share your favorite old games in the comments <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/06/19/the-best-old-indie-games/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Blog moved</title>
		<link>http://codeutopia.net/blog/2010/06/12/blog-moved/</link>
		<comments>http://codeutopia.net/blog/2010/06/12/blog-moved/#comments</comments>
		<pubDate>Sat, 12 Jun 2010 13:04:34 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/?p=293</guid>
		<description><![CDATA[If you see this it means everything has now been moved and the DNS has propagated correctly Please let me know if anything appears broken (Leave a comment or contact me via email/IM)]]></description>
			<content:encoded><![CDATA[<p>If you see this it means everything has now been moved and the DNS has propagated correctly <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Please let me know if anything appears broken (Leave a comment or <a href="http://codeutopia.net/blog/contact/">contact me via email/IM</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/06/12/blog-moved/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
