<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
 
 <title>Rioki's Corner</title>
 <link href="http://www.rioki.org/atom.xml" rel="self"/>
 <link href="http://www.rioki.org"/>
 <updated>2012-01-18T12:19:20+01:00</updated>
 <id>http://www.rioki.org</id>
 <author>
   <name>Sean Farrell</name>
   <email>sean.farrell@rioki.org</email>
 </author>

 
 <entry>
   <title>Most Pirated Games</title>
   <link href="http://www.rioki.org/2012/01/03/most-pirated-games.html"/>
   <updated>2012-01-03T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2012/01/03/most-pirated-games</id>
   <content type="html">&lt;p&gt;The Escapist recently &lt;a href='http://www.escapistmagazine.com/news/view/115003-TorrentFreak-Reveals-Top-Pirated-Games-of-2011'&gt;reported&lt;/a&gt; on the Torrent Freak&amp;#8217;s &lt;a href='http://torrentfreak.com/top-10-most-pirated-games-of-2011-111230/'&gt;latest numbers on piracy&lt;/a&gt;. I hate when things get reported in this form. They are not wrong, but things like that are taken with a very strong bias.&lt;/p&gt;

&lt;p&gt;I will just take the PC number stated in the report, since they are by far the biggest:&lt;/p&gt;
&lt;table width='100%'&gt;
  &lt;tr&gt;
    &lt;th&gt;Game&lt;/th&gt;&lt;th&gt;Downloads&lt;/th&gt;&lt;th&gt;Release&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Crysis 2&lt;/td&gt;&lt;td&gt;3,920,000&lt;/td&gt;&lt;td&gt;Mar. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Call of Duty: Modern Warfare 3&lt;/td&gt;&lt;td&gt;3,650,000&lt;/td&gt;&lt;td&gt;Nov. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Battlefield 3&lt;/td&gt;&lt;td&gt;3,510,000&lt;/td&gt;&lt;td&gt;Oct. 2011&lt;/td&gt;
  &lt;/tr&gt;  
  &lt;tr&gt;
    &lt;td&gt;FIFA 12&lt;/td&gt;&lt;td&gt;3,390,000&lt;/td&gt;&lt;td&gt;Sept. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Portal 2&lt;/td&gt;&lt;td&gt;3,240,000&lt;/td&gt;&lt;td&gt;Apr. 2011&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;For starters I doubt on the correctness of the numbers. How did they collect the data? I will assume they mean downloads via torrent, the numbers come from Torrent Freak anyway. To get accurate data they need to track the users of all torrent trackers, that is including all private trackers. It is impossible that they have access to every private tracker, especially since many are invite only. Also many users follow multiple trackers, so there is a source of duplicate entries. Finally some versions are incomplete, broken or malware infected, so people tend to download multiple versions of one game to get a running install. At very best they give a roughs estimate of actual pirated copies.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;But the numbers must also be put into context. I foraged the Internet for sales figures, not the easiest task. (Thanks to Wikipedia, where I found most of the sources.) The sales numbers I was able to find:&lt;/p&gt;
&lt;table width='100%'&gt;
  &lt;tr&gt;
    &lt;th&gt;Game&lt;/th&gt;&lt;th&gt;Sales&lt;/th&gt;&lt;th&gt;Release&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Crysis 2&lt;/td&gt;&lt;td&gt;&lt;a href='http://investor.ea.com/releasedetail.cfm?ReleaseID=594196'&gt;&quot;over 3 million&quot;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Mar. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Call of Duty: Modern Warfare 3&lt;/td&gt;&lt;td&gt;&lt;a href='http://www.nintendogal.com/2011/12/09/november-2011-npd-group-us-sales-charts/9933'&gt;&quot;approximately 9,000,000&quot;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Nov. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Battlefield 3&lt;/td&gt;&lt;td&gt;&lt;a href='http://www.computerandvideogames.com/327893/battlefield-3-ships-12-million-copies/'&gt;&quot;12 million copies after one month&quot;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Oct. 2011&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Portal 2&lt;/td&gt;&lt;td&gt;&lt;a href='http://www.gamasutra.com/view/news/35402/Newell_Portal_2_Has_Sold_3_Million_Copies.php'&gt;&quot;3 million copies&quot;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Apr. 2011&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;I found it almost impossible to find sales numbers for PC only. Apparently MW3 and BF3 sold significantly stronger on consoles, so the PC numbers may be less.&lt;/p&gt;

&lt;p&gt;If you compare the downloads to the sales you come to the following &amp;#8220;conversion rate&amp;#8221;.&lt;/p&gt;
&lt;table width='100%'&gt;
  &lt;tr&gt;
    &lt;th&gt;Game&lt;/th&gt;&lt;th&gt;Sales&lt;/th&gt;&lt;th&gt;Downloads&lt;/th&gt;&lt;th&gt;Ratio&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Crysis 2&lt;/td&gt;&lt;td&gt;3,000,000&lt;/td&gt;&lt;td&gt;3,920,000&lt;/td&gt;&lt;td&gt;0.76&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Call of Duty: Modern Warfare 3&lt;/td&gt;&lt;td&gt;9,000,000&lt;/td&gt;&lt;td&gt;3,650,000&lt;/td&gt;&lt;td&gt;2.46&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Battlefield 3&lt;/td&gt;&lt;td&gt;12,000,000&lt;/td&gt;&lt;td&gt;3,510,000&lt;/td&gt;&lt;td&gt;3.41&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Portal 2&lt;/td&gt;&lt;td&gt;3,000,000&lt;/td&gt;&lt;td&gt;3,240,000&lt;/td&gt;&lt;td&gt;0.92&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;p&gt;The ratio is the sales numbers divided by the downloads; that is a better number means the game fared better and a number below 1 means more downloads than sales.&lt;/p&gt;

&lt;p&gt;Putting that into context Modern Warfare and Battle Field definitely had it going for them. In contrast Crysis 2 and Portal 2 are in a more dire situation with more copies downloaded than sold.&lt;/p&gt;

&lt;p&gt;How much was lost? This I honestly can&amp;#8217;t say.&lt;/p&gt;

&lt;p&gt;Modern Warfare and Battlefield fared significantly better for a number of obvious reasons. First they are basically multiplayer only; any person that got the game for the single player only, basically got ripped off. Multiplayer games have the advantage with server key authentication that you need a legitimate key to play on a legitimate server. That is one of the reasons why the server software was never publicly released for Modern Warfare. But even with pirated servers, peer pressure will basically ensure that most people get a legitimate version, so they can play with their peers that got the legit version.&lt;/p&gt;

&lt;p&gt;Many pirates are potential customers, I know a few that try before they buy. But trust in a franchise will buy you allot of people. That is one of the reasons why Left 4 Dead saw way worse sales/download ratio than Left 4 Dead 2; people trusted in the franchise. With both MW3 and BF3 there where both record breaking pre-orders, which indicates the huge trust people put into franchises.&lt;/p&gt;

&lt;p&gt;On the other hand Crysis 2 and Portal 2 are single player games. I don&amp;#8217;t know if the Crysis 2 Multiplayer has any impact on the FPS community, I for one do not hear much about it. As a result the &amp;#8220;need&amp;#8221; to have a legitimate copy is significantly less. The games must sell on the merit of the game it&amp;#8217;s self.&lt;/p&gt;

&lt;p&gt;Crysis 2 is an exceptionally difficult candidate. If you look at Crysis 2&amp;#8217;s &lt;a href='http://www.metacritic.com/game/pc/crysis-2'&gt;Metacritic score&lt;/a&gt; you will see a mostly positive press and quite some negative user reviews. I think the reason why Crysis 2 was pirated so much was that many PC games wanted to try the beast before they bought it. It was mixed feelings with Crysis 2, on the one hand Crysis was one of the icons of PC gaming and on the other hand if was perceived as a console port. The deception of many PC gamers is well seen in the mediocre sales numbers.&lt;/p&gt;

&lt;p&gt;Portal 2 something I can&amp;#8217;t really explain. But being a single player game and relatively short, it appears difficult to favor pirate conversions. This is because exposure time is a factor; if you are constantly reminded that you like this games and should buy it every time you launch the game chances are you will actually buy it. If you play though the game in something around 2 play sessions, there is not so much mental reminders and I don&amp;#8217;t know if the co-op play makes much of a difference here. (I had trouble to find friends to play with.)&lt;/p&gt;

&lt;p&gt;But at this point no one has mentioned the elephant in the room. If you look at the numbers, they all lie in the same magnitude. All PC numbers are in the 3 - 4 Mio. bracket. If you look at the average pirate behavior, most of them will download almost anything out there, what do you think the tera byte hard drives arrays are good for? There is a significant chance that most people that downloaded one of the mentioned titles also downloaded all of the other. The question is, does it make a difference in sales?&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>What makes this Website Tick</title>
   <link href="http://www.rioki.org/2011/11/30/what-makes-this-website-tick.html"/>
   <updated>2011-11-30T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2011/11/30/what-makes-this-website-tick</id>
   <content type="html">&lt;p&gt;This website is generated with &lt;a href='http://github.com/mojombo/jekyll'&gt;jekyll&lt;/a&gt; and hosted on &lt;a href='http://aws.amazon.com/s3/'&gt;Amazon S3&lt;/a&gt; but how does this all work together?&lt;/p&gt;

&lt;p&gt;First off there is jekyll, a blog aware static site generator. What jekyll does is it takes input files written in &lt;a href='http://en.wikipedia.org/wiki/HTML'&gt;HTML&lt;/a&gt;, &lt;a href='http://http://daringfireball.net/projects/markdown/'&gt;Markdown&lt;/a&gt; or &lt;a href='http://http://en.wikipedia.org/wiki/Textile_%28markup_language%29'&gt;Textile&lt;/a&gt; and applies a HTML template with &lt;a href='http://liquidmarkup.org/'&gt;liquid&lt;/a&gt;. The result of this is a fully static website.&lt;/p&gt;

&lt;p&gt;Since the input to jekyll is mostly text files, it applies itself to put the files into source control. In my case I used &lt;a href='http://git-scm.com/'&gt;git&lt;/a&gt;. As backup and for posterity I push the changes to a &lt;a href='http://github.com/rioki/www.rioki.org'&gt;public repository&lt;/a&gt; hosted by &lt;a href='http://github.com'&gt;github&lt;/a&gt;. If a team would maintain the website, this would be the main means how changes to the website are shared.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;To get the generated website to Amazon S3, you &amp;#8220;just&amp;#8221; need to upload everything to your bucket. Since this is error prone, I use jekyll-s3 which does the task for me. Currently jekyll-s3 will upload everything, but it is in the works to make it upload only changed files. For obvious security reasons the only thing I do not put under source control is the configuration for jekyll-s3, &amp;#8220;_jekyll-s3.yml&amp;#8221;.&lt;/p&gt;

&lt;p&gt;Does this solution scale? First off, S3 itself can take quite a beating before it starts to slow down. But should I become a Internet celebrity over night the strategy is clear, I would use &lt;a href='http://aws.amazon.com/cloudfront/'&gt;Amazon Cloud Front&lt;/a&gt;. Cloud Front works by distributing your content from a central sever to &amp;#8220;edge nodes&amp;#8221; distributed over the globe and it works especially well with Amazon S3.&lt;/p&gt;

&lt;p&gt;If you look at most content on the Internet, it is read only. True social media site change this a bit, but the primary content is still some form of blog, article or product page. The only common dynamic part are comments. Comments can be implemented with services such as &lt;a href='http://disqus.com/'&gt;disqus&lt;/a&gt;. Actually this page had disqus comments that I removed because they where seldom used. The way this works is that disqus operates a server that receives, stores and produces the comments, all your site needs is a bit of Java Script code.&lt;/p&gt;

&lt;p&gt;All in all I would say that a jekyll powered site on Amazon S3 can power almost any site, from small to large, serving mostly static content.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Fiddler vs. ISA-Server</title>
   <link href="http://www.rioki.org/2011/11/17/fiddler-vs-isa-server.html"/>
   <updated>2011-11-17T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2011/11/17/fiddler-vs-isa-server</id>
   <content type="html">&lt;p&gt;I recently looked into &lt;a href='http://rubyonrails.org/'&gt;Ruby on Rails&lt;/a&gt; to see what the hype is or rather was about. I even found a &lt;a href='http://railsforzombies.org/'&gt;niffty introduction&lt;/a&gt; to the subject and found along the way the nifty little language ruby. I probably will &lt;a href='/2011/02/26/cpp-rocks.html'&gt;not use it for any serious projects&lt;/a&gt;, but it is nice to know I have a new tool in my tool belt.&lt;/p&gt;

&lt;p&gt;I wanted to show a coworker my new found knowlage about this niffty language, but when trying to use gem I was locked out. I was quite aquinted with installing gems directly by downloading them and invoking gem locally, because of my previous &lt;a href='/2011/04/04/make-mine-jekyll.html'&gt;jekyll experiance&lt;/a&gt;, but there should be a better way.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;At work we are a almost pure Microsoft shop and thus use a ISA-Server as proxy. The ISA-Server has the unique feature that you authenticate with your system user account. Although this single logon feature is quite usefull, it is like so many things from Microsoft a non standard implementation. In theory the server supports other standard authentication mechanisms, but these are disabled in this instalation.&lt;/p&gt;

&lt;p&gt;I looked online and found people using &lt;a href='http://www.fiddler2.com/fiddler2/'&gt;fiddler&lt;/a&gt; to go through the ISA server. Fiddler is actually a HTTP debugging tool and works as a open proxy, but it implements the authentication required for the ISA server. And what do you know; it worked like a charm. Just fire up fiddler, use the proxy on your machine and now you get through the ISA server. The great thing is that now I know a way to get other tools to work, like git (for HTTP hosted repositories).&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>From Dust to Dust</title>
   <link href="http://www.rioki.org/2011/11/10/from-dust-to-dust.html"/>
   <updated>2011-11-10T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2011/11/10/from-dust-to-dust</id>
   <content type="html">&lt;p&gt;Nice tech demo, where is the game?&lt;/p&gt;

&lt;p&gt;Having compleated some significant work, I treated myself to a game that I wanted to try out for a long time, &lt;a href='http://from-dust.ubi.com'&gt;From Dust&lt;/a&gt;. It basically all sttlarted with the first &amp;#8220;Dev Diary&amp;#8221; video. A beautyfull landscape molded in real time with reatime simulation of water, fire and vegetation. A real technology gem.&lt;/p&gt;
&lt;object height='360' width='640'&gt;&lt;param name='movie' value='http://www.youtube.com/v/gJeUz5N3RpQ?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed allowfullscreen='true' allowscriptaccess='always' height='360' src='http://www.youtube.com/v/gJeUz5N3RpQ?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640' /&gt;&lt;/object&gt;&lt;!--more--&gt;
&lt;p&gt;I heard allot of the game and few reviews where positive. But god games where never very popular, so in this case reviews are not the gold standard. I got the game &lt;a href='http://store.steampowered.com/app/33460/'&gt;via steam&lt;/a&gt; and tried it out.&lt;/p&gt;

