<?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"
	>
<channel>
	<title>Comments on: Supporting Multiple Versions of a File Format</title>
	<atom:link href="http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/feed/" rel="self" type="application/rss+xml" />
	<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/</link>
	<description>an unfiltered stream of data flow consciousness</description>
	<pubDate>Fri,  5 Sep 2008 20:08:45 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.1</generator>
		<item>
		<title>By: Joel Sumner</title>
		<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-233</link>
		<dc:creator>Joel Sumner</dc:creator>
		<pubDate>Thu, 26 Apr 2007 18:08:44 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-233</guid>
		<description>Good advice Jim.  You can see over the years, we've added some file formats to LabVIEW (http://ideasinwiring.blogspot.com/2005/11/storing-and-retrieving-data.html) that make it hard for customers to follow your rules and that can cause problems.  

I've seen folks hang themselves with the Datalog file (http://www.kip.uni-heidelberg.de/fp-computer/LabVIEW/FP_LabView/html/Writing_Datalog_Files.html)  by writing a file with one particular type definition (i.e. cluster) and then can't read the file any more when they change clusters without understanding it will affect backward compatibility.

The newer file formats like .TDM (http://zone.ni.com/devzone/cda/tut/p/id/3542) are much more maintainable because they store the type definition (typically called a 'schema') in the data file so you can't lose it and so it can be browsed by an external application.</description>
		<content:encoded><![CDATA[<p>Good advice Jim.  You can see over the years, we&#8217;ve added some file formats to LabVIEW (http://ideasinwiring.blogspot.com/2005/11/storing-and-retrieving-data.html) that make it hard for customers to follow your rules and that can cause problems.  </p>
<p>I&#8217;ve seen folks hang themselves with the Datalog file (http://www.kip.uni-heidelberg.de/fp-computer/LabVIEW/FP_LabView/html/Writing_Datalog_Files.html)  by writing a file with one particular type definition (i.e. cluster) and then can&#8217;t read the file any more when they change clusters without understanding it will affect backward compatibility.</p>
<p>The newer file formats like .TDM (http://zone.ni.com/devzone/cda/tut/p/id/3542) are much more maintainable because they store the type definition (typically called a &#8217;schema&#8217;) in the data file so you can&#8217;t lose it and so it can be browsed by an external application.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-232</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Wed, 18 Apr 2007 15:44:07 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-232</guid>
		<description>Aristos Queue,

Thanks for the tip.  Yes, backwards compatibility of newer file versions with older readers is a very useful feature.  I can think of a few ways to achieve this.  For INI files, don't remove or rename sections or keys.  For CSV files, access columns by name (header), rather than by column index, and don't remove or rename columns.  For XML files, don't remove or rename entities.

Thanks,

-Jim</description>
		<content:encoded><![CDATA[<p>Aristos Queue,</p>
<p>Thanks for the tip.  Yes, backwards compatibility of newer file versions with older readers is a very useful feature.  I can think of a few ways to achieve this.  For INI files, don&#8217;t remove or rename sections or keys.  For CSV files, access columns by name (header), rather than by column index, and don&#8217;t remove or rename columns.  For XML files, don&#8217;t remove or rename entities.</p>
<p>Thanks,</p>
<p>-Jim</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Aristos Queue</title>
		<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-231</link>
		<dc:creator>Aristos Queue</dc:creator>
		<pubDate>Tue, 17 Apr 2007 23:31:23 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-231</guid>
		<description>I also recommend defining some syntax that means "comment" in your file which can be nested somehow (so some symbol that starts the comment and another that ends it such as /* and */ in C++ code). This allows for you to have different versions of your file reader/writer that can embed new features and still produce an older style document that older readers can load. For example, you might use /** **/ to encode some actual data that only a more recent reader can read, but an older reader will skip over it as a comment. Otherwise every time you want to add a feature or increase the data recorded in a file, you must bump your file definition version and then you're stuck being unable to load the file in an older version.</description>
		<content:encoded><![CDATA[<p>I also recommend defining some syntax that means &#8220;comment&#8221; in your file which can be nested somehow (so some symbol that starts the comment and another that ends it such as /* and */ in C++ code). This allows for you to have different versions of your file reader/writer that can embed new features and still produce an older style document that older readers can load. For example, you might use /** **/ to encode some actual data that only a more recent reader can read, but an older reader will skip over it as a comment. Otherwise every time you want to add a feature or increase the data recorded in a file, you must bump your file definition version and then you&#8217;re stuck being unable to load the file in an older version.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jim Kring</title>
		<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-230</link>
		<dc:creator>Jim Kring</dc:creator>
		<pubDate>Tue, 17 Apr 2007 17:48:54 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-230</guid>
		<description>Dave,

You're welcome -- I'm glad you liked the article.  I agree with you that the INI files are extremely flexible, and are a perfect compliment to the technique described in the article.  Quickly evolving projects don't necessarily benefit from a rigorous file versioning scheme, but with the right tools and templates for implementing such a scheme, the small cost to implement it can be well worth the reward.

Thanks,

-Jim</description>
		<content:encoded><![CDATA[<p>Dave,</p>
<p>You&#8217;re welcome &#8212; I&#8217;m glad you liked the article.  I agree with you that the INI files are extremely flexible, and are a perfect compliment to the technique described in the article.  Quickly evolving projects don&#8217;t necessarily benefit from a rigorous file versioning scheme, but with the right tools and templates for implementing such a scheme, the small cost to implement it can be well worth the reward.</p>
<p>Thanks,</p>
<p>-Jim</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dave T</title>
		<link>http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-229</link>
		<dc:creator>Dave T</dc:creator>
		<pubDate>Tue, 17 Apr 2007 16:12:52 +0000</pubDate>
		<guid isPermaLink="false">http://thinkinging.com/2007/04/14/supporting-multiple-versions-of-a-file-format/#comment-229</guid>
		<description>Jim,
   Thanks for the great article.  There are some good ideas there for maintaining a well-documented, robust file-format chain.
   I've used .ini files to create less-rigorously maintained, flexible file formats.  New fields can be added without breaking the reader/writer, and default values, if properly managed, can make old files work fairly well with the new format.  Fields can be removed from the format, with no harm done other than the unused fields cluttering up the .ini files.  Like I said, it's a less rigorous approach, but it makes it really easy to change file formats on quickly-evolving R&#38;D projects.
   Now I'll start thinking about combining your suggestions with my current practices to get some of the best features of each.

Cheers,
   Dave T.</description>
		<content:encoded><![CDATA[<p>Jim,<br />
   Thanks for the great article.  There are some good ideas there for maintaining a well-documented, robust file-format chain.<br />
   I&#8217;ve used .ini files to create less-rigorously maintained, flexible file formats.  New fields can be added without breaking the reader/writer, and default values, if properly managed, can make old files work fairly well with the new format.  Fields can be removed from the format, with no harm done other than the unused fields cluttering up the .ini files.  Like I said, it&#8217;s a less rigorous approach, but it makes it really easy to change file formats on quickly-evolving R&amp;D projects.<br />
   Now I&#8217;ll start thinking about combining your suggestions with my current practices to get some of the best features of each.</p>
<p>Cheers,<br />
   Dave T.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
