<?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>Rough Sea Games &#187; Tips</title>
	<atom:link href="http://blog.rough-sea.com/category/tips/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.rough-sea.com</link>
	<description>Indie game development</description>
	<lastBuildDate>Sun, 29 Jan 2012 12:19:05 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<image>
			<title>Rough Sea Games</title>
			<url>/wp-content/uploads/2008/10/rsg_rss-feed.jpg</url>
			<link>http://blog.rough-sea.com</link>
			<width>144</width>
			<height>95</height>
			<description>Indie game development</description>
		</image>		<item>
		<title>Lessons Learned: Asset Loading</title>
		<link>http://blog.rough-sea.com/2010/11/lessons-learned-asset-loading/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lessons-learned-asset-loading</link>
		<comments>http://blog.rough-sea.com/2010/11/lessons-learned-asset-loading/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 14:45:12 +0000</pubDate>
		<dc:creator>Manuel</dc:creator>
				<category><![CDATA[games]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[404]]></category>
		<category><![CDATA[asset]]></category>
		<category><![CDATA[broken connection]]></category>
		<category><![CDATA[data loss]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[loader]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1480</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Flessons-learned-asset-loading%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Flessons-learned-asset-loading%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Handling resource loading in a web project can be tricky sometimes. We stumbled time and time again over new issues. Today, I would like to share some thoughts with you about this topic. These are things that may help you to get asset handling right the first &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/11/lessons-learned-asset-loading/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Flessons-learned-asset-loading%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Flessons-learned-asset-loading%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Handling resource loading in a web project can be tricky sometimes. We stumbled time and time again over new issues.  Today, I would like to share some thoughts with you about this topic. These are things that may help you to get asset handling right the first time in your project.</p>
<p>In the beginning, there was our neat little asset loader that early in the development only had to load files locally. From the start we integrated parallel loading of files to speed things up a bit. When we tried it online everything still seemed fine. No worries, ey?  Well, the problems started when we hired an external Quality Assurance team of 20+ people sitting behind a single unstable 2MBit line. To our surprise they weren’t able to load our game at all. Using a remote access tool we debugged what happened and fixed, and changed, and tried out until the game loaded somewhat reliably with their connection.</p>
<p>There were two main problems we had to fight at first:  “File Not Found” and “Broken Data”.</p>
<p><strong>“File Not Found”</strong><br />
Well, sometimes the Flash loader returned a 404-error for no apparent reason. Next time, the game is started, it would find the file but another one not. Crazy stuff! We did not really find the root of the problem. We only guessed that maybe some part of the internet connection was only able to handle a certain number of parallel http requests. Yet, we were able to work around the problem: When a “File Not Found” occurs, we simply flag the asset as “not loading” again and put it in the back of the load list. When the asset loader is done with all the other files it will try to load the file again. We allow this to happen up to 10 times before eventually giving up for good.</p>
<p><strong>“Broken Data”</strong><br />
Now, that our external QA team was much more likely to be able to play the game a new problem emerged. The data that was loaded was sometimes broken.  Pictures looked scrambled; XML-objects threw exceptions on initialization with our loaded data. Again, that was a weird phenomenon that we were not able to find the root of. Yet, our workaround from “File Not Found” worked here as well. We put a try-catch block around the part where we turn the loaded data into real objects and if something fails, the file goes to the back of the load list.</p>
<p>Later, we refined our workaround by adding two more features like “Reducing of Parallel Loading” and “Trick the Cache”.</p>
<p><strong>“Reducing of Parallel Loading”</strong><br />
During our testing we realized that we were able to increase loading stability greatly by only loading on file at a time. Unfortunately, that slows down the whole loading process tremendously. So here is what we did: After every unsuccessful loading attempt we decrease the number of files to load at the same time. So, only users with unstable connections will get slowed down.</p>
<p><strong>“Trick the Cache“</strong><br />
If a load fails, we flag the file so next time we try to load it we try it without the cache. Otherwise we might just get the same broken file again. That is not an obvious thing in Flash since it has its own caching system that is hard to influence and besides, you never know what other caching mechanisms (like proxies) are at work on the way from our servers to the user.  Well, by adding a parameter to the request URL (something like “?foo=” plus a timestamp  or a random number) you can trick most of the caches to believe they need to load the file anew. (External resource about this <a href="http://www.communitymx.com/content/article.cfm?cid=827ea"> here</a>)</p>
<p><strong>Is there any room for improvement?</strong><br />
Oh Lord, yes, there is! For one, we will introduce some kind of <em>hash system</em> to validate downloaded resources at some point in the future. Right now, we only assume that if turning a chunk of binary data into an xml or a bitmap actually worked everything is fine. Well, it’s not. Especially, JPGs files are fairly error tolerant which already did cause broken visuals in the game for some users in the past.</p>
<p>Another cause of problems can be content firewalls. As it appears, some users are not able to download our (I must say brilliant *hehe*) background music while not having any troubles with the other file types. So, I believe we should introduce an <em>optional asset type</em> that will not render the game useless if they’re not found or broken.</p>
<p>Furthermore,<em> alternative data servers</em> could be something worth discussing. If communication with the dedicated data server shows any problems, it would be nice to be able to simply switch to another one.</p>
<p>That&#8217;s it for now. <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Happy Coding,<br />
Manuel</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1480&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F11%2Flessons-learned-asset-loading%2F&amp;title=Lessons%20Learned%3A%20Asset%20Loading" id="wpa2a_2">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/11/lessons-learned-asset-loading/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Singletons for AS3</title>
		<link>http://blog.rough-sea.com/2010/06/singletons-for-as3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=singletons-for-as3</link>
		<comments>http://blog.rough-sea.com/2010/06/singletons-for-as3/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 09:15:17 +0000</pubDate>
		<dc:creator>Manuel</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[coder]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wiener würschtel]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1207</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Fsingletons-for-as3%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Fsingletons-for-as3%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p><a href="http://en.wikipedia.org/wiki/Singleton_pattern">Singletons</a> the curse and blessing of many coding projects. <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> Among other pitfalls, you&#8217;ll basically introduce a global variable in your system, making <a href="http://blog.rough-sea.com/2009/01/asserting-the-basics-iii-–-unit-testing/">UnitTests</a> much harder.</p> <p>Why Singletons?</p> <p>Despite the possible problems they can present, they are just so darn handy &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/06/singletons-for-as3/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Fsingletons-for-as3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Fsingletons-for-as3%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://en.wikipedia.org/wiki/Singleton_pattern">Singletons</a> the curse and blessing of many coding projects. <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  Among other pitfalls, you&#8217;ll basically introduce a global variable in your system, making <a href="http://blog.rough-sea.com/2009/01/asserting-the-basics-iii-–-unit-testing/">UnitTests</a> much harder.</p>
