<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
	
	>
<channel>
	<title>
	Comments on: Engine Tech: Concurrent world editing	</title>
	<atom:link href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/feed/" rel="self" type="application/rss+xml" />
	<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/</link>
	<description>Explore an abandoned island.</description>
	<lastBuildDate>Sun, 24 Jun 2018 11:58:38 +0000</lastBuildDate>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.9</generator>
	<item>
		<title>
		By: Raphaël		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8779897</link>

		<dc:creator><![CDATA[Raphaël]]></dc:creator>
		<pubDate>Sun, 24 Jun 2018 11:58:38 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8779897</guid>

					<description><![CDATA[Jonathan , I have A question , I buyed your game on PC , And I finished it , I LOVED it , but I have a question , after finishing the Two Possibles Ends , the Editor is in the game ? Because I really want to see the world with another angle with the editor , what is the key if the editor still in the game ?]]></description>
			<content:encoded><![CDATA[<p>Jonathan , I have A question , I buyed your game on PC , And I finished it , I LOVED it , but I have a question , after finishing the Two Possibles Ends , the Editor is in the game ? Because I really want to see the world with another angle with the editor , what is the key if the editor still in the game ?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Michael		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-3009727</link>

		<dc:creator><![CDATA[Michael]]></dc:creator>
		<pubDate>Thu, 02 Jan 2014 17:17:19 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-3009727</guid>

					<description><![CDATA[Are you using a 1.8.*+ version of the TortoiseSVN client?  Not sure how early on you installed TortoiseSVN since 2008, and whether you&#039;ve updated, but I noticed greatly reduced &quot;illegitimate&quot; merge conflicts come 1.8.* of TSVN.  (The client&#039;s backwards with earlier server versions, and so well worth the update.)

Here&#039;s hoping you&#039;re using a 1.6/1.7 client, and enjoy the merge conflict reduction I&#039;ve seen.

Cheers.]]></description>
			<content:encoded><![CDATA[<p>Are you using a 1.8.*+ version of the TortoiseSVN client?  Not sure how early on you installed TortoiseSVN since 2008, and whether you&#8217;ve updated, but I noticed greatly reduced &#8220;illegitimate&#8221; merge conflicts come 1.8.* of TSVN.  (The client&#8217;s backwards with earlier server versions, and so well worth the update.)</p>
<p>Here&#8217;s hoping you&#8217;re using a 1.6/1.7 client, and enjoy the merge conflict reduction I&#8217;ve seen.</p>
<p>Cheers.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: PypeBros		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-108072</link>

		<dc:creator><![CDATA[PypeBros]]></dc:creator>
		<pubDate>Fri, 30 Nov 2012 08:37:16 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-108072</guid>

					<description><![CDATA[nice. I&#039;m eager to see how this will all turn into...]]></description>
			<content:encoded><![CDATA[<p>nice. I&#8217;m eager to see how this will all turn into&#8230;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jason Ericson		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-103901</link>

		<dc:creator><![CDATA[Jason Ericson]]></dc:creator>
		<pubDate>Wed, 28 Nov 2012 22:00:16 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-103901</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100840&quot;&gt;Jonathan Blow&lt;/a&gt;.

Very cool, I really like the deprecation system. Thanks for the info! I might tromp around your blog again if I have more questions, or do you respond to email?]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100840">Jonathan Blow</a>.</p>
<p>Very cool, I really like the deprecation system. Thanks for the info! I might tromp around your blog again if I have more questions, or do you respond to email?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100840</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 27 Nov 2012 12:27:42 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-100840</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100067&quot;&gt;Jason Ericson&lt;/a&gt;.

We define a couple of macros to make it simple, so it looks like...

void Entity_Type_Terrain::register_metadata() {
    NULL_PROXY(e, Entity_Terrain);

    metadata = make_entity_metadata();
    
    Metadata_Item *item;
    item = Item(e, texture_name);

    item = Item(e, normal_map_name);
    item-&gt;minimum_revision_number = 25;
    item-&gt;flags &#124;= Metadata_Item::ADJUSTABLE_WITHOUT_RECREATE;

    item = Item(e, map_size);
    item-&gt;minimum_revision_number = 63;
    item-&gt;maximum_revision_number = 85;
    item-&gt;flags &#124;= Metadata_Item::DO_NOT_DISPLAY_IN_UI;

...



The &#039;NULL_PROXY&#039; macro just declares &#039;e&#039; as an Entity_Terrain and sets it up in the right way. It&#039;s an idiom that only exists in that file that you don&#039;t really have to think about, apart from ensuring it&#039;s at the top of the function.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100067">Jason Ericson</a>.</p>
<p>We define a couple of macros to make it simple, so it looks like&#8230;</p>
<p>void Entity_Type_Terrain::register_metadata() {<br />
    NULL_PROXY(e, Entity_Terrain);</p>
<p>    metadata = make_entity_metadata();</p>
<p>    Metadata_Item *item;<br />
    item = Item(e, texture_name);</p>
<p>    item = Item(e, normal_map_name);<br />
    item->minimum_revision_number = 25;<br />
    item->flags |= Metadata_Item::ADJUSTABLE_WITHOUT_RECREATE;</p>
<p>    item = Item(e, map_size);<br />
    item->minimum_revision_number = 63;<br />
    item->maximum_revision_number = 85;<br />
    item->flags |= Metadata_Item::DO_NOT_DISPLAY_IN_UI;</p>
<p>&#8230;</p>
<p>The &#8216;NULL_PROXY&#8217; macro just declares &#8216;e&#8217; as an Entity_Terrain and sets it up in the right way. It&#8217;s an idiom that only exists in that file that you don&#8217;t really have to think about, apart from ensuring it&#8217;s at the top of the function.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jason Ericson		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-100067</link>

		<dc:creator><![CDATA[Jason Ericson]]></dc:creator>
		<pubDate>Tue, 27 Nov 2012 03:31:55 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-100067</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99810&quot;&gt;Jonathan Blow&lt;/a&gt;.

Ah, interesting. I hadn&#039;t thought about the compatibility issues. So essentially you have to manually update a map of strings to variables (or something to that effect)? That seems manageable. I can look up more info on member fields and the like.

Also when I said &quot;entities in code&quot; I did mean in memory, heh. Whoops. But cool, thanks for the info.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99810">Jonathan Blow</a>.</p>
<p>Ah, interesting. I hadn&#8217;t thought about the compatibility issues. So essentially you have to manually update a map of strings to variables (or something to that effect)? That seems manageable. I can look up more info on member fields and the like.</p>
<p>Also when I said &#8220;entities in code&#8221; I did mean in memory, heh. Whoops. But cool, thanks for the info.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99810</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Tue, 27 Nov 2012 01:33:49 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-99810</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99620&quot;&gt;Jason Ericson&lt;/a&gt;.

The editor is editing the entities that are loaded into memory. Then when you press the Save button, the entities are serialized into both the text and binary files. 

Serialization is pretty straightforward, it is reflection that is involved. Since C++ does not provide a good way to do this, we create a function for each entity type that registers its members. But this is actually good, because this is also how we handle compatibility as entities change. When you register a member field of an entity, you can specify the per-entity-type revision number at which the field started being valid, or at which it stopped being valid. If you try to use automated reflection provided by the programming language, there isn&#039;t an obvious way to do this, since if you delete a field it is just gone. (You then probably tend toward a file format that is a little more self-descriptive, though that will be somewhat less space-efficient).]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99620">Jason Ericson</a>.</p>
<p>The editor is editing the entities that are loaded into memory. Then when you press the Save button, the entities are serialized into both the text and binary files. </p>
<p>Serialization is pretty straightforward, it is reflection that is involved. Since C++ does not provide a good way to do this, we create a function for each entity type that registers its members. But this is actually good, because this is also how we handle compatibility as entities change. When you register a member field of an entity, you can specify the per-entity-type revision number at which the field started being valid, or at which it stopped being valid. If you try to use automated reflection provided by the programming language, there isn&#8217;t an obvious way to do this, since if you delete a field it is just gone. (You then probably tend toward a file format that is a little more self-descriptive, though that will be somewhat less space-efficient).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jason Ericson		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-99620</link>

		<dc:creator><![CDATA[Jason Ericson]]></dc:creator>
		<pubDate>Mon, 26 Nov 2012 22:31:01 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-99620</guid>

					<description><![CDATA[I know this post is old but my question is directly related so I thought this would be an appropriate place.

I&#039;m relatively new to building game engines (so forgive my ignorance) and I have some questions about editing game data. I see from this post that you have the ability to save and load from both binary and text files. My main question: what, specifically, is the editor actually editing? Is it editing the binary package, the text files, or is it directly editing the entities themselves in code? If it&#039;s the last one (I suspect that it is), at what point are you saving out to files? Is there a specific save function or is it automatic?

Finally, in any case, are there any resources you could point me to on implementing robust serialization and/or reflection in c++? I come from a C# background (don&#039;t judge me! :) ) where reflection is trivial, so I&#039;m less familiar with pulling together an entity&#039;s data in a form useful for serialization.

Thanks!]]></description>
			<content:encoded><![CDATA[<p>I know this post is old but my question is directly related so I thought this would be an appropriate place.</p>
<p>I&#8217;m relatively new to building game engines (so forgive my ignorance) and I have some questions about editing game data. I see from this post that you have the ability to save and load from both binary and text files. My main question: what, specifically, is the editor actually editing? Is it editing the binary package, the text files, or is it directly editing the entities themselves in code? If it&#8217;s the last one (I suspect that it is), at what point are you saving out to files? Is there a specific save function or is it automatic?</p>
<p>Finally, in any case, are there any resources you could point me to on implementing robust serialization and/or reflection in c++? I come from a C# background (don&#8217;t judge me! :) ) where reflection is trivial, so I&#8217;m less familiar with pulling together an entity&#8217;s data in a form useful for serialization.</p>
<p>Thanks!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: bananaoomarang		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-10890</link>

		<dc:creator><![CDATA[bananaoomarang]]></dc:creator>
		<pubDate>Sat, 25 Feb 2012 17:53:15 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-10890</guid>

					<description><![CDATA[Extremely interesting! I really appreciate it that you took the time to write this, really awesome of you! 

I would suggest Git, but looks like I would be wrong judging by the commits!]]></description>
			<content:encoded><![CDATA[<p>Extremely interesting! I really appreciate it that you took the time to write this, really awesome of you! </p>
<p>I would suggest Git, but looks like I would be wrong judging by the commits!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jordan		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9840</link>

		<dc:creator><![CDATA[Jordan]]></dc:creator>
		<pubDate>Sat, 21 Jan 2012 09:44:05 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9840</guid>

					<description><![CDATA[That&#039;s very interesting to discover your work. Will be there a beta or other solution to help you ?]]></description>
			<content:encoded><![CDATA[<p>That&#8217;s very interesting to discover your work. Will be there a beta or other solution to help you ?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Dougie		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9724</link>

		<dc:creator><![CDATA[Dougie]]></dc:creator>
		<pubDate>Wed, 18 Jan 2012 00:33:10 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9724</guid>

					<description><![CDATA[Can I preorder somewhere or am i too early?]]></description>
			<content:encoded><![CDATA[<p>Can I preorder somewhere or am i too early?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Gary Hawkins		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9550</link>

		<dc:creator><![CDATA[Gary Hawkins]]></dc:creator>
		<pubDate>Wed, 11 Jan 2012 23:31:35 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9550</guid>

					<description><![CDATA[I didn&#039;t understand a word of any of that, but... Jonathan Blow and team FTW? 

I think so :D!

xx]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t understand a word of any of that, but&#8230; Jonathan Blow and team FTW? </p>
<p>I think so :D!</p>
<p>xx</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Cristiano Colangelo		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9531</link>

		<dc:creator><![CDATA[Cristiano Colangelo]]></dc:creator>
		<pubDate>Wed, 11 Jan 2012 14:53:52 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9531</guid>

					<description><![CDATA[Very Good. I want this game!]]></description>
			<content:encoded><![CDATA[<p>Very Good. I want this game!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Alejandro Martinez		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9480</link>

		<dc:creator><![CDATA[Alejandro Martinez]]></dc:creator>
		<pubDate>Mon, 09 Jan 2012 20:18:34 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9480</guid>

					<description><![CDATA[Very interesting post! Thanks for the info! ;)]]></description>
			<content:encoded><![CDATA[<p>Very interesting post! Thanks for the info! ;)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Daniel		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9358</link>

		<dc:creator><![CDATA[Daniel]]></dc:creator>
		<pubDate>Thu, 05 Jan 2012 15:19:15 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9358</guid>

					<description><![CDATA[&quot;Many modern programmers seem to have some kind of knee-jerk inclination to use XML whenever a textual format is desired, but I think XML is one of the worst file formats ever created, and I have no idea why anyone uses it for anything at all, except that perhaps they drank the XML Kool-Aid or have XML Stockholm Syndrome.&quot; - Jonathan Blow

Dude... We have to make custom T-shirts. :)]]></description>
			<content:encoded><![CDATA[<p>&#8220;Many modern programmers seem to have some kind of knee-jerk inclination to use XML whenever a textual format is desired, but I think XML is one of the worst file formats ever created, and I have no idea why anyone uses it for anything at all, except that perhaps they drank the XML Kool-Aid or have XML Stockholm Syndrome.&#8221; &#8211; Jonathan Blow</p>
<p>Dude&#8230; We have to make custom T-shirts. :)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Pritchard		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9053</link>

		<dc:creator><![CDATA[Pritchard]]></dc:creator>
		<pubDate>Sat, 31 Dec 2011 22:33:32 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9053</guid>

					<description><![CDATA[This is my favorite post from any of your blogs to date :)

It&#039;s a shame I learned so much from reading your article.  That makes your post more valuable, but my formal education less.

I recently landed my first job as a Software Engineer.  I&#039;m finding that working full-time for other people is less fulfilling than I&#039;d hoped.  How will I ever find the time to create awesome things now that I have this commitment? :(]]></description>
			<content:encoded><![CDATA[<p>This is my favorite post from any of your blogs to date :)</p>
<p>It&#8217;s a shame I learned so much from reading your article.  That makes your post more valuable, but my formal education less.</p>
<p>I recently landed my first job as a Software Engineer.  I&#8217;m finding that working full-time for other people is less fulfilling than I&#8217;d hoped.  How will I ever find the time to create awesome things now that I have this commitment? :(</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Tomislav Podhraški		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-9007</link>

		<dc:creator><![CDATA[Tomislav Podhraški]]></dc:creator>
		<pubDate>Fri, 30 Dec 2011 12:04:36 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-9007</guid>

					<description><![CDATA[I&#039;ve done a similar thing on a game project I&#039;m not working on anymore. The project still continues, I don&#039;t know if any of this was improved... 

Using file per entity was the first step. I chose binary files, because I didn&#039;t want to bother with serialization. Merging individual files was not important in this system.

For handling multiple users we used a simple identifier in editor settings (username). That mapped to a folder where entity files user created were saved. Every new entity file had a number for a name, which increased for each entity.

Simple rule was applied: &quot;Only the user can create files in his folder, he can change files in any folder&quot;.

I think the last time I was checking the entity count was 300k. We&#039;ve obviously had problems with this, so a simple hack was used, when user folder had a lot of files in it the username was appended with an number username_1.

Now for the main difference, we used Dropbox instead of svn. That saved me from doing any work related to syncing/committing files since it was automatic. I don&#039;t think there is a real need to have a full version history of map, but do make backups.

Solving conflicts - we didn&#039;t! Go work on you part of the map.

Terrain was a heightfield, chopped up into grid and each grid was a file. Same rules as above, with terrain having been created at start.

Textures, models, shaders and all other resources were also managed with Dropbox.

The grand plan was to have every resource automatically synced on every computer and have the tools detect changes and reload them as they happen. You could have an editor open and see the changes other people make. It worked for a while.

But as with all things, it didn&#039;t last. With more files in there is started to get slower. I had to work on other parts of the game, and the slowness was compensated with removing features - automatic resource reloading was gone.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve done a similar thing on a game project I&#8217;m not working on anymore. The project still continues, I don&#8217;t know if any of this was improved&#8230; </p>
<p>Using file per entity was the first step. I chose binary files, because I didn&#8217;t want to bother with serialization. Merging individual files was not important in this system.</p>
<p>For handling multiple users we used a simple identifier in editor settings (username). That mapped to a folder where entity files user created were saved. Every new entity file had a number for a name, which increased for each entity.</p>
<p>Simple rule was applied: &#8220;Only the user can create files in his folder, he can change files in any folder&#8221;.</p>
<p>I think the last time I was checking the entity count was 300k. We&#8217;ve obviously had problems with this, so a simple hack was used, when user folder had a lot of files in it the username was appended with an number username_1.</p>
<p>Now for the main difference, we used Dropbox instead of svn. That saved me from doing any work related to syncing/committing files since it was automatic. I don&#8217;t think there is a real need to have a full version history of map, but do make backups.</p>
<p>Solving conflicts &#8211; we didn&#8217;t! Go work on you part of the map.</p>
<p>Terrain was a heightfield, chopped up into grid and each grid was a file. Same rules as above, with terrain having been created at start.</p>
<p>Textures, models, shaders and all other resources were also managed with Dropbox.</p>
<p>The grand plan was to have every resource automatically synced on every computer and have the tools detect changes and reload them as they happen. You could have an editor open and see the changes other people make. It worked for a while.</p>
<p>But as with all things, it didn&#8217;t last. With more files in there is started to get slower. I had to work on other parts of the game, and the slowness was compensated with removing features &#8211; automatic resource reloading was gone.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8942</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 07:16:07 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8942</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8926&quot;&gt;raigan&lt;/a&gt;.

Hahaha no, that is not what that means.  That&#039;s our main engine programmer!]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8926">raigan</a>.</p>
<p>Hahaha no, that is not what that means.  That&#8217;s our main engine programmer!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: raigan		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8926</link>

		<dc:creator><![CDATA[raigan]]></dc:creator>
		<pubDate>Thu, 29 Dec 2011 01:48:46 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8926</guid>

					<description><![CDATA[Does &quot;75000 78000 F4-6D-04-1F-CC-77 #Nacho&quot; imply that Nacho Vigalondo is working on The Witness?! 

Has this been previously announced, or did I just scoop everyone? ;)]]></description>
			<content:encoded><![CDATA[<p>Does &#8220;75000 78000 F4-6D-04-1F-CC-77 #Nacho&#8221; imply that Nacho Vigalondo is working on The Witness?! </p>
<p>Has this been previously announced, or did I just scoop everyone? ;)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8911</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 28 Dec 2011 17:02:26 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8911</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8906&quot;&gt;Luis Cabellos&lt;/a&gt;.

The only thing the database would provide is atomic access, which as I said we can already do just by making that file lockable; we just didn&#039;t care enough to do it yet.

Apart from that, keep in mind we already have a database: it&#039;s called the filesystem.

But since you are saying &quot;but you already need to be connected to use commits... So why not use a database&quot; it&#039;s clear that you actually don&#039;t understand the concern.  That&#039;s fine, I have no problem with that; just don&#039;t claim that you do!

The point is we can edit the world for weeks if we want to, in isolation, then come back on the net and do a commit... It&#039;s kind of different!]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8906">Luis Cabellos</a>.</p>
<p>The only thing the database would provide is atomic access, which as I said we can already do just by making that file lockable; we just didn&#8217;t care enough to do it yet.</p>
<p>Apart from that, keep in mind we already have a database: it&#8217;s called the filesystem.</p>
<p>But since you are saying &#8220;but you already need to be connected to use commits&#8230; So why not use a database&#8221; it&#8217;s clear that you actually don&#8217;t understand the concern.  That&#8217;s fine, I have no problem with that; just don&#8217;t claim that you do!</p>
<p>The point is we can edit the world for weeks if we want to, in isolation, then come back on the net and do a commit&#8230; It&#8217;s kind of different!</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Luis Cabellos		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8906</link>

		<dc:creator><![CDATA[Luis Cabellos]]></dc:creator>
		<pubDate>Wed, 28 Dec 2011 13:10:31 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8906</guid>

					<description><![CDATA[I understand your  concern about you don’t want to require users to be on the network in order to edit. But you already need to be connected in order to use Subversion commits. And thinking about it, having all connected in edit mode, will it pay to have a database (mysql, postgresql) to save entities during development?

I think having a database will solve the unique ID issues, format representation issues and most of the conflicts.]]></description>
			<content:encoded><![CDATA[<p>I understand your  concern about you don’t want to require users to be on the network in order to edit. But you already need to be connected in order to use Subversion commits. And thinking about it, having all connected in edit mode, will it pay to have a database (mysql, postgresql) to save entities during development?</p>
<p>I think having a database will solve the unique ID issues, format representation issues and most of the conflicts.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8888</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 28 Dec 2011 02:06:35 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8888</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8868&quot;&gt;elDroid&lt;/a&gt;.

This is likely true!  It definitely helps to use a better merge program, but part of the point is that whatever merge program you use, at some point someone is going to fail a merge in a way that causes the file to stop parsing.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8868">elDroid</a>.</p>
<p>This is likely true!  It definitely helps to use a better merge program, but part of the point is that whatever merge program you use, at some point someone is going to fail a merge in a way that causes the file to stop parsing.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8887</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Wed, 28 Dec 2011 02:06:01 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8887</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8861&quot;&gt;James McNeill&lt;/a&gt;.

Right, but %g seems to be mainly a zero-trimming thing, not an exact-transcription thing...]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8861">James McNeill</a>.</p>
<p>Right, but %g seems to be mainly a zero-trimming thing, not an exact-transcription thing&#8230;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: elDroid		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8868</link>

		<dc:creator><![CDATA[elDroid]]></dc:creator>
		<pubDate>Tue, 27 Dec 2011 11:46:31 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8868</guid>

					<description><![CDATA[Nice article, thank you for sharing!

I found WinMerge a much better visual merge tool than the one which comes with Tortoise, it handles conflicts better and seems &quot;smarter&quot; in interpreting text changes.

It can set it as default conflicts handler in TortoiseSVN.]]></description>
			<content:encoded><![CDATA[<p>Nice article, thank you for sharing!</p>
<p>I found WinMerge a much better visual merge tool than the one which comes with Tortoise, it handles conflicts better and seems &#8220;smarter&#8221; in interpreting text changes.</p>
<p>It can set it as default conflicts handler in TortoiseSVN.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: James McNeill		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8861</link>

		<dc:creator><![CDATA[James McNeill]]></dc:creator>
		<pubDate>Tue, 27 Dec 2011 07:19:12 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8861</guid>

					<description><![CDATA[Regarding floating point text representation, have you tried just using printf&#039;s %g format specifier? That&#039;s what I use. It&#039;s not new or unusual by any means (and is probably implemented using that code you linked to). It outputs enough decimal digits to exactly represent the input (so zero is 0, for instance) and switches to scientific notation when that is shorter.]]></description>
			<content:encoded><![CDATA[<p>Regarding floating point text representation, have you tried just using printf&#8217;s %g format specifier? That&#8217;s what I use. It&#8217;s not new or unusual by any means (and is probably implemented using that code you linked to). It outputs enough decimal digits to exactly represent the input (so zero is 0, for instance) and switches to scientific notation when that is shorter.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8847</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 21:46:38 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8847</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8843&quot;&gt;David Amador&lt;/a&gt;.

Because git cannot handle game data.  See comments above.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8843">David Amador</a>.</p>
<p>Because git cannot handle game data.  See comments above.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: David Amador		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8843</link>

		<dc:creator><![CDATA[David Amador]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 21:06:11 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8843</guid>

					<description><![CDATA[Very informative article, thanks for this.
Just one thing, SVN? why not use Git?]]></description>
			<content:encoded><![CDATA[<p>Very informative article, thanks for this.<br />
Just one thing, SVN? why not use Git?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Chris Boucher		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8842</link>

		<dc:creator><![CDATA[Chris Boucher]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 20:09:49 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8842</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8840&quot;&gt;Jonathan Blow&lt;/a&gt;.

Could well be, they certainly didn&#039;t used to, but I don&#039;t know when that changed. I used to install the command line binaries from somewhere else too, but noticed they were included in Tortoise recently when building a new dev machine.

BTW, probably not directly useful, but I recently needed to enumerate the MAC addresses of &quot;physical&quot; network devices only, ignoring the virtual ones, etc. As far as I could tell, the information returned by GetAdaptersAddresses is insufficient to make this distinction, so I had to combine it with some information from the registry.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8840">Jonathan Blow</a>.</p>
<p>Could well be, they certainly didn&#8217;t used to, but I don&#8217;t know when that changed. I used to install the command line binaries from somewhere else too, but noticed they were included in Tortoise recently when building a new dev machine.</p>
<p>BTW, probably not directly useful, but I recently needed to enumerate the MAC addresses of &#8220;physical&#8221; network devices only, ignoring the virtual ones, etc. As far as I could tell, the information returned by GetAdaptersAddresses is insufficient to make this distinction, so I had to combine it with some information from the registry.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8840</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 19:40:08 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8840</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8835&quot;&gt;Chris Boucher&lt;/a&gt;.

Yeah, someone notified me of this and said it is new as of svn 1.7?]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8835">Chris Boucher</a>.</p>
<p>Yeah, someone notified me of this and said it is new as of svn 1.7?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8839</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 19:27:12 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8839</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8825&quot;&gt;Zaphos&lt;/a&gt;.

The thing is, we want the majority of objects to be independent of terrain.  So we would have to have some kind of hybrid system about how things are anchored or not, and I just haven&#039;t put in the time to think about it.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8825">Zaphos</a>.</p>
<p>The thing is, we want the majority of objects to be independent of terrain.  So we would have to have some kind of hybrid system about how things are anchored or not, and I just haven&#8217;t put in the time to think about it.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8838</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 19:26:14 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8838</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8833&quot;&gt;Bryan Gale&lt;/a&gt;.

It needed to be per-machine, because something that happens often is, say, I am editing on my computer at home, and I forget to check it in when I go to work; throw a laptop into the mix, and there becomes this whole check-in-management discipline that I would need to maintain.  With per-machine ranges that basically goes away.

The entity data version is for adding fields to entities.  The game can load an older entity that wasn&#039;t saved with those fields.  It&#039;s a completely separate issue from source control, really.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8833">Bryan Gale</a>.</p>
<p>It needed to be per-machine, because something that happens often is, say, I am editing on my computer at home, and I forget to check it in when I go to work; throw a laptop into the mix, and there becomes this whole check-in-management discipline that I would need to maintain.  With per-machine ranges that basically goes away.</p>
<p>The entity data version is for adding fields to entities.  The game can load an older entity that wasn&#8217;t saved with those fields.  It&#8217;s a completely separate issue from source control, really.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Chris Boucher		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8835</link>

		<dc:creator><![CDATA[Chris Boucher]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 17:41:56 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8835</guid>

					<description><![CDATA[Thanks for the article, a good read.

A small correction: TortoiseSVN does include the command line binaries, but they&#039;re not installed by default, just select them in the installer.]]></description>
			<content:encoded><![CDATA[<p>Thanks for the article, a good read.</p>
<p>A small correction: TortoiseSVN does include the command line binaries, but they&#8217;re not installed by default, just select them in the installer.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Bryan Gale		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8833</link>

		<dc:creator><![CDATA[Bryan Gale]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 17:22:09 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8833</guid>

					<description><![CDATA[This was a really interesting read, thanks for sharing. A lot of these problems sound familiar from the last project I was on.

Did the ID ranges need to be per-machine rather than per-user? I&#039;d have thought going off SVN username would be easier than MAC address if not. 

And can you elaborate on what you used the entity data version for? What does that give you on top of what is already held in SVN history?]]></description>
			<content:encoded><![CDATA[<p>This was a really interesting read, thanks for sharing. A lot of these problems sound familiar from the last project I was on.</p>
<p>Did the ID ranges need to be per-machine rather than per-user? I&#8217;d have thought going off SVN username would be easier than MAC address if not. </p>
<p>And can you elaborate on what you used the entity data version for? What does that give you on top of what is already held in SVN history?</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Klaim		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8829</link>

		<dc:creator><![CDATA[Klaim]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 14:32:32 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8829</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8815&quot;&gt;Jonathan Blow&lt;/a&gt;.

Hi John,

you are right about problems with &quot;big files&quot; with git and mercurial. However, last version of mercurial tries to fix exactly this problem with providing a default-implementation plug-in that is (if I&#039;m correct) the same as Kiln&#039;s plugin. It&#039;s called largefiles (see http://mercurial.selenic.com/wiki/LargefilesExtension ).
As said in the page, it&#039;s too soon to use it in production, it needs some works, but it&#039;s a good thing they are working on this problem. I guess some years from now the problem will be solved for us game devs using decentralized tools.]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8815">Jonathan Blow</a>.</p>
<p>Hi John,</p>
<p>you are right about problems with &#8220;big files&#8221; with git and mercurial. However, last version of mercurial tries to fix exactly this problem with providing a default-implementation plug-in that is (if I&#8217;m correct) the same as Kiln&#8217;s plugin. It&#8217;s called largefiles (see <a href="http://mercurial.selenic.com/wiki/LargefilesExtension" rel="nofollow ugc">http://mercurial.selenic.com/wiki/LargefilesExtension</a> ).<br />
As said in the page, it&#8217;s too soon to use it in production, it needs some works, but it&#8217;s a good thing they are working on this problem. I guess some years from now the problem will be solved for us game devs using decentralized tools.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Gabriel Verdon		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8827</link>

		<dc:creator><![CDATA[Gabriel Verdon]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 13:18:02 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8827</guid>

					<description><![CDATA[Thanks for posting this. I love reading about behind-the-scenes insights like this.]]></description>
			<content:encoded><![CDATA[<p>Thanks for posting this. I love reading about behind-the-scenes insights like this.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Zaphos		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8825</link>

		<dc:creator><![CDATA[Zaphos]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 10:46:22 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8825</guid>

					<description><![CDATA[re the terrain edit causing conflicts -- would that problem go away if you just stored all the object heights as ground-relative values?  So, changing the terrain would implicitly change &#039;on ground&#039; objects, but there would be no explicit per-object changes to write/commit?  Just a thought ...]]></description>
			<content:encoded><![CDATA[<p>re the terrain edit causing conflicts &#8212; would that problem go away if you just stored all the object heights as ground-relative values?  So, changing the terrain would implicitly change &#8216;on ground&#8217; objects, but there would be no explicit per-object changes to write/commit?  Just a thought &#8230;</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Constantine		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8823</link>

		<dc:creator><![CDATA[Constantine]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 09:34:22 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8823</guid>

					<description><![CDATA[XML part is hilarious :D]]></description>
			<content:encoded><![CDATA[<p>XML part is hilarious :D</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Daniel		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8822</link>

		<dc:creator><![CDATA[Daniel]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 05:11:36 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8822</guid>

					<description><![CDATA[Take a look at using Windows SIDs to uniquely identify the development machines. It&#039;s kind of ugly but they&#039;re very sticky and you won&#039;t run into any of the network interface problems.]]></description>
			<content:encoded><![CDATA[<p>Take a look at using Windows SIDs to uniquely identify the development machines. It&#8217;s kind of ugly but they&#8217;re very sticky and you won&#8217;t run into any of the network interface problems.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Ben Garney		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8821</link>

		<dc:creator><![CDATA[Ben Garney]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 04:40:59 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8821</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8820&quot;&gt;Ben Garney&lt;/a&gt;.

Whoops - my bad, looks like comments covering my question got posted while I was reading. :)]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8820">Ben Garney</a>.</p>
<p>Whoops &#8211; my bad, looks like comments covering my question got posted while I was reading. :)</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Ben Garney		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8820</link>

		<dc:creator><![CDATA[Ben Garney]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 04:39:51 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8820</guid>

					<description><![CDATA[Great writeup. Wonderful insights drawn from a production system.

Have you thought about how git&#039;s change-centric model might affect the problems you&#039;re solving? It seems like some of your pain comes because SVN is state-centric.]]></description>
			<content:encoded><![CDATA[<p>Great writeup. Wonderful insights drawn from a production system.</p>
<p>Have you thought about how git&#8217;s change-centric model might affect the problems you&#8217;re solving? It seems like some of your pain comes because SVN is state-centric.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Jonathan Blow		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8815</link>

		<dc:creator><![CDATA[Jonathan Blow]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 03:27:17 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8815</guid>

					<description><![CDATA[The word on the street is that git/mercurial/etc handle binary assets very poorly, and there&#039;s no way those systems would scale to even a small game like The Witness.  I am given to understand that Kiln is an attempt to fix this but that it doesn&#039;t work well enough (never tried it myself).]]></description>
			<content:encoded><![CDATA[<p>The word on the street is that git/mercurial/etc handle binary assets very poorly, and there&#8217;s no way those systems would scale to even a small game like The Witness.  I am given to understand that Kiln is an attempt to fix this but that it doesn&#8217;t work well enough (never tried it myself).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: KC		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8814</link>

		<dc:creator><![CDATA[KC]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 03:20:23 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8814</guid>

					<description><![CDATA[In reply to &lt;a href=&quot;https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8811&quot;&gt;Marco Mustapic&lt;/a&gt;.

I agree with you. I have tried quite a few source control systems, each progressively better than the previous (SourceSafe, SVN, hg, git). Now we use git in all team projects and so far &lt;em&gt;all&lt;/em&gt; merge conflicts we&#039;ve encountered are &#039;legitimate&#039;. But then again, I haven&#039;t been doing many projects the same scale as The Witness and might be wrong.

Also, I agree with the XML bit, though the way you said it was quite funny :).]]></description>
			<content:encoded><![CDATA[<p>In reply to <a href="https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8811">Marco Mustapic</a>.</p>
<p>I agree with you. I have tried quite a few source control systems, each progressively better than the previous (SourceSafe, SVN, hg, git). Now we use git in all team projects and so far <em>all</em> merge conflicts we&#8217;ve encountered are &#8216;legitimate&#8217;. But then again, I haven&#8217;t been doing many projects the same scale as The Witness and might be wrong.</p>
<p>Also, I agree with the XML bit, though the way you said it was quite funny :).</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Marco Mustapic		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8811</link>

		<dc:creator><![CDATA[Marco Mustapic]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 01:25:41 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8811</guid>

					<description><![CDATA[The first merge situation you describe is one that git or mercurial solve very easily. Except in special cases (editing the same line in a file), the merge works flawlessly. Another advantage of git is that it was designed to be very fast. The downside is that the transition from SVN to any DVCS is not easy.]]></description>
			<content:encoded><![CDATA[<p>The first merge situation you describe is one that git or mercurial solve very easily. Except in special cases (editing the same line in a file), the merge works flawlessly. Another advantage of git is that it was designed to be very fast. The downside is that the transition from SVN to any DVCS is not easy.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: justin		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8808</link>

		<dc:creator><![CDATA[justin]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 01:07:34 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8808</guid>

					<description><![CDATA[I didn&#039;t understand one word... why are games so difficult? 

But I can tell you try to say things as simple as possible in layman terms, but is still ahrd to follow and get everything.]]></description>
			<content:encoded><![CDATA[<p>I didn&#8217;t understand one word&#8230; why are games so difficult? </p>
<p>But I can tell you try to say things as simple as possible in layman terms, but is still ahrd to follow and get everything.</p>
]]></content:encoded>
		
			</item>
		<item>
		<title>
		By: Tom		</title>
		<link>https://the-witness.net/news/2011/12/engine-tech-concurrent-world-editing/comment-page-1/#comment-8806</link>

		<dc:creator><![CDATA[Tom]]></dc:creator>
		<pubDate>Mon, 26 Dec 2011 00:16:00 +0000</pubDate>
		<guid isPermaLink="false">https://the-witness.net/news/?p=1429#comment-8806</guid>

					<description><![CDATA[Interesting article! I&#039;m definitely remembering that saving your assets/environment data in a source control &lt;em&gt;actually works&lt;/em&gt; :). Though I would&#039;ve always tried to use some existing data format like JSON or YAML, inventing my own has given me too many headaches in the past.

By the way, did you know that Python&#039;s repr() function returns your float as a string in exactly as many decimals you need to convert it back to its original float representation? I.e. &lt;code&gt;f == float(repr(f))&lt;/code&gt; is guaranteed for all floats f.]]></description>
			<content:encoded><![CDATA[<p>Interesting article! I&#8217;m definitely remembering that saving your assets/environment data in a source control <em>actually works</em> :). Though I would&#8217;ve always tried to use some existing data format like JSON or YAML, inventing my own has given me too many headaches in the past.</p>
<p>By the way, did you know that Python&#8217;s repr() function returns your float as a string in exactly as many decimals you need to convert it back to its original float representation? I.e. <code>f == float(repr(f))</code> is guaranteed for all floats f.</p>
]]></content:encoded>
		
			</item>
	</channel>
</rss>