&lt;p&gt;The first thing that greeted me was the ubisoft launcher, that required me to create an account. Really, an account for a pure single player game?! Nice anoying DRM scheme, you know Steam has one and it works without anoying you. Next the launcher whent through the hoops of updating the game 3 times. Seriously?! Why did they not put the latest version of the game on steam?! What did I need to download then anyway?! Once I got over these DRM induced anoyances I was able to play the game.&lt;/p&gt;

&lt;p&gt;The game puts you in the position of &amp;#8220;the breath&amp;#8221;, a godly presence that can scoop up sand, water and lava. It is your task to colonise an area by sending people to visalges marked by totem poles. Each vilage will grand you a specific special power, such as jellyfying water, so you can pull a &lt;a href='http://en.wikipedia.org/wiki/Crossing_the_Red_Sea'&gt;moses stunt&lt;/a&gt;.&lt;/p&gt;
&lt;img src='/images/from_dust_sc1.jpg' width='640' /&gt;
&lt;p&gt;The game is beautifull and the simulation is crisp. The only visual snatch are the simulation boundaries. They put some effort into hiding them, but they still are quite noticable.&lt;/p&gt;

&lt;p&gt;But all in all, the game is a terain editor on steroids. Although interesting and sometimes chalanging the game is not really fun. It is nice to see that such technology works, but this is not really a game, more a tech demo. On the other hand I payed 15 EUR for it, you can&amp;#8217;t really complain.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>What no start menu?!</title>
   <link href="http://www.rioki.org/2011/10/05/what-no-start-menu.html"/>
   <updated>2011-10-05T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/10/05/what-no-start-menu</id>
   <content type="html">&lt;p&gt;With a big bang, the news hit home &lt;a href='http://tech.slashdot.org/story/11/10/04/206252/microsoft-killed-the-start-menu-because-no-one-uses-it'&gt;Microsoft killed the start menu&lt;/a&gt;. Ok the title of that slashdot post was a bit infalatory, but it is true, the start menu is being &lt;a href='http://blogs.msdn.com/b/b8/archive/2011/10/03/evolving-the-start-menu.aspx'&gt;replaced by a start screen in Windows 8&lt;/a&gt;. The reason is? No one uses the start menu&amp;#8230;&lt;/p&gt;

&lt;p&gt;Maybe, just maybe it has to do smething with the fact that the Windows Vista and Windows 7 start menus are a convoluted mess? Maybe, just maybe, it has to do some thing with the standard way for applications to add links to the start menu? Let&amp;#8217;s look into the subject a bit deeper&amp;#8230;&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;There are three things I do right after I installed Windows 7 (or Vista). I install a &lt;a href='http://www.avira.com/free'&gt;free anti virus software&lt;/a&gt;, I install a browser that is &lt;a href='http://www.mozilla.org/firefox'&gt;not Internet Explorer&lt;/a&gt; and I install &lt;a href='http://classicshell.sourceforge.net'&gt;Windows Classic Shell&lt;/a&gt;. Why? Because I can&amp;#8217;t stand the new start menu and I configure the menu to look like the simple Windows 95 version; with Aero skin.&lt;/p&gt;
&lt;img src='/images/win7-classic-shell.png' /&gt;
&lt;p&gt;Let us look at the Windows Vista and Windows 7 start menu. It takes a strong inheritance from the Windows XP start menu, that had a number of &amp;#8220;places&amp;#8221; on the right hand side. The rationale was that people are incompetent to use an explorer and navigate to those locations. The left hand side has the programs, but instead of a simple tree of menus, the new version are foldable folders and icons. To top it off, since no one manages their start menu a search function is included.&lt;/p&gt;
&lt;img src='/images/windows-7-start.png' /&gt;
&lt;p&gt;The start menu has a number of issues. The first issue is the tiny space you have to look for your application. Manual searching is definitly not an options and you basically need to resort to use the search function. On a standard install, that lived a while you will definitly find nothing.&lt;/p&gt;

&lt;p&gt;The second issue I have is places. Fine, I get the idea that there should be multiple access points for different users, but I never understood why they can not be a link in the rest of the start menu? The way this is solved in Windows Vista and Windows 7, there is no real way to add new &amp;#8220;places&amp;#8221;. I am a developer, why not have a &amp;#8220;My Source Code&amp;#8221; folder?&lt;/p&gt;
&lt;img src='/images/win7-folders-delux.png' /&gt;
&lt;p&gt;The bane of the start menu, even with a classic start menu, are the way that programs install themselves in the start menu. Sure everyone is following the Microsoft gideline, but maybe this guideline was not such a good idea in the first place. The standard way to install a program is to put it under &amp;#8220;Vendor Name/Program Name/Program Name&amp;#8221;. But in the same folder comes other stuff like a link to the uninstallation program, a link to the EULA, a link to the vendors website, a link to the manual (maybe, if they have one). The end result is that you have a convoluded mess, since you get many folders that have no real meanin; the applications could lie flat in the menu tree. (Especially when vendors cant decide what their real name is and you have two slightly different folders for two programs from one vendor.)&lt;/p&gt;

&lt;p&gt;Maybe, just maybe it may help if the menu was structured a bit differenty, like say the way Gnome does it. (Ok, Gnome 3 does not have the Application Menu anymore, but the way they structure applications did not change.) Applications should not be grouped by vendor, but by category. My categories are Development, Games, Internet, Media, Office and Utilities. But that can also extend a level, down, I have so many games installed that I even have sub categories for the games.&lt;/p&gt;
&lt;img src='/images/win7-sane-menu.png' /&gt;
&lt;p&gt;The second issue is that each program adds a bunch useless stuff. The link to the uninstaller is useless, since &amp;#8220;Add and Remove Programs&amp;#8221; is way to remove programs from windows. The link to the manual is useless since, the application should have context sensetive help and anyway, what do you think the &amp;#8220;Help&amp;#8221; menu if good for? Links to webpages are useless, since I know what vendor I have the application from and in cases I am not sure, I use a &lt;a href='http://www.google.com'&gt;search engine&lt;/a&gt;. The link to the EULA is obviously useless, since nobody reads that anyway. (For all layers out there, you could also have the same integration like manual; Help -&amp;gt; EULA.)&lt;/p&gt;

&lt;p&gt;This situation is not aleviated by the fact that editing a start menu is really non intuitive. How meany people know that the start menu is a folder structure in your users directory. It especially does not help that the start menu is a blend of yours and all users start menu. I think Microsoft should have developed a utility that even your gandma can use or implement a sane structure, insted of fiddeling with the start menu and adding more wizzbang.&lt;/p&gt;

&lt;p&gt;I use many programs regularly, the start menu is the way to go, since docking applications is just a pain when you have more than three. If the new start screen is really all the craze is a question left unawnsered.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Trauma</title>
   <link href="http://www.rioki.org/2011/10/04/trauma.html"/>
   <updated>2011-10-04T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/10/04/trauma</id>
   <content type="html">&lt;p&gt;I bought &lt;a href='http://www.humblebundle.com/'&gt;the humble frozen synapse bundle&lt;/a&gt;. The main reason I bought it was for &lt;a href='http://www.frozensynapse.com/'&gt;Frozen Synapse&lt;/a&gt;. I had heard allot about that game and what can you do wrong with pay what you want? But what I think of Frozen Synapse is a different story; what really surprised me was &lt;a href='http://www.traumagame.com/'&gt;Trauma&lt;/a&gt;.&lt;/p&gt;
&lt;img src='/images/trauma2.jpg' /&gt;
&lt;p&gt;Trauma is an award winning game and really merits these awards. (In contrast to blueberry garden.) Normally I do not give much for awards in general and the game completely passed me by and is a real gem.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;Traumatized by a car accident a young woman finds herself in hospital. Four dreams describe her turmoil and you need to help her resolve them.&lt;/p&gt;
&lt;img src='/images/trauma1.jpg' width='640' /&gt;
&lt;p&gt;The game is a modern take on the classical still frame puzzle game. The graphics are altered still images that cleanly blend reality with fiction and the visual impression is stunning. Especially the animations that take the realistic environment and completely destroy and alter it.&lt;/p&gt;

&lt;p&gt;The only irritation I had where the obviously German environment and German accent in the main character&amp;#8217;s voice. But I think that is a personal miss trait.&lt;/p&gt;
&lt;object height='360' width='640'&gt;&lt;param name='movie' value='http://www.youtube.com/v/AHWSJiJUWEc?version=3&amp;amp;hl=en_US' /&gt;&lt;param name='allowFullScreen' value='true' /&gt;&lt;param name='allowscriptaccess' value='always' /&gt;&lt;embed allowfullscreen='true' allowscriptaccess='always' height='360' src='http://www.youtube.com/v/AHWSJiJUWEc?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640' /&gt;&lt;/object&gt;
&lt;p&gt;Although the game is short, it does not feel short coming. It is worth picking up. Check out the &lt;a href='http://www.traumagame.com/'&gt;authors site&lt;/a&gt; or get it in the &lt;a href='http://www.humblebundle.com/'&gt;Humble Bundle&lt;/a&gt;, while it still lasts.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Someone Think of the Children!</title>
   <link href="http://www.rioki.org/2011/10/04/think-of-the-children.html"/>
   <updated>2011-10-04T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/10/04/think-of-the-children</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.deadislandgame.com'&gt;Dead Island&lt;/a&gt; had allot going for it. The cinematic announce trailer is one of the best trailers for a video games ever. It is brilliant because it tells a very personal story, the tragic events that befall a young family at the brink of a zombie virus outbreak.&lt;/p&gt;
&lt;object height='360' width='640'&gt;
    &lt;param name='movie' value='http://www.youtube.com/v/lZqrG1bdGtg?version=3&amp;amp;hl=en_US' /&gt;
    &lt;param name='allowFullScreen' value='true' /&gt;
    &lt;param name='allowscriptaccess' value='always' /&gt;
    &lt;embed allowfullscreen='true' allowscriptaccess='always' height='360' src='http://www.youtube.com/v/lZqrG1bdGtg?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640' /&gt;
&lt;/object&gt;
&lt;p&gt;Many trailers for games are violent, but most are meaningless. But in the Dead Island trailer it has sense; a father frees his daughter from zombies. Tragically, the rescue was futile since the daughter turned zombie attacks her own father ending in all terribly dying. This trailer has the quality of a classic Greek tragedy.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;The human nature of the trailer comes to life, because a father fights for his loved ones. This is especially augmented by the memento style presentation, where the full story is mostly told backwards and in reverse. Picking up your child in reverse is letting go; leaving your loved one to the slaughter of undead monsters.&lt;/p&gt;

&lt;p&gt;If you go though town you will see many people, among them old and young. Now picture the zombie apocalypse happening here and now. Ask yourself where is my mother, where is my child, where is are my loved ones. Think of the immense emotional struggle you need to over come, not to get reduced to an animal fighting for survival.&lt;/p&gt;

&lt;p&gt;You need to give it to them Dead Island really tried to capture that essence. If is unfortunate that this could not be captured in a video game of this format.&lt;/p&gt;
&lt;img src='/images/Dead_island_hotel_bungalow_15_teddy_bear.jpg' width='640' /&gt;
&lt;p&gt;But there is one huge elephant in the room, you just can&amp;#8217;t ignore. There are no children in Dead Island! If you look between the lines, you can see that children where planed and either where taken out or never implemented. In three cases children are referenced. The audio sample clearly belongs to a child, but it is an adult character talking. Why where the children taken out of the game?! This makes the game less meaningful!&lt;/p&gt;

&lt;p&gt;True, the Dead Island trailer sparked quite some controversy. But this has been a long trend in gaming, violent games have neither bystanders nor children. Occasionally, there might be children, but they are invincible, like in &lt;a href='http://fallout.bethsoft.com'&gt;Fallout&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;And why is that? Because publishers don&amp;#8217;t want to see evil people doing evil things to innocent AI characters and uploading that to &lt;a href='http://youtube.com'&gt;youtube&lt;/a&gt;. Obviously they are afraid of the controversy that it might spark and the loss of image.&lt;/p&gt;

&lt;p&gt;To a certain degree I can understand the notion. But Dead Island, this is ridiculous, since even children as survivors and quest givers where removed. Brining a teddy bear a child for comfort, so she can sleep, is understandable and a noble cause; bringing a teddy bear to a twenty something is ridiculous. Get your act together! This is the zombie apocalypse! For crying out loud!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>rioki.org goes to S3</title>
   <link href="http://www.rioki.org/2011/09/24/rioki-on-s3.html"/>
   <updated>2011-09-24T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/09/24/rioki-on-s3</id>
   <content type="html">&lt;p&gt;I have tried noumerous hosting solutions over the years. Up until recently, when I switched to &lt;a href='https://github.com/mojombo/jekyll'&gt;jekyll&lt;/a&gt;, my requirement was a &lt;a href='http://en.wikipedia.org/wiki/LAMP_Stack'&gt;LAMP stack&lt;/a&gt;. I ran a number of CMS software, such as &lt;a href='http://sourceforge.net/projects/mambo/'&gt;Mambo&lt;/a&gt; (now &lt;a href='http://www.joomla.org/'&gt;Joomla&lt;/a&gt;), &lt;a href='http://typo3.com/'&gt;Typo3&lt;/a&gt;, &lt;a href='http://dokuwiki.org'&gt;Dokuwiki&lt;/a&gt; or &lt;a href='htpp://drupal.org'&gt;Drupal&lt;/a&gt;. I tried different solutions, form dedicated hosting over root servers to virtual private servers. Each solution depended on my needs, at some point I ran 5 website and a dedicated mail service. But my needs have shrunk, espceially since I dicovered jekyll.&lt;/p&gt;

&lt;p&gt;Currently I have one website (this one) and it is fully static. This requirement especially does not warant a fully fledged VPS. For some time I ran my site off &lt;a href='http://pages.github.com'&gt;github pages&lt;/a&gt;. But since github does not allow jekyll plugins, the entiere thing was a big hack. So I looked for static hosting solutions. I looked into a number of &amp;#8221;&lt;a href='/2011/08/05/what-cloud.html'&gt;cloud&lt;/a&gt; storage&amp;#8221; solutions, but none really worked for websites, save &lt;a href='http://aws.amazon.com/s3/'&gt;Amazon S3&lt;/a&gt;. So now &lt;a href='http://www.rioki.org'&gt;rioki.org&lt;/a&gt; runs off Amazon S3; and it is blazing fast!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Dead Island</title>
   <link href="http://www.rioki.org/2011/09/22/dead-island.html"/>
   <updated>2011-09-22T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/09/22/dead-island</id>
   <content type="html">&lt;p&gt;&lt;a href='http://deadisland.deepsilver.com'&gt;Dead Island&lt;/a&gt; was one of the games that I really was looking up to. It all started with the cinematic trailer. It gave the zombie apocalypse a human touch; these are real families that are torn apart. It was a hart shattering experience, that made you mad at those zombies!&lt;/p&gt;
&lt;object height='360' width='640'&gt;
    &lt;param name='movie' value='http://www.youtube.com/v/lZqrG1bdGtg?version=3&amp;amp;hl=en_US' /&gt;
    &lt;param name='allowFullScreen' value='true' /&gt;
    &lt;param name='allowscriptaccess' value='always' /&gt;
    &lt;embed allowfullscreen='true' allowscriptaccess='always' height='360' src='http://www.youtube.com/v/lZqrG1bdGtg?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640' /&gt;
