<?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>Ranmantaru Games &#187; Uncategorized</title>
	<atom:link href="https://ranmantaru.com/blog/cat/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>https://ranmantaru.com</link>
	<description></description>
	<lastBuildDate>Sun, 24 Apr 2016 12:50:43 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Moved to new server</title>
		<link>https://ranmantaru.com/blog/2014/03/15/moved-to-new-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=moved-to-new-server</link>
		<comments>https://ranmantaru.com/blog/2014/03/15/moved-to-new-server/#comments</comments>
		<pubDate>Sat, 15 Mar 2014 12:08:02 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[site]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=419</guid>
		<description><![CDATA[I&#8217;ve moved my site to the new hosting. It looks okay so far, but let me know if you have any problems with it.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve moved my site to the new hosting.<br />
It looks okay so far, but <a href="mailto:support@ranmantaru.com">let me know</a> if you have any problems with it.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2014/03/15/moved-to-new-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How I do (not) debug my games</title>
		<link>https://ranmantaru.com/blog/2012/10/21/how-i-do-not-debug-my-games/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-i-do-not-debug-my-games</link>
		<comments>https://ranmantaru.com/blog/2012/10/21/how-i-do-not-debug-my-games/#comments</comments>
		<pubDate>Sun, 21 Oct 2012 15:33:22 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[article]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[technobabble]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=308</guid>
		<description><![CDATA[I&#8217;m writing this because I thought it might be interesting to other programmers. I used this method for about ten years, so it&#8217;s pretty sound. I don&#8217;t use debugger. Well, I start it sometimes in (mostly futile) hope of getting a better exception stack trace. Or to look at the generated machine code in disassembly [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m writing this because I thought it might be interesting to other programmers. I used this method for about ten years, so it&#8217;s pretty sound.</p>
<p>I don&#8217;t use debugger. Well, I start it sometimes in (mostly futile) hope of getting a better exception stack trace. Or to look at the generated machine code in disassembly when optimizing. Otherwise, I find it mostly useless.</p>
<p>I don&#8217;t use &#8220;debug&#8221; build. I always build &#8220;release&#8221; with debug information. So I&#8217;m testing the same code people will use to play the game. Debug info is for getting stack info on exceptions and in some other cases.</p>
<p>When I encounter an error (crash, wrong logic, glitches or whatever) I follow these steps:</p>
<ul>
<li>Thinking</li>
<li>Reviewing</li>
<li>Logging</li>
<li>Debugging (or, rather, taking a break)</li>
</ul>
<p>Each step&#8217;s purpose is to get some new info about the problem. If I get new info, I go back to the first step &#8211; thinking.<br />
As you see, debugging is actually there, but I rarely get to it. Let&#8217;s look at the steps in more detail.</p>
<h2>Thinking</h2>
<p>Stop and think: what can cause this problem? Is it the result of the code I just wrote/changed? What did I do to cause it? Or was it there before? What subsystems is it limited to? When does it happen, in what conditions? And so on.<br />
Just thinking about the problem often gives some new insights about what can cause it. When you do small incremental changes (and I try to work that way when possible), the changed code is small and easy to grasp with you mind, and the problem is likely there.</p>
<h2>Reviewing</h2>
<p>Look at your code. Review it. Do you remember it correctly? What is actually written there? (Strange things can happen, especially if you use copy/paste/modify a lot).<br />
Look for things you didn&#8217;t think about. Look for things that differ from what you expect them to be. If you use third-party library/engine/whatever, look at the documentation for the things you use to make sure they do what you thing they do, and accept those arguments etc.</p>
<p>If you find something, go back to thinking.</p>
<h2>Logging</h2>
<p>The code is complex. It can produce emergent results (that&#8217;s why you use it in the game, right?) So you might need to look at some values it actually produces. That&#8217;s where logging comes in.</p>
<p>Logging is the code that writes some text message to some log. It can be a log file, console, stderr, socket, whatever. You must be able to view all log messages though, and searching and filtering them comes in handy too.</p>
<p>Why logging and not a debugger?<br />
It gives you exactly the info you ask for.<br />
It puts it in context, with other log messages. You can see <i>when</i> it happened in relation to other logged events. You can see how often it happened. You can see how the value changed over time.<br />
You can easily filter what values you log when you have multiple objects and are interested in only one of them. Or only values above a threshold. Or both.<br />
You can surround the code with log messages and find where the exception occurs even when you can&#8217;t get a stack trace (be sure to flush you log though).<br />
You can do all this in the release build.<br />
You can do it even when you code for console/mobile/set-top-box/toaster/whatever.<br />
It&#8217;s easy to turn off when you release a build. And it can be useful when the problem happens on some other computer, not on yours.</p>
<p>Some pitfalls:<br />
Make it easy to automatically flush the log after every message, it&#8217;s essential when diagnosing exceptions or freezing. Or flush it always (might be slow).<br />
Make sure you actually log what you want to log (reviewing helps here). If you write wrong value to the log, it can mislead you for a while.</p>
<h2>Visual aids</h2>
<p>That&#8217;s not exactly logging, but it helps a lot in games. You can write bounding box coordinates to your log, but actually seeing the box on the screen with other objects is much more useful and effective.<br />
Make it easy to add this form of &#8220;logging&#8221; to your code. Colored lines that fade out over time are useful, for example. You can add them anywhere in your code and see them on the screen for long enough (but not forever). You can make boxes, circles, spheres, arrows or whatever you want just writing a function that conveniently adds multiple lines based on the parameters you pass.<br />
Visualizing AI state, targets, ranges etc is extremely useful too.</p>
<h2>Debugging</h2>
<p>If everything else fails, you can try the debugger. But what info can you get from it that the previous steps didn&#8217;t uncover? I guess doing more thinking or taking a break is better.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/10/21/how-i-do-not-debug-my-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vacation</title>
		<link>https://ranmantaru.com/blog/2012/08/19/vacation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=vacation</link>
		<comments>https://ranmantaru.com/blog/2012/08/19/vacation/#comments</comments>
		<pubDate>Sun, 19 Aug 2012 15:39:33 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Arcane Worlds]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[LEVEL UP!]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=296</guid>
		<description><![CDATA[I&#8217;m leaving on vacation tomorrow, August 20th. I&#8217;ll be back on September 10th. I won&#8217;t write code, but I&#8217;ll sketch out some ideas, monsters etc. for both Arcane Worlds and LEVEL UP! I&#8217;m going to get a mobile internet for my tablet there and there should be wifi at the hotel, so I&#8217;ll be able [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m leaving on vacation tomorrow, August 20th. I&#8217;ll be back on September 10th.<br />
I won&#8217;t write code, but I&#8217;ll sketch out some ideas, monsters etc. for both Arcane Worlds and LEVEL UP!<br />
I&#8217;m going to get a mobile internet for my tablet there and there should be wifi at the hotel, so I&#8217;ll be able to answer your comments and e-mails.</p>
<p>So, the next game updates will be at the end of September.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/08/19/vacation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>New purchase system and gift keys</title>
		<link>https://ranmantaru.com/blog/2012/07/29/new-purchase-system-and-gift-keys/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=new-purchase-system-and-gift-keys</link>
		<comments>https://ranmantaru.com/blog/2012/07/29/new-purchase-system-and-gift-keys/#comments</comments>
		<pubDate>Sat, 28 Jul 2012 20:48:04 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[site]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=279</guid>
		<description><![CDATA[I&#8217;ve simplified the purchase system on my site, so you don&#8217;t have to register or log in to buy my games anymore. Instead, you&#8217;ll get a special link (the key) which you can use to download the game and all future updates. If you&#8217;d ever forget the key, you can request it to be resend [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve simplified the purchase system on my site, so you don&#8217;t have to register or log in to buy my games anymore.</p>
<p>Instead, you&#8217;ll get a special link (the key) which you can use to download the game and all future updates. If you&#8217;d ever forget the key, you can request it to be resend to your email. The system is similar to what the Humble Bundle uses.</p>
<p>The old system is still in place, so if you already bought a game you can download the updates just as you did before. If you want a new key however, please email me and I&#8217;ll arrange that. I&#8217;ll reuse the account system for blog comments later, so it&#8217;s not going away.</p>
<p>You can also buy gift keys to send to anyone or use yourself. They differ in that anyone can change the email the key is linked to, but only once. So when you send a gift key to someone, they can link the key to their email to retrieve it if they&#8217;d ever forget it.</p>
<p>You can buy multiple keys now, so feel free to do so if you want to support me.</p>
<p>If you encounter any problems, please tell me: <a href="mailto:support@ranmantaru.com">support@ranmantaru.com</a></p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/07/29/new-purchase-system-and-gift-keys/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Site upgrade</title>
		<link>https://ranmantaru.com/blog/2012/03/14/site-upgrade/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=site-upgrade</link>
		<comments>https://ranmantaru.com/blog/2012/03/14/site-upgrade/#comments</comments>
		<pubDate>Wed, 14 Mar 2012 07:25:39 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[site]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=209</guid>
		<description><![CDATA[I&#8217;ve just upgraded my site. It&#8217;s a complete rewrite of the &#8220;games&#8221; section and user accounts. Each game now has separate page with more info and embedded video. You can also download old versions now &#8211; both demo and paid ones. Unfortunately, the new (more secure) account system uses different encryption scheme for passwords. This [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve just upgraded my site. It&#8217;s a complete rewrite of the &#8220;games&#8221; section and user accounts.<br />
Each game now has separate page with more info and embedded video.<br />
You can also download old versions now &#8211; both demo and paid ones.</p>
<p>Unfortunately, the new (more secure) account system uses different encryption scheme for passwords.<br />
This means, people who are already registered have to reset their passwords to login.<br />
I apologize for this inconvenience. You&#8217;ll get a message when you try to login, just use the &#8220;forgot password?&#8221; link. It&#8217;ll send you email with special link that allows you to change your password. You can actually just enter your old password there, it&#8217;ll work.</p>
<p>If there are any trouble, <a href="mailto:info@ranmantaru.com">let me know</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/03/14/site-upgrade/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharpening my tools</title>
		<link>https://ranmantaru.com/blog/2012/03/11/sharpening-my-tools/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=sharpening-my-tools</link>
		<comments>https://ranmantaru.com/blog/2012/03/11/sharpening-my-tools/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 01:04:00 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=198</guid>
		<description><![CDATA[I was tired after release of Arcane Worlds 0.02, so I took a couple of days off. Sublime Text 2 caught my eye before, so I started studying and tweaking it. And after 2.5 days of tweaking, I bought it. I&#8217;m still not happy with undo/redo cursor movement and other minor issues, but otherwise it&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p>I was tired after release of Arcane Worlds 0.02, so I took a couple of days off.</p>
<p><a href="http://www.sublimetext.com/" target="_blank">Sublime Text 2</a> caught my eye before, so I started studying and tweaking it. And after 2.5 days of tweaking, I bought it. I&#8217;m still not happy with undo/redo cursor movement and other minor issues, but otherwise it&#8217;s awesome. Also, it&#8217;s cross-platform and the license is per user, not per copy.</p>
<p>So, it looks like I&#8217;m going to sharpen my other tools too.<br />
People on Indie DB prefer installer to zip-file, so I&#8217;m going to automate building demo and paid version packages and release both installer and zip-file variants next time.<br />
My build system needs some work too.<br />
And I&#8217;m going to move game object compiler I wrote for Arcane Worlds 0.02 to common tools and rewrite LEVEL UP! game logic with it. Probably improve the compiler too.</p>
<p>Also, I started rewriting the site. It&#8217;s currently messy PHP code which is hard to expand/improve. And I want to drop WordPress eventually.<br />
So I found a nice python web framework called <a href="http://web2py.com" target="_blank">web2py</a>. I&#8217;m going to replace &#8220;games&#8221; section of the site first, and gallery and blog some time later.</p>
<p>This means separate page for each game in addition to current list-of-games page, with more info and videos. Better security. User profile page, and later (when I replace blog too) easy commenting for registered users.</p>
<p>If you&#8217;d like some other improvements to the site or have some questions, feel free to comment, e-mail me or send me a message on Twitter.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/03/11/sharpening-my-tools/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Holidays</title>
		<link>https://ranmantaru.com/blog/2012/01/09/holidays/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=holidays</link>
		<comments>https://ranmantaru.com/blog/2012/01/09/holidays/#comments</comments>
		<pubDate>Mon, 09 Jan 2012 16:37:08 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=160</guid>
		<description><![CDATA[Not much to report for last two weeks, with holidays and other life issues. I&#8217;ve been mostly working on Sproxel and some other development tools.]]></description>
			<content:encoded><![CDATA[<p>Not much to report for last two weeks, with holidays and other life issues.<br />
I&#8217;ve been mostly working on Sproxel and some other development tools.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2012/01/09/holidays/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Against the Wall</title>
		<link>https://ranmantaru.com/blog/2011/10/23/against-the-wall/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=against-the-wall</link>
		<comments>https://ranmantaru.com/blog/2011/10/23/against-the-wall/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 13:58:02 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=125</guid>
		<description><![CDATA[Not that many people read my blog, but still. Against the Wall is an interesting exploration game. I think it has great potential. And now you can support it, since the author has launched a Kickstarter campaign. $10 will get you a copy of the released game, and $20 will provide access to early beta [...]]]></description>
			<content:encoded><![CDATA[<p>Not that many people read my blog, but still.</p>
<p><a href="http://www.againstthewallgame.com/" title="Against the Wall" target="_blank">Against the Wall</a> is an interesting exploration game. I think it has great potential.<br />
And now you can support it, since the author has <a href="http://www.kickstarter.com/projects/1034897274/against-the-wall-0" target="_blank">launched a Kickstarter campaign</a>. $10 will get you a copy of the released game, and $20 will provide access to early beta versions, if you are curious.<br />
If you&#8217;re in doubt, there&#8217;s <a href="http://www.againstthewallgame.com/2011/10/against-the-wall-alpha-0-34/" target="_blank">alpha version to try out on the site</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2011/10/23/against-the-wall/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Some news</title>
		<link>https://ranmantaru.com/blog/2011/07/01/some-news/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=some-news</link>
		<comments>https://ranmantaru.com/blog/2011/07/01/some-news/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 17:26:17 +0000</pubDate>
		<dc:creator>e-dog</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[dev]]></category>
		<category><![CDATA[sproxel]]></category>

		<guid isPermaLink="false">http://ranmantaru.com/?p=70</guid>
		<description><![CDATA[I&#8217;ve spent a lot of time studying Intel TBB, designing new game loop and dealing with some life issues. LEVEL UP! now runs smooth both with vsync and without it, while updating game logic only 20 times per second. I was afraid of input lag issues, but it looks like they aren&#8217;t really noticeable. And [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve spent a lot of time studying Intel TBB, designing new game loop and dealing with some life issues.</p>
<p>LEVEL UP! now runs smooth both with vsync and without it, while updating game logic only 20 times per second. I was afraid of input lag issues, but it looks like they aren&#8217;t really noticeable.<br />
And the new game loop will allow me to parallelize both game logic updates and rendering when I&#8217;ll get to it, so multi-core processors will get a boost.</p>
<p>Otherwise, the game still looks the same, so there&#8217;s nothing new to show for now.</p>
<p>Now I&#8217;m going to design plug-in system for <a href="http://sproxel.blogspot.com/" target="_blank">Sproxel</a>. I&#8217;ll need good tools to make enemies (especially bosses) for LEVEL UP!</p>
]]></content:encoded>
			<wfw:commentRss>https://ranmantaru.com/blog/2011/07/01/some-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
