<?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>Limegarden.net</title>
	<atom:link href="http://www.limegarden.net/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.limegarden.net</link>
	<description>Personal site of Wouter Lindenhof</description>
	<lastBuildDate>Tue, 01 May 2012 22:53:22 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Hexagon versus Quads in games</title>
		<link>http://www.limegarden.net/2012/05/01/hexagon-versus-quads-in-games/</link>
		<comments>http://www.limegarden.net/2012/05/01/hexagon-versus-quads-in-games/#comments</comments>
		<pubDate>Tue, 01 May 2012 22:53:22 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.limegarden.net/?p=500</guid>
		<description><![CDATA[Just some notes I had written. +---+---+---+ &#124; 7 &#124; 8 &#124; 9 &#124; +---+---+---+ &#124; 4 &#124; * &#124; 6 &#124; +---+---+---+ &#124; 1 &#124; 2 &#124; 3 &#124; +---+---+---+ Normally moving from "*" to 7, 9, 1 or 2 would cost 2 movement points. +---+ +---+ &#124; 7 +---+ 9 &#124; +---+ 8 [...]]]></description>
			<content:encoded><![CDATA[<p>Just some notes I had written.</p>
<pre class="brush: plain; ">
+---+---+---+
| 7 | 8 | 9 |
+---+---+---+
| 4 | * | 6 |
+---+---+---+
| 1 | 2 | 3 |
+---+---+---+
</pre>
<p>Normally moving from "*" to 7, 9, 1 or 2 would cost 2 movement points. </p>
<pre class="brush: plain; ">
+---+   +---+
| 7 +---+ 9 |
+---+ 8 +---+
| 4 +---+ 6 |
+---+ * +---+
| 1 +---+ 3 |
+---+ 2 +---+
    +---+
</pre>
<p>In a hexagon moving from "*" to 1,2,3,4,6 or 8 would cost only 1 movement point. Moving to 7 or 9 would still cost 2 movement points.</p>
<p>Normal quads have only 4 attached quads. Hexagons have 6 attached quads.</p>
<p><strong>QUAD GRID</strong></p>
<pre class="brush: plain; ">
+---+---+---+---+---+---+---+
| A | D | G | J | M | P | S |
+---+---+---+---+---+---+---+
| B | E | H | K | N | Q | T |
+---+---+---+---+---+---+---+
| C | F | I | L | O | R | U |
+---+---+---+---+---+---+---+
</pre>
<p>HEXAGON GRID</p>
<pre class="brush: plain; ">
+---+   +---+   +---+   +---+
| A +---+ G +---+ M +---+ S |
+---+ D +---+ J +---+ P +---+
| B +---+ H +---+ N +---+ T |
+---+ E +---+ K +---+ Q +---+
| C +---+ I +---+ O +---+ U |
+---+ F +---+ L +---+ R +---+
    +---+   +---+   +---+
</pre>
<p>Shortest path from B to T in quads is    B->E->H->K->N->Q->T<br />
Shortest path from B to T in hexagons is B->(D|E)->(G|H|I)->(J|K|L)->(M|N|O)->(P|Q)->T</p>
<p>Even though the cost is the same, the possible routes in hexagons are not shortest if drawn.</p>
<p>The reason for this is because horizontal movement is always done in steps of 1.0 unit. Moving<br />
vertical however is more tricky because steps can be either 1.0 (for example D->E) but also 0.5 (A->D)</p>
<p>Moving from A to E is however always two steps. Hexagon (A->(B|D)->E)</p>
<p>Moving from A to I is however 4 steps in quads but 3 steps in Hexagon (A->(B|D)->(E|H)->I)</p>
<p>Using coordinates A would [0,0] (both quad and hex) while "I" would be [2,2]<br />
Moving from A to I in hexagon however lets you visit D which is [1, 0.5] Which can then move<br />
to H which is [2,1]. These are both two steps with a distance of 1.5 where a quad is always limited to 1.0.</p>
<p>So Hexagons allows of steps that must be in distance either 1.0 (vertical movement) or 1.5 (horizontal movement)</p>
<p>So a hexagon doesn't only modify the allowed movement and cost, but because of the inherit properties it<br />
also allows modifies the coordinate system (as adjacent nodes are at different distances).</p>
<p>This means that moving from A to U (whose coordinates are the same in both quad and hexagon)<br />
The distance would be [6,2.0] covering the horizontal movement first we go</p>
<pre class="brush: plain; ">
[1,0.5]  =&gt; A-&gt;D   [1,0.5]
[1,-0.5] =&gt; D-&gt;G   [2,0.0]
[1,0.5]  =&gt; G-&gt;J   [3,0.5]
[1,0.5]  =&gt; J-&gt;N   [4,1.0]
[1,0.5]  =&gt; N-&gt;Q   [5,1.5]
[1,0.5]  =&gt; Q-&gt;U   [6,2.0]
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2012/05/01/hexagon-versus-quads-in-games/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Testing wordpress scheduling</title>
		<link>http://www.limegarden.net/2012/02/02/testing-wordpress-scheduling/</link>
		<comments>http://www.limegarden.net/2012/02/02/testing-wordpress-scheduling/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 23:05:02 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=495</guid>
		<description><![CDATA[One of the things I like of wordpress is the fact that I can schedule my posts. That is until it breaks. I had a post scheduled at 1200 today but when I checked it at home I noticed that it hadn't updated yet. It even said that it had missed its schedule. Calling the [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things I like of wordpress is the fact that I can schedule my posts. That is until it breaks.</p>
<p>I had a post scheduled at 1200 today but when I checked it at home I noticed that it hadn't updated yet. It even said that it had missed its schedule. Calling the cron job a few more times didn't do anything so this is just a quick post to check if it does work now. </p>
<p><strong>Update @ 2012-02-02 00:06</strong>: It seems to be working just fine <img src='http://www.limegarden.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2012/02/02/testing-wordpress-scheduling/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Precision, precision&#8230;</title>
		<link>http://www.limegarden.net/2012/02/01/precision-precision/</link>
		<comments>http://www.limegarden.net/2012/02/01/precision-precision/#comments</comments>
		<pubDate>Wed, 01 Feb 2012 11:00:01 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[Developer Diary]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=493</guid>
		<description><![CDATA[One of the things I have been writing for Flexposure is the RAPI which is short for Remote API. The RAPI (which you should mispronounce when you are among the opposite sex) is nothing more than a thin communication layer which can be used on virtual any other protocol like UDP and TCP but also [...]]]></description>
			<content:encoded><![CDATA[<p>One of the things I have been writing for <a href="http://flexposure.nl" title="Flexposure (opens in a new window)" target="_blank">Flexposure</a> is the RAPI which is short for Remote API. The RAPI (which you should mispronounce when you are among the opposite sex) is nothing more than a thin communication layer which can be used on virtual any other protocol like UDP and TCP but also on some industrial standards which are used by hardware (even my worst enemy: RS232 AKA comport).</p>
<p>Even though I'm not racist I hate the diversity of compilers and OS so I decided to use <a href="http://boost.org" title="Boost.org (opens in a new window)" target="_blank">Boost</a> for all the timing relevant functions. Within boost you have two types of clock:</p>
<ol>
<li><code>boost::posix::second_clock</code></li>
<li><code>boost::posix::microsec_clock</code></li>
</ol>
<p>Thinking which one I wanted I decided <b>not</b> to go for the high-performance clock. I only want to know if a message had timed out and if I should send another one.</p>
<p>A basic example of the code would be this:</p>
<pre class="brush: cpp; ">

class SendTask : public IClientTask
{
public:
    SendTask()
        : m_SendTimestamp(boost::posix::second_clock::universal_time())
        , m_SendInterval(boost::posix::seconds(1))
    {

    }
    void Tick()
    {
        auto currentTime = boost::poxix::second_clock::universal_time();

        bool sendAgain = m_SendTimestamp &lt; currentTime;
        if(sendAgain)
        {
            // ...
            // Send message again
            // ...

            // Increase the next timestamp.
            m_SendTimestamp = currentTime + m_SendInterval;
        }
    }

private:
    boost::posix::ptime m_SendTimestamp;

    // The default delay is one second (decided by constructor)
    boost::posix::time_duration m_SendInterval;
};
</pre>
<p>Timing the above code I was surprised to see that sending a message using UDP over the loopback took about 0.5 seconds, which was at least ten times more than what I had expected. After checking my code multiple times and not finding anything I could only come to the conclusion that somewhere in my code I made a wrong assumption. So I wrote a little test to at least ensure it had nothing to do with boost and to ensure it was my code.</p>
<pre class="brush: cpp; ">

int main()
{
    while(true)
    {
        std::cout &lt;&lt; boost::posix::second_clock::universal_time() &lt;&lt; std::endl;
    }

    return 0;
}
</pre>
<p>Removing all the duplicate entries that were printed I found out that the time difference between each timestamp was around 0.5 seconds. This would explain why it would take so long before it would send again. I told its resend delay is 100 milliseconds it would take at least 0.5 seconds because of the problem with the resolution/precision.</p>
<p>But I was using the loopback (sending to 127.0.0.1) and although messages can get lost there it should not happen that often. Sure I could replace everything with a faster clock but I wanted to know why this delay occurred. Taking another look at the send code I noticed that the following line:</p>
<pre class="brush: cpp; ">

bool sendAgain = m_SendTimestamp &lt; currentTime;
</pre>
<p>If the send time is in the past it would send and this is also true for the very first time. Changing the code so that it checks if the next send time is less or equal than the current time fixed it and the performance increased to 0.005 milliseconds since it no longer had to wait for the first time out.</p>
<p>Sure I could have saved myself a lot of trouble by replacing the clock with the higher resolution variant (after striking concurrency of my list this was my next guess) but I rather spend a few hours on figuring out what exactly is going on. It takes time now but in the end it should save me time when I come before the decision which clock to choose.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2012/02/01/precision-precision/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invalid code: from wstring to string</title>
		<link>http://www.limegarden.net/2012/01/31/invalid-code-from-wstring-to-string/</link>
		<comments>http://www.limegarden.net/2012/01/31/invalid-code-from-wstring-to-string/#comments</comments>
		<pubDate>Tue, 31 Jan 2012 17:07:02 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[C++]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=491</guid>
		<description><![CDATA[Before I start let me make one thing clear: I used to do it like this as wel. When you need to convert an std::wstring to an std::string you should not simply do the following: std::wstring input = L&#34;Hello World&#34;; std::string output; output = std::string(input.begin(), input.end()); The above code is valid, but incorrect. A string [...]]]></description>
			<content:encoded><![CDATA[<p>Before I start let me make one thing clear: I used to do it like this as wel. <img src='http://www.limegarden.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>When you need to convert an <code>std::wstring</code> to an <code>std::string</code> you should not simply do the following:</p>
<pre class="brush: cpp; ">

std::wstring input = L&quot;Hello World&quot;;
std::string output;
output = std::string(input.begin(), input.end());
</pre>
<p>The above code is valid, but incorrect. A string is nothing more than a fancy array (just like a vector) but who is specialized for our basic usage of text (which is concatination and using the stream operators). If you look at <code>std::wstring</code> as a <code>std::vector&lt;wchar_t&gt;</code> and a <code>std::string</code> as a <code>std::vector&lt;char&gt;</code> then you should come to realisation that the above code performs an implicit cast (from <code>wchar_t</code> to a <code>char</code>).</p>
<p>If you use <code>std::wstring</code> to store UTF8 then there is no problem, but if you use it to store UTF16 then you do have a problem as you might lose some information. Also keep in mind that it is perfectly fine to store UTF16 in an <code>std::string</code> but then you should realize that every 2 elements in the string is one single character.</p>
<p>More correct (but still incorrect) would be:</p>
<pre class="brush: cpp; ">

    // Just making certain that wchar_t is 16 bits.
    assert(sizeof(wchar_t) == 2);
    assert(sizeof(char) == 1);

    std::wstring input = L&quot;Hello world&quot;;
    std::string output;
    std::wstring::const_iterator it = input.cbegin();
    while(it != input.cend())
    {
        output += ((*it) &amp; 0xFF00) &gt;&gt; 8; // Add the most significant bits.
        output += ((*it) &amp; 0x00FF) &gt;&gt; 0; // Add the least significant bits

        // Going to the next wchar_t
        ++it;
    }
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2012/01/31/invalid-code-from-wstring-to-string/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Happy new year!</title>
		<link>http://www.limegarden.net/2011/12/31/happy-new-year/</link>
		<comments>http://www.limegarden.net/2011/12/31/happy-new-year/#comments</comments>
		<pubDate>Sat, 31 Dec 2011 22:59:44 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=489</guid>
		<description><![CDATA[Goodbye 2011 and welcome 2012. I wish everybody a happy new year.]]></description>
			<content:encoded><![CDATA[<p>Goodbye 2011 and welcome 2012. I wish everybody a happy new year.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/12/31/happy-new-year/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Test run Windows 8</title>
		<link>http://www.limegarden.net/2011/09/14/test-run-windows-8/</link>
		<comments>http://www.limegarden.net/2011/09/14/test-run-windows-8/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 12:08:34 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Windows 8]]></category>

		<guid isPermaLink="false">http://limegarden.net/2011/09/14/test-run-windows-8/</guid>
		<description><![CDATA[Today at the office I download and installed the developer preview of WIndows 8 in VirtualBox. The first thing I noticed was that the installation was fast. It was a similar installer as Windows 7 so no big suprises there. After installing and starting it for the first time I was suprised to see a [...]]]></description>
			<content:encoded><![CDATA[<p>Today at the office I download and installed the developer preview of WIndows 8 in VirtualBox. The first thing I noticed was that the installation was fast. It was a similar installer as Windows 7 so no big suprises there. After installing and starting it for the first time I was suprised to see a really green screen. The windows color for me has always been blue (which is recuring theme in almost every Windows version since Windows 95). After completing the create account procedure and logging in you notice that green is the new blue, almost everything is green and as you have noticed I'm not too big a fan of green. But enough about green, lets go to the part that is important.</p>
<p>After logging in you are presented with the new Metro GUI which is confusing if you are not familiar with it (and even more if you have no touch device). So a few hints:</p>
<ol>
<li>If you move the mouse completly to the left bottom you will see a start menu. Clicking on start will always bring you to the metro page.</li>
<li>If you move the mouse to the rightside of the screen you will get to see a thumbnail of the application to switch to
<ol>
<li>Left mouse click will switch to it</li>
<li>Scrolling will display other running applications</li>
<li>Right mouse click will give you the snap options</li>
</ol>
</li>
<li>Alt-F4 closes applications</li>
<li>The windows key will switch between the metro interface and the application</li>
<li>In metro applications the right mouse button often shows menus at the top and bottom, but you will never see quit (which confused me a lot)</li>
<li>Windows-R gives you the run dialog and yes mspaint, wordpad, notepad, explorer are all available.</li>
<li>Seen enough and want to shutdown? Move to the left bottom and click on devices and you will get a toolbar on the right. The center bottom button there is a power off button.</li>
</ol>
<p>After playing with it for a few hours there are a few things I like and a lot I don't. Keep in mind that this is a developer preview so I'm sure a lot will change before the initial release.</p>
<p>The things I liked where:</p>
<ul>
<li>Snapping works well and frankly I love it. This is done way better than I have seen before.</li>
<li>The twitter app looks good, works good and when snapped to 1/3 of the screen it is just a killer app</li>
</ul>
<p>The things I don't like are:</p>
<ul>
<li>It's confusing, it took me a while to get around</li>
<li>No good replacement for touch if you only have a mouse</li>
<li>I miss the old start menu (which is a first since I enjoyed each new version of the start menu so far)</li>
<li>Scrollbars are ugly</li>
<li>Metro interface is confusing</li>
</ul>
<p>As a closing note I would say that Windows 8 is not suitable for coorporate enviroments (no good function for metro interface) and is more aimed at the tablets. If I would have to pick a tablet I would wait until Windows 8 for tablets is ready.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/09/14/test-run-windows-8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Taking a look at NoSQL</title>
		<link>http://www.limegarden.net/2011/09/06/taking-a-look-at-nosql/</link>
		<comments>http://www.limegarden.net/2011/09/06/taking-a-look-at-nosql/#comments</comments>
		<pubDate>Tue, 06 Sep 2011 18:56:00 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Developer Diary]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[NoSQL]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=483</guid>
		<description><![CDATA[At work I have been tasked with writing a new version of the application server which is considerable different then the current version running. Since I want to restructure the database I have decided to take a look at how I can improve the Data Dictionary (that what defines what and how things should be [...]]]></description>
			<content:encoded><![CDATA[<p>At work I have been tasked with writing a new version of the application server which is considerable different then the current version running. Since I want to restructure the database I have decided to take a look at how I can improve the Data Dictionary (that what defines what and how things should be put in the database).<br />
The problem is as followed our security software knows many devices (many different cameras, intercoms, fire alarms, door locks and so on). We don't just support one vendor, but any vendor the customer wants. Of course each vendor has it's own method of implementing it's configuration. In the old software we had one huge table called "devices" (no points for originality there) that contained every device of the customer. The table contained not only the type and locations but also the various properties in a single row. There are two other alternatives.<br />
One in which we create two tables where one holds the generic device description and the other which contains multiple rows for one device. This is an inefficient format.<br />
The other alternative is that for each type and brand we create a new table. So we have a table for acti_cameras, axis_cameras, sony_cameras and so on. I think we support over at least a hundred devices so that is likely to go wrong.</p>
<p>So I have been looking at alternatives like NoSQL database. NoSQL is not a formal term but in general it means "Not Only SQL". It's a new development inside the database world and one I think that is certainly worth looking at. The first SQL was created in 1974 which in our line of work is really old. I also want to point out that it can only be so old because it has proven it's value. NoSQL on the other hand is from 1998 and the most common flavors are Key-value and Document store and graph.</p>
<p>Document store is in my opinion the coolest one as you can often just dump the data in any table. You don't need to look at the format. This would mean that we can still freely define types but at the same time we can also have different values and parameters.</p>
<p>There is only one downside: Eventual Consistency.</p>
<p>I understand the reason behind it (delaying writes while allowing reads) but there are plenty of situations where it is not acceptable. Sure you can catch it in your application layer but again that is not what you want.</p>
<p>Currently I think the best method is using MSSQL where a row also contains an XML document.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/09/06/taking-a-look-at-nosql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Service your code</title>
		<link>http://www.limegarden.net/2011/06/03/service-your-code/</link>
		<comments>http://www.limegarden.net/2011/06/03/service-your-code/#comments</comments>
		<pubDate>Fri, 03 Jun 2011 14:26:06 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[code]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=479</guid>
		<description><![CDATA[In the past week a friend of mine tweeted that debugging took so damn long, because he had to compile a lot of code, load the game and wait until the level was loaded before he could test one specific feature. From experience this can easily take more then 10 minutes of your time, while [...]]]></description>
			<content:encoded><![CDATA[<p>In the past week a friend of mine tweeted that debugging took so damn long, because he had to compile a lot of code, load the game and wait until the level was loaded before he could test one specific feature. From experience this can easily take more then 10 minutes of your time, while to solution is only a boolean check that needs to be inverted. One of the solutions I proposed was to put it in a DLL and dynamicly load (and re-load) that code until you have solved the problem and as I was typing it out I realized that this could be applied more often.</p>
<p>If you create a core application against which does only a few core elements (like basic rendering and providing input) and you put the rest in DLL which can dynamically be loaded and unloaded you will in theory never have to touch the core application again. The rest are all buildingblocks which are continuesly improved. If you do this, you can easily rollout (or rollback) features. Even cooler is that with another product you only have to write a few new buildingblocks (assuming you continuesly improve your old buildingblocks), create new content and your done.</p>
<p>If after a few years you want to re-release your game but you want to use the improved render, all you need to do is replace it. No more memory leaks the old version had <img src='http://www.limegarden.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>But for that we need to continuesly serivce our code, something I believe is rarely done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/06/03/service-your-code/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mercurial switch notes</title>
		<link>http://www.limegarden.net/2011/05/31/mercurial-switch-notes/</link>
		<comments>http://www.limegarden.net/2011/05/31/mercurial-switch-notes/#comments</comments>
		<pubDate>Tue, 31 May 2011 17:52:38 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Developer Diary]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=477</guid>
		<description><![CDATA[At work I have taken the librarity of proposing to switch from Subversion to Mercurial and the following are the results of typing out my notes. The major advantages of working with Mercurial over SVN are: No unexpected merge (or merge conflicts) Developers can work independent of each other. They don't have to worry about commiting broken [...]]]></description>
			<content:encoded><![CDATA[<p>At work I have taken the librarity of proposing to switch from Subversion to Mercurial and the following are the results of typing out my notes.</p>
<p>The major advantages of working with Mercurial over SVN are:</p>
<ul>
<li>No unexpected merge (or merge conflicts)</li>
<li>Developers can work independent of each other. They don't have to worry about commiting broken code, only syncing broken code.</li>
</ul>
<p>There are two types of branching:</p>
<ul>
<li>Unnamed branches</li>
<li>Named branches</li>
</ul>
<p>Named branches are comparible to what we know from SVN. Unnamed branches are done when you have reverted to an old changeset and then make a change, they are like an automatic branch that occur where normally (in SVN) you would have conflict.</p>
<p>An example can easily be created by making a few commits, then revert to and old one because you want to try an alternative approach for a problem you were having and start commiting then. Once your done with the alternative you can decide which branch should be closed and which one should be continued.</p>
<p>When syncing your changesets with someone else, you make it possible to look at what the other has done without having to worry that your own code gets broken by the changes. For example you encounter a problem and notify another developer of it who tries to fix it while you continue work on your own problem. Once both of you are done, you can review each other code without having to merge. Then one is tasked with merging it while another continues with his tasks. Once done you simply merge again and you are done.</p>
<p>You can always sync your code with a central repositorie. It's not uncommon that you are working on a large issue which might take a day or two. With Mercurial you can still commit as you normally do and if only a central repository is backed up you can still push your changes to that location without interfering in someone else his work.</p>
<p>Another great feature is shelving. Simply put it puts your changes on a shelve. Imagine you are working on a feature and suddenly you have to put that on hold as your boss wants you to work on a bug. You can either complete what you were working on or revert all changes. With shelving you put those changes on the shelve and when you are done with whatever had a higher priority you can take the changes from the shelve and continue as if nothing had happend.</p>
<p>There are, as always, a few bad things about moving from Subversion to Mercurial. First of all, Subversion is linear which gives you a linear method of developing. Secondly because Mercurial automatically creates branches and you would have to actively control this by doing merges often.</p>
<p>Mercurial has a lot of nice features like being able to import from SVN (nice if you want to do a complete switch) as being able to rebase (similar to Git). Also Mercurial could easily be intergrate in our toolchain.</p>
<p>Since I mentioned Git, I would like to say that I have thought about it but decided against using Git. Git has no native version for Windows. Git was also hard to start with, heck, the installer alone requires several extra steps. As a developer I don't want to worry about the tools or how it should be used. Mercurial was ready with just a few steps and working with it is quite easy compared to Git which I was messing around with for a few days. So basically the choice was made on personal preference</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/05/31/mercurial-switch-notes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inline skating</title>
		<link>http://www.limegarden.net/2011/04/10/inline-skating/</link>
		<comments>http://www.limegarden.net/2011/04/10/inline-skating/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 10:00:15 +0000</pubDate>
		<dc:creator>Wouter Lindenhof</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[hobby]]></category>
		<category><![CDATA[inline skating]]></category>

		<guid isPermaLink="false">http://limegarden.net/?p=469</guid>
		<description><![CDATA[When I was young I loved to my skates (I called them skeelers even though they had four wheels) and I did it quite often. So yesterday when the weather was just perfect I decided that I wanted to do some inline skating even though I had not touched a skate in the past six [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://limegarden.net/wp-content/uploads/2011/04/roller-coaster-skate-20090722-0921011.jpg"><img class="alignleft size-thumbnail wp-image-470" title="Extreme roller skating" src="http://limegarden.net/wp-content/uploads/2011/04/roller-coaster-skate-20090722-0921011-150x150.jpg" alt="" width="150" height="150" /></a>When I was young I loved to my skates (I called them skeelers even though they had four wheels) and I did it quite often. So yesterday when the weather was just perfect I decided that I wanted to do some inline skating even though I had not touched a skate in the past six or eight years. I looked up on the Internet what the current state of the industry is, relearned the things I had forgotten about skating (the theory) and was deciding where to buy them until my mom reminded me that six or eight years ago I had bought these excellent skates but had only used them for a week or so.</p>
<p>So up in the attic I searched for my inline skates and found them in one of the boxes. I had indeed bought them and I recalled that they were quite expensive for me at the time. They were bought in France when we were there on vacation and I had indeed used them for only a week or so before I boxed them in the attic. The weather in the Netherlands was what excpected in the Netherlands: Nothing but rain. The year after that the weather was also poor and so I forgot all about them.</p>
<p>After cleaning the frame and wheels (I had not done that when I boxed them <img src='http://www.limegarden.net/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' />  ) I geared up (wearing protection for elbow, knees and wrist), I finally got up and... almost planted my face on the ground. I admit I knew that I would have trouble skating again, but except the first time I wore skates I had never had any trouble getting up. I guess that the years of sitting behind a desk, hitting the keyboard while writing code had not improved my balance. Big surprise there. However that was indication enough I had to learn everything from scratch again.</p>
<p>So after a few test rounds on the parking lot, learning to brake and to turn I was reminded why I didn't like skating on the parking lot with these skates. The wheels of my skates are 80mm 82a which means that they are small and reasonable soft and the the parking lot has a lot of bricks. So after a few minutes you feel like your feet have been  put in the blender. Leaving the parking lot behind me I left in a random direction. I'm proud to say I did not fall, but it took a lot of effort and I wouldn't be suprised if I have lost my balance more than 20 times.</p>
<p>When I decided to rest I was tired and everything hurt. My arms from spinning, my feet from the poor road, my back because it wasn't used to bend like that and my head because it was the middle of the day and it was hot. After a few minutes of recovering my breath I decided to go back home. To my suprise going back was a whole lot easier. I only lost my balance a few times, four or five times if I recall correct, and the rough tarmac didn't feel so rough anymore. I enjoyed it. The distance skated was only 8 kilometers (about 5 miles) but for the first time after so many years it feels like quite a feat.</p>
<p>I only hope that this weather will stay as I want to do some more skating.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.limegarden.net/2011/04/10/inline-skating/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic page generated in 0.429 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2012-05-16 12:46:51 -->
<!-- Compression = gzip -->
