<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Cynical Stuff - Casual games development and cynical observations &#187; Software Development</title>
	<atom:link href="http://www.cynicalstuff.com/category/software-development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cynicalstuff.com</link>
	<description>A blog about casual games development, science, culture and cynical observations</description>
	<lastBuildDate>Thu, 20 May 2010 15:39:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>A Quick Look at my Ideas File</title>
		<link>http://www.cynicalstuff.com/a-quick-look-at-my-ideas-file</link>
		<comments>http://www.cynicalstuff.com/a-quick-look-at-my-ideas-file#comments</comments>
		<pubDate>Tue, 02 Feb 2010 14:17:42 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=394</guid>
		<description><![CDATA[I have an ever-growing file with ideas for various games and applications. A few years ago it contained a few gems like Grabble (Grammar Scrabble) in which you place words instead of letters and have to form grammatically correct sentences, and DoodlePad which was a text editor much like Notepad, but with the possibility to [...]]]></description>
			<content:encoded><![CDATA[<p>I have an ever-growing file with ideas for various games and applications. A few years ago it contained a few gems like <strong>Grabble</strong> (Grammar Scrabble) in which you place words instead of letters and have to form grammatically correct sentences, and<strong> DoodlePad</strong> which was a text editor much like Notepad, but with the possibility to add simple illustrations by drawing with the mouse. Sometimes these ideas result in an actual product, but most of the time they never get further than concept stage&#8230;or a few lines in the ideas.txt file.</p>
<p style="text-align: center;"><img src="http://satisfaction.tinytwitter.com/helpcenter/images/idea_med.png" alt="" width="37" height="44" /><img src="http://satisfaction.tinytwitter.com/helpcenter/images/idea_med.png" alt="" width="37" height="44" /><img src="http://satisfaction.tinytwitter.com/helpcenter/images/idea_med.png" alt="" width="37" height="44" /></p>
<p>For fun I decided to check what I wrote a year or two ago. These are different game concepts that may or may not result in actual games later:</p>
<ul>
<li>TV show production game. Create small game shows and try to get good network ratings.</li>
<li>Ninja school. <em>That&#8217;s all I wrote &#8211; I guess it pretty much says it all!</em></li>
<li>Game continuity. A game where the player dies but continues with his offspring. Affecting the game world results in changes for the next incarnation too.</li>
<li>SimCity + Viva Pinata. Prepare environment for citizens to join. E.g. a doctor requires sick people and wealth, and provides health. The player never has active control over the citizens.</li>
<li>Woggle or Worggle. Word-Boggle. Same idea as Grabble, but make a simple Boggle game where you have to string up sentences from words.</li>
<li>&#8220;Modern fantasy.&#8221; A fantasy world that was common fantasy ~1000 years ago but have evolved. How would elves, men and dwarves live in a more modern setting?</li>
<li>Vampire adventure game. Oh, so many snarky Twilight parodies that could be included&#8230;</li>
<li>&#8220;Closed system RPG.&#8221; Nothing is ever added to the game world: killing enemies doesn&#8217;t give experience points &#8211; it gives you the person&#8217;s life force. Money is never created, it only shifts hands. The same thing with weapons and armor. Includes autonomous heroes/villains that &#8220;level up&#8221; just like the player.</li>
</ul>
<p>Fun fun fun! A few of these might actually end up in real projects, if I only get my game development up to speed. I wonder if I should have a look at the ideas from five years ago too, to see what else I was thinking of&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/a-quick-look-at-my-ideas-file/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Web and Downloadable Game Engine Choices 2009</title>
		<link>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009</link>
		<comments>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009#comments</comments>
		<pubDate>Sun, 20 Dec 2009 11:44:07 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[casual games]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[game engines]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=369</guid>
		<description><![CDATA[In my last post I complained about the lack of a perfect silver bullet game engine that would fit my needs as a small indie developer starting up a new game project. My three primary target platforms are Windows, Mac and the web, in roughly that order. &#8220;But Karja, haven&#8217;t you heard? iPhone/XBox Live 360/Android/etc [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009">In my last post</a> I complained about the lack of a perfect silver bullet game engine that would fit my needs as a small indie developer starting up a new game project. My three primary target platforms are Windows, Mac and the web, in roughly that order.</p>
<p>&#8220;But Karja, haven&#8217;t you heard? iPhone/XBox Live 360/Android/etc etc is the new indie platform of choice! This guy I read about made six billion dollars on his game there!&#8221;</p>
<p>I have a number of reasons why that is utter bull excrement:</p>
<ul>
<li>iPhone is flooded with games. Literally flooded, with thousands and thousands of games that make it hard to gain visibility. Also, iPhone relies on Apple&#8217;s SDK, objective-C (to some extent at the very least), touch screen, low-end hardware, etc etc &#8211; and all of these aspects have to be hand-crafted for the iPhone release without being reusable on other platforms.</li>
<li>XBox 360 is good if you only intend to target Windows and XB360. But that would be incredibly stupid for me, since my target audience isn&#8217;t the XBox lads.</li>
<li>Android is interesting. It would be neat to get in quickly just in case the market suddenly explodes á la iPhone. But, and this is a big but, Android requires Java which is utterly incompatible with web deployment (Flash is the only viable option there).</li>
</ul>
<p>After some consideration, I found that my options are as follows:</p>
<ul>
<li><strong>Java</strong> &#8211; Windows and Mac deployment is possible, and I can deploy on Android as well, eventually. I also looked at Java-to-Actionscript converters, but&#8230;that feels desperate and unreliable. So, web deployment is a no-go for this one.</li>
<li><strong>BlitzMax</strong> &#8211; What, BlitzMax? That only supports Win/Mac! Yes, but I seriously considered trying to write a BMax->Actionscript converter since I already have a lot of BMax code and an abstraction layer API in place. (This means that I would have to write the APIs for drawing/sound in Actionscript from scratch, but convert the game logic at least.)</li>
<li><strong>C++</strong> &#8211; Screw web deployment, and go for a full-fledged C++ engine! That would be the most fun to code in. But&#8230; No. 2010 is coming up and the web is the new black.</li>
<li><strong>HaXe</strong> &#8211; This would allow web deployment, and there&#8217;s a neat HaXe->C++ converter that can be used along with NME/NEASH, an SDL version of the flash API. Essentially, what this promises is that the same code could be used to make a Flash version <em>and</em> a compiled standalone downloadable (&#8230;as well as an iPhone version!). Alas, things aren&#8217;t as good as they sound. I did some quick tests and NME/NEASH lacks a lot of bitmap manipulation support. For example, BitmapData.colorTransform() support is missing &#8211; and this means that the alpha channel of bitmaps cannot be modified in the downloadable version. Things like this make HaXe seem way too shaky at the moment.</li>
<li><strong>PushButton Engine</strong> &#8211; If I&#8217;m considering pure Flash (well, Actionscript) engines, this is a strong candidate. It&#8217;s a well-designed library intended to be used for larger game projects. However&#8230;. After looking at the code a bit, I fail to see exactly what it will bring. The rendering, file-loading and game state management seems to be the biggest things that it provides but to be honest those aren&#8217;t all that tricky to write by yourself.</li>
<li><strong>flixel</strong> &#8211; Another Actionscript/Flash engine. This one seems very attractive at first, but the main problem with flixel is that it makes assumptions. &#8220;You only want to make a platformer style game, right? You&#8217;ll want to use pixelated effects, right? You want to embed all files since you&#8217;re deploy for the web only, right?&#8221; And so on.</li>
<li><strong>Actionscript/Flex</strong> &#8211; Finally, the last option is to go for pure Actionscript with Flex. No no no, I&#8217;m not trying to reinvent the wheel and have a NIH (Not Invented Here) mentality. But to be frank, writing the main framework that flixel or PBE would provide is&#8230;not that much work. Also, I have specific needs: for example, I need to target different platforms and handle files differently on the different platforms (embedded/external).</li>
</ul>
<p>Nothing is decided at all, but I&#8217;m currently leaning towards using PBE, flixel or pure AS/Flex. My main beef with that is whether or not it&#8217;s fast enough to look good on the downloadable versions. HaXe seemed like an interesting choice for a long while, and I&#8217;m sure that it will be in the future, but I simply found too many flaws in it to provide any actual benefit at the moment. I&#8217;m (probably) going for a double-buffer approach with quite a few alpha effects on bitmaps (not in the least for the particles), so the current unstable alpha support in the SDL parts makes HaXe&#8217;s NME/NEASH solution for downloadables and iPhone pretty dubious.</p>
<p>In the end maybe I oughtn&#8217;t spend so much time investigating this, and just choose something and start developing instead. I guess all engines and choices have their flaws, so nothing&#8217;s going to be perfect.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/web-and-downloadable-game-engine-choices-2009/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Game Engine Choices for Indie Developers 2009</title>
		<link>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009</link>
		<comments>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009#comments</comments>
		<pubDate>Thu, 10 Dec 2009 10:15:40 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[casual games]]></category>
		<category><![CDATA[game development]]></category>
		<category><![CDATA[game engines]]></category>
		<category><![CDATA[programming]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=348</guid>
		<description><![CDATA[This post is going to get a bit technical, so if you&#8217;re easily bored by the gritty details of game development you might want to go somewhere else right now. Maybe to Cute Overload or something. My latest game, Wildhollow, is released and I have some great ideas for my next game. Let&#8217;s just say [...]]]></description>
			<content:encoded><![CDATA[<p>This post is going to get a bit technical, so if you&#8217;re easily bored by the gritty details of game development you might want to go somewhere else right now. Maybe to <a href="http://cuteoverload.com/">Cute Overload</a> or something.</p>
<p>My latest game, <a href="http://www.wildhollow.com">Wildhollow</a>, is released and I have some great ideas for my next game. Let&#8217;s just say that it might include puzzles, RPG elements and some online functionality. Oh, and superheroes or monsters too. Not really sure which yet. Either way, in order to get the game done I need to decide what to implement it in. <a href="http://www.sheeplings.com">Sheeplings</a>, <a href="http://www.spandexforce.com">Spandex Force</a> and <a href="http://www.wildhollow.com">Wildhollow</a> were all developed in BlitzMax, an object oriented BASIC language that&#8217;s extremely easy to develop cross-platform games in.</p>
<p>As long as your cross-platform needs are Windows, Mac or Linux, that is.</p>
<p>As an indie casual games developer I find myself wanting to maximize my potential market (of course), and that means maximizing the number of platforms I can distribute games too. To make things easier for me I&#8217;ve constructed this table of feasible game engines/libraries as things are now in 2009:</p>
<table border="1">
<tr>
<th>Engine Name</th>
<th>Language</th>
<th>Windows</th>
<th>Mac</th>
<th>Web</th>
<th>iPhone</th>
<th>Android</th>
<th>Xbox 360</th>
<th>Linux</th>
</tr>
<tr>
<td>Android SDK</td>
<td>Java</td>
<td>(X)</td>
<td>(X)</td>
<td>(X)</td>
<td></td>
<td>X</td>
<td></td>
<td>(X)</td>
</tr>
<tr>
<td>BlitzMax</td>
<td>Misc</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>ClanLib</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Cocos 2D</td>
<td>Obj-C</td>
<td></td>
<td></td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Flixel</td>
<td>Flash</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Game Maker</td>
<td>Misc</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>HaXe</td>
<td>Misc</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Haaf&#8217;s Game Engine</td>
<td>C++</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>LWJGL</td>
<td>Java</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>PopCap Framework</td>
<td>C++</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>PTK Engine</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>PushButton Engine</td>
<td>Flash</td>
<td>(X)</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>Pygame</td>
<td>Python</td>
<td>X</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Simple DirectMedia Layer</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td>X</td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Silverlight</td>
<td>Misc</td>
<td>X</td>
<td>(X)</td>
<td>(X)</td>
<td></td>
<td></td>
<td></td>
<td>(X)</td>
</tr>
<tr>
<td>Slick</td>
<td>Java</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td></td>
<td>(X)</td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Torque 2D</td>
<td>C++</td>
<td>X</td>
<td>X</td>
<td></td>
<td>(X)</td>
<td></td>
<td></td>
<td>X</td>
</tr>
<tr>
<td>Unity</td>
<td>C#/JS</td>
<td>X</td>
<td>X</td>
<td>(X)</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>XNA Game Studio</td>
<td>C#</td>
<td>X</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td>X</td>
<td></td>
</tr>
</table>
<p></p>
<p>Note that I said feasible engines and libraries. This is not close to a complete list, but they are the ones I&#8217;m considering. I can list some criteria:</p>
<ul>
<li>There must be decent performance, which means preferably no software rendering</li>
<li>All Windows only, Xbox only, etc libraries are of no use to me. I&#8217;ve listed a few anyway just for consideration</li>
<li>I want to be able to create mostly 2D games in an efficient manner. 3D engines are often bloated and unusable. Unity may be free but it&#8217;s of no use to me, for example</li>
<li>Finally, I have a prioritized order of platform preference. You may note that the columns in the table are ordered rather strangely. That&#8217;s because I&#8217;m going from most important to least important platform</li>
</ul>
<p>A quick glance at the table shows that there&#8217;s no single engine or library that fulfills all my needs. An X demarks that the platform is supported, and an (X) means that limited support is possible. That could mean that it&#8217;s possible but requires a lot of messing around (e.g. HaXe for iPhone), or that the solution isn&#8217;t practical (e.g. Java web applets aren&#8217;t very useful), or that it requires unreasonable things (e.g. Unity on the web requires a specific plugin).</p>
<p>Most engines and libraries support Windows and Mac, so that&#8217;s not really a problem. The real problem comes with my third platform of choice: the web. And by the web I mean that it should run seamlessly for most users. Which means that Java is doubtful (too&#8230;clunky, and portals won&#8217;t accept it), and that leaves only Flash. Which, of course, is mostly incompatible with &#8220;normal&#8221; programming languages and engines.</p>
<p>This is not an easy decision&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/game-engine-choices-for-indie-developers-2009/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>KarjaSoft Redesign Concept</title>
		<link>http://www.cynicalstuff.com/karjasoft-redesign-concept</link>
		<comments>http://www.cynicalstuff.com/karjasoft-redesign-concept#comments</comments>
		<pubDate>Mon, 04 Aug 2008 22:41:18 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Observations]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[concept]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[karjasoft]]></category>
		<category><![CDATA[redesign]]></category>
		<category><![CDATA[web design]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=189</guid>
		<description><![CDATA[In the beginning of the summer I posted an ad where I asked for web designers interested in having a go at integrating all the KarjaSoft pages into one logical unit. Essentially, what I want is a unified presence in order to explore synergies between my different projects &#8211; e.g. Cynical Stuff, the KarjaSoft company webpage and the [...]]]></description>
			<content:encoded><![CDATA[<p>In the beginning of the summer I posted an ad where I asked for web designers interested in having a go at integrating all the KarjaSoft pages into one logical unit. Essentially, what I want is a unified presence in order to explore synergies between my different projects &#8211; e.g. Cynical Stuff, the KarjaSoft company webpage and the different game pages. Yes, you may now slap me in the face for using both &#8220;unified presence&#8221; and &#8220;explore synergies&#8221; in the same sentence. Either way, I got a couple (as in two) responses&#8230;that somehow missed the mark a little.</p>
<p>What I desperately need is a designer. Not a programmer (I can code PHP myself, goddammit!) or an artist (what good is a pretty logo if it&#8217;s just sitting there like a bloated toad?) &#8211; a web <em>designer</em>! But somehow the word design gets lost when one mentions web design. Web design almost inevitably gets interpreted as either &#8220;make a logo&#8221; or &#8220;do a customized content management system.&#8221; Design is of course present in both making a logo and writing code, but my needs were for a person more keen on usability and design in the classical sense.</p>
<p>To make a short story long: In the end I sighed and shook my blonde curls in dismay, and decided to have a go at it myself instead. Hey, at least it&#8217;s a learning experience, right? Here&#8217;s what I ended up with as my first concept:</p>
<p><img src="http://www.cynicalstuff.com/images/design/games01s.jpg" alt="" width="400" height="362" /></p>
<p>This is supposed to be the Games page; a list of all KarjaSoft games with easily accessible links to each game. Clicking a game logo leads you to the specific game&#8217;s page. The color scheme and the logo is modified for each game, but the main design is kept in order to give a sense of unity. Also, the navigation buttons in the top right are present on all pages. As you can see I&#8217;ve used common terms instead of titles. If someone sees a button with Cynical Stuff it is probably hard to guess that it leads to this blog, but by typing out Blog everyone will instantly know where it leads.</p>
<p>And yes. If I adopt this design, it will mean that Cynical Stuff will be redesigned according to this as well. As long as I can make a decent WordPress template out of it, that is.</p>
<p>Any thoughts? Does it look like cat vomit? Does it look okay?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/karjasoft-redesign-concept/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Entrepreneuring Dilemmas</title>
		<link>http://www.cynicalstuff.com/entrepreneuring-dilemmas</link>
		<comments>http://www.cynicalstuff.com/entrepreneuring-dilemmas#comments</comments>
		<pubDate>Sat, 12 Jul 2008 21:16:43 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Observations]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/?p=187</guid>
		<description><![CDATA[For many years I&#8217;ve been in no rush to make something of myself: I&#8217;ve dabbled in writing some Windows applications, small game experiments, and lately casual games. I&#8217;ve also started writing a fantasy novel, written and performed humorous songs at university parties, written punk songs, metal songs, pseudo-baroque songs, and tried to learn how to draw better. [...]]]></description>
			<content:encoded><![CDATA[<p>For many years I&#8217;ve been in no rush to make something of myself: I&#8217;ve dabbled in writing some Windows applications, small game experiments, and lately casual games. I&#8217;ve also started writing a fantasy novel, written and performed humorous songs at university parties, written punk songs, metal songs, pseudo-baroque songs, and tried to learn how to draw better. But this year I&#8217;m turning 30. I still have long hair and dress all in black; I really should grow up and start doing some worthwhile things.</p>
<p><img src="http://www.coastalgraphics.com/Online_Productions/images/entrepreneur/entrepreneur.jpg" alt="" width="262" height="310" /></p>
<p>My professional life is going well: I like working with embedded software development and my current Field Applications Engineer role could be a much-needed spark of inspiration for me. But that&#8217;s not enough &#8211; I need to have more entrepreneuring projects for my spare time! I have a nagging suspicion that I&#8217;m far from the only one in a position like this, so for all our sakes I&#8217;ll make a short list of my current thoughts. With some luck they might give you inspiration to start something new:</p>
<ol>
<li>Continue with casual games development. Well, this is pretty much a given. I love making games and I have loads of ideas: Spandex Force 2 with multiplayer support, a puzzle game based on Norse mythology, a free Flash verison of my old Word Mahjongg game, an abstract strategy game based on the dawn of civilization, an archaeology adventure/puzzle game, humorous adventure games based on old public domain stories &#8211; and so on. I&#8217;ll definitely keep this up. Especially since Spandex Force has given me funding for both Wildhollow and much of Spandex Force 2.</li>
<li>Import and sell items. I love weird cool stuff, and I&#8217;d love to find something obscure that I can sell in Sweden. I like the idea of a DIY thing with a small stock in my apartment and online distribution. Still haven&#8217;t found the Perfect Cool Thing(TM), though - a big part of the problem is that I don&#8217;t have a lot of capital to invest in a project like this.</li>
<li>Attempt to make one of these cool Web 2.0 places. (Well, it ought to be 3.0 by now.) Maybe &#8220;World Party&#8221; &#8211; a community-like site where you can have both world and city maps, and add locations where there&#8217;s good nightlife. &#8220;Go here, the beer is cheap!&#8221; Others can comment on your suggestions, and you can either use it as a personal &#8220;I&#8217;ve been here and done that&#8221; thing, or search for good places when you&#8217;re travelling. Whatever, there are probably places like this already. The idea itself is just a minor thing IMO - the concept is what&#8217;s interesting from a technical/design point of view.</li>
<li>Use my irreverent sense of humour to make posters/plaques/t-shirts with interesting prints. This would be pretty cool since it would involve taking studio photos of people posing with the products in question. See how much your pretty face is worth now! I&#8217;m the one hiring your services, and you&#8217;re dependent on me! Was it worth it, being one of the Beautiful People(TM)? We hatesss you&#8230; Seriously, this option would be risky since everyone and his dog can make prints these days, and everyone thinks he&#8217;s a bloody comedian. Just like me.</li>
<li>Investigate the market and try to find a simple product that&#8217;s missing. Browse, look around, do a heap of research, and finally decide on something that I can get an investor interested in. I.e., do something on a bigger scale than any of the other projects.</li>
<li>Finish my book. I think I could put together a decent fantasy novel, and I love writing&#8230;in theory. Okay, this is no entrepreneurial enterprise, but it would still be interesting.</li>
</ol>
<p>What I&#8217;m going to do now is print this page, hang it on the wall, throw darts to select three of the six items&#8230;and ignore all of this for now, and have a cup of tea and a slice of pan pizza instead. I need to re-design my websites and finish Wildhollow before any of this, either way.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/entrepreneuring-dilemmas/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linux Boot in One Second &#8211; Musings About BIOS Evolution</title>
		<link>http://www.cynicalstuff.com/linux-boot-in-one-second-musings-about-bios-evolution</link>
		<comments>http://www.cynicalstuff.com/linux-boot-in-one-second-musings-about-bios-evolution#comments</comments>
		<pubDate>Wed, 12 Mar 2008 14:18:31 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Computers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/linux-boot-in-one-second-musings-about-bios-evolution</guid>
		<description><![CDATA[The title of this post should be taken with a truckload of salt: as far as I know there&#8217;s no way to boot a complete Linux distribution in one second. But it seems that General Software has developed a BIOS that can boot to LILO in one second &#8211; and that&#8217;s not bad at all! [...]]]></description>
			<content:encoded><![CDATA[<p>The title of this post should be taken with a truckload of salt: as far as I know there&#8217;s no way to boot a complete Linux distribution in one second. But it seems that<a href="http://www.linuxdevices.com/news/NS5429881813.html"> General Software has developed a BIOS</a> that can boot to LILO in one second &#8211; and that&#8217;s not bad at all! Basically, all the unnecessary things are skipped, such as waiting for the video card to load its firmware, detect devices, and so on. This enables the BIOS to boot incredibly quickly.</p>
<p><img border="0" width="392" src="http://www.computerage.com.my/images/bios.jpg" height="296" /></p>
<p>But heey&#8230; Wait a minute. If the hard disk isn&#8217;t detected yet, how can the bootloader start the OS?</p>
<p>Being both lazy and philosophically-minded I&#8217;ll try to speculate about the answer to that. My guess would be that all data that would be detected by a normal BIOS has to be hard-coded one way or another; the BIOS data has to be manually entered, or possibly the BIOS has a &#8220;detect everything now and then save the config&#8221; mode that&#8217;s not always run. That&#8217;s actually pretty neat&#8230;for embedded systems. It sounds completely useless for desktop environments where you change keyboards and mice and video cards and electrical pets (what?!) every now and then. But since the article mentions the medical device market, I&#8217;d wager that this isn&#8217;t a big deal for the target devices.</p>
<p>In fact, I wonder if this kind of optimized BIOS couldn&#8217;t be of value to a other embedded devices like home gateways and such as well.</p>
<p>But hey again, wait another minute or two. The slow boot times of home gateways is probably due to slow flash reading times rather than a second or two on the BIOS level. In fact, come to think of it, I don&#8217;t know if I&#8217;ve ever seen a BIOS on these devices. So, it seems like this optimized BIOS is only relevant to embedded devices of specific architectures - of which maybe the aforementioned medical devices belong. But what about non-embedded devices? Wouldn&#8217;t this improved BIOS be useful for desktop computers too?</p>
<p>Short answer: meh.</p>
<p>Longer answer: don&#8217;t think so.</p>
<p>Full answer: in all probability, optimizing the BIOS would result in minimal boot time improvements. Detecting new devices and loading the video firmware doesn&#8217;t take all that long &#8211; the biggest culprit is loading the actual OS itself.</p>
<p>But, and this is a big but, the article also mentions how they increase the Vista loading time from 74 seconds to 24 by adding a UDMA-capable driver to the BIOS. I don&#8217;t really see how they can group these two BIOS improvements into the same article &#8211; they seem to deal with wildly different things! Stripping the BIOS of unnecessary checks is quite different to adding a driver that increases efficiency a lot; the former isn&#8217;t very useful in most cases, but the second is incredibly useful!</p>
<p>And that got me thinking&#8230; The BIOS is often the bottleneck; wouldn&#8217;t it stand to reason to evolve a BIOS as much as possible to make the OS faster? If adding a UDMA driver speeds up the boot process by 300%, isn&#8217;t that the way to go for other bottlenecks as well &#8211; add improvements at the lowest level?</p>
<p>Oh wait. What this would end up as sounds suspiciously like a <a href="http://en.wikipedia.org/wiki/Microkernel">microkernel</a>. I wonder if there&#8217;ll ever be a hybrid BIOS/microkernel.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/linux-boot-in-one-second-musings-about-bios-evolution/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Software 3D Algorithms Revisited</title>
		<link>http://www.cynicalstuff.com/software-3d-algorithms-revisited</link>
		<comments>http://www.cynicalstuff.com/software-3d-algorithms-revisited#comments</comments>
		<pubDate>Mon, 03 Mar 2008 12:24:16 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Indie Games]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[Spandex Force]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/software-3d-algorithms-revisited</guid>
		<description><![CDATA[This will be a very nerdy blog post describing some technical aspects of Spandex Force. Sorry in advance. Many moons ago I complained about BlitzMax and 3D, and described how I solved that problem. Well, it turns out that I&#8217;m a moron and the solution described didn&#8217;t solve anything at all. This is essentially what I [...]]]></description>
			<content:encoded><![CDATA[<p>This will be a very nerdy blog post describing some technical aspects of <a href="http://www.spandexforce.com">Spandex Force</a>. Sorry in advance.</p>
<p>Many moons ago I <a href="http://www.cynicalstuff.com/prototyping-software-3d-algorithms-and-sheeplings-v10">complained about BlitzMax and 3D, and described how I solved that problem</a>. Well, it turns out that I&#8217;m a moron and the solution described didn&#8217;t solve anything at all. This is essentially what I wanted to acheive:</p>
<p><img border="0" width="320" src="http://www.cynicalstuff.com/images/np/np_sc1.jpg" height="240" /></p>
<p>Well, when I switched to a more detailed texture everything got jagged and crappy. Which I should have foreseen if I hadn&#8217;t felt so proud of myself for working around my limitations. I know, I suck. Anyway, I needed a better solution.</p>
<p>Someone in the old post mentioned that you can do 3D in BlitzMax by using textured polygons, but I don&#8217;t know if he&#8217;s ever tried. Using the common textured poly functions result in <a href="http://en.wikipedia.org/wiki/Texture_mapping">affine texture mapping</a>, which is completely useless for depth effects. So, the only solution left was to go for proper 3D.</p>
<p>This is surprisingly simple in BlitzMax as long as you know how to do it. (Duh!) All you have to do is set up the projection matrix properly, and then do the primitive drawing commands. I won&#8217;t paste the dull code here, but it involves some trigonometry and a glFrustum() call (for OpenGL). That took care of the background itself.</p>
<p>But wait, that&#8217;s not all! What about the little objects on top of the background? Well, I wanted a billboard effect (the images should always face the screen) so I could either do a lot of rotations and draw everything in 3D&#8230;or draw the icons in 2D afterwards. I chose the latter approach and was thrilled when I noticed that OpenGL has a function called gluProject() which would let me find the screen coordinates from 3D space coordinates. Yay!</p>
<p><img border="0" width="100" src="http://www.spandexforce.com/screenshots/ss9s.jpg" height="75" /><br />
<em>All for this little minigame!</em></p>
<p>Time for a short interlude. &#8220;Why are you mucking around with OpenGL like this,&#8221; the eager reader asks. &#8220;Isn&#8217;t DirectX the standard for Windows?&#8221; Sure it is, but I also want my game to run on Mac and Linux. So in my first approach I chose an OpenGL-only solution. But, as the experienced game developers out there could have told me, that just wouldn&#8217;t do. OpenGL works most of the time, but there are severe compatibility problems with out-of-the-box XP and Vista installations!</p>
<p>I was aware of this limitation, but I just didn&#8217;t know how to get around it. See, the magical gluProject() function has no corresponding function in DirectX. After a lot of messing around with matrices I managed to make the DirectX projection matrix similar to the OpenGL one, so the background could be drawn in both modes. But I still had no way to draw the icons correctly. I tried lots of various interpolative methods but everything looked pretty crappy.</p>
<p>Then it struck me like Mjölner from a clear sky.</p>
<p>In my old blog post I ranted about how old methods can be utilized to good effect even today, and there was one old method that I had overlooked. Can you see what I&#8217;d missed?</p>
<p>Lookup tables!</p>
<p>When running the game in OpenGL I could create a lookup table for the projected X and Y coordinates of the icons. This table could then be used for both the OpenGL and DirectX versions of the game to create identical results for the 2D icons. It worked perfectly, and this enabled me to have DirectX as the default renderer in Spandex Force from v1.1 and onwards.</p>
<p>Many times I thought about skipping the Catch &#8216;n Match minigame completely in order to have DirectX support, or shipping the game with compatibility problems. I&#8217;m happy that things worked out in the end!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/software-3d-algorithms-revisited/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl Before Swine</title>
		<link>http://www.cynicalstuff.com/perl-before-swine</link>
		<comments>http://www.cynicalstuff.com/perl-before-swine#comments</comments>
		<pubDate>Wed, 30 Jan 2008 12:44:46 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/perl-before-swine</guid>
		<description><![CDATA[Have you used Perl? Did you enjoy it? You strange bastard. I have a very simple criteria when it comes to programming languages: if I can comprehend the code of something I did a year ago, then it&#8217;s a good programming language. I like maintainability and intuitive naming; it&#8217;s pretty hard to mistake what int or float [...]]]></description>
			<content:encoded><![CDATA[<p>Have you used Perl? Did you enjoy it? You strange bastard. I have a very simple criteria when it comes to programming languages: if I can comprehend the code of something I did a year ago, then it&#8217;s a good programming language. I like maintainability and intuitive naming; it&#8217;s pretty hard to mistake what <em>int</em> or <em>float</em> means for example. I can return to 6502 Assembly, Pascal, x86 Assembly, C, C++, Ada, Lisp, 68k Assembly, Scheme, BlitzMax, Java, HTML, PHP and a dozen other languages long after I&#8217;ve stopped using them, and I still understand decently what I wrote ages ago. But not so with Perl. Perl is the devil&#8217;s plaything.</p>
<p>Okay, enough Perl bashing &#8211; it&#8217;s not really a bad language at all. It&#8217;s devilishly efficient at text manipulation and everything else involving regular expressions, for example. But I simply can&#8217;t remember Perl syntax; it&#8217;s like a black hole in my mind. Everything I pour into it that concerns Perl gets swallowed up. I can look at Perl code I wrote a few years ago and have <em>no idea at all</em> what it&#8217;s supposed to do! So I guess Perl is a little like pearls before swine in my case. Perl before Karja could be a new proverb.</p>
<p>Incidentally, did you know that the Japanese have a similar expression? Similar to pearls before swine that is. <em>Neko ni koban</em> apparently means gold coins to a cat. Not that I&#8217;d know &#8211; I just know what <em>neko</em> means. I think the most advanced Japanese phrase I can put together is <em>watashi no soseji wa ookii desu yo</em>!</p>
<p>Aanyhoo, the reason I started ranting about Perl is this excellent article I found called <a href="http://www.cio.com/article/175450">You Used Perl to Write WHAT?</a> It shows five good reasons for when you should use Perl&#8230;and some situations where it&#8217;s just not appropriate at all. I don&#8217;t agree with everything. Take number 3 of the good reasons for example:</p>
<blockquote><p>A replacement for shell scripts: One of the worst things about shell scripting—whether in bash, sh or csh—is that the syntax of the scripts themselves is fairly hard to read. By using perl as a scripting language instead of a &#8220;traditional&#8221; shell, you can use much more C-like syntax without sacrificing functionality.</p></blockquote>
<p>I may or may not be biased but I find shell scripts infinitely more useful than Perl scripts. For one thing, they are more maintainable. Even though sed and strange syntaxes are black magic, it&#8217;s possible for another person to decipher what shell scripts are supposed to do. Unlike Perl, which is made for supernatural gods!</p>
<p>Finally I can end with an amusing anecdote. A friend of mine went to a job interview where they asked him if he&#8217;d ever written some Python. &#8220;Python&#8230; Oh! Yeah, sure &#8211; I know that!&#8221; So they gave him some code to modify, whereupon he stared blankly for a few seconds before he realized &#8220;Damn, it&#8217;s Perl I know &#8211; not Python! I&#8217;ve never seen a line of this before in my life!&#8221;</p>
<p>He got the job anyway. He was able to understand Python decently based on the examples, and had made a good impression during the rest of the interview. See what I mean about code readability? Could you understand how to construct a new regular expression after having looked at some Perl code?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/perl-before-swine/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sudoku, Benjamin Franklin and Mathematical Puzzles</title>
		<link>http://www.cynicalstuff.com/sudoku-benjamin-franklin-and-mathematical-puzzles</link>
		<comments>http://www.cynicalstuff.com/sudoku-benjamin-franklin-and-mathematical-puzzles#comments</comments>
		<pubDate>Sun, 27 Jan 2008 21:22:35 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Observations]]></category>
		<category><![CDATA[Science]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/sudoku-benjamin-franklin-and-mathematical-puzzles</guid>
		<description><![CDATA[Mathematics is not one of my strengths; if I put my mind to it I can get by,  but I lack the discipline to become skilled at it. I&#8217;ve read some calculus and algebra and combinatorics and statistics and whatnot, but in general I&#8217;ve just taken some courses only to forget everything I&#8217;ve learned shortly afterwards. The only maths I [...]]]></description>
			<content:encoded><![CDATA[<p>Mathematics is not one of my strengths; if I put my mind to it I can get by,  but I lack the discipline to become skilled at it. I&#8217;ve read some calculus and algebra and combinatorics and statistics and whatnot, but in general I&#8217;ve just taken some courses only to forget everything I&#8217;ve learned shortly afterwards. The only maths I use regularly, except for simple arithmetic, is trigonometry. (It&#8217;s quite useful for 2D games.)</p>
<p>Logic is a completely different matter though. My job as a software developer at a Large Multi-National Corporation(TM) demands that I keep many of my skills sharp: the ability to juggle many ideas and projects, the ability to deal professionally and courteously with customers, and the ability to drink copious amounts of tea. Oh, and let&#8217;s not forget the ability to actually write code. Many non-programmers seem to think that maths is necessary for programmers, but in reality it&#8217;s logic that&#8217;s in high demand.</p>
<p><img border="0" width="300" src="http://www.mathpuzzle.com/SudokuAK.gif" height="300" /></p>
<p>Speaking of skills at work, another thing that I tend to do there is solve sudokus. I find great comfort in spending my lunch breaks listening to the ongoing conversations while I solve a sudoku and &#8211; if something interesting pops up &#8211; add something to the discussion. Solving a sudoku is relaxing; you know that it&#8217;s solvable as long as you apply some logic, so you can take your mind off the possibly-unsolvable problems facing you in real life. At one time I did many sudokus per day, but now I limit myself to at most one for the sheer pleasure of it. A friend of mine mentioned that sudokus can be used to measure stress as well: if you find yourself taking too long on a standard sudoku, it might be an indication that you&#8217;re too stressed to think straight at the moment. True enough, but I find that if I&#8217;m too excited about something it also makes it hard to concentrate on the problem at hand. But then again, I suppose that that could be classed as stress as well, albeit of the positive kind.</p>
<p>Incidentally, speaking of sudokus, did you know that <a href="http://www.sciencenews.org/articles/20080126/mathtrek.asp">Benjamin Franklin used to amuse himself with mathematical puzzles similar in principle to sudokus</a> when he was not busying himself with inventing just about everything you could imagine? Read the article and be amazed at the 16-by-16 magic square with bent rows that Franklin devised. You know about the magic square, where each line has to add up to 15? This is a magic square where each line has to add up to 2056. And all the coloured areas also have to add up to 2056. I&#8217;m just shaking my head at the complexity of the puzzle.</p>
<p><img border="0" width="432" src="http://www.sciencenews.org/articles/20080126/f9244_3231.jpg" height="428" /><br />
<em>Read the article above to see more puzzles.</em></p>
<p>At one time I was pondering if I could devise a meta-puzzle game, where each puzzle mechanism would be unique, and one part of the problem would actually be to figure out the rules themselves. I started examining the sudoku to get inspiration, and quickly decided that it&#8217;s above my current skill to actually bring that idea to life. The idea is seductively simple: create a formal definition of the sudoku, and then expand that definition to encompass other mathematical puzzles. After you have created a suitable grammar of mathematics puzzles, you simply create a generator for new exciting puzzles. But in reality, this is much too complex for a layman in mathematics.</p>
<p>However, after having read about Franklin&#8217;s exploits in the puzzle domain, I wonder if this would have been something he would have enjoyed to create.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/sudoku-benjamin-franklin-and-mathematical-puzzles/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dynamic Programming with Hash Tables</title>
		<link>http://www.cynicalstuff.com/dynamic-programming-with-hash-tables</link>
		<comments>http://www.cynicalstuff.com/dynamic-programming-with-hash-tables#comments</comments>
		<pubDate>Thu, 01 Nov 2007 14:07:51 +0000</pubDate>
		<dc:creator>Karja</dc:creator>
				<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.cynicalstuff.com/dynamic-programming-with-hash-tables</guid>
		<description><![CDATA[Today I browsed a DDJ article called C++ Hash Table Memoization: Simplifying Dynamic Programming, and I was immediately struck by a feeling of &#8220;why the hell didn&#8217;t I think of this!&#8221; If you&#8217;re not familiar with Dynamic Programming, here&#8217;s a very very brief summary: When solving a problem you often encounter overlapping subproblems which &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Today I browsed a DDJ article called <a HREF="http://www.ddj.com/cpp/202405227">C++ Hash Table Memoization: Simplifying Dynamic Programming</a>, and I was immediately struck by a feeling of &#8220;why the hell didn&#8217;t I think of this!&#8221; If you&#8217;re not familiar with <a HREF="http://en.wikipedia.org/wiki/Dynamic_programming">Dynamic Programming</a>, here&#8217;s a very very brief summary:</p>
<p>When solving a problem you often encounter overlapping subproblems which &#8211; if you implement the solution algorithm naively &#8211; causes a sub-solution to be calculated many times. The most famous example of this is the Fibonacci sequence: 1, 1, 2, 3, 5, 8 and so on. Here&#8217;s an example pseudo code snippet stolen from Wikipedia which calculates a Fibonacci number naively:</p>
<blockquote><p>    function fib(n)<br />
if n = 0 or n = 1<br />
return 1<br />
else<br />
return fib(n  + 1) + fib(n  + 2)</p></blockquote>
<p>From the code you&#8217;ll note that when trying to calculate, say, fib(5), you&#8217;ll calculate fib(3) more than once. Dynamic Programming is basically saying &#8220;hey, let&#8217;s stop being stupid! If we make sure that the result of fib(3) is only calculated once we&#8217;ll save a lot of time!&#8221; Quite so. Dynamic Programming may have the most idiotic name ever, but the idea is elegant and very efficient for certain problems.</p>
<p>The Wikipedia article then goes on to mention two DP approaches: top-down, and bottom-up. I&#8217;m getting all hot and bothered from mentioning both DP and bottom in the same sentence, but I&#8217;ll try to control myself. Bottom-up DP is essentially a way of restructuring the algorithm from a recursive solution to an iterative one, while top-down retains the recursive structure but uses an array for storing the calculated values. As the DDJ article mentions, arrays are most commonly used for storing values&#8230;and that&#8217;s where the real beaty of the DDJ article&#8217;s suggested improvement kicks in.</p>
<p>An array may be inefficient for some problems, so use a hash table instead!</p>
<p>In that short sentence I think I&#8217;ve summarized the whole DDJ article; the actual implementation of the proposal is irrelevant, and nothing else is particularly new or exciting. If not for this short addition to what&#8217;s already presented on Wikipedia I would&#8217;ve claimed that the article was dull and pointless &#8211; but now it turned from cow dung into gold! It&#8217;s amazing how a small idea can have such an effect. And of course, the fact that it&#8217;s such a small idea is what causes the I-Coulda-Thought-of-That reaction that&#8217;s oh-so-common.</p>
<p>To end on a high note, here&#8217;s a little <a HREF="http://en.wikipedia.org/wiki/Fib_%28poetry%29">fib</a> for you:</p>
<p>Left<br />
Right<br />
Top-down<br />
Bottom-up<br />
I don&#8217;t give a damn<br />
Just don&#8217;t waste any precious RAM</p>
]]></content:encoded>
			<wfw:commentRss>http://www.cynicalstuff.com/dynamic-programming-with-hash-tables/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