&lt;/object&gt;
&lt;p&gt;As &lt;a href='http://www.escapistmagazine.com/videos/view/zero-punctuation'&gt;Yahtzee&lt;/a&gt; very nicely pointed out, there is actually no use in getting hyped up in a game. So I laid back and waited, without much aspirations and now the game is out. I am not fully through the game, but here is what I think about it.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;The first thing that sinks in on you is the atmosphere. Allot of effort was done to get the tome right, a paradise ravaged by zombies. But somehow the tone feels slightly off. The first issue that comes to mind is the game mechanics. Picture that, you wake up confused, the hotel speakers shrill something about evacuation, you see blood and dead people everywhere; and the first thing you do is loot other peoples baggages. This is not helped much with helpful icons on them advertising their usability.&lt;/p&gt;
&lt;img src='/images/deadisland-all-all-screenshot-001.jpg' width='640' /&gt;
&lt;p&gt;The game really fails the mark of the tragic tone set by the trailer. Sure, you need to help out people that have lost someone or got separated, but is all just amounts to a glorious fetch quest. For once the voice acting is quite good, too bad the facial impressions don&amp;#8217;t reflect that.&lt;/p&gt;

&lt;p&gt;Mechanically the game fairs quite well, the world is huge and realistic and the combat is quite satisfying. The focus on a real world limits your options to bias melee weapons, but it all works out.&lt;/p&gt;

&lt;p&gt;What I find annoying is the leveling mechanic. Over time you level up gaining the ability to deal more damage. To keep the playing field level the world levels with you, that is the enemies and weapons have better and better stats. What really gets to me is that this downgrades existing weapons so you need to keep on picking up new and better weapons. But the weapons are not really better, they just have better stats. For example the &amp;#8220;Flimsy Kitchen Knife&amp;#8221; you just picked up is way better than the &amp;#8220;Flimsy Kitchen Knife&amp;#8221; you picked up 5 levels ago.&lt;/p&gt;
&lt;img src='/images/deadisland-all-all-screenshot-002.jpg' width='640' /&gt;
&lt;p&gt;The next issue I have are the quests. But they all are some variation on a fetch quest, like you are the only person able to do anything except cowering in a safe location. In that respect the world seams static; even though some people are talking about being &amp;#8220;proactive&amp;#8221; or &amp;#8220;building a fortification&amp;#8221; they just stand around doing nothing.&lt;/p&gt;

&lt;p&gt;Graphically the world looks quite nice. It really adds to the realism of everything. This makes is the more immersion breaker when something goes wrong. The world is littered with debris and misc items, but most of them are not physics enabled. For reference surfboards are normally made from resin, they break when you drop them on a hard surface while carying&amp;#8230;&lt;/p&gt;

&lt;p&gt;All in all Dead Island is a fun game to play, though not a perfect one.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Passphrases are Stronger then Passwords.</title>
   <link href="http://www.rioki.org/2011/09/09/pwd-security.html"/>
   <updated>2011-09-09T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/09/09/pwd-security</id>
   <content type="html">&lt;p&gt;What is a good password? We all know the answer to this question. A good and thus safe password is long, has mixed case characters, number, special characters and is not a word in any language. On first glance this seems always like a password that is hard to remember. If you want to check how good your password is, there is a &lt;a href='http://howsecureismypassword.net/'&gt;nifty website for this&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you follow these guidelines &amp;#8220;dKmeoD2!kkdpoqaEs5&amp;#8221; sounds like a good password, but can you remember it? These &amp;#8220;safe&amp;#8221; passwords are really hard to remember. But there are long passwords or rather passphrases that are easy to remember, such as &amp;#8220;Oh no! 2 nuns on the mountain.&amp;#8221;. Yes, this is a real sentence. But it fulfills all the requirements, mixed case, numbers, special characters and is not a word.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;Wait?! But there are words, and they they are from the English language? The important thing to remember is that, you are not supposed to use one (or two) word. When you have many words the benefit of a dictionary attack does not hold up. Lets examine a simple example, take a password with 6 characters and 6 words. There are roughly 100 characters that can be input with a standard keyboard and lets take around 1.000 words that are commonly used. (There are more words in the English language, but we are using a conservative estimate here.) In the case of the password we are talking about 6¹⁰⁰ = 6.53×10⁷⁷ possible combinations versus 6¹⁰⁰⁰ = 1.42×10⁷⁷⁸. So even if the tacker knows you are using words and the pattern for your phrase, the sentence is an order of an order of a magnitude better.&lt;/p&gt;

&lt;p&gt;One of the biggest advantages of using a passphrase instead of a password is that the passphrase is long. This is especially interesting since that determines how hard the password is to crack. Since &lt;a href='http://en.wikipedia.org/wiki/Moore%27s_laww'&gt;Moore&amp;#8217;s Law&lt;/a&gt; is working against us in this case it is important, not to have passwords that are a few bits longer but significantly more complex.&lt;/p&gt;

&lt;p&gt;Long passwords are especially important, because of the danger of a &lt;a href='http://en.wikipedia.org/wiki/Rainbow_Table'&gt;rainbow table&lt;/a&gt; attack. This attack scheme works against the password hash, that was retrieved using for example a &lt;a href='http://en.wikipedia.org/wiki/SQL_Injection'&gt;SQL Injection&lt;/a&gt;. The rainbow table stores all hashes for a given set of passwords. The attacker then just has to look up the hash and then has the password. The caveat with rainbow tables is that they are quite large and so they fit into memory only encompass a certain range, such as passwords up to 6 characters. The important bit to remember is that a successful attack is constant time effort, but once your password is to complex the attack needs to fall back on a rather brute force attack.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>libxml-0.5 released</title>
   <link href="http://www.rioki.org/2011/08/21/libxmlmm-0-5.html"/>
   <updated>2011-08-21T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/08/21/libxmlmm-0-5</id>
   <content type="html">&lt;p&gt;&lt;a href='http://github.com/rioki/libxmlmm'&gt;libxmlmm&lt;/a&gt; is an effort by me to maintain a C++ wrapper for &lt;a href='http://xmlsoft.org/'&gt;libxml2&lt;/a&gt; that only depends on libxml2 and standard C++. It features a full XML DOM with XPath queries and the whole shebang offered by libxml2 (validation, DTD, etc.)&lt;/p&gt;

&lt;p&gt;I am proud to anounce the release of version 0.5 of libxmlmm. Only minor fixes where applied to the code and so marks the heigh stability of the code. &lt;a href='https://github.com/rioki/libxmlmm/tree/r0.5/include/libxmlmm'&gt;Check out the version 0.5 of libxmlmm.&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Working Around Jekyll's Safe Mode</title>
   <link href="http://www.rioki.org/2011/08/21/jekyll-safemode.html"/>
   <updated>2011-08-21T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/08/21/jekyll-safemode</id>
   <content type="html">&lt;p&gt;&lt;a href='http://github.com'&gt;github&lt;/a&gt; has this nifty service &lt;a href='http://pages.github.com'&gt;github pages&lt;/a&gt; and under the hood they use &lt;a href='http://github.com/mojombo/jekyll/'&gt;jekyll&lt;/a&gt;. The concept is quite simple, you maintain a jekyll site lives in a special reopsitory and they transform it to plain HTML using jekyll.&lt;/p&gt;

&lt;p&gt;The biggest problem I have with jekyll is that it is quite limited. To combat this jekyll has a plugin system, where you add extensions and modifications under the _plugin folder in your jekyll site. A feature that I kind of &amp;#8220;need&amp;#8221; to operatre &lt;a href='http://www.rioki.org'&gt;this site&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The problem with github pages is that they operate jekyll with the &amp;#8220;safe mode&amp;#8221;. This disables the plugin feature and renders github pages unsuable for me.&lt;/p&gt;

&lt;p&gt;Since I am a cheap sod, I still want to use the service. The trick is that you don&amp;#8217;t need to have a jekyll site and can just put plain HTML pages in the service. The simple solution, tha master branch only contains the processed HTML files and the actual jekyll site is stored under the branch raw. You can see my &lt;a href='http://github.com/rioki/libxmlmm'&gt;current stup&lt;/a&gt;.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Age of Empires Online</title>
   <link href="http://www.rioki.org/2011/08/17/aoe-online.html"/>
   <updated>2011-08-17T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/08/17/aoe-online</id>
   <content type="html">&lt;p&gt;It totally passes by me that Microsoft had developed a new Age of Empires title, but a colleague of mine told me. I kind of though that the Age of Empires franchise kind of died with Ensemble Studios closing doors. Being an avid Age of Empires fan, I decided to give the free to play variation a spin. Yesterday the game went public and I quickly installed to game.&lt;/p&gt;
&lt;img src='/images/aoeo1.jpg' width='640' /&gt;
&lt;p&gt;The installation procedure was kind of awkward, since you only install the launcher and any missing frameworks. The actual game is downloaded and installed though the launcher, so it lets you wait a good while. The full installation procedure took around half an hour, though it might be that lots of people downloaded the game at the same time.&lt;/p&gt;

&lt;p&gt;The first impression I got from the trailer and art was that the art direction of the game wanted to make the entire thing more friendly. Although quite funny, the trailer has difficulty of selling the game to me. But you should not judge the game by its first impression; I liked and played lots of &lt;a href='http://www.popcap.com/games/plants-vs-zombies/pc'&gt;Plant vs Zombies&lt;/a&gt; and that is cartoony and cute.&lt;/p&gt;
&lt;!--more--&gt;&lt;object height='390' width='640'&gt;
  &lt;param name='movie' value='http://www.youtube.com/v/h3jKvPY6fK4?version=3&amp;amp;hl=en_US' /&gt;
  &lt;param name='allowFullScreen' value='true' /&gt;
  &lt;param name='allowscriptaccess' value='always' /&gt;
  &lt;embed allowfullscreen='true' allowscriptaccess='always' height='390' src='http://www.youtube.com/v/h3jKvPY6fK4?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640'&gt;
  &lt;/embed&gt;
&lt;/object&gt;
&lt;p&gt;The first thing you need to do is choose your culture you want to cultivate. At the current time you can chose from the Greek or Egyptian cultures, but the &lt;a href='http://ageofempiresonline.com'&gt;official website&lt;/a&gt; hints at integrating the Celts and Persians later. This choice is quite critical, since you will probably invest much time if you want to play Age of Empires Online seriously.&lt;/p&gt;

&lt;p&gt;The game is built around the &amp;#8220;Home Town&amp;#8221; concept that was introduced in Age of Empires 3. In your home town you can customize bunch of stuff and it is clear that they are aiming at a certain Farm Ville style interaction with your fiends. &amp;#8220;Oh! Oh! Look at my capital city!&amp;#8221;.&lt;/p&gt;

&lt;p&gt;In the home town are a few special buildings that let you chose and customize your tech and perks. Similar to Age of Empires 3, you gain points during missions (called quests here) that can be used for perks. This creates a whole meta game that I never liked with Age of Empires 3, because it creates an imbalance between casual and hardcore player. Not only does the experienced player understand the mechanics better, he also has nifty perks you don&amp;#8217;t.&lt;/p&gt;

&lt;p&gt;In your home town (and other towns) you have few special characters that give you quests and you have the option to accept them. In theory that gives you a number of options to chose from. But you need to go through all tutorial style first and the learning curve is REALLY SHALLOW. I played about three hours and am still taught how to fish and have only one offensive unit, a spearman.&lt;/p&gt;

&lt;p&gt;The gameplay is quite standard real time strategy. With the twist that they removed all expert commands. The height of the interface are multiple way points and groups. No command chaining or a difference between attack and move. I must admit that these commands seldom are used by casual players, but they do not harm and it feels awkward if you play without them.&lt;/p&gt;

&lt;p&gt;What really kicks me off is the art style. Not really that it&amp;#8217;s cartoony, but because it add really stupid &amp;#8220;cute&amp;#8221; things. For example the spearmen are those bulky men. They act and look like cave men. One thing that is really useless, each time someone dies they get a sassy grave. Just fading the fallen body away was not appropriate?!&lt;/p&gt;
&lt;img src='/images/aoeo2.jpg' width='640' /&gt;
&lt;p&gt;I already touched on the shallow learning curve, but that is really what killed the game for me. I player solid three hours and I just escaped to the bronze age, have only one offensive unit and am still getting stupid tutorial quests. The last quest I did was go fish. Not only that, I was kind of &amp;#8220;bullied&amp;#8221; by the harbor master to help him out, since he did not get the work done. Seriously?! I am a warlord, for science sake! If you don&amp;#8217;t get your fish on time I will have you beheaded!&lt;/p&gt;

&lt;p&gt;It appears that the game is designed to bind you for many hours, like so many &amp;#8220;casual&amp;#8221; games. Sure the tutorial levels might be of interest, if you want to get non hard core player to play the game, but that is done on the expense of the more experienced players. I do not really mind the intended monetization strategy, where you upgrade your civilization and can buy content packs, since I see it as a cleverly build demo version. But please let me &amp;#8220;waste time&amp;#8221; in the medium to advanced levels, instead of the beginner levels.&lt;/p&gt;

&lt;p&gt;As basically all real time strategy games, it is ultimately geared to be played against friends. But at the current state I am in, I have no inclination to play mass spear men against a friend. (I do not even know how that works, since I did not see an option for that.) Also at the current rate of progression, I an bored to death and will certainly not continue the &amp;#8220;campaign&amp;#8221;. The result is that I will certainly never reach a level where I even makes sense to play with friends or even buy an upgrade pack.&lt;/p&gt;

&lt;p&gt;The game is definitely nothing for hard core real time strategy players and I am not sure that the casual crowd will be taken by storm. Especially, since the average casual player has no brand awareness for Age of Empires. Great way to kill a franchise, Microsoft.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>What Cloud?</title>
   <link href="http://www.rioki.org/2011/08/05/what-cloud.html"/>
   <updated>2011-08-05T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/08/05/what-cloud</id>
   <content type="html">&lt;p&gt;Cloud computing is now becoming mainstream. But what is cloud computing? Actually it is noting, it&amp;#8217;s just a buzzword that is used for different concepts.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2 id='google_docs_office_365_and_windows_live'&gt;Google Docs, Office 365 and Windows Live&lt;/h2&gt;

&lt;p&gt;There are many so called cloud services. Some call them software as a service, but if you think about it these are just web applications. True they are quite complex web applications, built to mimic desktop applications, but they still are loaded from a web server and running in the browser. Chances are, they are running on some large server farm, let&amp;#8217;s call it a cloud for now and that is needed to handle all the client requests. Are you tapping into the awesome power of the cloud? Not really, 95% of the application is running in your browser on your machine. The only advantage you get is that the data is stored on some server and you have access to it from anywhere. On the subject of cloud storage we will come later.&lt;/p&gt;

&lt;p&gt;Let&amp;#8217;s face it these are just application running in the browser. Honestly, it is quite awesome how they bent HTML and JavaScript to do these awesome feats. But it&amp;#8217;s like someone building a functioning spaceship from scrap metal and duct tape, awesome but not really the right tools for the job. The only advantage you get is that you do not need to install the program. First installing a program is not such a big deal, it takes around the same time to log into those services and you do it only once. Even in those cases where installation is not feasible there are often &lt;a href='http://portableapps.com/apps/office/libreoffice_portable'&gt;portable versions&lt;/a&gt; of your favorite tools.&lt;/p&gt;