<p><strong>Why Singletons?</strong></p>
<p>Despite the possible problems they can present, they are just so darn handy sometimes. If there is some part of your code that needs to be accessed from almost anywhere in the system (like the sound system, or a global error text console and such) there is hardly a better way to achieve that.</p>
<p><strong>Alternatives?</strong><br />
A global messages system to communicate between objects can achieve the same effect. We used to make heavy use of such a system system. However, according to our experience, maintaining that system is fairly time consuming for it gets more and more complicated over time. Besides, if a messaging system allows <a href="http://en.wikipedia.org/wiki/Queue_(data_structure)">queing</a>, you&#8217;ll never really now where and why a message was sent because you loose the <a href="http://en.wikipedia.org/wiki/Stack_trace">stacktrace</a>. So, right know we are reducing the work-load done by the message system, handing it over to direct singletons access. By this, we increased debugability and clearity of data transfer. Besides, using singleton access is much faster than routing it through our messaging system.</p>
<p><strong>How to Do It?</strong><br />
The web already offers a bunch of solutions (1). Most of them boil down to implement the singleton code over and over again in each singleton. We didn&#8217;t like that and tried to come up with a better solution. When we define a singleton it looks like that:</p>
<p><code style="font-size: 1.1em; color: #ff9922; background-color: #111111;"> </code></p>
<p><pre><code style="font-size: 1.1em; color: #ff9922; background-color: #111111;">
&lt;pre&gt;&lt;span style=&quot;color: #008000;&quot;&gt;/**
* Accesing this class somewhere in the code looks like this:
* cSomeController.GetInstance().DoSomething();
*/&lt;/span&gt;

&lt;strong&gt;public &lt;/strong&gt;class cSomeController extends cSingleton
{
&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;public &lt;/strong&gt;&lt;strong&gt;static &lt;/strong&gt;function GetInstance():cSomeController
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return cSingleton.GetInstance(cSomeController);
&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;public &lt;/strong&gt;function DoSomething()
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(&quot;Yes, I can.&quot;)
&nbsp;&nbsp;&nbsp;&nbsp;}
}&lt;/pre&gt;
</code></pre></p>
<p>That is much simpler than copying&amp;pasting the complete singleton code over and over. The corresponsing cSingleton-class looks like that:</p>
<p><code style="font-size: 1.1em; color: #ff9922; background-color: #111111;"> </code></p>
<p><pre><code style="font-size: 1.1em; color: #ff9922; background-color: #111111;">
&lt;pre&gt;&lt;strong&gt;package &lt;/strong&gt;rsengine.patterns
{
&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;import &lt;/strong&gt;flash.utils.Dictionary;&lt;/pre&gt;
&lt;pre&gt;&lt;span style=&quot;color: #008000;&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;/**
&nbsp;&nbsp;&nbsp;&nbsp;* Singleton base class
&nbsp;&nbsp;&nbsp;&nbsp;*/
&lt;/span&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;public &lt;/strong&gt;class cSingleton
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;private &lt;/strong&gt;&lt;strong&gt;static &lt;/strong&gt;var m_instances:Dictionary = new Dictionary();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;private &lt;/strong&gt;&lt;strong&gt;static &lt;/strong&gt;var m_unlockConstructor:Boolean = false;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;public &lt;/strong&gt;function cSingleton()
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m_unlockConstructor == false)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw Error(&quot;You cannot create an instance of a singleton.&quot;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ &quot;Use GetInstance instead!&quot;);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&lt;span style=&quot;color: #008000;&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;/**
&nbsp;&nbsp;&nbsp;&nbsp;* Returns an instance of the specified class
&nbsp;&nbsp;&nbsp;&nbsp;* @param _class class
&nbsp;&nbsp;&nbsp;&nbsp;* @return instance of specified class
&nbsp;&nbsp;&nbsp;&nbsp;*/
&lt;/span&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&lt;strong&gt;public &lt;/strong&gt;&lt;strong&gt;static &lt;/strong&gt;function GetInstance(_class:Class) : *
&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (m_instances[_class] == null)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_unlockConstructor = true;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_instances[_class] = new _class();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;m_unlockConstructor = false;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return m_instances[_class] ;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
}&lt;/pre&gt;
</code></pre></p>
<p>Our singleton implementation significantly reduced the amount of code you have to copy&amp;paste compared to the other singleton implementations out there on the net. We do know that our implementation of GetInstance() is a little slower (because of the Dictionary look up). Since you shouldn&#8217;t have too many calls to the GetInstance method this is probably nothing to worry about too much. Nevertheless, you could cache the result of GetInstance() if you do need to access the singleton more than once (e.g. in a loop).</p>
<p>Have fun and happy coding<br />
Manuel</p>
<p><a name="Footnote_1"></a> <a href="http://www.gskinner.com/blog/archives/2006/07/as3_singletons.html">AS3: Singletons</a>, <a href="http://www.darronschall.com/weblog/2007/11/actionscript-3-singleton-redux.cfm">ActionScript 3 Singleton Redux</a>, <a href="http://www.google.com/search?q=as3+singletons">google</a></p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1207&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F06%2Fsingletons-for-as3%2F&amp;title=Singletons%20for%20AS3" id="wpa2a_4">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/06/singletons-for-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Numeric Enumerations (Enums) for AS3</title>
		<link>http://blog.rough-sea.com/2010/04/numeric-enumerations-enums-for-as3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=numeric-enumerations-enums-for-as3</link>
		<comments>http://blog.rough-sea.com/2010/04/numeric-enumerations-enums-for-as3/#comments</comments>
		<pubDate>Wed, 14 Apr 2010 09:11:51 +0000</pubDate>
		<dc:creator>Manuel</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[wiener würschtel]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1149</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F04%2Fnumeric-enumerations-enums-for-as3%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F04%2Fnumeric-enumerations-enums-for-as3%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Something I really missed in Actionscript 3 were <a title="Wiki - Enumeration" href="http://en.wikipedia.org/wiki/Enumeration" target="_blank">enums</a>. If you need ascending unique numeric ids ( e.g. for naming array indexes ), enums are your friend.</p> <p>For our current project we programmed a messaging system. The system uses unique numeric ids &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2010/04/numeric-enumerations-enums-for-as3/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F04%2Fnumeric-enumerations-enums-for-as3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F04%2Fnumeric-enumerations-enums-for-as3%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Something I really missed in Actionscript 3 were <a title="Wiki - Enumeration" href="http://en.wikipedia.org/wiki/Enumeration" target="_blank">enums</a>. If you need ascending unique numeric ids ( e.g. for naming array indexes ), enums are your friend.</p>
