<?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 &#187; general</title>
	<atom:link href="http://codeutopia.net/blog/tag/general/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>6 programming project mistakes you should avoid</title>
		<link>http://codeutopia.net/blog/2010/01/28/6-programming-project-mistakes-you-should-avoid/</link>
		<comments>http://codeutopia.net/blog/2010/01/28/6-programming-project-mistakes-you-should-avoid/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 16:45:34 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2010/01/28/6-programming-project-mistakes-you-should-avoid/</guid>
		<description><![CDATA[During my adventures in programming, I&#8217;ve been involved in many projects. Luckily, despite having made some mistakes, they&#8217;ve gone quite well. Here are a few of them, with tips on how to avoid making them yourself. No version control This is a pretty bad one! I&#8217;m glad I learned to use SVN at an early [...]]]></description>
			<content:encoded><![CDATA[<p>During my adventures in programming, I&#8217;ve been involved in many projects. Luckily, despite having made some mistakes, they&#8217;ve gone quite well. Here are a few of them, with tips on how to avoid making them yourself.</p>
<p><span id="more-278"></span></p>
<h3>No version control</h3>
<p>This is a pretty bad one! I&#8217;m glad I learned to use SVN at an early age&#8230; <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Always use version control in your projects. Be it Git, SVN or even CVS, as long as you use something. It&#8217;ll help you avoid a thousand problems!</p>
<p>Here&#8217;s some of my <a href="http://codeutopia.net/blog/tag/git/">posts about Git</a>.</p>
<h3>No plan</h3>
<p>It may feel like just having a general idea (eg. &#8220;Hey, let&#8217;s make a forum!&#8221;) is alright, but it isn&#8217;t.</p>
<p>With no plan or roadmap, your project may easily derail into more and more new features, never actually getting anything finished.</p>
<p>Always try to create some kind of a plan that includes the features you want. Make it a Word document, or even better, put it in a tool like Trac or JIRA where you can easily track what you are working on. Not only will this give you a clearer image of what needs to be done, it can be useful to see what you have already accomplished so far.</p>
<h3>No schedule</h3>
<p>You may have a plan, but do you have a schedule?</p>
<p>Scheduling is as important as having a plan in the first place. Without a schedule, the project may easily keep going endlessly, with very little progress as nobody cares as there are no deadlines.</p>
<p>I have to admit that even now there&#8217;s a project I&#8217;m working on, without a proper schedule, which has been going on way longer than it should. I plan to fix that, though!</p>
<h3>No release strategy</h3>
<p>What&#8217;s a release strategy? This may not be the correct term, as I just made this up, but I think it&#8217;s quite descriptive: It includes how often you want to do releases and the steps involved in making a release.</p>
<p>The most basic requirement is to have a build/deployment script. A single command you, or anyone in your team, can run to completely build and deploy your application. This is important because a minor mistake can cause problems.</p>
<p>How often have you forgot to upload a file to the server when deploying? I bet the number is bigger than zero. Now think how many steps there is even in a simple deployment.. Sending files, setting up the database, maybe installing a default user&#8230;</p>
<p>How often you do releases can be important too. For example, in Scrum you develop in sprints and in the end of each sprint is a natural point to make a release with the features chosen for the sprint.</p>
<p>Tools such as <a href="http://ant.apache.org/">Ant</a> can be used to create build and deployment scripts.</p>
<h3>Developmestruction</h3>
<p>Not having a separate development and production environment is a recipe for disaster, especially if your application is being used in the real world at the same time as development is happening.</p>
<p>I&#8217;m a guilty of doing this, but luckily the applications weren&#8217;t being used by more than a handful of internal users.</p>
<p>Always perform development on separate machine(s) than the actual production deployment. This ensures the production system should stay relatively intact (unless your deployment screws up or you introduce more bugs). </p>
<p>Additionally, having a staging environment can be a good idea. This should usually be on similar hardware and software as production, as this will allow you to test-drive your code on a realistic setup before pushing it to production.</p>
<h3>Not using Test Driven Development</h3>
<p>This may not be the most critical problem, but I think it&#8217;s important nevertheless.</p>
<p>By having a good test-suite, you can ensure you don&#8217;t introduce regressions and that your code works at least as well as your tests were written.</p>
<p>For some reading on testing, check out <a href="http://codeutopia.net/blog/2009/08/17/unit-testing-essentials/">unit testing essentials</a> and <a href="http://codeutopia.net/blog/2009/08/14/how-to-make-your-code-testable/">How to make your code testable</a> in this blog.</p>
<h3>Post your tips/mistakes in the comments</h3>
<p>If you have any tips/mistakes of your own, please share them in the comments. I&#8217;m still learning too, so they would be great additions to this list.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2010/01/28/6-programming-project-mistakes-you-should-avoid/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Common programming errors and how to avoid them</title>
		<link>http://codeutopia.net/blog/2009/10/08/common-programming-errors-and-how-to-avoid-them/</link>
		<comments>http://codeutopia.net/blog/2009/10/08/common-programming-errors-and-how-to-avoid-them/#comments</comments>
		<pubDate>Thu, 08 Oct 2009 17:02:16 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[error-challenge]]></category>
		<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2009/10/08/common-programming-errors-and-how-to-avoid-them/</guid>
		<description><![CDATA[Back in august, I introduced the error tracking challenge. While it didn&#8217;t get as much participation as I had hoped for, I did manage to collect some results. In this post, I&#8217;ll go through the most common ones, and suggest some approaches to avoiding them. Suggest your own errors and tips in the comments! Boolean [...]]]></description>
			<content:encoded><![CDATA[<p>Back in august, I introduced the <a href="http://codeutopia.net/blog/2009/08/24/reader-challenge-keep-track-of-code-errors/">error tracking challenge</a>. While it didn&#8217;t get as much participation as I had hoped for, I did manage to collect some results.</p>
<p>In this post, I&#8217;ll go through the most common ones, and suggest some approaches to avoiding them. Suggest your own errors and tips in the comments!</p>
<p><span id="more-261"></span></p>
<h3>Boolean logic errors</h3>
<p>This was the most commonly encountered problem. I have also made mistakes with boolean logic more than enough times.</p>
<p>Boolean logic errors usually manifest in if-else statements, as they are the main pieces of code where you may run into complex statements to determine what to execute.</p>
<p>There are various ways to avoid these, ranging from utilizing OOP better to splitting up conditions to multiple statements:</p>
<ul class="biggerMargins">
<li><b>Split conditionals into multiple statements</b>: As this tip&#8217;s name says, split your complex conditionals over multiple statements. Not only will they be more readable, they can convey the meaning much better.

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">level</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bannedUsers</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> 
  <span style="color: #000088;">$page</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'index'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//vs</span>
&nbsp;
<span style="color: #000088;">$isMainPage</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$page</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'index'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$notBanned</span> <span style="color: #339933;">=</span> <span style="color: #339933;">!</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$bannedUsers</span><span style="color: #339933;">,</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">id</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$loggedIn</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$user</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">level</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$loggedIn</span> <span style="color: #339933;">&amp;&amp;</span> <span style="color: #000088;">$notBanned</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> <span style="color: #000088;">$isMainPage</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>I had a better example in mind from some recent code I modified, but I forgot it. However, this kind of made-up looking example still demonstrates the point &#8211; as you can see, the condition is much cleaner and it&#8217;s quite obvious what the requirements for the if-clause passing are.</p>
<p>In fact, while writing the above example, I almost made a logic mistake.
</li>
<li><b>Utilize OOP and polymorphism better</b>: Often an if-else may be used to determine some course of action. In many cases, this could simply be abstracted into a class, and the concrete implementation of it would determine the course of action, without the calling code needing to use if-elses.
<p>There&#8217;s a <a href="http://googletesting.blogspot.com/2008/12/by-miko-hevery-google-tech-talks.html">great Google Tech Talk about Inheritance and polymorphism</a> which shares a great deal of information on how to avoid conditionals completely.</li>
</ul>
<h3>Typos or unintentional omissions</h3>
<p>Typos and omissions are some of the most common issues people told me about. Typos should be quite obvious: Misspelled variable names, function names and such. Unintentional omissions may be a little less clear at first &#8211; By omissions, I mean things like forgetting to remove debug statements, forgetting to upload a file or other things like that.</p>
<p>I&#8217;ve grouped these two mistakes under the same headline, as they belong in the same category: Mistakes caused by not paying enough attention, or in other words, being sloppy. Another cause is plain and simple forgetfulness.</p>
<p>While these two aren&#8217;t always very fatal mistakes, they can be problematic and annoying. For example if you check in code with typos or omissions to source-control and your coworkers get broken code.</p>
<p>How to avoid typos?</p>
<ul class="biggerMargins">
<li><b>Use a programmer&#8217;s editor or an IDE</b>. They will often support code-completion and are often able to highlight misspelled names</li>
<li><b>Write slower</b>: While this sounds really obvious, you might not really need to type that fast. While I personally take some pride in being a fast typist, sometimes it&#8217;s just difficult to write things correctly when you&#8217;re simultaneously thinking about things like implementation details or how to name your variables etc.</li>
<li><b>Become a better typist</b>: The opposite to the above, by becoming a better typist you can write faster and make less mistakes. While learning to be a fast writer may not rank very high on your to-do list, there are ways to make it quite fun. A good example is <a href="http://en.wikipedia.org/wiki/Typing_of_the_Dead">Typing of the dead</a></li>
<li><b>Get a better keyboard</b>: Your keyboard may not be bad per-se, but perhaps you&#8217;d be more comfortable typing with a different one? I&#8217;ve noticed some changes in my correctness after getting a Logitech Wave keyboard to replace my aging Microsoft Multimedia Keyboard</li>
</ul>
<p>A reader also suggested learning to use the <a href="http://en.wikipedia.org/wiki/Dvorak_keyboard">dvorak keyboard layout</a> instead of qwerty. If you have the patience to suddenly become the world&#8217;s slowest typist for a while when learning the new layout, this may be a fun and useful skill.</p>
<p>A spelling corrector may also be a good thing to have at hand.</p>
<p>What about omissions?</p>
<ul class="biggerMargins">
<li><b>Read through diffs</b>: Before commiting code to source control or creating a build, you can save your and everyone else&#8217;s time by going through the diffs for your changes. Not only will this let you spot any accidental omissions, you may actually spot a genuine bug while at it. Even better, you might want to get someone else to review the code with you</li>
<li>In general, version control tools like svn and git are good for avoiding omission-like mistakes. They can display you a list of modified files, unversioned files and other such things, which can help you find the errors.</li>
</ul>
<h3>Debugging mistakes</h3>
<p>While not strictly a <i>programming</i> mistake, these are very much related.</p>
<p>Debugging mistakes can be so many things that I&#8217;m not going to go into all specific details. However, there is one common occurence: <b>Wrong debug methodology</b>.</p>
<p>How do you know your debug methodology is wrong?</p>
<p>You constantly go deep into code to figure out some problem, and it turns out it was something really simple, such as a missing file. </p>
<p>The old IT support mantra comes to mind:</p>
<p>- Is it plugged in<br />
- Is it powered on<br />
(repeat for each peripheral)</p>
<p>While this appears in various tech support jokes and such, this is a valid methodology: By ruling out the mistakes that are easiest to detect, you can save a lot of time if it was one of them.</p>
<p>Quite recently, I worked on some code that needed to be built to run. I could debug it from the IDE without building, and for some reason the code worked perfectly well in the IDE but not with the build.</p>
<p>I probably spent an hour or more, looking into various internals of things that seemed to be causing the issue. In the end, it turned out the build script was broken: A new directory I had added wasn&#8217;t included in the build, breaking the application.</p>
<p>If I had checked the relatively easy to test issue of having all directories in the build, I could have saved much time.</p>
<p>If you have a bug that seems elusive, <b>check the obvious things before spending a lot of time debugging it</b>. It may end up saving you much time and nerves.</p>
<h3>JavaScript closure misunderstandings</h3>
<p>While the other problems aren&#8217;t language specific, this one was also common enough to include in the list.</p>
<p>JavaScript closures can be very confusing if you aren&#8217;t used to them. I used to get confused by them all the time.</p>
<p>The typical mistake looks like this:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> obj <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
  prop<span style="color: #339933;">:</span> <span style="color: #CC0000;">10</span><span style="color: #339933;">,</span>
&nbsp;
  myFunc<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066;">alert</span><span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">prop</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
&nbsp;
  otherFunc<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    setTimeout<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">myFunc</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
&nbsp;
obj.<span style="color: #660066;">otherFunc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">//does not alert 10 correctly!</span></pre></div></div>

<p>While the problem here is obvious to JavaScript veterans, it&#8217;s not so easy for beginners &#8211; even if they&#8217;re experienced in programming otherwise!</p>
<p>The fix to above is to wrap the timeout call:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> self <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">;</span>
setTimeout<span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  self.<span style="color: #660066;">myFunc</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>I won&#8217;t go into more details here, but there&#8217;s <a href="http://www.google.fi/search?q=javascript+closures">plenty of material on JS closures</a> on the web.</p>
<h3>What did I miss?</h3>
<p>Out of the dozen or so mails, these are the most common ones. I was hoping to list at least 10, but due to lack of participation I couldn&#8217;t.</p>
<p>Do you have a common problem you encounter when programming? Do share it, or your other tips , in the comments!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2009/10/08/common-programming-errors-and-how-to-avoid-them/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Google Wave impressions</title>
		<link>http://codeutopia.net/blog/2009/09/24/google-wave-impressions/</link>
		<comments>http://codeutopia.net/blog/2009/09/24/google-wave-impressions/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 15:24:23 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[Web Applications]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2009/09/24/google-wave-impressions/</guid>
		<description><![CDATA[So I got a Google Wave developer sandbox account. If you don&#8217;t know what Google Wave is, you&#8217;ve probably been living under a rock, and you should go check out the aforementioned link. It has a nifty video demonstrating various parts of it. I&#8217;ve had time to play with it for a while now, and [...]]]></description>
			<content:encoded><![CDATA[<p>So I got a <a href="http://wave.google.com/">Google Wave</a> developer sandbox account. If you don&#8217;t know what Google Wave is, you&#8217;ve probably been living under a rock, and you should go check out the aforementioned link. It has a nifty video demonstrating various parts of it.</p>
<p>I&#8217;ve had time to play with it for a while now, and while it&#8217;s a pretty cool concept, is it actually useful for anything, or will it be?</p>
<p><span id="more-259"></span></p>
<h3>Wave terminology</h3>
<p>To understand Wave better, you need to know about what the terminology used means. A <i>wave</i> is kind of like a thread in a forum, except anyone can modify it (no read-only mode at the moment). Waves consist of <i>blips</i>, which are single entries in the wave by users or robots. By default, waves are private. However, you can invite other users or robots to participate in your wave, or make it public.</p>
<p>A <i>robot</i> is an artificial Wave-client. When a human user uses the browser as the client, a robot is just a programmed client running on a server. Kind of like an <abbr title="Internet Relay Chat">IRC</abbr> bot.<br />
Robots can do everything a human wave user can &#8211; they can post blips, edit them, etc.</p>
<p>Waves can also include <i>gadgets</i>. They are similar to iGoogle gadgets, for example it could be a chess board or a map. Gadget state is synced to all participants of a wave, so you could play a game of chess with your friend on wave (after they make it so that you can&#8217;t move the opponent&#8217;s pieces, but let&#8217;s not get stuck on the small details <img src='http://codeutopia.net/blog/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  )</p>
<p>Here&#8217;s a screenshot from Wave with wave and blip indicated:</p>
<p><a href="http://codeutopia.net/blog-images/wave.jpg"><img src="http://codeutopia.net/blog-images/wave-thumb.jpg" alt="" /></a><br />
(click for bigger image)</p>
<h3>Robots and gadgets</h3>
<p>I think a big part of Wave is robots and gadgets, because they allow anyone to extend the functionality provided by the &#8220;base&#8221;. </p>
<p>The sharp eyed might have noticed some robots in the above screenshot: Calcbot, Rssybot, Graphy, Tweety, Wikify and Wave Live Messenger.</p>
<ul class="biggerMargins">
<li>Calcbot is essentially a calculator. The screenshot above includes a blip from calcbot, displaying its usage instructions.</li>
<li>Rssybot allows you to embed any RSS feed into any wave, making it a feed-reader replacement, as you could store your favorite RSS feeds as waves into a folder</li>
<li>Graphy draws graphs. There&#8217;s a small graph showing in the screenshot as well.</li>
<li>Tweety allows you to use twitter through Wave. It seemed to work rather well, with one exception: It did not update new tweets from your timeline. However, it would seem this is merely because the person who wrote it has not implemented it yet</li>
<li>Wikify allows you to easily embed links to wikipedia into waves</li>
<li>Wave Live Messenger, as you might guess from the name, allows you to chat with your Windows Live Messenger buddies through a wave. It worked, but it is rather rudimentary at this point, and a bit buggy</li>
</ul>
<p>These are just some bots I tried. There&#8217;s a lot more, like a bot which converts text into pirate speec (yarrrr!), and as said, anyone can write their own bots. Hopefully someone will write a bot which implements libpurple and allows you to use the most popular instant messengers via wave. That would be very cool, and as Wave Live Messenger demonstrates, very much possible.</p>
<p>I have not tried many gadgets, mostly because I couldn&#8217;t find any definite source for good Wave-compatible gadgets. However, there are several ones that Wave shows by default, such as the chessboard visible in the screenshot, a Google Maps gadget where you can place markers for anyone to see, a &#8220;Who&#8217;s coming?&#8221; gadget etc.</p>
<p>You could also think of embedding youtube videos into waves as being a gadget. Yep, just paste a link from YouTube and Wave will display a little icon which you can use to turn it into an embedded video, which also works quite nicely.</p>
<h3>User interface</h3>
<p>The user interface is pretty similar to Gmail or other mail clients. However, it&#8217;s possible to customize it nicely, for example you can resize each column, or hide them. You can also minimize a wave into the area on top, which could be useful if you have a wave where you chat with your friends &#8211; similar to having an IM window or an IRC channel open.</p>
<p>The UI also shows various hints when you move the cursor around. Hovering over a blip will display some buttons you can use to interact with it, such as reply to or edit the wave.</p>
<p>In general, it&#8217;s very responsive, which makes it nice to use.</p>
<h3>Stability and usability</h3>
<p>A concern from some is that this a very ambitious project that&#8217;s might not work out.</p>
<p>The good news is that <i>it works just fine</i>. Not in Opera (<a href="http://codeutopia.net/blog/2008/07/14/does-google-test-with-just-ie-and-firefox/">stop being <b>lazy bums</b>, Google!</a>), though, but I&#8217;ve used it in Firefox 3 and Chrome where it works quite well. There have been some days with a lot of downtime or slowness, but that&#8217;s probably because it&#8217;s not quite there yet.</p>
<p>Sometimes the Wave updates also seem to break the robots, but once again this is probably due to the fact that the API is not 100% stable yet either.</p>
<h3>Wave is a viable email/IM replacement and more</h3>
<p>This sums up my opinion of Wave: It is very much a viable email and IM replacement. </p>
<p>You can think of various other uses too: A forum, a personal/group wiki&#8230; Facebook replacement&#8230; It&#8217;s a very viable IM and Twitter client too, as the robots show &#8211; just needs some more polish.</p>
<p>However, <i>right now</i> it&#8217;s not very useful. This is because it&#8217;s not very likely that anyone you know is using it (unless you work at Google). At the moment it&#8217;s also a bit difficult to &#8220;moderate&#8221; a wave &#8211; you can&#8217;t lock or make it read-only, so every participant can edit everything. I hear things to limit editability are coming later, but even with them it may require some rules and restraint from the participants to make it easier to follow a conversation.</p>
<p>I think what Wave can be largely rests on the users: It depends on what kind of robots and gadgets people write. Without them, it still will be a good alternative for email and IM and perhaps some other uses, but with them it can be much more, and even the email/IM stuff will be much better. </p>
<div style='float:right; margin-left:10px;'><script type='text/javascript'>digg_url='http://codeutopia.net/blog/2009/09/24/google-wave-impressions/';</script><script src='http://digg.com/tools/diggthis.js' type='text/javascript'/></div>
<p>Other things that might be cool to see on Wave would be <a href="http://codeutopia.net/blog/2008/06/18/put-excel-on-the-net-with-aspnet/">integration of spreadsheets/documents</a>, or perhaps I should try making <a href="http://codeutopia.net/blog/2009/06/30/tankwar-online-my-javascript-based-cannons-game/">my JavaScript tank-game TankWar Online</a> a gadget... Would be neat to play it on Wave with multiple players.</p>
<p>Have you used Wave? What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2009/09/24/google-wave-impressions/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The three types of programmers</title>
		<link>http://codeutopia.net/blog/2009/08/09/the-three-types-of-programmers/</link>
		<comments>http://codeutopia.net/blog/2009/08/09/the-three-types-of-programmers/#comments</comments>
		<pubDate>Sun, 09 Aug 2009 15:53:23 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2009/08/09/the-three-types-of-programmers/</guid>
		<description><![CDATA[The other day I was thinking of programmer types. In a way, I think there are three kinds of programmers when looking at a high level: The smart-and-gets-things-done programmer The smart programmer The &#8220;just a&#8221; programmer So how do you determine if a programmer goes into one of these categories? The just a programmer The [...]]]></description>
			<content:encoded><![CDATA[<p>The other day I was thinking of programmer types. In a way, I think there are three kinds of programmers when looking at a high level:</p>
<ol>
<li>The smart-and-gets-things-done programmer</li>
<li>The smart programmer</li>
<li>The &#8220;just a&#8221; programmer</li>
</ol>
<p>So how do you determine if a programmer goes into one of these categories?</p>
<p><span id="more-250"></span></p>
<h3>The just a programmer</h3>
<p>The just a programmer is just a programmer. He/she might have become one because it pays better than some other jobs. In general, they aren&#8217;t very passionate about what they do, or maybe it&#8217;s their work environment which takes it all away from them. </p>
<p>In any case, they do their job okay. Not very well, not very poorly, but okay. They could do better, but they won&#8217;t bother because they are just programmers. And programmers aren&#8217;t <a href="http://www.rockstarprogrammer.org/">rock stars</a> afterall.</p>
<p>This group may include skilled people as well. If you lose your interest, for example because of a bad working environment, you stop caring for what you do and may end up being just a programmer. </p>
<p>What about you? Are you a &#8220;just a&#8221; programmer? Most likely not, since reading a programming blog usually indicates interest in the field.</p>
<h3>The smart programmer</h3>
<p>This is a good programmer type. Usually they are talented and have lots of ideas. Their problem is that they are applying their talent wrong: Maybe they spend the workday doing micro-optimizations, reformatting the code or some other thing that gets on their nerves instead of working on fixing bugs, new features and things that are actually useful. Or maybe they just don&#8217;t know how to proceed doing the bigger things.</p>
<p>Perhaps it&#8217;s a lack of knowledge &#8211; Being smart doesn&#8217;t necessarily mean experienced in every area of software development. If you feel you are in this category, there are various ways you can improve: Reading books, reading blogs, and simply writing more code. </p>
<p>The tricky part is knowing between smart and smart and gets things done programmers. You may be a C# guru but weak in functional languages, putting you into this category instead of the next if you have to deal with OCaml or such.</p>
<p>If a smart programmer just applied their talent in a different way, they could rise to the next category&#8230;</p>
<h3>The smart and gets things done programmer</h3>
<p>This type of programmer is the ideal one. If you are responsible for hiring, this is the type you want to hire. If you don&#8217;t have that much responsibility, this is the kind of programmer you&#8217;d want to work with.</p>
<p>I borrowed the name for this type from <a href="http://www.joelonsoftware.com/items/2007/06/05.html">Joel Spolsky</a>. I don&#8217;t know if my definition is similar to his, but I thought the name fits this category quite well anyway.</p>
<p>As the name says, the smart and gets things done programmer is good at what he/she does, and also actually gets stuff done. The main difference to the smart programmer is that the gets things done type knows better when to do what.</p>
<p>You don&#8217;t necessarily have to be a programming ninja/guru to belong here. If you&#8217;re a junior level programmer, you may still go into this group if you apply your existing skills and talent into things that make sense, instead of, say, writing GOTO&#8217;s just because you can.</p>
<p>As I mentioned it can be quite difficult to know who is a smart programmer and who is a smart and gets things done programmer. If you ask a smart programmer to write a function which does something, their answer may be just as good as the gets things done type&#8217;s. Depending on the case, however, the gets things done type&#8217;s answer may be more concise and perhaps simpler, yet achieves the same result.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2009/08/09/the-three-types-of-programmers/feed/</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>Site update: Added Articles section</title>
		<link>http://codeutopia.net/blog/2009/03/27/site-update-added-articles-section/</link>
		<comments>http://codeutopia.net/blog/2009/03/27/site-update-added-articles-section/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 20:10:57 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2009/03/27/site-update-added-articles-section/</guid>
		<description><![CDATA[I&#8217;ve added a brand new Articles section to the codeutopia.net website. Its purprose is to make it easier to find information on specific topics from the blog. I&#8217;ve written a lot of posts, and it can be difficult to find interesting ones by just searching or browsing the blog archives. The articles section groups most [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve added a brand new <a href="http://codeutopia.net/blog/articles/">Articles section</a> to the codeutopia.net website. Its purprose is to make it easier to find information on specific topics from the blog. </p>
<p>I&#8217;ve written a lot of posts, and it can be difficult to find interesting ones by just searching or browsing the blog archives. The articles section groups most of my posts into a main category and a sub category, making it easier to find posts about similar topics.</p>
<p><a href="http://codeutopia.net/blog/articles/">Head over to the articles page</a>, and leave a comment here about what you think!</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2009/03/27/site-update-added-articles-section/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Looking back: Best of 2007</title>
		<link>http://codeutopia.net/blog/2009/02/24/looking-back-best-of-2007/</link>
		<comments>http://codeutopia.net/blog/2009/02/24/looking-back-best-of-2007/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 17:50:05 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2009/02/24/looking-back-best-of-2007/</guid>
		<description><![CDATA[I&#8217;ve been blogging over 2 years already. In 2007, I was blogging at my.opera, and later that year moved to this site. Let&#8217;s take a look at some of the best posts of 2007! Skills These are some things that just don&#8217;t get old: skills that stay useful over the years. In December 2007, I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been blogging over 2 years already. In 2007, I was blogging at <a href="http://my.opera.com/zomg/blog">my.opera</a>, and later that year moved to this site. </p>
<p>Let&#8217;s take a look at some of the best posts of 2007!</p>
<p><span id="more-205"></span></p>
<h3>Skills</h3>
<p>These are some things that just don&#8217;t get old: skills that stay useful over the years.</p>
<p>In December 2007, I was wondering <a href="http://codeutopia.net/blog/2007/12/06/are-db-layers-like-zend_db-making-people-forget-sql/">if people are forgetting SQL</a>. Due to the rise of various database abstractions like Zend_Db_Table, Propel ORM etc. it seems that many people don&#8217;t even bother learning SQL anymore!</p>
<p><a href="http://codeutopia.net/blog/2007/12/06/are-db-layers-like-zend_db-making-people-forget-sql/">Are DB layers like Zend_Db making people forget SQL?</a></p>
<p>Another topic many developers don&#8217;t appear to understand is <a href="http://codeutopia.net/blog/2007/11/20/the-mythical-http-protocol/">the HTTP protocol</a>. I think all developers who work with web based technologies should have at least a basic understanding of the protocol, and the most common HTTP headers.</p>
<p><a href="http://codeutopia.net/blog/2007/11/20/the-mythical-http-protocol/">The Mythical HTTP protocol</a></p>
<p>A very important skill for anyone in this age of internet is <a href="http://codeutopia.net/blog/2008/01/17/the-art-of-finding-information/">finding information online</a>. It&#8217;s particularily important to programmers, as there&#8217;s a ton of things online regarding your language of choice, best practices, software development methodologies and all kinds of other useful stuff.</p>
<p><a href="http://codeutopia.net/blog/2008/01/17/the-art-of-finding-information/">The art of finding information</a></p>
<h3>Other things</h3>
<p>In september, I had a bit fun <a href="http://codeutopia.net/blog/2007/09/27/macgyver-and-programming/">comparing MacGyver with programmers</a>.</p>
<p><a href="http://codeutopia.net/blog/2007/09/27/macgyver-and-programming/">MacGyver and Programming</a></p>
<p>While possibly a bit dated, there&#8217;s some sound advice for spam protection in one of my old posts. These days it&#8217;s all just &#8220;put a CAPTCHA image&#8221; and people don&#8217;t even think of other methods. I even took a quick look at a spambot!</p>
<p><a href="http://codeutopia.net/blog/2007/10/28/simple-and-efficient-spam-prevention-techniques/">Simple and efficient spam prevention techniques</a></p>
<p>And lastly, a look at <a href="http://codeutopia.net/blog/2007/10/05/top-9-most-useful-web-developer-tools-for-opera/">the 9 best web development tools for Opera</a>! I will have to add one to the list though: <a href="http://www.opera.com/dragonfly/">Opera Dragonfly</a></p>
<p><a href="http://codeutopia.net/blog/2007/10/05/top-9-most-useful-web-developer-tools-for-opera/">Top 9 most useful web-developer tools for Opera</a></p>
<h4>Visit archives for more:</h4>
<p><a href="http://codeutopia.net/blog/2009/">Archive for 2009</a><br />
<a href="http://codeutopia.net/blog/2008/">Archive for 2008</a><br />
<a href="http://codeutopia.net/blog/2007/">Archive for 2007</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2009/02/24/looking-back-best-of-2007/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>NetBeans 6.5 review</title>
		<link>http://codeutopia.net/blog/2008/12/01/netbeans-65-review/</link>
		<comments>http://codeutopia.net/blog/2008/12/01/netbeans-65-review/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 09:07:49 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[general]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tools]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2008/12/01/netbeans-65-review/</guid>
		<description><![CDATA[During the weekend, I tried out NetBeans 6.5 and its new PHP related functionality. I had earlier seen some quick shots of how the support was, and it seemed like a good contender for big names like Zend Studio. What features does NetBeans 6.5 have for PHP developers? How does it compare against Zend Studio [...]]]></description>
			<content:encoded><![CDATA[<p>During the weekend, I tried out NetBeans 6.5 and its new PHP related functionality. I had earlier seen some quick shots of how the support was, and it seemed like a good contender for big names like Zend Studio.</p>
<p>What features does NetBeans 6.5 have for PHP developers? How does it compare against Zend Studio for Eclipse?</p>
<p><span id="more-168"></span></p>
<h3>Overview</h3>
<p>At the general level, NetBeans is quite similar to most other IDEs: You get a project view on the left, an outline of the things in the current file under that, an editor on the right and a task/problem view below the editor. It does all the usual tricks you&#8217;d expect, like tabs in the editor, syntax highlight, PHP function code assist etc.</p>
<p>Other PHP related functionality it provides are things such as templates &#8211; when you type func, it can autocomplete an empty function for you, fast PHPDocumentor docblock comment creation, code-assist for custom PHP classes based on the docblocks, including what variables their methods take etc.</p>
<p>NetBeans also has refactoring support for PHP &#8211; something that I&#8217;ve only seen before in Zend Studio. For example, you can easily rename a variable or a method in your class, so that it gets renamed everywhere in your code where it&#8217;s used.</p>
<h3>In depth</h3>
<h4>The PHP editor</h4>
<p>This is of course the most important part. Zend Studio for Eclipse has a very good PHP editor, and other IDEs with PHP support that I&#8217;ve tried (such as Komodo) usually fall very far from it.</p>
<p>NetBeans, however, does about 95% of what Zend Studio does. </p>
<ul>
<li>Code-assist for builtin PHP functions? Yep.</li>
<li>Code-assist for custom functions and classes? Yep.</li>
<li>Quick insertion of phpdoc blocks? Yep.</li>
<li>Displays phpdoc information in code-assist? Yep.</li>
<li>Does above for variables, methods, methods&#8217; parameters and all? Yep.</li>
<li>Let&#8217;s you easily rename variables/methods/classes with a refactoring tool? Yep.</li>
<li>Supports snippets/templates for quick inserting of function/class stubs etc.? Yep.</li>
<li>Supports code folding? Yep.</li>
<li>Supports jumping to the declaration of a variable/method/class? Yep.</li>
</ul>
<p>Did I forget anything? Feel free to point it out!</p>
<p>NetBeans even does some of the things <i>better</i> than Zend Studio &#8211; which is definitely an achievement. </p>
<div style="float: right; margin: 10px; text-align: center">
PHP code-assist in NetBeans<br />
<a href="http://codeutopia.net/images/nb_php.jpg"><img src="http://codeutopia.net/images/nb_php_s.jpg" alt="php code assist in NetBeans" /><br />Click for bigger image</a>
</div>
<p>For example, the code-assist for builtins displays more information, and links to PHP manual. The code folding feature (ie. those little + signs that you can use to make funcs and comment blocks smaller) works reliably, unlike in Zend Studio where it can screw up and display your code totally wrong if you use the folding feature, which is luckily only a rendering glitch.</p>
<p>NetBeans&#8217; PHP documentor support is very good as well. For example, it supports the @property declaration that isn&#8217;t supported by Zend Studio. This is useful for example when you work with Doctrine 1.1, as it generates those for your models to give code-assist for the model properties. </p>
<p>But while NetBeans gives you @property, its support for @return is a bit shaky. It works just fine as long as you have a single return value, ie. @return Zend_Layout, but it screws up when there&#8217;s more, like @return Zend_Layout|null, which is valid phpdoc and means it would return either an instance of Zend_Layout or null. In the latter case, NetBeans won&#8217;t give you any code-assist at all. I have filed a bug report for this, so hopefully it&#8217;ll be fixed in a future release.</p>
<h4>The project view</h4>
<p>The project view does a decent job of letting you go through the files and directories in your project with ease. It will also display little icons and color changes, if you&#8217;re using subversion, to indicate modified files and such.</p>
<p>While it&#8217;s otherwise good, I do have a minor gripe in regards to creating new items. If you hit Ctrl+N in Zend Studio to create a new item, you can simply type in &#8220;folder&#8221;, &#8220;file&#8221; or &#8220;php file&#8221; etc. and hit enter and be done with it. In NetBeans, you need to first choose the correct main &#8220;group&#8221; of items, then hit tab and choose one of the file types (or mouse click) and hit enter. For some weird reason, if you doubleclick one of the items with the mouse, nothing will happen, and you will need to click next.</p>
<p>So if you&#8217;re really used to the way Eclipse based IDEs handle creation of new files and dirs, this may initially be a small annoyance, but it still works okay after you get used to tabbing around the selections.</p>
<h4>PHP debugging support</h4>
<p>While I haven&#8217;t used this much yet, it exists and seems to work as you&#8217;d expect with functionality like setting breakpoints, stepping through code and viewing variable values. NetBeans&#8217; debugger appears to work with XDebug instead of the Zend Debugger module you will require to use Zend Studio&#8217;s debugging features. </p>
<p>+1: NetBeans debugger immediately worked with the xampp installation I had on my PC. The installer already picked up my apache from there, and when I fired up the debugger, it worked seamlessly. Getting Zend Studio&#8217;s debugger up and running was a bit more of a hassle, and I actually needed to consult Google for that.</p>
<h4>Version control support</h4>
<p>NetBeans supports CVS, Subversion and Mercurial out of the box, but they may require an external download if you don&#8217;t have the correct client installed beforehand. The installation for those is automatic and relatively painless, though.</p>
<p>The svn support was a bit confusing as it did some things in a bit weird way, compared to what I had gotten used to with TortoiseSVN. However, it works rather well after you get to know the quirks.</p>
<h3>Wait, there&#8217;s more</h3>
<p>NetBeans does even more than that. It has better support for HTML, CSS, JavaScript and even formats like YAML.</p>
<div style="float: right; margin: 10px; text-align: center">
HTML code-assist in NetBeans<br />
<a href="http://codeutopia.net/images/nb_html.JPG"><img src="http://codeutopia.net/images/nb_html.JPG" width="250" alt="php code assist in NetBeans" /><br />Click for bigger image</a>
</div>
<p>When editing HTML in Zend Studio, it sometimes lets you autocomplete the closing tag, and it does display a list of attributes for some tags like form. That&#8217;s pretty much all it does.</p>
<p>NetBeans HTML editor is great &#8211; it autocompletes closing tags, lists attributes, even displays <i>details</i> on what the attributes do. It displays <i>a lot</i> of information for tags, too.</p>
<p>It doesn&#8217;t do that just for HTML &#8211; that happens in CSS as well. You get good information on the properties, and options for the values. It also features a &#8220;style builder&#8221; and a preview which lets you see how your selected style would look. As an added bonus, it seems to handle cascading styles correctly, so if you define that the body has a black background and your h1 declaration says the font must be white and bold, the preview has a black background too.</p>
<p>While the detailed infoboxes on HTML and CSS may not be of use to everyone, it could save you a trip to the W3C CSS spec &#8211; I know I have had to look things up from there from time to time.</p>
<p>And you get all this for JavaScript too &#8211; code-assist, function explanations, even for custom functions and complex objects. Oh, and debugging support in Firefox or IE. The JavaScript assist can even understand the difference between static and nonstatic functions (or whatever their proper JS terminology is), has some support for JSDoc etc.</p>
<h3>Conclusion</h3>
<p>Why aren&#8217;t you <a href="http://www.netbeans.org/">downloading NetBeans</a> yet? </p>
<p>With all these features, the minor flaws in it don&#8217;t really matter &#8211; and they will hopefully get ironed out in a new release.</p>
<p>Did I mention it&#8217;s free? Yep, it has more features than the commercial big name Zend Studio does, and it&#8217;s completely free.<br />
I probably forgot to mention something, since it&#8217;s got so many features in it. There&#8217;s also support for SQL etc. but I haven&#8217;t looked into those yet.</p>
<p>NetBeans 6.5 is officially my new favorite PHP/web-dev IDE.</p>
<p><b>Further reading:</b><br />
<a href="http://codeutopia.net/blog/2009/01/12/vim-user-youll-love-netbeans/">Vim user? You&#8217;ll love NetBeans</a></p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2008/12/01/netbeans-65-review/feed/</wfw:commentRss>
		<slash:comments>37</slash:comments>
		</item>
		<item>
		<title>Programmer&#8217;s education</title>
		<link>http://codeutopia.net/blog/2008/11/24/programmers-education/</link>
		<comments>http://codeutopia.net/blog/2008/11/24/programmers-education/#comments</comments>
		<pubDate>Mon, 24 Nov 2008 06:18:47 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2008/11/24/programmers-education/</guid>
		<description><![CDATA[Daniel Brown at Endlessly Curious wrote an interesting post on the current state of teaching programming. He raises points such as the new generation of programmers getting taught mostly high-level languages such as C# and Java, and that they should be taught more assembly or C instead. I&#8217;ve touched the C/C++ issue myself earlier in [...]]]></description>
			<content:encoded><![CDATA[<p>Daniel Brown at Endlessly Curious wrote an <a href="http://blog.endlesslycurious.com/2008/11/20/teaching-students-memory-managment/">interesting post on the current state of teaching programming</a>.</p>
<p>He raises points such as the new generation of programmers getting taught mostly high-level languages such as C# and Java, and that they should be taught more assembly or C instead.</p>
<p><span id="more-162"></span></p>
<p>I&#8217;ve touched the C/C++ issue myself earlier in my post about <a href="http://codeutopia.net/blog/2008/09/20/you-should-know-at-least-three-languages/">what languages a programmer should know</a>. So while I&#8217;m not the biggest fan of C/C++, and that Assembly looks scary as far as I&#8217;m concerned, I must agree that you should know at least some C/C++ if you really want to be good at what you do.</p>
<p>When I was studying in technical college, we had several required courses in programming. What did they teach us? Visual Basic 6, and apparently they are now teaching Java in its place. You might think that VB6 is crap, and while that might even be true to a certain degree, I believe it&#8217;s a decent language for beginner level courses, such as the ones at my school were. </p>
<p>We also had an optional C++ course, but it was not held, as it didn&#8217;t have enough participants. I would hope that most people who are genuinely interested in programming would continue with learning C++ after learning a higher level language as an introductionary course. As Daniel explains, it can be very important to understand the low-level happenings even when programming with a high-level language.</p>
<p>However, I don&#8217;t think the first language taught should be a low-level one. I&#8217;ve mentioned how <a href="http://codeutopia.net/blog/2008/05/01/is-php-a-good-first-language/">I find PHP an excellent first language</a>, and I still think so, though it obviously has more value for those who want to develop web applications. Anyways, a higher level language, like Java, C#, PHP, Python or such would be good for beginners, as programming in one of them is much more encouraging and <i>fun</i>. Read the aforementioned PHP-related post for more points.</p>
<p>Though I think this may change in the future. Seeing how high level languages will probably become more and more common as programming tasks get more and more complex, there&#8217;s bound to be improvements to the compilers, so that they will optimize the code during runtime and such to make sure it gets absolutely the best performance possible.</p>
<p>Who knows, maybe low level programming will fade to obscurity, only to be used by a subculture, ála C64 hobbyists nowadays. That day may come sooner than most think on desktop PCs, but assembly and C will quite likely live a long and healthy life on various smaller devices.</p>
<p>Fun fact: during my final year in <i>elementary school</i>, we were taught C in an optional computer science course.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2008/11/24/programmers-education/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Favorite blogs</title>
		<link>http://codeutopia.net/blog/2008/11/10/favorite-blogs/</link>
		<comments>http://codeutopia.net/blog/2008/11/10/favorite-blogs/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 10:04:54 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[Blogs]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2008/11/10/favorite-blogs/</guid>
		<description><![CDATA[I often have problems finding blogs that post content that interests me. It could be that I&#8217;m really picky, or it&#8217;s just really difficult to find quality programming blogs. So, today I&#8217;ll introduce you to some of the blogs I read. Perhaps you&#8217;ll find a new blog to read as well? I probably won&#8217;t have [...]]]></description>
			<content:encoded><![CDATA[<p>I often have problems finding blogs that post content that interests me. It could be that I&#8217;m really picky, or it&#8217;s just really difficult to find quality programming blogs.</p>
<p>So, today I&#8217;ll introduce you to some of the blogs I read. Perhaps you&#8217;ll find a new blog to read as well?</p>
<p><span id="more-157"></span></p>
<p><br/><br/></p>
<p>I probably won&#8217;t have to to introduce blogs like Coding Horror or Joel on Software, so I&#8217;ll just mention few of the less known ones. </p>
<p>Let&#8217;s start with <a href="http://akrabat.com/">Akra&#8217;s DevNotes</a>. This blog is written by Rob Allen, and contains the occasional useful post on Zend Framework, and other usually PHP-related content. Rob Allen is also the author of the book &#8220;Zend Framework in Action&#8221;, so he knows what he&#8217;s talking about!</p>
<p>One of the blogs I&#8217;ve been following the longest time is <a href="http://godpatterns.com/">God Patterns</a>. The author used to write about various C# and game development related topics, but it seems the blog has been dying. The old posts contain some useful tidbits, nevertheless, and I still have it in my feed reader, in case there is any new content.</p>
<p><a href="http://www.jansch.nl/">Jansch.nl</a> is Ivo Jansch&#8217;s blog, and he writes about various PHP and programming related topics. This is one of the more often updated blogs in my reader.</p>
<p>Matthew Weier O&#8217;Phinney, the man behind Zend_Form, writes a blog called <a href="http://weierophinney.net/matthew/">Phly, boy, phly</a>. As expected, he writes a lot about the Zend Framework, and amongst other things, about my favorite text editor, Vim.</p>
<p>Federico Cargnelutti writes about a wide range of programming topics, such as PHP/MySQL and agile development, in his blog <a href="http://phpimpact.wordpress.com/">PHP::Impact</a>.</p>
<p><br/><br/><br />
These blogs all have lots of useful and interesting content. Only if they were updated a bit more often&#8230; but it&#8217;s understandable, as it can be very difficult to come up with good posts. I&#8217;ve been writing since early 2006, and it&#8217;s still difficult.</p>
<p>What are your top blogs?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2008/11/10/favorite-blogs/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>BumpTop &#8211; 3D desktop goodness&#8230;?</title>
		<link>http://codeutopia.net/blog/2008/11/07/bumptop-3d-desktop-goodness/</link>
		<comments>http://codeutopia.net/blog/2008/11/07/bumptop-3d-desktop-goodness/#comments</comments>
		<pubDate>Fri, 07 Nov 2008 16:42:28 +0000</pubDate>
		<dc:creator>Jani Hartikainen</dc:creator>
				<category><![CDATA[general]]></category>
		<category><![CDATA[User Interfaces]]></category>

		<guid isPermaLink="false">http://codeutopia.net/blog/2008/11/07/bumptop-3d-desktop-goodness/</guid>
		<description><![CDATA[I recently got into the beta of BumpTop &#8211; You may have heard about it: it&#8217;s a replacement for your Windows desktop. BumpTop lets you use &#8220;real&#8221; actions such as tossing items around the desk, creating piles of items and such. Their site claims that BumpTop is &#8220;a fresh and engaging new way to interact [...]]]></description>
			<content:encoded><![CDATA[<p>I recently got into the beta of BumpTop &#8211; You may have heard about it: it&#8217;s a replacement for your Windows desktop.</p>
<p>BumpTop lets you use &#8220;real&#8221; actions such as tossing items around the desk, creating piles of items and such. Their site claims that BumpTop is &#8220;a fresh and engaging new way to interact with your computer desktop&#8221;&#8230; </p>
<p>So does all this actually work, and most important of all, is this a <i>practical</i> way to manage your computer desktop?</p>
<p><span id="more-156"></span></p>
<h3>Initial impressions</h3>
<p><img src="http://admins.fi/~eagleeye/bumptop.jpg" width="300" style="float: right; margin: 5px" /></p>
<p>After watching <a href="http://www.youtube.com/watch?v=M0ODskdEPnQ">the BumpTop demonstration video</a> on YouTube, it looks really cool and nice. However it doesn&#8217;t really tell you what it is like to actually use it yourself.</p>
<p>The first thing you notice after installing BumpTop that it loads quite slowly, even on a powerful PC (Athlon 64 X2 6000+, 4 GB RAM, Geforce 8600). This could simply be an issue now &#8211; it is still a beta afterall.</p>
<p>When it loads though, it looks very good. The icons show up cleanly and image files show a small preview of the contents as their icon. </p>
<p>Then, you try some of the actions you saw in the demo videos, such as tossing icons&#8230; which feels really awkward. The tossing movement with the cursor is just&#8230; weird. The movement was somehow different from what I had gotten used to from games. You do get used to it after a while, though.</p>
<p>When you get used to tossing the icons around, it does feel somewhat convenient, for example when deleting useless icons, as you can just throw icons you don&#8217;t need into a corner rather than ctrl+clicking them out, and then select them all by lassoing them.</p>
<p>You can also create piles from icons, which group a bunch of icons together. You can then interact with the pile in various ways: you can flip through it like a book with the scroll wheel, which lets you look at each icon in the pile in order, you can spread it out or make it into a grid. The grid is probably most like the typical windows desktop thing, but it leaves a big X mark in the corner to mark that you can click it to put the gridded icons back into a pile, which is a bit annoying if you want to just keep them in a grid. The same happens with the other interaction methods as well.</p>
<h3>Practicality</h3>
<p>I can&#8217;t really vouch for BumpTop&#8217;s practicality when you actually need to get things done, or find things from the desktop. If you&#8217;ve tossed icons around, they&#8217;ll probably be quite messy and it may be difficult to tell them apart. Piles are a bit more convenient, as you can expand them into grids to see what&#8217;s in them, but if you have many piles, it&#8217;s not exactly very convenient, especially if you&#8217;re simply going through the files for <i>something</i>.</p>
<p>You can also make piles out of folders, which is possibly the most practical way of showing items on BumpTop, as it shows the folder&#8217;s name under the pile &#8211; this way you can easily tell your piles apart by the name.</p>
<p>BumpTop&#8217;s demo video also shows you how to &#8220;easily&#8221; create a new email with some files as attachments: Select the files, and toss them to the email icon. The easiness of this is debatable &#8211; which is easier, moving the cursor to a location on screen, or making a flick towards a certain direction, where you also must adjust the speed and direction of the flick to make sure the icons actually end up where you intend?</p>
<p>It&#8217;s also a bit questionable to the whole usefulness of all this. I don&#8217;t spend a lot of time watching the desktop, nor do I store many files there either. When I run apps, I either run them from the run dialog, start menu, or with Enso.</p>
<p>One feature does stand out from a practical point of view though: It&#8217;s very easy to find the file you want if you know it&#8217;s name, or part of the name. Simply type it, and BumpTop will make it easier to find and highlights it. While you can type the name to find an icon in the normal desktop, it won&#8217;t work with just a part of the name, say from the end.</p>
<h3>Conclusion</h3>
<p>Do you toss your documents on your desk into messy looking piles or arrange them in grids? No? But the website says that BumpTop lets me use realistic interactions&#8230; I guess not then.</p>
<p>So what can we actually say about this then?</p>
<p>As BumpTop&#8217;s website says, it&#8217;s definitely fresh, clever.. and engaging, at least for the first two minutes or so. While it is an <i>interesting approach</i>, I can hardly call it fun either, despite what the demo video claims. It may be refreshing, but after a while you get bored of the tricks you can do with it, and it starts to get in your way more than make things easier.</p>
<p>It&#8217;s not practical, it&#8217;s not nice to use in the long run.. is it good for anything?</p>
<p>It&#8217;s a fascinating tech demo, that&#8217;s for sure. For a while it was fun to see what you could do with it, but it wore off. I think this kind of approach might be better suited to touch screens where the tossing and all probably feels more natural than when done with the mouse. </p>
<p>You may also like it if you&#8217;re generally into making everything in your computer look really cool and different. Or if you&#8217;re 10 years old.</p>
<p>I would encourage you to try it yourself, if you&#8217;ve read this post to this point, as it is interesting to see, despite all the flaws that make it completely inpractical in actual usage.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeutopia.net/blog/2008/11/07/bumptop-3d-desktop-goodness/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