&lt;h2 id='cloud_storage'&gt;Cloud Storage&lt;/h2&gt;

&lt;p&gt;A number of services provide so called cloud storage such as &lt;a href='http://aws.amazon.com/s3/'&gt;Amazon S3&lt;/a&gt; or &lt;a href='http://www.backblaze.com/'&gt;Back Blaze&lt;/a&gt;. Basically you have two types of services, a content distribution network and remote storage.&lt;/p&gt;

&lt;p&gt;Remote storage has basically not much to do with the traditional distributed concept of cloud computing, since it can be all in one place. You are leasing a disk space on some server farm. This can either be by the MB or a flat rate. This if often used as a remote backup solution or file storage and transfer to other third parties. The big marketing ring is that you have access to your data from everywhere. The down side is that so has everyone else, as a result security is paramount if you are using such a service. The good news is that the hosting provider probably has a better backup strategy than the average Joe and remote backups are a good idea, in case of a catastrophic data loss (eg. Fire).&lt;/p&gt;

&lt;p&gt;A content distribution network is something entirely different. The basic idea is to provide your users fast access to your files and is something website operators should look into. Content distribution networks are basically built up in the way that you submit the files and these are then replicated around the world. The user then gets the server assigned that is closes to her, which reduces download times. But for this to make a real difference, you need a large number of users and lots of content.&lt;/p&gt;

&lt;h2 id='amazon_ec2_and_other_vps_hosters'&gt;Amazon EC2 and other VPS hosters&lt;/h2&gt;

&lt;p&gt;The &lt;a href='http://aws.amazon.com/ec2/'&gt;Amazon EC2&lt;/a&gt; &amp;#8220;cloud&amp;#8221; is basically a virtual private server (VPS) hoster that provides hourly rates. There is no big difference between Amazon and any &amp;#8220;normal&amp;#8221; hoster. It&amp;#8217;s like hotels, there are hotels you can rent hourly, but that does not make them special. They are just used in a different fashion.&lt;/p&gt;

&lt;p&gt;What especially makes Amazon &amp;#8220;not special&amp;#8221; is that you need to handle the starting and stopping of your nodes on your own. So not only do you have to develop a distributed application, you also have to develop the entire management application. The &amp;#8220;I don&amp;#8217;t care how it works&amp;#8221; mentality to most cloud services is definitely not applying here.&lt;/p&gt;

&lt;p&gt;Although services, like those provided by amazon, are quite interesting when you have strongly fluctuating load, they are quite expensive. For every server that you keep running all the time, it may be cheaper to simply rent a normal dedicated VPS or root server.&lt;/p&gt;

&lt;h2 id='google_apps_engine'&gt;Google Apps Engine&lt;/h2&gt;

&lt;p&gt;The &lt;a href='http://code.google.com/appengine/'&gt;Google Apps Engine&lt;/a&gt; is an interesting concept and I have not seen any other doing the same thing. It is basically a dedicated web hoster that provides Java or python scripting for web applications. This service is remarkable for the fact that Google will ramp up the number and locations of servers deadening on load.&lt;/p&gt;

&lt;p&gt;This service is quite attractive for small to medium websites, since there is a generous free quota and the service can react easily to load spikes. Getting &lt;a href='http://en.wikipedia.org/wiki/Slashdot_effect'&gt;slashdotted&lt;/a&gt; is a real threat to small websites and with the Google Apps Engine they can sail through it with ease.&lt;/p&gt;

&lt;h2 id='conclusion'&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;There is much confusion and marketing claptrap around the concept of cloud computing and I personally think there is no such thing as cloud computing. True there are interesting and not so interesting services out there but none warrant the cloud computing word. Cloud computing is a meaningless buzzword, just like Web 2.0.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Code Reviews</title>
   <link href="http://www.rioki.org/2011/07/14/code-reviews.html"/>
   <updated>2011-07-14T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/07/14/code-reviews</id>
   <content type="html">&lt;p&gt;I will take a bold stance, experienced and dedicated programmers do not need code reviews. The reason is simple, they produce the cleanest and safest code you can imagine by pure virtue of caring for their craft and taking pride in their work.&lt;/p&gt;

&lt;p&gt;I recently read a &lt;a href='http://blogs.sas.com/sasdummy/index.php?/archives/264-Are-you-too-good-for-code-reviews.html'&gt;not so good&lt;/a&gt; opinion on the subject. The line that most struck me was when it mockingly states that the original Unix developers did not do code reviews. But to me, the bold statement &amp;#8220;We were all pretty good coders.&amp;#8221; rings so true. I have seen great developers produce great code that no amount of code review could make better. But there must be some truth to all those quality improving precipices handed to us over the decades?&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;At the end of &lt;a href='http://blogs.sas.com/sasdummy/index.php?/archives/264-Are-you-too-good-for-code-reviews.html'&gt;said article&lt;/a&gt; was a reference to a &lt;a href='http://scientopia.org/blogs/goodmath/2011/07/06/things-everyone-should-do-code-review/'&gt;more refined opinion on the subject of code review&lt;/a&gt; that redeemed my opinion on the subject. The basic gist of the article is that the main benefit of code reviews is not the fact of finding bugs, but someone else is looking at the code. The first effect being that someone else learns to know the code better and as a result this knowledge can help when filling in. The other is the fact that the review requires the developer to think about other people reading his code and as a result will create more readable and better documented code. (Think about enforcing coding guidelines.) But nevertheless, code reviews basically address situations where developers don&amp;#8217;t do the best job they can. Code reviews are the ultimate weapon to weed out or keep in line rogue developers.&lt;/p&gt;

&lt;p&gt;In a perfect world I would be working with a small team of dedicated developers. No code ownership and frequent and open communication creates an atmosphere of trust and knowledge. In this perfect world systematic code reviews are a waste of time. A certain amount of code review is still done, since everybody sees all the code and bits of code that are not optimal get refactored into something optimal.&lt;/p&gt;

&lt;p&gt;I admit that a certain amount of scrutiny should be placed on developers who join a group. Code reviews are a good way to evaluate the new developers skill and build (or destroy) trust in what he does.&lt;/p&gt;

&lt;p&gt;It has become a industry wide trend to review every line of code that gets into the code base, preferably before committing the changes. I think that this practice is a waste of time (and thus money) and misses the point. The code review tries to serve as quality gate that weed out bad code. But the real issue is that bad code was written in the first place. The real problem is that many companies employ novice to medium programmers without really knowing it. This mentality that monkeys with IDEs will create great software, if only the process is right is complete and utter nonsense. Especially, since they follow the reasoning that two monkeys doing code review will improve their code. Bannana!&lt;/p&gt;

&lt;p&gt;Code reviews only work in two situations: Either an experienced developer looks over the code of a novice developer to find any deficiencies or the novice developer looking over the code of an experienced developer to learn style and tricks.&lt;/p&gt;

&lt;p&gt;Code reviews have their place in a developers toolbox. But it would rather help if companies would focus more on talent and less on process.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Section 8</title>
   <link href="http://www.rioki.org/2011/07/05/section8.html"/>
   <updated>2011-07-05T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/07/05/section8</id>
   <content type="html">&lt;p&gt;&amp;#8230; almost perfect.&lt;/p&gt;

&lt;p&gt;&lt;a href='http://warisprejudice.com/'&gt;Section 8: Prejudice&lt;/a&gt; is a real breath of fresh air in the shooter scene. The game is a SciFi shooter where you are playing as a space marine in the distant future. The game is intended as a multiplayer game but has a 6 hour &amp;#8220;tutorial&amp;#8221; campaign. The campaign is fun an the narrative makes sense but still keeps to the core of the multiplayer gameplay.&lt;/p&gt;
&lt;img src='/images/prejudice_1.jpg' width='640' /&gt;&lt;!--more--&gt;
&lt;p&gt;You are playing as a space marine, with a cool combat armor and futuristic but still believable weapons and tech. What really made my day was, that this is the first game that has believable health regeneration. It&amp;#8217;s not your health, it&amp;#8217;s your personal shield and armor damage. And if the shield energy is depleted you need to wait a short while until it rebuilds. You really know you are in trouble when a female voice whispers in your ear &amp;#8220;Shield Down&amp;#8221;. Your armor can also get damaged, even though it repairs it&amp;#8217;s self, that is quite slow and you might want to either repair it yourself (you have a tool equipped) or get repaired by your fellow team mate.&lt;/p&gt;

&lt;p&gt;What also really is a nice feature is the fact that there are no classes. You have 6 different preconfigured loadouts that you can change to your harts desire. That means you can have an &amp;#8220;engineer&amp;#8221; with a sniper rifle if you like.&lt;/p&gt;
&lt;img src='/images/prejudice_2.jpg' width='640' /&gt;
&lt;p&gt;The environments are actually quite nice to look at and really make a difference from the gritty dirt heaps you seem to play in recently. Even though it is set in a SciFi environment, it is the type that feels believable. The look and feel of the technology and locales really feels like it belongs there, without loosing the awe and excitement of the exotic setting.&lt;/p&gt;

&lt;p&gt;As I said in the very first sentence: &amp;#8220;Almost perfect&amp;#8221;. The biggest flaw in the game is the set of the features those users that are incapable to use a mouse. Although you have a hi-tech armor suit, that actually has a neat sprint function, your normal movement is slow like hell. You can basically forget strafing, it really does not make a difference. They tried to add some dynamic, with the nifty jet pack (rather jump jet), but that adds little to the overall feeling or immobility. If slow targets are hard to aim at you have a built in auto aim. Although it has a cooldown, it really means that you can basically ditch the idea of dodging out of harms way. So unless you push a buddy into the targeting radical of the other player, your only option is to shoot first. Finally even when the cooldown of the auto aim is recharging you have the built in aim assist feature; bring the center of the screen close any player and you score a nice head shot.&lt;/p&gt;
&lt;img src='/images/prejudice_3.jpg' width='640' /&gt;
&lt;p&gt;The game really shows allot of potential and for an independent studio is a real achievement in a sea of meritocracy.&lt;/p&gt;
&lt;object height='390' width='640'&gt;
    &lt;param name='movie' value='http://www.youtube.com/v/YDStDATP7M8?version=3&amp;amp;hl=en_US' /&gt;
    &lt;param name='allowFullScreen' value='true' /&gt;
    &lt;param name='allowscriptaccess' value='always' /&gt;
    &lt;embed allowfullscreen='true' allowscriptaccess='always' height='390' src='http://www.youtube.com/v/YDStDATP7M8?version=3&amp;amp;hl=en_US' type='application/x-shockwave-flash' width='640' /&gt;
&lt;/object&gt;
&lt;p&gt;The game is based on the Ureal 3 engine; maybe creating a mod that tweaks the flaws out might be an idea&amp;#8230;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Duke was fun...</title>
   <link href="http://www.rioki.org/2011/06/30/duke-was-fun.html"/>
   <updated>2011-06-30T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/06/30/duke-was-fun</id>
   <content type="html">&lt;p&gt;Everybody agrees, Duke Nukem Forever got really bad reviews. You can basically put the reviews into two categories, those that complained that Duke Nukem Forever was not enough like Call of Duty and those that complained that Duke Nukem Forever was not enough like the original Duke Nukem 3D. But I tend to disagree and I think they kind of miss the point. Sure the game is not perfect, but the game was fun!&lt;/p&gt;
&lt;img src='/images/dnf_screen_1.jpg' /&gt;&lt;!--more--&gt;
&lt;p&gt;I assume that there are very few people that where able to keep their hopes high for the duration of all 12 years. For me, I basically assumed they kept the thing going as a publicity stunt at around 2000. But if you did then, definitely the game is a disappointment. The important part is that 12 years development are a management failure on the side of 3D Realms and has nothing to do with the final game. By the way, for those that dig deeper in the development history of Duke Nukem Forever, will learn the game we got today was approximately only 5 years in development, the previous attempt was scratched. It is still a bad score, but no as terrible as everybody said.&lt;/p&gt;

&lt;p&gt;So if you take the game as it is, it is not that bad. You know what? I had a blast playing the game. Yes the graphics are not up to par, yes the puzzles are easy, yes the story is ridiculous, but the entire experience hit the right nerve.&lt;/p&gt;

&lt;p&gt;This was a game where I really had fun playing. It wasn&amp;#8217;t deep, compelling, interesting or intriguing; it was fun. The speed of movement, the almost unlimited availability of ammo, the high number of relative simple enemies and the relative complex timed boss fights really where timed and executed in a manner that was just plain fun.&lt;/p&gt;
&lt;img src='/images/dnf_screen_2.jpg' /&gt;
&lt;p&gt;Many have said that games have evolved since the conception of Duke Nukem Forever and the game was just not up to par. But in my opinion those few things that followed the common &amp;#8220;modern&amp;#8221; trend rather deterred from the experience than added to it.&lt;/p&gt;

&lt;p&gt;Seriously, since when where quick time events fun? Tapping repeatedly on the space bar to open a door or keying in a specific sequence to kill a boss where simply just annoying.&lt;/p&gt;

&lt;p&gt;The fact that you can only carry two weapons, because your average console player is incapable to count to three, is just utter nonsense. Yes, I know that the official reason is that they did not find a way to map the weapons to the controller; but if I can select a weapon with the mouse wheel and specific with mouse button 4 (shock rifle) and 5 (rocket launcher) in Unreal Tournament; then maybe it is possible to map 5 weapons to a controller with 11 keys and two analog sticks. You know what, I do not want to make a guess of what is to come next and chose my weapon, I want to have the choice in the encounter. This lead to the weird situation that the RPG just happens to lie around when the next boss was up to come.&lt;/p&gt;
&lt;img src='/images/dnf_screen_3.jpg' /&gt;
&lt;p&gt;With health regeneration, I was not sure if that actually made the game harder or simpler. Sure you could just hide behind cover, like a school girl and poof your ego was fully recharged. But on the other hand, in the original Duke Nukem 3D you could take a few rockets to the face and still run around. With Duke Nukem Forever if you pick up a direct rocket hit, you would better get your pink tutu out and look for handy cover. Interestingly on the other hand Duke can absorb tons of repeated splash damage as you can very well see in the first boss fight in the stadium.&lt;/p&gt;

&lt;p&gt;I agree with most reviewers, Duke Nukem Forever was not a great game; but honestly, it was more fun that almost anything that came out in the last 5 years.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>How to retain your sanity</title>
   <link href="http://www.rioki.org/2011/06/08/how-to-retain-your-sanity.html"/>
   <updated>2011-06-08T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/06/08/how-to-retain-your-sanity</id>
   <content type="html">&lt;p&gt;&amp;#8230; while writing software.&lt;/p&gt;

&lt;p&gt;Over the years I have keep a set of functions that moved from one project to the next. These where small functions that served the sole process of retaining my own sanity. After feeling the need to use these functions in two of my free software projects, I decided to encapsulate them in a small library called &lt;a href='http://github.com/rioki/sanity'&gt;sanity&lt;/a&gt;.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;These functions come in two flavors, trace functions and check functions.&lt;/p&gt;