<p>For our current project we programmed a messaging system. The system uses unique numeric ids for message types and message channels. The list of messages and channels grew over time and right now each list contains more than a hundred entries. In the beginning we did the numbering ourselves like that:</p>
<p><code> </code></p>
<p><pre><code>
&lt;pre&gt;&lt;span style=&quot;color: #f07700;&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_OPEN_WINDOW:int = 0;
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_CLOSE_WINDOW:int = 1;
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_REGISTER_TIMER:int = 2;
&nbsp;&nbsp;&nbsp;&nbsp;// .. and so on
&lt;/span&gt;&lt;/pre&gt;
</code></pre></p>
<p>For code beauty we were always trying to group related message ids, which often meant to re-index dozens of entries if we inserted an id somewhere in between. This was a pain!</p>
<p>The net already has assembled quiet some wisdom about &#8220;fake enums ins as3&#8243;<a title="Footnote 1" name="1" href="#Footnote_1">¹</a>, which do fit different needs (like some have type safety) but unfortunately not ours. Most of them are String based, which is what we did not want. So after putting in some thought we came up with a solution that worked for us. Now we can define our enums like this:</p>
<p><code> </code></p>
<p><pre><code>
&lt;pre&gt;&lt;span style=&quot;color: #f07700;&quot;&gt;
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_OPEN_WINDOW:int = cEnum.Enum(0);
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_CLOSE_WINDOW:int = cEnum.inc;
&nbsp;&nbsp;&nbsp;&nbsp;public static const MSG_REGISTER_TIMER:int = cEnum.inc;
&nbsp;&nbsp;&nbsp;&nbsp;// .. and so on
&lt;/span&gt;&lt;/pre&gt;
</code></pre></p>
<p>Now, by using static methods and a static counter we can create an arbitrary amount of coherent numeric values, which comes in very handy from time to time! Re-indexing is in the past now!</p>
<p>We want to share our little enum class with the web, so here it comes:</p>
<p><code> </code></p>
<p><pre><code>
&lt;pre&gt;&lt;span style=&quot;color: #f07700;&quot;&gt;
&lt;strong&gt;public class&lt;/strong&gt; cEnum
{
&nbsp;&nbsp;&lt;strong&gt;private static var&lt;/strong&gt; m_currentIncrement:int = 0;
&lt;span style=&quot;color: #009900;&quot;&gt;
&nbsp;&nbsp;/**
&nbsp;&nbsp; * Adds an enum value to the collection
&nbsp;&nbsp; */
&lt;/span&gt;
&nbsp;&nbsp;&lt;strong&gt;public static function &lt;/strong&gt;Enum(_v:int) : int
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;m_currentIncrement = _v;
&nbsp;&nbsp;&nbsp;&nbsp;return m_currentIncrement;
&nbsp;&nbsp;}
&lt;span style=&quot;color: #009900;&quot;&gt;
&nbsp;&nbsp;/**
&nbsp;&nbsp; * returns the next increment
&nbsp;&nbsp; */
&lt;/span&gt;
&nbsp;&nbsp;&lt;strong&gt;public static function get &lt;/strong&gt;inc():int
&nbsp;&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;return ++m_currentIncrement;
&nbsp;&nbsp;}
}
&lt;/span&gt;&lt;/pre&gt;
</code></pre></p>
<p>Bottom line, if you need a neat way to maintain a list of static coherent numeric entries while type safety is not a big issue &#8230; this is an fairly easy way to do it. May this help you out there as much as it helped us.</p>
<p>Have fun and happy coding<br />
Manuel</p>
<p><a title="Back" name="Footnote_1" href="#1">¹</a> Further readings on AS3 enums can be found here: e.g. <a href="http://www.herrodius.com/blog/87">http://www.herrodius.com/blog/87</a>,<br />
<a href="http://scottbilas.com/blog/faking-enums-in-as3/">http://scottbilas.com/blog/faking-enums-in-as3/</a><br />
or  <a href="http://blog.petermolgaard.com/2008/11/02/actionscript-3-enums/">http://blog.petermolgaard.com/2008/11/02/actionscript-3-enums/</a></p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1149&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2010%2F04%2Fnumeric-enumerations-enums-for-as3%2F&amp;title=Numeric%20Enumerations%20%28Enums%29%20for%20AS3" id="wpa2a_6">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2010/04/numeric-enumerations-enums-for-as3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Effortless Text Localization</title>
		<link>http://blog.rough-sea.com/2009/09/effortless-text-localization/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=effortless-text-localization</link>
		<comments>http://blog.rough-sea.com/2009/09/effortless-text-localization/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 14:32:24 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Server Administration]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[automatization]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[continous integration]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[iPhone SDK]]></category>
		<category><![CDATA[localization]]></category>
		<category><![CDATA[R&D]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1105</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Automatization of repeated work is one of the keys to productive development. Another is abstraction of common problems to allow concentration on project specific work. Localization is one of the problems you have in nearly every project, especially in iPhone projects. The iPhone SDK brings interesting solutions &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/09/effortless-text-localization/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Automatization of repeated work is one of the keys to productive development. Another is abstraction of common problems to allow concentration on project specific work. Localization is one of the problems you have in nearly every project, especially in iPhone projects. The iPhone SDK brings interesting solutions that abstract many parts of the localization process.</p>
<p>The tool <strong>ibtool</strong>, for example, extracts strings from an interface automatically. The strings are placed in a .strings file, a textfile with key/value pairs. To localize an interface, you have to translate .strings and merge the strings back into the interface again. Because you have individual interfaces for every localization, it&#8217;s possible to adjust widgets individually for each one.</p>
<p><strong>genstrings</strong> is another tool inside the iPhone SDK. It extracts textIDs from the source code and write them into a .strings file. You may ask how  the tool knows which texts need localization and which do not. The solution is the macro NSLocalizedString, which will be replaced by a .strings file lookup method by the preprocessor, but also searched for by the genstrings tool to create the files.</p>
<p>Both tools help you to create a localized application without paying much attention to localization itself. But you cannot expect the localization department to search for .strings files inside your project and create localized versions of them. Of course this would be possible, but not very convenient, because you have to migrate the translated texts back into the interfaces using ibtool. Another reason for us at Rough Sea is that we use a localization interface from our publisher. This interface is well known to the localization department and the content is placed in a centralized database on a server.</p>
<p>So we have the great tools from Apple that help us to separate texts from the project and we have the great tool from our publisher that handles the whole translation and reviewing process. Now we need something to tie those tools together, because we do not want to insert new texts from the .strings file into the publisher&#8217;s localization tool manually or vice versa. This glue tool has to execute the Apple tools, extract the texts from the .strings files and insert them into the publisher&#8217;s loca tool. On the other hand, it has to check for new localized texts from the publisher&#8217;s loca tool, build the required .strings files from the results and merge them back into the interfaces. Sounds quite easy, but of course there are some obstacles to get there. You have to handle other things, like the deletion of a text entry or changes to an already translated interface. So you have to know what has changed since the last update and stuff like that.</p>
<p>It turns out that you only have to integrate this glue tool into the build process of your build server. The tool will update the localization database whenever the code or the interface changes and it will update the localized versions when the database changes. As a coder you only need to remember to use the text macro around your text id. You don&#8217;t have to add this text id in a file or anything else. As you commit your changes, the build server will do this for you. As an interface designer it&#8217;s the same: just create your interfaces in the primary language and commit it. After the localization department finishes localizing those texts, they will be inserted into the localized versions automatically. Of course you have to make adjustments to the interface if there are loca bugs like labels that are to small to hold the translated text.</p>
<p>As you can see those localization tools are a big black box for coders, interface designers and translators. The coders only have to write code, the interface designers design interfaces and the translators translate texts. At the end there will be a localized product.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1105&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Feffortless-text-localization%2F&amp;title=Effortless%20Text%20Localization" id="wpa2a_8">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/09/effortless-text-localization/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Famous Movie Monsters &#8211; 4</title>
		<link>http://blog.rough-sea.com/2009/09/famous-movie-monsters-4/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=famous-movie-monsters-4</link>
		<comments>http://blog.rough-sea.com/2009/09/famous-movie-monsters-4/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 13:13:50 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Corey Feldman]]></category>
		<category><![CDATA[Gizmo]]></category>
		<category><![CDATA[Gremlins]]></category>
		<category><![CDATA[Joe Dante]]></category>
		<category><![CDATA[monster]]></category>
		<category><![CDATA[pet]]></category>
		<category><![CDATA[Rockin' Ricky Rialto]]></category>
		<category><![CDATA[Ruby Deagle]]></category>
		<category><![CDATA[steven spielberg]]></category>
		<category><![CDATA[stripe]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=1099</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Ffamous-movie-monsters-4%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Ffamous-movie-monsters-4%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Here you can see Stripe from the movie Gremlins. He is the second movie monster based on a suggestion from our blog readers. The original idea came from Benita:<a href="http://www.chrisnoeth.de/RoughSeaGames/gremlins_stripe_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/gremlins_stripe_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a>By &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/09/famous-movie-monsters-4/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Ffamous-movie-monsters-4%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Ffamous-movie-monsters-4%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Here you can see <strong>Stripe</strong> from the movie Gremlins. He is the second movie monster based on a suggestion from our blog readers. The original idea came from <strong>Benita</strong>:<a href="http://www.chrisnoeth.de/RoughSeaGames/gremlins_stripe_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/gremlins_stripe_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a>By clicking on the image you can see a bigger version with a short <strong>Tutorial</strong> on how the image was created.</p>
<p>Chris</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=1099&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F09%2Ffamous-movie-monsters-4%2F&amp;title=Famous%20Movie%20Monsters%20%26%238211%3B%204" id="wpa2a_10">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/09/famous-movie-monsters-4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Random Map Generation</title>
		<link>http://blog.rough-sea.com/2009/08/random-map-generation/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=random-map-generation</link>
		<comments>http://blog.rough-sea.com/2009/08/random-map-generation/#comments</comments>
		<pubDate>Mon, 24 Aug 2009 14:47:09 +0000</pubDate>
		<dc:creator>Manuel</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[ActionScript]]></category>
		<category><![CDATA[actionscript 3]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[continents]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[making of]]></category>
		<category><![CDATA[map generator]]></category>
		<category><![CDATA[perlin noise]]></category>
		<category><![CDATA[random generated content]]></category>
		<category><![CDATA[terrain]]></category>
		<category><![CDATA[wiener würschtel]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=946</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frandom-map-generation%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frandom-map-generation%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Designing an appealing and huge game world from scratch will take even really fast designers a looooong time: valuable time that can be spent in better ways. This is where generated content comes in handy. With the push of a button a designer can create a whole &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/08/random-map-generation/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frandom-map-generation%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frandom-map-generation%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Designing an appealing and huge game world from scratch will take even really fast designers a looooong time: valuable time that can be spent in better ways. This is where generated content comes in handy. With the push of a button a designer can create a whole world (oceans, land, forests, deserts, mountains, cities, &#8230; ) in an instant. So this is what we decided to do for our game &#8230; and here is how we got to the finish line:</p>
<p>On the bumpy road to an actual working map generator we decided to split all map generation tasks into small modules: heightmap generator, water generator, forest generator, desert generator, and so on. In the map-generator GUI the designer can put these modules into a task list and define the order in which they are executed.  Each module also has parameters that affect the characteristics of the generated map. Even though it is supposed to be a random map generator it is especially important to have deterministic behavior. Consequently, each module that actually generates content has at least a &#8220;seed&#8221; parameter for the random number generator. With the same seed the generator will create the same results every time. Changing the seeds will create a different map.</p>
<p><img class="alignnone size-full wp-image-952" title="map generation" src="http://blog.rough-sea.com/wp-content/uploads/2009/07/map_gen1.gif" alt="map generation steps" width="249" height="149" /><br />
In the little animation above you can see the output of some of the modules.</p>
<p><strong>Heightmap Generator</strong><br />
At first we create a heightmap. We use Perlin noise since it is built into the AS3 BitmapData class and it is amazingly fast. In the beginning we experimented with our own implementation of the diamond-square algorithm, but it was way too slow.</p>
<p><strong>Water Fill</strong><br />
In the next step we apply water to the world. We simply declare everything below a certain height level as being under water.</p>
<p><strong>Mountains</strong><br />
By looking for local peaks we detect mountains and flag the areas accordingly.</p>
<p><strong>Humidity Map</strong><br />
By defining a water contingent that grows over water and decreases over land we can flag dry and wet zones on the continents. To make things easier we define our whole world as a west-wind zone. The centers of most bigger continents will be dry (yellow), coast regions will be mostly humid (green) and continental areas lying east of a big stretch of water will be very humid (dark green).</p>
<p><strong>Climate Zones</strong><br />
Next we define climate zones in the world: tropical areas, temperate zones and polar regions. With this information we can easily place polar caps in the world.</p>
<p><strong>Forest Generator</strong><br />
Using the information from the climate zones and the humidity map makes it possible to place different types of forests into the world. Jungle (purple) will be found in the hot and wet regions around the equator, while coniferous forests will be found close to the polar caps.</p>
<p><strong>Desert Generator</strong><br />
The desert generator also uses the information from the humidity map to detect dry regions and place desert areas into them.</p>
<p>Well, now you had a look at some of the modules in our map generator. They are not only capable of creating earth-like maps (like the small sample map above) but also completely different maps by changing the parameters: a lake landscape, a waste land, a desert or whatever our games may need. With this we are able to quickly create new game content of any size for the players to explore.</p>
<p>Cheers,<br />
Manuel</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=946&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frandom-map-generation%2F&amp;title=Random%20Map%20Generation" id="wpa2a_12">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/08/random-map-generation/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>R&amp;D goes iPhone</title>
		<link>http://blog.rough-sea.com/2009/08/rd-iphone/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rd-iphone</link>
		<comments>http://blog.rough-sea.com/2009/08/rd-iphone/#comments</comments>
		<pubDate>Mon, 03 Aug 2009 07:56:41 +0000</pubDate>
		<dc:creator>Thomas</dc:creator>
				<category><![CDATA[Company]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[coder]]></category>
		<category><![CDATA[introductions]]></category>
		<category><![CDATA[iPhone]]></category>
		<category><![CDATA[R&D]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=963</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frd-iphone%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frd-iphone%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hello out there,</p> <p>my name is Thomas and I am the first programmer in our new R&#38;D department. Like most of the other guys here at Rough Sea, I&#8217;ve worked on games for consoles (Nintendo DS and Wii) and PC before. I&#8217;m very excited to develop sophisticated &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/08/rd-iphone/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frd-iphone%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frd-iphone%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hello out there,</p>
<p>my name is Thomas and I am the first programmer in our new R&amp;D department. Like most of the other guys here at Rough Sea, I&#8217;ve worked on games for consoles (Nintendo DS and Wii) and PC before. I&#8217;m very excited to develop sophisticated software that helps us to make state-of-the-art games. Of course this is only technically, but I&#8217;m pretty sure that Rafael and Jan will assure this for the design part too.</p>
<p>I assume you&#8217;ve read the headline already, so you know what the R&amp;D department will work on in the coming months. We&#8217;ve decided to do some research on the iPhone, because we think the way you use the iPhone is almost the same as how you play a browsergame. You get your iPhone out of your pocket, use it for a few seconds and put it back again. You have nearly the same procedure with browsergames: you open your browsergame window/tab, change a few settings and go back to work.</p>
<p>So the first thing to do is getting your working environment running. The only legal way to do this is to buy a Mac. I&#8217;m not really happy about that, because I&#8217;m a Windows guy and there are some differences in using MacOS instead of Windows. Maybe Apple only invented the app store to sell some of their Macs to iPhone developers. Nevertheless after some adjustments the Mac became usable. The nextStep (pun indended) was the installation of the iPhone SDK and all the tools that belong to it. It&#8217;s quite easy to get from the installation of the SDK to the first Hello World on the simulator (especially if you compare this to console development).</p>
<p>We at Rough Sea use test driven development and continuous integration to assure that we always have  a deliverable product at hand. Unit Tests are already integrated into the SDK and it was easy for Ole to set up a build server on a Mac Mini with hudson and the makefile-like shell tool xcodebuild. You don&#8217;t have a makefile: the tool just uses the settings of the project file to know how to build. Another thing is that you can add and change text macros for the XCode IDE. Text Macros are very useful to write code much faster. For example, you can add an alloc-init call <strong>[[class alloc] init]</strong> simply by typing the letter a and then escape. There are macros for <strong>if</strong>, <strong>for</strong> and <strong>while</strong> too. Because we have different coding guidelines than the apple guys, I had to change some of the macros. You find them in <em>/Developer/Applications/Xcode.app/Contents/ PlugIns/TextMacros.xctxtmacro/Contents/ Resources</em>. Copy the <em>TextMacros.xctxtmacro</em> folder to <em>Library/Application Support/Developer/Shared/Xcode/Specifications</em> in your home directory. Just open the *.xctxtmacro files with a text editor to change the macros. You can add your own file and project templates too. This is very nice, because you can set up a default project with many settings, like Unit Test Targets, already in place, and use this project to create new ones with only one click. To add a new project template, create the project the way you like it and copy the whole project folder to <em>Library/Application Support/Developer/Shared/XCode/Project Templates/GROUP_NAME/PROJECT_NAME</em>. For file templates you should just copy the File Templates folder from <em>/Developer/Library/Xcode/</em> to <em>Library/Application Support/Developer/Shared/XCode/</em> and change or add the files you like.</p>
<p>Next time I will write about Objective-C and libraries from the iPhone SDK like UIKit.</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=963&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F08%2Frd-iphone%2F&amp;title=R%26%23038%3BD%20goes%20iPhone" id="wpa2a_14">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/08/rd-iphone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Feel the groove</title>
		<link>http://blog.rough-sea.com/2009/06/feel-the-groove/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=feel-the-groove</link>
		<comments>http://blog.rough-sea.com/2009/06/feel-the-groove/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 12:10:20 +0000</pubDate>
		<dc:creator>Joerg</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[groovy]]></category>
		<category><![CDATA[scripting]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=876</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Ffeel-the-groove%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Ffeel-the-groove%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Our server code can be built with one click. The build process does not take long. To be precise, the build server says &#8220;last build: 1 minute 38 seconds&#8221;.  That&#8217;s cool. (And mainly it&#8217;s because the code is not that complex yet&#8230;)</p> <p>But despite fast builds and &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/06/feel-the-groove/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Ffeel-the-groove%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Ffeel-the-groove%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Our server code can be built with one click. The build process does not take long. To be precise, the build server says &#8220;last build: 1 minute 38 seconds&#8221;.  That&#8217;s cool. (And mainly it&#8217;s because the code is not that complex yet&#8230;)</p>
<p>But despite fast builds and because they are definitely going to get slower as the project progresses, we need the ability to change certain parts of the game logic with a minimum of work. So far this is mainly for the game designers, who want to be able to change some equations that influence the game&#8217;s balance. Defining stuff in config files that are read on server startup is nice, and we use this as well, but starting the server takes time, too. A better way is to be able to change game logic at run time.  So a scripting language was the way to go.</p>
<p>We decided to use <a href="http://en.wikipedia.org/wiki/Groovy_(programming_language)">groovy</a>. Now groovy is not a scripting language at all, but more or less an object-oriented programming language that can be used as a scripting language for Java. Groovy has some advantages over Java like e.g. dynamic typing.</p>
<p>Unlike in other scripting languages, the groovy code is not interpreted at runtime but compiled into java byte code. So don&#8217;t forget to automatically reload the scripting files every now and then to make sure that changes in the files are actually applied.</p>
<p>We haven&#8217;t yet decided whether to keep the scripting in the release version of the game or not, since implementing the logic in the code is surely better for the performance. People on the Internet tend to accuse groovy of weak performance in comparison to other scripting languages.  But it is very pleasant for experimenting during development. If you don&#8217;t believe me, go ask our designers&#8230;</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=876&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Ffeel-the-groove%2F&amp;title=Feel%20the%20groove" id="wpa2a_16">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/06/feel-the-groove/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Common project management mistakes: Estimating tasks (part 2)</title>
		<link>http://blog.rough-sea.com/2009/06/common-project-management-mistakes-estimating-tasks-part-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=common-project-management-mistakes-estimating-tasks-part-2</link>
		<comments>http://blog.rough-sea.com/2009/06/common-project-management-mistakes-estimating-tasks-part-2/#comments</comments>
		<pubDate>Tue, 09 Jun 2009 14:19:46 +0000</pubDate>
		<dc:creator>Joe Cool</dc:creator>
				<category><![CDATA[Management]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[crunch]]></category>
		<category><![CDATA[estimation]]></category>
		<category><![CDATA[mistakes]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[tasks]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=443</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Fcommon-project-management-mistakes-estimating-tasks-part-2%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Fcommon-project-management-mistakes-estimating-tasks-part-2%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Hi there,</p> <p>we were quite busy over the last weeks,  so updates of our blog are currently reduced. We are only going to post once a week in the upcoming month, but this should improve the quality.</p> <p>Today I will continue my project management series.  In my &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/06/common-project-management-mistakes-estimating-tasks-part-2/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Fcommon-project-management-mistakes-estimating-tasks-part-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Fcommon-project-management-mistakes-estimating-tasks-part-2%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Hi there,</p>
<p>we were quite busy over the last weeks,  so updates of our blog are currently reduced. We are only going to post once a week in the upcoming month, but this should improve the quality.</p>
<p>Today I will continue my project management series.  In my first post I described the common mistakes which are often happening when estimating tasks:</p>
<p>- Mistake 1: Estimation is not done by the task owner<br />
- Mistake 2: The task has no proper description<br />
- Mistake 3:  Estimation is done by averaging worst case with best case scenarios<br />
- Mistake 4:  The tasks are too big<br />
- Mistake 5: The tasks have unclear dependencies<br />
- Mistake 6: The owner puts some unknown buffer time into the estimation</p>
<p>Please check out the first <a href="http://blog.rough-sea.com/2009/01/common-project-management-mistakes-estimating-tasks-part1/" target="_self">part</a> of this article to find viable solutions to those mistakes.</p>
<p>The mistakes I wrote about are not really specific to a single department; most of them are quite common problems.  Unfortunately, there is one department where task estimation can be very difficult.  It&#8217;s obviously the programming department that I have in mind. Estimating tasks with programmers is quite an awkward  business.</p>
<p>You need lots of knowledge and experience to get numbers that are even close to realistic.  As a project manager you may wonder why this is so complicated and why programmers&#8217; estimates are so often unreliable.  There are several reasons:</p>
<p><strong>Mistake 7:</strong></p>
<p>Taking the estimates of a rookie programmer as the final estimate</p>
<p><em>Solution:</em><br />
Programmer performance varies by a factor of 10, which means a very good programmer can solve a given problem ten times faster than a bad one/rookie. No problem, you think: just let the slowest programmer estimate the task. That will unfortunately not solve your problem.</p>
<p>Young programmers tend to overrate their skills and dramatically underestimate tasks. So let the lead programmers, who are able to rate programmer performance as well as task difficulty, review the rookie&#8217;s estimate. The more experienced programmers check the estimate, the better it gets.</p>
<p><strong>Mistake 8:</strong></p>
<p>The buffer time for the programming tasks is the same as for any other task in the project plan</p>
<p><em>Solution:</em><br />
This is nothing new and a lot of people have written about this problem, but unfortunately it&#8217;s still not accepted as an unalterable fact. Maybe it&#8217;s because of the certainty that there is no simple formula to determine the right buffer time.</p>
<p>It really completely depends on your programming team. You might have a 100% or even 200% buffer time and it&#8217;s not enough. Track real life data and your estimates,  compare them, learn from them . Every programmer has his own speed and estimation techniques.  Find out which ones are reliable and which are not and adjust your buffers accordingly.</p>
<p><strong>Mistake 9:</strong></p>
<p>Assuming that a programmer programs 8 hours a day</p>
<p><em>Solution:</em><br />
If a programmer tells you he needs one day for the task, does that mean one real life day? It depends, again, on the programmer, but you should not ask how many days; instead you should ask &#8220;how many hours do you need?&#8221;. This is very important because a rookie programmer might not have realized yet that his effective  programming time is only 4 to 5 hours a day.</p>
<p><strong>Mistake 10:</strong></p>
<p>Changing numbers in the project plan in order to change reality</p>
<p><em>Solution:</em><br />
Project managers very often reduce the (massive) programming buffer times after estimation is complete, because it tightens the project schedule and seems to save lots of money.</p>
<p>Well you know the answer already: this does NOT change reality and you will not save a single cent. Instead it will cost you a lot of money! Never reduce programming buffer times unless you are absolutely sure it can be done faster.  To put programmers into a crunch because you reduced their necessary buffer times will damage your reputation, and the team will not trust you anymore and will sneak their own buffer times in their upcoming estimations.</p>
<p>Next time I will talk about <strong>crunch</strong>, a very common technique to waste money and lose good employees.</p>
<p>That&#8217;s it for today, thanks for your time <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> .</p>
<p>Cheers,<br />
Matthias</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=443&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F06%2Fcommon-project-management-mistakes-estimating-tasks-part-2%2F&amp;title=Common%20project%20management%20mistakes%3A%20Estimating%20tasks%20%28part%202%29" id="wpa2a_18">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/06/common-project-management-mistakes-estimating-tasks-part-2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Famous Movie Monsters &#8211; 3</title>
		<link>http://blog.rough-sea.com/2009/05/famous-movie-monsters-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=famous-movie-monsters-3</link>
		<comments>http://blog.rough-sea.com/2009/05/famous-movie-monsters-3/#comments</comments>
		<pubDate>Wed, 06 May 2009 13:02:32 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Chucky]]></category>
		<category><![CDATA[comic]]></category>
		<category><![CDATA[horror]]></category>
		<category><![CDATA[horrorfilm]]></category>
		<category><![CDATA[horrormovie]]></category>
		<category><![CDATA[killerpuppe]]></category>
		<category><![CDATA[killertoy]]></category>
		<category><![CDATA[monster]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[movie monster]]></category>
		<category><![CDATA[murder puppet]]></category>
		<category><![CDATA[serial killer]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=839</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F05%2Ffamous-movie-monsters-3%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F05%2Ffamous-movie-monsters-3%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Here you can see Chucky the first movie monster based on a suggestion from our blog reader Mr. Boomerang:<a href="http://www.chrisnoeth.de/RoughSeaGames/chucky_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/chucky_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a>By clicking on the image you can see a bigger version &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/05/famous-movie-monsters-3/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F05%2Ffamous-movie-monsters-3%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F05%2Ffamous-movie-monsters-3%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Here you can see <strong>Chucky</strong> the first movie monster based on a suggestion from our blog reader <strong>Mr. Boomerang</strong>:<a href="http://www.chrisnoeth.de/RoughSeaGames/chucky_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/chucky_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a>By clicking on the image you can see a bigger version with a short <strong>Tutorial</strong> how the image was created.</p>
<p>Chris</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=839&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F05%2Ffamous-movie-monsters-3%2F&amp;title=Famous%20Movie%20Monsters%20%26%238211%3B%203" id="wpa2a_20">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/05/famous-movie-monsters-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Famous Movie Monsters &#8211; 2</title>
		<link>http://blog.rough-sea.com/2009/04/famous-movie-monsters-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=famous-movie-monsters-2</link>
		<comments>http://blog.rough-sea.com/2009/04/famous-movie-monsters-2/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 07:56:09 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[concept art]]></category>
		<category><![CDATA[digital painting]]></category>
		<category><![CDATA[frankenstein]]></category>
		<category><![CDATA[frankensteins monster]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[horror]]></category>
		<category><![CDATA[intuos4]]></category>
		<category><![CDATA[making of]]></category>
		<category><![CDATA[monsters]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[wacom]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=831</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters-2%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters-2%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Last time I told you I already know what I will draw next for my new blog series Famous Movie Monsters. And here you can see one of my personal favorite movie monsters&#8230;<a href="http://www.chrisnoeth.de/RoughSeaGames/frankensteinsmonster_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/frankensteinsmonster_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/04/famous-movie-monsters-2/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters-2%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Last time I told you I already know what I will draw next for my new blog series <strong>Famous Movie Monsters</strong>. And here you can see one of my personal favorite movie monsters&#8230;<a href="http://www.chrisnoeth.de/RoughSeaGames/frankensteinsmonster_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/frankensteinsmonster_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a>By clicking on the image you can see a bigger version with a short <strong>MakingOf</strong>.<br />
I already got some feedback and ideas for the next images in the series but if you still have a favorite you want to see write a comment to this post, name your movie monster and I will see what I can do&#8230;<br />
 <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Chris</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=831&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters-2%2F&amp;title=Famous%20Movie%20Monsters%20%26%238211%3B%202" id="wpa2a_22">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/04/famous-movie-monsters-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Famous Movie Monsters</title>
		<link>http://blog.rough-sea.com/2009/04/famous-movie-monsters/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=famous-movie-monsters</link>
		<comments>http://blog.rough-sea.com/2009/04/famous-movie-monsters/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 15:13:03 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[blood]]></category>
		<category><![CDATA[classic movie monsters]]></category>
		<category><![CDATA[dracula]]></category>
		<category><![CDATA[film]]></category>
		<category><![CDATA[horror]]></category>
		<category><![CDATA[horror monsters]]></category>
		<category><![CDATA[monster]]></category>
		<category><![CDATA[monsters]]></category>
		<category><![CDATA[movie]]></category>
		<category><![CDATA[movie monsters]]></category>
		<category><![CDATA[sharp teeth]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=816</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>I hope you didn&#8217;t take Manuels last blog post too serious. <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p> <p>Currently I&#8217;m working on a new series for the blog called Famous Movie Monsters. The series starts with Dracula (You know&#8230; the guy with the sharp teeth and sun allergy). &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/04/famous-movie-monsters/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>I hope you didn&#8217;t take Manuels last blog post too serious. <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Currently I&#8217;m working on a new series for the blog called <strong>Famous Movie Monsters</strong>. The series starts with <strong>Dracula</strong> (You know&#8230; the guy with the sharp teeth and sun allergy). By clicking on the image you can see a bigger version with a short <strong>MakingOf</strong>.<a href="http://www.chrisnoeth.de/RoughSeaGames/dracula_makingof.jpg" target="_blank"><img title="Famous Movie Monsters - MakingOf" src="http://www.chrisnoeth.de/RoughSeaGames/dracula_small.jpg" border="0" alt="Famous Movie Monsters - MakingOf" hspace="4" vspace="1" align="center" /></a><br />
I know what to draw next, but if you have ideas, wishes, suggestions&#8230; feel free to add them in a comment to this post and who knows&#8230; maybe you can see your favorite movie monster here on our blog soon&#8230;<br />
 <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Best wishes and a happy easter!</p>
<p>Chris</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=816&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F04%2Ffamous-movie-monsters%2F&amp;title=Famous%20Movie%20Monsters" id="wpa2a_24">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/04/famous-movie-monsters/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Discover the ground ! Discover the ocean !</title>
		<link>http://blog.rough-sea.com/2009/02/discover-the-ground-discover-the-ocean/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=discover-the-ground-discover-the-ocean</link>
		<comments>http://blog.rough-sea.com/2009/02/discover-the-ground-discover-the-ocean/#comments</comments>
		<pubDate>Sun, 08 Feb 2009 17:28:40 +0000</pubDate>
		<dc:creator>Ole</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[5.0]]></category>
		<category><![CDATA[discover]]></category>
		<category><![CDATA[Google Earth]]></category>
		<category><![CDATA[ocean]]></category>
		<category><![CDATA[rock the boat]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=635</guid>
		<description><![CDATA[Googe Earth 5.0 has been released !]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F02%2Fdiscover-the-ground-discover-the-ocean%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F02%2Fdiscover-the-ground-discover-the-ocean%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Row row rock the boat &#8230; gently down the stream &#8230;.</p>
<p>And this streams leads to an ocean sooner or later .</p>
<p>Maybe it is time to discover the ocean. Google Earth 5.0 has been released and this gives you the opportunity to discover the ocean, the ground, the whole planet Earth.</p>
<p>Click <a href="http://earth.google.com/">Here</a> for more information about Google Earth 5.0</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=635&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/02/discover-the-ground-discover-the-ocean/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Let&#8217;s play a game&#8230;</title>
		<link>http://blog.rough-sea.com/2009/01/lets-play-a-game/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=lets-play-a-game</link>
		<comments>http://blog.rough-sea.com/2009/01/lets-play-a-game/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 12:08:51 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Art]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[wiener würschtel]]></category>

		<guid isPermaLink="false">http://blog.rough-sea.com/?p=456</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Flets-play-a-game%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Flets-play-a-game%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Take a look at the following image&#8230;<a href="http://www.chrisnoeth.de/RoughSeaGames/Optic01.jpg" target="_blank"><img title="A or B?" src="http://www.chrisnoeth.de/RoughSeaGames/Optic01.jpg" border="0" alt="A or B?" hspace="4" vspace="1" align="top" /></a>&#8230; and tell us which square is the dark one&#8230; square A or square B?Easy isn&#8217;t it!? <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230; and to show you &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/01/lets-play-a-game/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Flets-play-a-game%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Flets-play-a-game%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Take a look at the following image&#8230;<br /><a href="http://www.chrisnoeth.de/RoughSeaGames/Optic01.jpg" target="_blank"><img title="A or B?" src="http://www.chrisnoeth.de/RoughSeaGames/Optic01.jpg" border="0" alt="A or B?" hspace="4" vspace="1" align="top" /></a><br />&#8230; and tell us which square is the dark one&#8230; <strong>square A</strong> or <strong>square B</strong>?<br />Easy isn&#8217;t it!? <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> &#8230; and to show you your answer is the right one click <br /><a href="http://www.chrisnoeth.de/RoughSeaGames/Optic01_answer.jpg" target="_blank">HERE!</a>.</p>
<p>Chris</p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=456&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Flets-play-a-game%2F&amp;title=Let%26%238217%3Bs%20play%20a%20game%26%238230%3B" id="wpa2a_26">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/01/lets-play-a-game/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Common project management mistakes: Estimating tasks (part1)</title>
		<link>http://blog.rough-sea.com/2009/01/common-project-management-mistakes-estimating-tasks-part1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=common-project-management-mistakes-estimating-tasks-part1</link>
		<comments>http://blog.rough-sea.com/2009/01/common-project-management-mistakes-estimating-tasks-part1/#comments</comments>
		<pubDate>Sun, 11 Jan 2009 22:53:59 +0000</pubDate>
		<dc:creator>Matthias</dc:creator>
				<category><![CDATA[Industry]]></category>
		<category><![CDATA[Management]]></category>
		<category><![CDATA[Methodology]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[estimating tasks]]></category>
		<category><![CDATA[mistakes]]></category>
		<category><![CDATA[project management]]></category>

		<guid isPermaLink="false">http://www.rough-sea.com/wordpress/?p=64</guid>
		<description><![CDATA[<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fcommon-project-management-mistakes-estimating-tasks-part1%2F"> <img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fcommon-project-management-mistakes-estimating-tasks-part1%2F&#38;style=compact&#38;b=2" height="61" width="50" /> </a> <p>Over the last several years I have managed and participated in different projects of different sizes. I made a lot of mistakes, some of them more than once. This time I want to talk about mistakes in estimating the time to complete tasks.</p> <p>Estimating tasks is really &#8230; </p><p><a class="more-link block-button" href="http://blog.rough-sea.com/2009/01/common-project-management-mistakes-estimating-tasks-part1/">Continue reading &#187;</a>]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fcommon-project-management-mistakes-estimating-tasks-part1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fcommon-project-management-mistakes-estimating-tasks-part1%2F&amp;style=compact&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Over the last several years I have managed and participated in different projects of different sizes. I made a lot of mistakes, some of them more than once. This time I want to talk about mistakes in estimating the time to complete tasks.</p>
<p>Estimating tasks is really tough work, and it&#8217;s done wrong most of the time. Estimations are never precise. I think that most project managers are aware of this problem, but may not know how to get better information out of their team.</p>
<p><strong>Mistake 1:</strong></p>
<p>The task is estimated by somebody who is not working on it &#8212; maybe by the lead, which is even worse.</p>
<p><em>Solution:</em><br />
Tasks should be estimated by the owner of the task with the help of his colleagues or his lead. Programmers especially have different working speeds, which can be ranked from 1-10.  This means a very good programmer can be 10 times faster than a very bad one.</p>
<p><strong>Mistake 2:</strong></p>
<p>The task has no proper description and/or is unclear to its owner.</p>
<p><em>Solution:</em><br />
How do you know if the task has a proper description? Well, it&#8217;s a mixture of common sense and experience. If you, as a project manager, do not understand the task (e.g. it&#8217;s too technical), it might be already a very good hint. Tasks should be described non-technically, understandably and in only a few sentences. If you prefer working with user stories I would recommend to you this <a href="http://www.amazon.com/Agile-Estimating-Planning-Robert-Martin/dp/0131479415" target="_self">book</a> from Mike Cohen.</p>
<p><strong>Mistake 3:</strong></p>
<p>The task is estimated with worst case and best case scenarios and the average is taken for the project plan.</p>
<p><em>Solution:<br />
</em>This doesn&#8217;t make sense because the owner has to make 2 estimations. In the worst case scenario there is probably a hidden buffer time, which is not obvious to the reader when checking the project plan. Ask only for one estimation from the owner or the team when estimating the tasks.  It&#8217;s much clearer to them and they know you will add the buffer.</p>
<p><strong>Mistake 4:</strong></p>
<p>The task is too big and cannot properly estimated by its owner (tasks with 8- 16 hours are a maximum)</p>
<p><em>Solution:</em><br />
As soon as a task is bigger than 2 days, it is time to break it down, because nobody can foresee the problems that are going to arise when approaching such a big issue. If you are not able to break down the task (e.g. because of a missing design),  but you need the information desperately, you should estimate it and add at least a 100% buffer. Don&#8217;t forget to mark that task with &#8220;??&#8221;, to be sure to break it down later and re-estimate it.</p>
<p><strong>Mistake 5:</strong></p>
<p>The task has dependencies on other tasks that are not clear to its owner.</p>
<p><em>Solution:<br />
</em>This is not an easy problem. Try to make tasks as independent as possible when defining them. If you work with user stories, add the dependencies of the task to your war-room board and check if your priorities match the dependencies.  It is really hard work for the designer and project manager to get this right. Communicate as much as possible with the team to avoid dependency hell early: it can vaporize your whole project plan if you do not care about it.</p>
<p><strong>Mistake 6:</strong></p>
<p>The owner puts some unknown buffer time into his estimation</p>
<p><em>Solution:</em><br />
Again you need your soft skills and experience here to identify this problem. Some people just add buffer times to be sure they can handle the task. Be open with them, tell them that you will add enough buffer time, holiday and sickness absence.  They will only tell you the right time if they trust you. Collect all the estimation data of each owner to get an idea of how well they estimate over the whole project.</p>
<p>I have some more mistakes on my list, but It is late already. So stay tuned for more in the upcoming days. Cheers for reading and I would love to hear your experiences&#8230; <img src='http://blog.rough-sea.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<img src="http://blog.rough-sea.com/?ak_action=api_record_view&id=64&type=feed" alt="" /><p><a class="a2a_dd a2a_target addtoany_share_save" href="http://www.addtoany.com/share_save#url=http%3A%2F%2Fblog.rough-sea.com%2F2009%2F01%2Fcommon-project-management-mistakes-estimating-tasks-part1%2F&amp;title=Common%20project%20management%20mistakes%3A%20Estimating%20tasks%20%28part1%29" id="wpa2a_28">Share/Bookmark</a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.rough-sea.com/2009/01/common-project-management-mistakes-estimating-tasks-part1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