&lt;p&gt;The trace functions are quite simple. The actual function is masqueraded by a macro that hides the gitty details. The macros are TRACE_ERROR, TRACE_WARNING, TRACE_INFO and TRACE_DEBUG and take just a string. The macros amend the severity and the current function. By calling add_trace_target you can add a stream to which the output is directed. The function takes the minimum severity as additional parameter, so it is possible create different logs with different severities.&lt;/p&gt;

&lt;p&gt;The check function are a set of extended assert functions based on the concepts of design by contact. As with the trace functions, the check functions are wrapped by macros. The macros are ENSURE, ASSERT, REQUIRE and FAIL. All functions, but FAIL take one condition that must be true to pass the test. If the condition is not true an exception is raised. The FAIL function can be used in cases where the control flow of the program reaches a situation that should not occur, such as the default case of a switch statement.&lt;/p&gt;

&lt;p&gt;For convenience CHECK_ARGUMENT exists. This is a check function that can be used as shorthand for argument checks. If the check fails, a std::invalid_argument exception is throw.&lt;/p&gt;

&lt;p&gt;Since all functions are macros, they can be removed by conditional compilation, although this is not yet implemented.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Train of Thought</title>
   <link href="http://www.rioki.org/2011/05/11/train-of-thought.html"/>
   <updated>2011-05-11T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/05/11/train-of-thought</id>
   <content type="html">&lt;p&gt;Minecraft sux! Ok, actually the game rocks, the problem is the software. I mean it crashes regularly often and is darn slow. Look at it, there are max a couple of hundred polygons on screen and my atom + ion platform can&amp;#8217;t play it. As comparison, that platform scored an average frame rate of 50 on the Half-Life 2: The Last Cost benchmark. It definitely does not help that it is written in java&amp;#8230;&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;I registered for the Junien this week end.&lt;/p&gt;

&lt;p&gt;Tilt.&lt;/p&gt;

&lt;p&gt;This is odd, I have no pending thoughts. Meta discussion / thoughts rock.&lt;/p&gt;

&lt;p&gt;&amp;#8230; 2 minutes of silence &amp;#8230;&lt;/p&gt;

&lt;p&gt;It is interesting, it feels like I designed my website into a corner. I was thinking about adding links to things like my github page or rather a blogroll if you will. But I can&amp;#8217;t think of a really good way to do it. The design looks really clean and adding any more seems to clutter it. I am thinking of links at the bottom of the site. What would also work, since I basically only want to link to my github site, would be a corner image. Hmmm, how about a peal off, that shows links to different things of mine&amp;#8230;&lt;/p&gt;

&lt;p&gt;It is interesting how rubber ducking works. You explain your problem to someone, for example your rubber duck, and by talking you end up solving your problem. To bad I don&amp;#8217;t have a rubber duck. But, I think that most blogs are for that purpose&amp;#8230;&lt;/p&gt;

&lt;p&gt;&amp;#8230; that or plain propaganda.&lt;/p&gt;

&lt;p&gt;I plan to release my first revision of spdr the next week end. It seems feasible, let&amp;#8217;s see.&lt;/p&gt;

&lt;p&gt;&amp;#8230; 8 hours later&amp;#8230;&lt;/p&gt;

&lt;p&gt;I thought about changing my version numbers of my free software projects from traditional major.minor.patch to revision based. The thing is that 0.3.0 seems kind of lame, especially since this version is stable for quite some time. I will probably use a scheme following revision.patch. So the next release of, say libxmlmm will be r4. If any quick bug patches are needed then they the release will be r4.1.&lt;/p&gt;

&lt;p&gt;The only problem is, how to flag alpha and beta versions. But since I don&amp;#8217;t do that so often, this is probably not so much of an issue.&lt;/p&gt;

&lt;p&gt;The big story is &amp;#8220;Microsoft bought Skype&amp;#8221;&amp;#8230; and I could not care less. Slashdot is up in arms about it, but I don&amp;#8217;t really get it. Microsoft probably will not change the current situation, that would be suicide. In my opinion Microsoft does not need the technology, since they could build their own. The move is more along the lines of removing the only viable opposition. The problem for Microsoft is, that if they discontinue supporting GNU/Linux and MacOS they will just herd the people to Google and friends. And that can definitely not be in their best interest. But then again it&amp;#8217;s Microsoft, they don&amp;#8217;t tend to make the rational decisions.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Designing spdr</title>
   <link href="http://www.rioki.org/2011/05/09/designing-sdpr.html"/>
   <updated>2011-05-09T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/05/09/designing-sdpr</id>
   <content type="html">&lt;p&gt;While researching different solutions for networking games, I stumbled over &lt;a href='http://gafferongames.com'&gt;Gaffer on Games&lt;/a&gt;&amp;#8217;s &lt;a href='http://gafferongames.com/networking-for-game-programmers/virtual-connection-over-udp/'&gt;UDP networking tutorial&lt;/a&gt;. Amongst other, it describes a really simple approach to connection handling and reliability. The basic idea of connection handling is that a connection is established as long as packets flow. This is a refreshing simple idea, when comparing to your standard three way handshake. He simplifies reliability by acknowledging every packet with a special field on the packets returning and let&amp;#8217;s the application decide what to do. The appeal in this solution is the simplicity. But he fails to address some core issues that I want my networking system &lt;a href='htttp://github.com/rioki/spdr'&gt;spdr&lt;/a&gt; to solve for me.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;The first issue is how connections are established. The given approach fails to give any reason why a connection could not be established. The application can&amp;#8217;t distinguish between a protocol version mismatch and an incorrect address. In every case the application will need to wait until a timeout is reached. But in defense, this is a minor issue that carries it&amp;#8217;s weight for the simpler implementation.&lt;/p&gt;

&lt;p&gt;The second issue is related to keeping the connection alive. Although many scenarios accommodate the fact that no special keep alive is implemented, there are scenarios I can think of, were the connection will timeout without additional code. The important fact is that I want my network code to handle the issue, not the application.&lt;/p&gt;

&lt;p&gt;The third issue is that there is no way to terminate the connection properly. It is impossible to determine a connection loss and a correct disconnect. This fact is ameliorated by considering that any application should signal proper disconnect rather than just closing the connection.&lt;/p&gt;

&lt;p&gt;The fourth issue is reliability. When I want to send a message reliable, I just want to send the message, I do not want to have to handle the loss of the message in the application. This feature should be implemented in the networking system.&lt;/p&gt;

&lt;p&gt;In defense of Gaffer&amp;#8217;s tutorial, I must say it opened my eyes to how simple a network protocol can be. I will probably build my networking library spdr with these core ideas and add a layer to accommodate issues I have with that simplistic approach.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Train of Though</title>
   <link href="http://www.rioki.org/2011/05/04/train-of-thought.html"/>
   <updated>2011-05-04T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/05/04/train-of-thought</id>
   <content type="html">&lt;p&gt;&lt;em&gt;I was sitting in the train this morning and did not know what to do. I started to type random ideas into the text buffer and suddenly I had quite some interesting results. So I thought I just might share them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hmm&amp;#8230; What shall I write about?&lt;/p&gt;

&lt;p&gt;Lately I have so little motivation when I am home. Even though I come up with ideas at work, I am almost incompetent to implement them back home. As a result sdpr has not changed since the week end.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;I stated to play Crisis 2 and was interrupted after the first 5 minutes. I am not sure if I even want to continue. I thought that a game should grab you in the first 5 minutes&amp;#8230; Oh well.&lt;/p&gt;

&lt;p&gt;Interestingly the title sequence (cinematic) has nothing to do with the game. I don&amp;#8217;t really get the point. It is mostly a wack job towards the nano suit.&lt;/p&gt;

&lt;p&gt;I definitely blog too little. Then again I want to write good long blog entries and they take like forever to write. Between writing software as a hobby and playing games there is not so much time left. I should sever the ties to my friends, that would give lots more time to write software&amp;#8230; and make me a psychopathic killer&amp;#8230;&lt;/p&gt;

&lt;p&gt;I am thinking about posting this stuff on my blog&amp;#8230; should look through it for things that could get me sued.&lt;/p&gt;

&lt;p&gt;These small bytes of information could be put into titter posts. Too bad I don&amp;#8217;t have a mobile Internet for this netbook. Do the O2 surf sticks work on GNU/Linux?&lt;/p&gt;

&lt;p&gt;I still haven&amp;#8217;t written a blog post praising the great and innovative musli serialization library. Probably should. It is really nifty, especially since I have started to used it for spdr. It works like a charm.&lt;/p&gt;

&lt;p&gt;I am almost at work&amp;#8230; no thoughts left&amp;#8230; maybe I can work for once without all these little ideas distracting me&amp;#8230; probably not.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Project Management Software Found</title>
   <link href="http://www.rioki.org/2011/05/04/project-management-software-found.html"/>
   <updated>2011-05-04T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/05/04/project-management-software-found</id>
   <content type="html">&lt;p&gt;I have been looking for a suitable project management software for my hobby projects about as long as I have hobby projects. I have tried out allot of different solutions and none really gelled, until now.&lt;/p&gt;

&lt;p&gt;It seems that my needs have a certain disconnect from most software. The reason being that most project management software focuses on planing and work completion tracking. I tried software that addressed different methodologies. Notable ones are dotProject, that adheres to the classical project management approach, to AgileTrack, that tries to bring tooling to XP or Scrum projects.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;My biggest problem with these methodologies are that they assume you basically know what you want to do. For my hobby projects this tends not to be well set and change radically. Classical Project management falls totally flat with the added burden that you also need to know how long you will take and how much time you have. But even agile methodologies have their drawback, you need to know in a certain advance what you want / need to do. I kept changing the plan over and over and over gain.&lt;/p&gt;

&lt;p&gt;That is not to say that some form of planing does not help me. I quickly discovered that issue trackers really help record the bugs you can&amp;#8217;t (don&amp;#8217;t want to) fix immediately or the features you put off for later. FogBugz is a nice tool, since it also integrates customer relationship management. But that tool is quite expensive and over the top for me.&lt;/p&gt;

&lt;p&gt;The situation got some what worse with the fact that I decided (noticed) that writing small self sufficient libraries works better for me than building large monolithic software. Now I need a system that can handle many different projects; especially since I want them all to be tracked in one system. It gets even more difficult, since I open source some projects. I now even need or rather want to expose these projects to the public.&lt;/p&gt;

&lt;p&gt;I also noticed that documentation a real issue. Although not formally part of project management, documentation management became a more and more important factor. Redmine was one of the first tools that I looked at, that basically integrated a wiki into the project management software. The main reason I did not use Redmine was that it is based on ruby and that would mean installing, maintaining and securing yet an other technology on my server.&lt;/p&gt;

&lt;p&gt;Interestingly the solution that worked best for me over the years was using dokuwiki, flyspray and gitosis. (I first used subversion and later converted to git.) Although not perfect, integrating flyspray and dokuwiki works like a charm. I must add that source control integration was never really a big issue for me. Securing the tools for private use is quite simple, the problem I ran into is when I want to publish some part concerning public projects.&lt;/p&gt;

&lt;p&gt;I started using github for hosting my git repositories. This comes basically from the fact, that they are free for public repositories and this makes it really easy to exchange code with other people. But even the private options are quite cost efficient. At first I did not use the wiki and issue features of github. The rationale was that I already had the tools in place (dokuwiki and flyspray) and did not want additional segmentation.&lt;/p&gt;

&lt;p&gt;As it happens I move libxmlmm and libqgl from Source Forge github, since the service is so much easier. I also moved my private projects to github and as a result now have all my repositories hosted on github.&lt;/p&gt;

&lt;p&gt;For my open source projects, especially libxmlmm I started to use the wiki and migrated the existing wiki entries to github. This basically was motivated from the fact that I did not want to maintain yet an other website on my hosted server.&lt;/p&gt;

&lt;p&gt;I also started to use the issue tracker for my personal website. This came from the fact that tracking issues for my websites in flyspray was kind of awkward and non intuitive. (Every issue needs a caused in and to be fixed version, great if your project does not have versions.)&lt;/p&gt;

&lt;p&gt;After a while I noticed that I have found my perfect project management software, github. It is easy, it is straight forward and it has all the features I need. Since the access is controlled at project level I can have my project and public projects hosted at one place.&lt;/p&gt;

&lt;p&gt;Even though github is a web based solution I can take almost everything with me. Obviously using git, the source code and version control comes with me. But the wiki is also basically just a github repository filled with text files. The only thing I can&amp;#8217;t take with me are the issues. But thanks to the source control integration I can close issues with a checking comment. (If I remember the issue number, that is.)&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Make mine Jekyll</title>
   <link href="http://www.rioki.org/2011/04/04/make-mine-jekyll.html"/>
   <updated>2011-04-04T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/04/04/make-mine-jekyll</id>
   <content type="html">&lt;p&gt;This site recently took a new turn technologically wise. I migrated it to Jekyll for my CMS and this is the epic tale of how this came to be.&lt;/p&gt;

&lt;p&gt;A long long time ago in on a website far far away I read the post &lt;a href='http://blog.wolfire.com/2009/03/google-app-engine-for-indie-developers/'&gt;Google App Engine for indie developers&lt;/a&gt; on the Wolfire blog. This post made me start to think about cloud based hosting for my website; especially since I am hopping that my hobby work on games will start to turn around.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;The basic gist of the post is that &lt;a href='http://www.wolfire.com'&gt;Wolfire Games&lt;/a&gt; occasionally are being slashdotted or digged (featured on Slashdot or Digg) and then the site better not be down for the astronomical load. The important part to remember here is that in these moments your site gets the largest exposure it can get and when the site is down this is nulled.&lt;/p&gt;

&lt;p&gt;My current server is a very small hosted virtual server for 12 EUR. For the normal load of a few hundred visitors (split by 5 sites) my server is fully sufficient. Many websites basically can stay on the server because there are no load spikes to be expected. But what is with that website I want to use to feature my big next indy hit? (Yea, as if that is really going to happen&amp;#8230;)&lt;/p&gt;

&lt;p&gt;At first I looked at the &lt;a href='http://code.google.com/appengine/'&gt;Google Apps Engine&lt;/a&gt; as the post by Jeffrey from Wolfire Games described. The Google Apps Engine is an interesting concept. You are locked down to Python and Java and there you get a slim subset orienting around web applications. This is enhanced by Google&amp;#8217;s own distributed technologies. The real advantage is in the processing capacity that your get. The Google Apps Engine bring up as many instances of your application as needed. No only do you get the processing power required to adequately serve the load, also the load is distributed around the globe. This ensures a minimal refresh time for your website. And the best part is, it is relatively cheap.&lt;/p&gt;

&lt;p&gt;I only looked into the python option, since that looked like the most attractive. The Google Apps Engine borrows strongly from &lt;a href='http://www.djangoproject.com/'&gt;Django&lt;/a&gt;. Django is a incredibly well designed and compact web application framework that really nailed the DRY (Do not Repeat Yourself) principle. The big difference is that the Google Apps Engine uses their own Datastore, instead of Django&amp;#8217;s SQL based data storage. This comes obviously from the strong distributed aspect that Django does not integrate.&lt;/p&gt;

&lt;p&gt;The down part is that there are no CMS software for the Google Apps Engine that is up to par. As a result I started to write my own little CMS. But after two weeks I ditched it. I have so little time, I want to write games not web application software as a hobby!&lt;/p&gt;

&lt;p&gt;As I favor &lt;a href='http://drupal.org/'&gt;Drupal&lt;/a&gt; as CMS for a LAMP architecture I looked at options for distributing this. Unless you roll your own cloud/load balancing the only option is the &lt;a href='http://aws.amazon.com/ec2/'&gt;Amazon EC2&lt;/a&gt; cloud. The Amazon EC2 cloud is not to dissimilar to my visual server, each node in the cloud is a full virtual machine. The main difference is the pricing model and you can quickly bring up and shutdown instances of your application. The only catch is that you need to do that on your own. This can of course be automated and Drupal has a few modules to help with this. But in the end you are looking into a very complex integration scheme. This is especially problematic because in the case of Drupal you must ensure a persistent database. To be honest, this even more complex than using the Google Apps Engine. In addition the Amazon EC2 cloud is relatively expensive, in comparison to other hosting options.&lt;/p&gt;

&lt;p&gt;As a result I decided, for the time being, to do nothing and open a bottle of Champagne if I ever get slashdotted. Until I discovered &lt;a href='http://pages.github.com/'&gt;github pages&lt;/a&gt;&amp;#8230;&lt;/p&gt;

&lt;p&gt;github pages on it&amp;#8217;s own is not such a remarkable service. The offer free hosting of static content for every github user. The clue is that they added Jekyll to the mix. Jekyll is a static CMS written by Tom Preston-Werner and is very well described by his blog post &lt;a href='http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html'&gt;Blogging Like a Hacker&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I looked at what Jekyll could do, it struck me like a lightning bolt. My content is mostly static. My page has a few static pages that almost never change and a journal that updates around 2 times per month. Although the journal has a commenting feature, it does not receive many comments, save spam.&lt;/p&gt;

&lt;p&gt;One thing I researched as I was implementing my site for the Google Apps Engine were comments. The biggest problem with the Google Apps Engine and authentication is how to implement it. You have 4 options: using Google user accounts, google apps accounts from one specific domain, OpenID or rolling your own. All options seem kind of heavy weight just for comments. At the time I discovered the &lt;a href='http://disqus.com'&gt;Disqus&lt;/a&gt; service. They add comments to your page by integrating the feature through AJAX. By shifting the comments to Disqus my website can be 100% converted to static pages.&lt;/p&gt;

&lt;p&gt;Jekyll is great for a number of reasons. First, it ensures a consistent look of your website by running the pages (fragments) through a template engine. Second, it knows about posts and can aggregate them. Third, pages and posts can be written in light weight markup languages, such as textile or markdown. Finally, by generating static content your HTTP server does exactly what it is intended to, server documents. This means that it can be massively distributed trivially.&lt;/p&gt;

&lt;p&gt;I am now running my personal website off github pages. This gives me the added bonus that they can absorb traffic if I ever get slashdotted. But the real kick is that I can move my page to any service, being Google Apps Engine, Amazon EC2 cloud or the next big thing in cloud computing, simply because my site requires no server side scripting. I probably still need to run a forum or wiki off a LAMP server, but this will almost certainly not be affected by such severe load spikes.&lt;/p&gt;

&lt;p&gt;The best thing about Jekyll is that it is so astronomically efficient. I used to boast that with Django or Drupal you could setup a site within a few days. The time was mostly spent templating with Drupal and coding with Django. But I got this site up and running within 2 hours. I spent one additional hour migrating my content and I was ready for launch.&lt;/p&gt;

&lt;p&gt;If you are interested the &amp;#8220;source code&amp;#8221; for this website can be found at my &lt;a href='http://github.com/rioki/rioki.github.com'&gt;rioki.github.com&lt;/a&gt; repository.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Solving the Reference to Reference Problem with std::bind</title>
   <link href="http://www.rioki.org/2011/03/28/std-bind-ref.html"/>
   <updated>2011-03-28T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2011/03/28/std-bind-ref</id>
   <content type="html">&lt;p&gt;Now let&amp;#8217;s pretend you have a class called &lt;code&gt;Screen&lt;/code&gt; and a few classes that are derived from a class called &lt;code&gt;Widget&lt;/code&gt;. Each have a method called &lt;code&gt;draw&lt;/code&gt; that takes a class &lt;code&gt;Canvas&lt;/code&gt; as reference. It is the task to draw the screen and each widget onto the canvas. The basic algorithm is stupidly simple, do some setup for the screen and call draw with the canvas for each widget.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;If you are using a &lt;code&gt;std::vector&lt;/code&gt; you can use a simple for loop:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    for (unsigned int i = 0; i &amp;lt; widgets.size(); i++)
    {
        widgets[i]-&amp;gt;draw(canvas);
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;But if you start having many widgets using a &lt;code&gt;std::vector&lt;/code&gt; is not such a good idea, since you must guarantee continuous segment of memory. Although often not a real deal, you should use a &lt;code&gt;std::list&lt;/code&gt; for your widgets. Now you need to change the code to using iterators:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    std::list&amp;lt;Widget*&amp;gt;::const_iterator iter = widgets.begin();
    while (iter != widgets.end())
    {
        (*iter)-&amp;gt;draw(canvas);
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Boy this double indirection looks awful, doesn&amp;#8217;t it. Additionally the explicit looping is kind of cluttered. Why not use the handy functional programming that C++ give us. Like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    std::for_each(widgets.begin(), widgets.end(), 
        std::bind2nd(std::mem_fun(&amp;amp;Widget::draw), canvas));
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now this is straight forward and relatively elegant. To bad it fails to compile. The error message is that the compiler can not convert &lt;code&gt;Canvas&amp;amp;&lt;/code&gt; to &lt;code&gt;const Canvas&amp;amp;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you search the web, you will find many posts lamenting the problem that was already described by Herb Sutter: the reference to reference problem. The main issue here is that the signature for &lt;code&gt;bind2nd&lt;/code&gt; is something like&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;template &amp;lt;typename Fun, typename Arg&amp;gt;
binder2nd&amp;lt;Fun, Arg&amp;gt; bind2nd(Fun fun, const Arg&amp;amp; arg);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The obvious problem here is the use of a constant reference, which is quite unfortunate for us. If you read on, many posts will either send you to &lt;code&gt;boost::bind&lt;/code&gt; or &lt;code&gt;std::tr1::bind&lt;/code&gt;. Since I happen to use &lt;a href='http://libsigc.sourceforge.net'&gt;sigc++&lt;/a&gt; I may also add &lt;code&gt;sigc::bind&lt;/code&gt; to the mix of options. But the end result is about the same, they all build on the same basic implementation scheme. The change to the code is minimal:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    std::for_each(widgets.begin(), widgets.end(), 
        sigc::bind(std::mem_fun(&amp;amp;Widget::draw), canvas));
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This still looks quite pleasant. The bad news, this code also does not compile. This time the error message is that the compiler can not convert &lt;code&gt;Canvas&amp;amp;&lt;/code&gt; to &lt;code&gt;Canvas&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;But wait wasn&amp;#8217;t &lt;code&gt;xxx::bind&lt;/code&gt; supposed to solve the problem? Well technically &lt;code&gt;xxx::bind&lt;/code&gt; can solve the problem, the remaining problem is that the compiler fails to determine the correct type to use. This is one of the few cases where you need to enforce the correct template type. So let&amp;#8217;s look at the signature of &lt;code&gt;sigc::bind&lt;/code&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;template &amp;lt;typename Fun, typename Arg&amp;gt;
binder2&amp;lt;Fun, Arg&amp;gt; bind(Fun fun, Arg arg);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Please note that it is strongly simplified version, for the sake of argument. The added complexity is for other features that are irrelevant here.&lt;/p&gt;

&lt;p&gt;So this is simple, just change the code to explicitly specify the argument type:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    std::for_each(widgets.begin(), widgets.end(), 
        sigc::bind&amp;lt;???, Canvas&amp;amp;&amp;gt;(std::mem_fun(&amp;amp;Widget::draw), canvas));
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Well to bad, we need to specify the first argument too, which is the type of functor. So what is the type of the functor that is created with &lt;code&gt;std::mem_fun(&amp;amp;Widget::draw)&lt;/code&gt;? Honestly, I don&amp;#8217;t want to know and it should be my compiler&amp;#8217;s job to determine that, since this is the entire point of generic programming.&lt;/p&gt;

&lt;p&gt;Ok I give up, that loop did not look so bad&amp;#8230;&lt;/p&gt;

&lt;p&gt;Stop, there is a quite simple solution, reverse the arguments. For this we need to write the binder on our own, just like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;template &amp;lt;typename Fun, typename Arg1&amp;gt;
struct binder2nd
{
    Fun fun;
    Arg1 arg1;

    binder2nd(Fun f, Arg1 a1)
    : fun(f), arg1(a1) {}
    
    template &amp;lt;typename Arg0&amp;gt;
    void operator () (Arg0 arg0)
    {
        fun(arg0, arg1);
    }
};

template &amp;lt;typename Arg1, typename Fun&amp;gt;
binder2nd&amp;lt;Fun, Arg1&amp;gt; bind2nd(Fun fun, Arg1 arg1)
{
    return binder2nd&amp;lt;Fun, Arg1&amp;gt;(fun, arg1);
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Now we just need to write the draw method just like so:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;Screen::draw(Canvas&amp;amp; canvas) const
{
    // some setup
    std::for_each(widgets.begin(), widgets.end(), 
        bind2nd&amp;lt;Canvas&amp;amp;&amp;gt;(std::mem_fun(&amp;amp;Widget::draw), canvas));
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I chose to use the &lt;code&gt;std::bind2nd&lt;/code&gt; syntax, since it is simpler than &lt;code&gt;xxx::bind&lt;/code&gt; and does the job for me. You may use my code snippet as you like and changing it to a &lt;code&gt;bind1st&lt;/code&gt; is as trivial as swapping &lt;code&gt;arg1&lt;/code&gt; and &lt;code&gt;arg0&lt;/code&gt;. Now you can bind as many references as you like.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Why C++ is My Language of Choice</title>
   <link href="http://www.rioki.org/2011/02/26/cpp-rocks.html"/>
   <updated>2011-02-26T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2011/02/26/cpp-rocks</id>
   <content type="html">&lt;p&gt;I had a discussion with a friend of mine that came from a, what I would call, Microsoft indoctrination camp. He tried to persuade me of the benefits of .Net. As a matter of fact, I am programming C# for a living since a good while, but I just can’t see the advantage. The conversation was unfortunately cut short and I was unable to really bring my points across. So I decided to take the time and write them down in as much detail as possible.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;First off, I want to say I am not anti-Microsoft per se. I try addressing technical problems with a pure technical analysis. Just to be clear, stating that the decision for any technology is a business decision, is pure and utter nonsense. True if you happen to have an existing body of work, you don’t want to change the technology just because a more adequate one came along. That is just wasting money. But when you start with a clean slate, it is purely a technical decision.&lt;/p&gt;

&lt;p&gt;As a side note, I will focus on C#. This is because .Net is basically used only with C#. There are a few Visual Basic programmers that never learned a better language and a few C++/CLI people who desperately try to make their old program a better thing by using .Net. But anybody who starts out will use C#.&lt;/p&gt;

&lt;p&gt;To understand the discussion further, I first have to clarify what C++ and .Net is.&lt;/p&gt;
&lt;h2&gt;What is C++&lt;/h2&gt;
&lt;p&gt;C++ is a language standardized by the ISO. You can pick up many compilers from different vendors and compile an executable program. C++ also specifies a small standard library for common tasks, such as strings, reading files and some math support. But it is so small that other common tasks such as threading or networking are not implemented. C++ by itself is not very usable, but can be extended through a myriad of third party libraries.&lt;/p&gt;
&lt;h2&gt;What is .Net&lt;/h2&gt;
&lt;p&gt;.Net is a framework that provides a number of languages, such as C#, VisualBasic.Net or C++/CLI. .Net is specified by the ECMA, but the standard is lead by Microsoft and almost only Microsoft. This is natural since they developed the technology. The framework provided by .Net is huge. You have basically everything from XML, over web services and COM, passing by database access and finally ending at fancy user interface components. The .Net runtime also provides a number of heigh level services for the languages, notably reflection, garbage collection and access validation.&lt;/p&gt;
&lt;h2&gt;Lots of Features&lt;/h2&gt;
&lt;p&gt;When people try to sell .Net they often will point to the many features that the framework and runtime provide. Almost every time they would say something like “and with C++ you would have to develop it all yourself” or “the runtime protects you from invalidating your memory”. There is a certain little truth in these statements but even significantly more ignorance. This comes from two misconceptions. The first is their utter lack of knowledge about other technologies. The second is the fallacy that technology can accommodate for bad programming.&lt;/p&gt;
&lt;h2&gt;One Framework&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;Three Classes for the Software Engineers under the sky,
Seven for the Programmers in their halls of stone,
Nine for Code Monkeys doomed to die,
One for the Dark Lord on his dark throne
In the Land of Microsoft where the Shadows lie.
One Framework to rule them all, One Framework to find them,
One Framework to bring them all and in the darkness bind them
In the Land of Microsoft where the Shadows lie.&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Ignoring the implications of vendor lock in, having one huge framework supplied with your language is not the blessing you might have thought. At first glance it seems like this is a huge boost in productivity, since you do not need to implement that much. To a certain degree this is the case. The framework is built to accommodate all common use cases and some more special ones. The really big problem arises when your problem domain just will not map into the solution domain of the framework. Now you will notice that you are programming around idiosyncrasies of the framework, since it will just not bend that way. Throwing out the framework and looking for a different one or implementing the functionality from scratch is hard to justify, since your managers bought into the cost saving idea of having an extensive framework.&lt;/p&gt;

&lt;p&gt;With C++ that just will not happen, since there is no framework to start with. You can go out there and look for a framework or library that helps you in your task. There are literally like sand on the beach. Try them out, see which matches your use case best. You even have the option to implement it yourself. This is a really valuable options, since there are quite a few cases where implementing just what you need is less effort and code than translating your problem to a framework. Even the standard library is optional. As it happens, it is just a library like any other and you can decide not to use it.&lt;/p&gt;

&lt;p&gt;The only drawback that C++ has is that there is no central repository of libraries. Technologies such as Python or Pearl certainly nailed this aspect. On the other hand there is Google…&lt;/p&gt;
&lt;h2&gt;Do it with Style&lt;/h2&gt;
&lt;p&gt;Many languages and technologies bind you to a specific programming paradigm. The only exception I know is Pearl and C++. A critique of C++ is often that it is not a “real” or “pure” object oriented language and I think this is great. With C++ you can program procedural, functional, object oriented, aspect oriented or service oriented. The language just does not bog you down by applying stupid restrictions. True some more esoteric features are provided by third party frameworks such AspectC++ or sigc++’s lambda expressions. (Yes, there is also’ boost’s lambda expressions, I know.)&lt;/p&gt;

&lt;p&gt;The important aspect to remember is that certain problems just lend themselves to certain programming paradigms. In the end of the day you need to solve problems, not implement pure or fancy solutions. Limiting your solution space will hinder you, not empower you.&lt;/p&gt;
&lt;h2&gt;Alzheimer&lt;/h2&gt;
&lt;p&gt;I think one of the features touted by many “modern” languages is garbage collection. But I think that in many cases this is more of an anti-feature.&lt;/p&gt;

&lt;p&gt;First off, I want to point out that if you really want you can also have garbage collection for C++. There are multiple implementations, but the most famous is Boehm-Demers-Weiser conservative garbage collector. It actually is collector for pure C. But because of C++ is compatible to C the collector is trivially adapted to C++ and in the case of that collector it is done for you.&lt;/p&gt;

&lt;p&gt;As a result you have many options when programming C++. You can put the memory on the stack, explicitly allocate it on the heap, wrap it into a reference counting pointer scheme, extend that scheme to add copy on write semantic, full blown garbage collection and you can even write your own memory management. With a language like C# you just have garbage collection and that is it.&lt;/p&gt;

&lt;p&gt;If you listen to .Net marketing you will hear that object construction and destruction is so much faster than C++. Here is the scoop: that is utter nonsense. This is only true if you artificially narrow your sight. Create a bunch of objects of one type and destroy them. Here C# will outperform C++ by an order of a magnitude. But that is comparing a kitchen knife with a katana when chopping vegetables. But you still want the katana when you are standing on the battlefield.&lt;/p&gt;

&lt;p&gt;To understand why this is the way it is and why it fails in real applications you need to understand a bit how garbage collection works. The basics of garbage collection are that you allocate an object and just let it leak when you are done using it. It is then the task of the garbage collector to figure out which objects are used and which not. There are different heuristics to do this, but that is not so important. The important part is that memory that is unused is not immediately (in some implementations never) released to the operating system. Now when a new object is created the garbage collector looks in it’s unused memory if there happens to be a chunk of unused memory that fits the size. In this case no new memory is allocated. This is done as a performance measure, since allocation and release of memory is quite expensive, since the operating system needs to track it all.&lt;/p&gt;

&lt;p&gt;When looking at our example you can clearly see why the implementation using the garbage collector is faster, only a few objects are allocated and then reused. But this example is an unfair competition, since C++ has other ways to deal with creating and destroying many objects of the same type. First creating the object on the stack is simple, easy and here not one byte of memory is allocated or freed. Even if the problem is more difficult and you need to implement allocation, you can simply implement the flyweight pattern. Here the memory management is explicitly handled and you pool all small objects into one large memory pool that is allocated once.&lt;/p&gt;

&lt;p&gt;If you make the example even more complex with objects of different sizes, you will start to see the garbage collector stating to struggle along. There are two problems. First the collector can not reuse as many memory chunks since the objects are different sizes. Second you are still paying for the luxury of garbage collection, the collector must figure out which object are not used anymore and manage it’s internal data structure to keep track of everything. When you have high memory fluctuation, you will end up also paying for the memory release penalty, since the collector will need to free some memory. The only difference is that this ocures at an unspecified time later in the program.&lt;/p&gt;

&lt;p&gt;But the biggest problem about managed memory is not the technical aspects, but poor programmers. The advantage about garbage collection is that you don’t need to worry about memory; the disadvantage about garbage collection is that you don’t need to worry about memory. With unmanaged programs finding memory leaks is relatively simple, run the program through a leak analyser and it will point out where you lost your memory. Manages programs are impossible to analyse with such simple means. Leave dangling references and your memory will balloon out of control. I have seen really weird ways in which the garbage collector was broken, that started as simple programs. The irony is that many applications are required to use a form of explicit memory management to work around these problems, such as the disposable “pattern” used in C#.&lt;/p&gt;
&lt;h2&gt;Got Properties?&lt;/h2&gt;
&lt;p&gt;The syntactic sugar that C# added in the form of properties is quite evil. Although used in moderation properties have the potential to lighten code a bit. The problem is that more often than you would wish, they are more trouble that good. When using a method to get or set a value you know you are using a method. Because it is a method you can call is anyway you like. It is clear that “obj.get_value()”, “obj.retrive_value()” or “obj.compute_value()” have different expected runtime and “obj.value” implies near to no runtime. But in practice you just don’t know. Although there is a certain consensus only to use properties for trivial operations, you can never rally be sure about it.&lt;/p&gt;
&lt;h2&gt;Mirror Mirror on the Wall&lt;/h2&gt;
&lt;p&gt;In my opinion the biggest anti-feature is reflection in a strongly typed language. One of the strengths of strongly typed languages is that the interface and layout of objects is well known at compile-time. This has the main benefit that code has as little ambiguity as possible. But this is completely circumvented when you just pass in an “object” and use reflection to interact with it.&lt;/p&gt;

&lt;p&gt;The main goal of reflection is to decouple the concrete type and algorithms that work on them. But more often you need ways to flag certain properties, methods or classes to have different behaviour than others. In C# this is solved with attributes. But now you actually added coupling to achieve this. The class now needs to know in what context it will be used and add the appropriate attributes.&lt;/p&gt;

&lt;p&gt;It gets even more difficult to trace when reflection is not enough and you need to influence the reflection directly. In the case of C# this would be the use of ICustomTypeDescriptor. I mean honestly, “I put generic implementation into your generic implementation so you can reflect while you reflect”? At this point you should just throw reflection out of the window and properly think about what you want to accomplish and properly design you code.&lt;/p&gt;
&lt;h2&gt;Not so fast buster!&lt;/h2&gt;
&lt;p&gt;But at least C# is as fast as C++, right? Wrong! True, you got to hand to the people of Microsoft, they did allot of work trying to make the .Net runtime as fast as humanly possible. (At least we are lead to believe that.) But here is the scoop, no matter what they do, they will never achieve the same speed. Why? Because of all the extra safety built in. Each time you access a reference it is checked for validity. Each time you call along assembly boarders your call is marshalled. Each time you allocate something the garbage collector needs to update its state. Each time you do something with the operating system it is checked against security settings. Each time you add a variable it is initialized to something neutral. All in all it is this comfort you are paying for.&lt;/p&gt;
&lt;h2&gt;So it is easy to use?&lt;/h2&gt;
&lt;p&gt;This is something that Microsoft is trying to sell you, C# and .Net is really easy to use and learn. This is basically pitched with the arguments that all the safety means are in place. This is like giving novice drivers a tank, sure they don’t get hurt but the damage is till there. It basically makes no real difference if you get an access violation or a NullReference exception. In the end of the day they need to learn to program properly, if they want to build any application that is more complex than “calc.exe”. In my experience novice programmers will probably dig themselves a hole they can’t get out of.&lt;/p&gt;
&lt;h2&gt;Dependencies Dependencies Dependencies&lt;/h2&gt;
&lt;p&gt;When you bundle a C++ application you need all dependencies. In my experience this is around a dozen DLLs accounting to something like a few MB of disk space. They are all copied to the folder with your program, thus avoiding DLL-hell.&lt;/p&gt;

&lt;p&gt;With .Net applications this is more complicated. First you need to ensure that the .Net framework is installed. Assuming that the framework is already installed is just rude and there are enough times where this really this is not the case. Let’s face it, the .Net framework is huge and you need to bundle the .Net framework in your installer. The tragic part is that you are probably only are using 10% of the actual framework, but you simply do not have a choice. It is almost technically impossible to install only parts of the framework.&lt;/p&gt;

&lt;p&gt;Additionally it is even more complicated to install .Net assemblies. Simple DLLs are just copied next to your program or put somewhere in the PATH. But .Net assemblies need to be correctly registered. Although not such a big deal, it is just one more unnecessary hurdle.&lt;/p&gt;
&lt;h2&gt;The Right Tool&lt;/h2&gt;
&lt;p&gt;I like C++ because it is such versatile tool, but it definitely is not the right tool for every task. I have written quite some web applications in my time and used technologies such as Pearl, PHP and Python. They are highly light weight languages that mend themselves to the needs of quickly putting things together. Sure they are slow like hell, but that is not an issue since the program is waiting on the database most of the time.&lt;/p&gt;

&lt;p&gt;For simple height level scripting task I will always use a lightweight scripting language and for serious heavy duty tasks I will almost always use C++. But the important part is to look at the available technologies and ask yourself which will get the task done in an efficient and proper way.&lt;/p&gt;

&lt;p&gt;Technologies that don’t really know what they want, such as .Net or EJB just do not have a place in my tool belt. (And don’t get me started about Java…)&lt;/p&gt;
&lt;h2&gt;Do You Even Know What You Are Talking About?!&lt;/h2&gt;
&lt;p&gt;To clarify my position let me explain a bit of background on myself. I have developed on both sides of the spectrum and in many places in between. I started programming web applications, first with Pearl, then PHP. I then moved over to program tools for CFD applications in C++, including a fully fledged graphical editor using OpenGL. I then moved on to program and maintain a compiler and interpreter for an interpreted language for industry automation using C++. Along all this delved into technology for games as a hobby which where mostly C++ and kept developing websites for personal use, including Python with Django and the Google Apps Engine. And Finally I am working in a team developing an editor for panels and control room displays for industry and plant automation which is written in C#. As it happens, this editor is also the largest C# application ever developed (at least so I am told). It takes a certain size of application to see where C# is failing.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>pkg-config for MSys with Minimal Fuss</title>
   <link href="http://www.rioki.org/2011/02/16/pkg-config-minimal-fuss.html"/>
   <updated>2011-02-16T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2011/02/16/pkg-config-minimal-fuss</id>
   <content type="html">&lt;p&gt;&lt;a href='http://pkg-config.freedesktop.org/wiki/'&gt;pkg-config&lt;/a&gt; is a really neat tool that makes life so easy on GNU/Linux systems. If you ever needed to write a configure script, now there is a (almost standard) way to check for dependencies. Oh the joy! Until you move to &lt;a href='http://www.mingw.org/'&gt;MinGW&lt;/a&gt; and MSys on Windows. You will find out that there is no binary from the guys at MinGW. You will also find out that to build pkg-config, you need glib, which needs pkg-config to configure some dependencies. There are mailing lists full of epic tales of people trying to build pkg-config from source. You just want to use pkg-config. It is bad enough that you need to build you software, you should not need to build other peoples software! The good news, getting pkg-config with minimal fuss is possible. Let me show you how.&lt;/p&gt;

&lt;p&gt;What is really nice, the people at &lt;a href='http://www.gtk.org'&gt;Gtk+&lt;/a&gt; have all the libraries precompiled in seperate zip archives. Head over to http://www.gtk.org/download-windows.html. You will need the glib &lt;a href='http://ftp.gnome.org/pub/gnome/binaries/win32/glib/2.26/glib_2.26. 
1-1_win32.zip'&gt;run-time&lt;/a&gt;, the gettext-runtime &lt;a href='http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/gettext 
-runtime_0.18.1.1-2_win32.zip'&gt;run-time&lt;/a&gt; and obviously pkg-config &lt;a href='http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-con 
fig_0.25-1_win32.zip'&gt;tool&lt;/a&gt; and &lt;a href='http://ftp.gnome.org/pub/gnome/binaries/win32/dependencies/pkg-con 
fig-dev_0.25-1_win32.zip'&gt;dev&lt;/a&gt;. No less no more. Unzip each folder to your root of your MSys installation.&lt;/p&gt;

&lt;p&gt;That&amp;#8217;s it.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Fixing Gimp and Language Settings</title>
   <link href="http://www.rioki.org/2010/11/01/gimp-lang.html"/>
   <updated>2010-11-01T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2010/11/01/gimp-lang</id>
   <content type="html">&lt;p&gt;Ever used Gimp or any other tool that uses gettext for localization on Windows and the language does not turn out as it should?&lt;/p&gt;

&lt;p&gt;I have that quite often. The thing is that my main system (Window 7 ) has the locale setting to German, since I have many contact points that need to conform to that, especially the default currency being Euros. Nevertheless my interface language is English.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;I wrote a sort program to check what ANSI C things my locale settings are. It looks like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;locale.h&amp;gt;

int main()
{
    printf(&amp;quot;LC_ALL: %s\n&amp;quot;, setlocale(LC_ALL, &amp;quot;&amp;quot;));
    printf(&amp;quot;LC_COLLATE: %s\n&amp;quot;, setlocale(LC_COLLATE, &amp;quot;&amp;quot;));
    printf(&amp;quot;LC_CTYPE: %s\n&amp;quot;, setlocale(LC_CTYPE, &amp;quot;&amp;quot;));
    printf(&amp;quot;LC_MONETARY: %s\n&amp;quot;, setlocale(LC_MONETARY, &amp;quot;&amp;quot;));
    printf(&amp;quot;LC_NUMERIC: %s\n&amp;quot;, setlocale(LC_NUMERIC, &amp;quot;&amp;quot;));
    printf(&amp;quot;LC_TIME: %s\n&amp;quot;, setlocale(LC_TIME, &amp;quot;&amp;quot;));
    return 0;
}

The results are what I expected:

LC_ALL: German_Germany.1252
LC_COLLATE: German_Germany.1252
LC_CTYPE: German_Germany.1252
LC_MONETARY: German_Germany.1252
LC_NUMERIC: German_Germany.1252
LC_TIME: German_Germany.1252&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you use ANSI C methods to access what &amp;#8220;Language and Regional Settings&amp;#8221; manage you are mostly lost. Many applications such as Notepad++ have the option to change the language explicitly, knowing that most user will not be able to fix it themselves. The bad news for Gimp users, is that gimp does not offer such a setting. My workaround is quite simple, change the LANG environment variable and launch gimp. But since I do not want to change all applications in my system I wrote a little bat file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;SET LANG=en_US
gimp-2.6&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I put the file gimp.bat in the bin folder of Gimp and direct the start menu link to launch that. The only drawback I have is that now the default unit for lengths is inches. Man why isn&amp;#8217;t there a locale with English and metric units. Those imperial units must die!&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>std::tstring</title>
   <link href="http://www.rioki.org/2010/09/24/tstring.html"/>
   <updated>2010-09-24T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/09/24/tstring</id>
   <content type="html">&lt;p&gt;If you work with Windows API or MFC you probably know TCHAR. TCHAR is a macro that evaluates either to char or wchar_t, depending if you compile your project as Unicode or not. To make life easy MFC’s CString follows TCHAR, which is nice and fluffy if you use MFC.&lt;/p&gt;

&lt;p&gt;If you happen to be like me and think that MFC is evil when used in core (non UI) libraries and rather use standard containers, you have come to the problem of how to handle TCHAR with std::string. The simple think some people do is assume that TCHAR is always wchar_t and simply always use std::wstring. Too bad, when someone wants to build a non Unicode version of the library.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;If you happen to look at the MSDN for a solution, you will see that they advise you to use the preprocessor, like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#ifdef _UNICODE
#define tstring wstring
#else
#define tstring string
#endif&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;If you ever wondered why the method GetObject will not link? Well, then you have seen why using the processor is not such a hot idea for this. In the Windows API the function is a preprocessor macro that evaluates to either GetObjectW or GetObjectA depending on the value of _UNICODE. Even if your symbol happen to be nested in a different namespace or class, that does not interest the preprocessor, it will still be modified. The trouble starts when the one include path adds the macro and an other does not.&lt;/p&gt;

&lt;p&gt;A more robust solution is to use the fact that std::string and std::wstring are typedefs of the template classe std::basic_string. By defining the following:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;namespace std
{
    typedef basic_string&amp;lt;TCHAR&amp;gt; tstring;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;You get a std::tstring that does not clutter other namespaces. In the end it evaluates the the exact same as std::string or std::wstring. As a matter of fact you can do this with all charset dependent classes, such as streams. Here my tstring.h header:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;#include
#include
#include
#include 

namespace std
{
    typedef basic_string&amp;lt;TCHAR&amp;gt;         tstring;

    typedef basic_ostream&amp;lt;TCHAR&amp;gt;        tostream;
    typedef basic_istream&amp;lt;TCHAR&amp;gt;        tistream;
    typedef basic_iostream&amp;lt;TCHAR&amp;gt;       tiostream;

    typedef basic_ifstream&amp;lt;TCHAR&amp;gt;       tifstream;
    typedef basic_ofstream&amp;lt;TCHAR&amp;gt;       tofstream;
    typedef basic_fstream&amp;lt;TCHAR&amp;gt;        tfstream;

    typedef basic_stringstream&amp;lt;TCHAR&amp;gt;   tstringstream;
}&lt;/code&gt;&lt;/pre&gt;</content>
 </entry>
 
 <entry>
   <title>Glow Cubes Demo Deferred</title>
   <link href="http://www.rioki.org/2010/04/30/cubes-defered.html"/>
   <updated>2010-04-30T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/04/30/cubes-defered</id>
   <content type="html">&lt;p&gt;During these past two weeks, I was taxed to much by my day job. We went into fully fledged crunch and you can imagine how much effort you can bring up when working 9.5 h&amp;#8230;&lt;/p&gt;

&lt;p&gt;New dead line for GlowCubes (The Demo): 23 Mai&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>3 Keys for Indi Game Projects</title>
   <link href="http://www.rioki.org/2010/04/23/keys.html"/>
   <updated>2010-04-23T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/04/23/keys</id>
   <content type="html">&lt;p&gt;&lt;a href='http://gamecareerguide.com/features/845/features/845/3_overlooked_keys_to_making_.php'&gt;3 Overlooked Keys to Making Outstanding Games&lt;/a&gt; (Game Career Guide)&lt;/p&gt;

&lt;p&gt;This is a very interesting article, even though it is stating the obvious. The basic idea in the article is that you need 3 &amp;#8220;keys&amp;#8221; that are often overlooked by independent game designers.&lt;/p&gt;

&lt;p&gt;These keys are:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Set Clear Goals for Your Game&lt;/li&gt;
  &lt;li&gt;Map Out What You Know and Don't Know&lt;/li&gt;
  &lt;li&gt;Make a Simple Schedule&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Now let&amp;#8217;s take some time and look at my so far failed game projects. So far I have had the ideas and started development on (at least designing) the games of Lunar Exodus (RTS), Captain Pink Beard (Point and Click Adventure), Glow Cubes (Puzzle &amp;#8220;Shooter&amp;#8221;) and My Little Garden (Casual Simulation).&lt;/p&gt;
&lt;!--more--&gt;&lt;h2&gt;Set Clear Goals for Your Game&lt;/h2&gt;
&lt;p&gt;Basically I have the simple goal for my games, they should be fun. And by fun I mean a game that I would play. The only exception was My Little Garden, this was focused to be fun for my daughter.&lt;/p&gt;

&lt;p&gt;A optional goal was to sell the games. This is based on the assumption, if the game is fun, you can sell it. Making a game sellable means also extending the scope of the project; but if you got a fully fledged game doing that is not so hard.&lt;/p&gt;
&lt;h2&gt;Map Out What You Know and Don't Know&lt;/h2&gt;
&lt;p&gt;After some years of experience in software development I have developed a more lax approach to design. Somewhat inspired by the notion of &lt;a href='http://www.agilemodeling.com'&gt;agile modeling&lt;/a&gt;; I basically shoot from the hip with a basic idea. As the project progresses bits and pieces are designed on the go. No code is written without a design, but that design is only evaluated minutes, hours and sometimes days before the actual implementation. In some cases the design is evaluated and altered as new and unknown requirements come up.&lt;/p&gt;

&lt;p&gt;I use the same approach to game design. It feels like it worked, but that is the problem; I can&amp;#8217;t prove it. In many instances, especially Lunar Exodus and Captain Pink Beard, I did not even come to the point where the basic &amp;#8220;from the hip&amp;#8221; idea was altered. I never even reached a playable state because of technical challenges.&lt;/p&gt;

&lt;p&gt;During the development of Lunar Exodus I wrote the design document along side programming the engine. It feels like the projects that had the largest design documents are those that failed more spectacularly. Alternately you could state that these projects where those with the largest scope.&lt;/p&gt;
&lt;h2&gt;Make a Simple Schedule&lt;/h2&gt;
&lt;p&gt;This is one of my favorite points in project management. In many projects, not only games, I see people going around and telling you the properly plan your project ahead. They especially thing on project plans and gantt charts. If a project fails they tell you things like &lt;i&gt;&quot;If only you would have planed
properly then your would have succeeded.&quot;&lt;/i&gt; ignoring the fact that the reason why the project was in trouble was not seen during the planing phase.&lt;/p&gt;

&lt;p&gt;My problem with classical project management (i.e. Waterfall) is that it fixes the scope at the beginning, then evaluates what needs to be done and plans for it. If you halt the project mid term or you miss estimate the effort and run out of time (and budget) you basically have nothing. A few disconnected pieces of work but not a working project. Lunar Exodus was relatively well planed and I think it killed first the morale and then the project.&lt;/p&gt;

&lt;p&gt;Lately I have tried to take a more feature centric approach. A mix between XP&amp;#8217;s user stories and Scrum&amp;#8217;s backlog. Although I am not running in iterations (maybe one of my current problems), I have tried to always have a running version from the get go. If you look at my &lt;a href='/2010/04/16/go-go-glow-cubes.html'&gt;Glow Cubes (The Demo)&lt;/a&gt; project, I wrote a basic NSIS installer script that builds a final installer on day one.&lt;/p&gt;
&lt;h2&gt;Scope and Motivation&lt;/h2&gt;
&lt;p&gt;It is hard to tell what killed my game projects. But I think the biggest point is that I fixed a way to large scope for one hobby developer and keeping me motivated for the period required to finish the project.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Porting parallel.sh to MSys</title>
   <link href="http://www.rioki.org/2010/04/17/paralell-sh.html"/>
   <updated>2010-04-17T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/04/17/paralell-sh</id>
   <content type="html">&lt;p&gt;Ever wanted to process many files but your program is single threaded and your have multiple cores? Well I wanted just that, process 1500 files and I have a 8 core machine. The problem with bash scripts is that loops are executed in sequential order. You can process commands in parallel by appending &amp;amp; at the end of the script. The problem launching 1500 processes is a sure thing to kill your machine.&lt;/p&gt;

&lt;p&gt;I tripped over this article: &lt;a href='http://pebblesinthesand.wordpress.com/2008/05/22/a-srcipt-for-running-processes-in-parallel-in-bash/'&gt;A srcipt for running processes in parallel in Bash&lt;/a&gt;. It is a really cool script with which you can execute commands in parallel.&lt;/p&gt;

&lt;p&gt;I copied the script into my &lt;a href='http://www.mingw.org/wiki/MSYS'&gt;MSys&lt;/a&gt; installation. Guess what, it did not work. The problem is that it checks for &lt;em&gt;/proc/$PID&lt;/em&gt;. Too bad that MSys does not have a &lt;em&gt;/proc&lt;/em&gt; file system.&lt;/p&gt;

&lt;p&gt;So I changed the code to use &lt;em&gt;ps&lt;/em&gt; and &lt;em&gt;grep&lt;/em&gt;. Its probably not as effective, but it works on msys&amp;#8230;&lt;/p&gt;

&lt;p&gt;Download the modified script; &lt;a href='/files/parallel.sh'&gt;parallel.sh&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Go! Go! Glow Cubes!</title>
   <link href="http://www.rioki.org/2010/04/16/go-go-glow-cubes.html"/>
   <updated>2010-04-16T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/04/16/go-go-glow-cubes</id>
   <content type="html">&lt;p&gt;I planed to build a game called GlowCubes about a year ago. It basically spun of while reading this article about &lt;a href='http://www.gamedev.net/reference/programming/features/imgSpaceLigh t/'&gt;Image Space Lighting&lt;/a&gt; (deferred shading). The idea is to solve physics based puzzles in a psychedelic environment build from a bunch of glowing shapes.&lt;/p&gt;

&lt;p&gt;I basically gave up on most of my projects as I wrote the &lt;a href='/2010/04/06/hobby-or-pro.html'&gt;Hobby or Pro&lt;/a&gt; journal entry. It was a big mess (in a very elegant way), since I tried to develop the Quick Game Library at the same time and build in on top of that. I went though different complete redesigns, since the requirements seemed to change and the scope changed.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt;I planed to build a game called GlowCubes about a year ago. It basically spun of while reading this article about &lt;a href='http://www.gamedev.net/reference/programming/features/imgSpaceLigh 
t/'&gt;Image Space Lighting&lt;/a&gt; (deferred shading). The idea is to solve physics based puzzles in a psychedelic environment build from a bunch of glowing shapes.&lt;/p&gt;
&lt;img align='center' alt='Image Space Lighting' src='/images/ImageSpaceLighing.png' /&gt;
&lt;p&gt;I basically gave up on most of my projects as I wrote the &lt;a href='/journal/2010-04-06/hobby-or-pro'&gt;Hobby or Pro&lt;/a&gt; journal entry. It was a big mess (in a very elegant way), since I tried to develop the Quick Game Library at the same time and build in on top of that. I went though different complete redesigns, since the requirements seemed to change and the scope changed.&lt;/p&gt;

&lt;p&gt;After seeing the incredible &lt;a href='http://www.gamedev.net/community/forums/topic.asp?topic_id=567550'&gt;Imagine&lt;/a&gt; 48k demo by &lt;a href='http://games-net.de/hosted/tggc/'&gt;TGGC&lt;/a&gt;, &lt;a href='http://alphanew.net/'&gt;CodingCat&lt;/a&gt; and &lt;a href='http://blu-flame.org/'&gt;Hel&lt;/a&gt;. (Music by Turri), I kind of decided that I like coding interesting graphic stuff and maybe demo projects might be a good outlet.&lt;/p&gt;
&lt;img align='center' alt='Imagine: be awesome' src='/images/Imagine.jpg' /&gt;
&lt;p&gt;So here is the challenge:&lt;/p&gt;
&lt;strong&gt;Build a demo (not 48k) based on the idea of GlowCubes from 
scratch. The deadline for a complete demo is 1st of May.&lt;/strong&gt;
&lt;p&gt;I will document the project on a daily basis (on days where there is progress) and you can see the code at http://github.com/rioki/GlowCubes&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Hobby or Pro</title>
   <link href="http://www.rioki.org/2010/04/06/hobby-or-pro.html"/>
   <updated>2010-04-06T00:00:00+02:00</updated>
   <id>http://www.rioki.org/2010/04/06/hobby-or-pro</id>
   <content type="html">&lt;p&gt;Over the last 3 years I tried to develop a number of game projects with the aim to sell them. Each project ran out of steam, mostly because of scale and lack of time. Each project was smaller in scale then the previous and still failed. Every time I said oh it is just a hobby, but a certain disappointment still remains.&lt;/p&gt;

&lt;p&gt;One of the biggest problems I have is the fact that I have not found one game engine that was worthwhile. As a result a large amount of effort was invested into developing technology. Now I have partially finished technology, but still no games.&lt;/p&gt;

&lt;p&gt;I have never seriously considered to work professionally in game development. For the first fact, my current job just pays to darn well and is extremely safe. Being a father and husband, this is the sensible thing to do. If I develop games, then with that safety net in place.&lt;/p&gt;

&lt;p&gt;What drives me is the fun of developing and figuring out new things. I need to acknowledge this fact and that until I do have a publishing contract or you can download my game from steam, it remains a hobby. Maybe I can live better with this mindset and stop trying to force me to create a feasible game idea and design. I just do it because it&amp;#8217;s fun.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Inside the Sausage Factory: The Art of IP Development</title>
   <link href="http://www.rioki.org/2010/03/26/sausage.html"/>
   <updated>2010-03-26T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2010/03/26/sausage</id>
   <content type="html">&lt;p&gt;&lt;a href='http://www.gamasutra.com'&gt;Gamasutra&lt;/a&gt; has yet a interesting feature article: &lt;a href='http://www.gamasutra.com/view/feature/4306/inside_the_sausage_factory_the_.php'&gt;Inside the Sausage Factory: The Art of IP Development&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It is a rundown of how to develop IP based on common trends. Basically the article describes how publishers of media create more of the mediocre stuff to service to a fad. From a business standpoint this make sense, but artistically it is nonsense. It will not create a new trend or rich media.&lt;/p&gt;

&lt;p&gt;The author seems to take himself a bit ironically: Inside the Sausage Factory. Sausages are yummy, but not the height of culinary delight.&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>New Ideas and the Hinterland Of Fail</title>
   <link href="http://www.rioki.org/2010/03/23/hinterland-of-fail.html"/>
   <updated>2010-03-23T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2010/03/23/hinterland-of-fail</id>
   <content type="html">&lt;p&gt;I just read a great blog post on why innovation is hard and error prone. Not the newest subject but a well written condensed piece: &lt;a href='http://www.gamasutra.com/blogs/JonathanBrown/20100322/4747/New_Ideas_and_the_Hinterland_Of_Fail.php'&gt;New Ideas and the Hinterland Of Fail&lt;/a&gt;&lt;/p&gt;</content>
 </entry>
 
 <entry>
   <title>Site Back Online</title>
   <link href="http://www.rioki.org/2010/03/13/site-back-online.html"/>
   <updated>2010-03-13T00:00:00+01:00</updated>
   <id>http://www.rioki.org/2010/03/13/site-back-online</id>
   <content type="html">&lt;p&gt;After some downtime the site is back online, but content is still missing in many places.&lt;/p&gt;

&lt;p&gt;My &amp;#8220;old&amp;#8221; server decided to go AWOL last Wednesday. The server did not come back up after some planed maintenance on the buildings power system. Since the server ran flawless for about five years and a 99% uptime guarantee, they still have 18.25 days to fix the problem. Although they promised to fix the problem as fast as possible, it seems other people have similar issues.&lt;/p&gt;

&lt;p&gt;The site is back up on a different server. This is because I was planing on moving the site to a cheaper (and newer) virtual server. The new server was ready on Tuesday and I was planing to move all my sites next week or so. Well now I booted by schedule up a bit.&lt;/p&gt;

&lt;p&gt;Since I wanted to make changes on Rioki&amp;#8217;s Corner and merge some almost obsolete sites into mine. The roll out of Rioki&amp;#8217;s Corner took a bit longer than expected.&lt;/p&gt;</content>
 </entry>
  
</feed>
