<?xml version="1.0" encoding="utf-8"?>
<!-- generator="wordpress/2.1.2" -->
<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/"
	>

<channel>
	<title>A Trifle Absurd</title>
	<link>http://www.matthewmorgan.net/blog</link>
	<description>Matthew Morgan's software notions</description>
	<pubDate>Wed, 14 Mar 2007 04:51:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.1.2</generator>
	<language>en</language>
			<item>
		<title>A Long Overdue Update</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/08/21/a-long-overdue-update</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/08/21/a-long-overdue-update#comments</comments>
		<pubDate>Tue, 22 Aug 2006 04:05:24 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/08/21/a-long-overdue-update</guid>
		<description><![CDATA[A lot has changed in the months since I last posted here.  I&#8217;ve been rethinking my life and my work, and a lot of things are now up in the air.  One thing is clear, though: my indie-development experiment is over.  I won&#8217;t be completing or shipping Trifle.
Why not?  I realized [...]]]></description>
			<content:encoded><![CDATA[<p>A lot has changed in the months since I last posted here.  I&#8217;ve been rethinking my life and my work, and a lot of things are now up in the air.  One thing is clear, though: my indie-development experiment is over.  I won&#8217;t be completing or shipping Trifle.</p>
<p>Why not?  I realized that I wasn&#8217;t enjoying the development process, and recognized the feeling from when I burnt out at Microsoft years ago.  This gives rise to two theories: (1) Programming just isn&#8217;t for me and this second burnout shows that I should find a completely different line of work.  (2) Programming itself isn&#8217;t the problem, it&#8217;s the surrounding circumstances: at Microsoft the problem was that I had no life to balance my work; now (perhaps) the problem is that I&#8217;m working alone, and I&#8217;d rather be part of a team.  I haven&#8217;t decided which theory I think is right.</p>
<p>What now?  Good question.  I&#8217;ll probably wind up with a day job of some kind while I try to sort out longer-term plans.  I hope to finally attend a workshop or two at <a href="http://centerpointonline.org/">Centerpoint</a>, which I&#8217;ve wanted to do for years.</p>
<p>What about this blog?  I enjoy blogging and I plan to resume posting on a regular basis in September.  With my move away from indie development, the focus will naturally shift, so if you&#8217;ve been reading this for the programming-geek content, you may be disappointed.  I can&#8217;t say much about what will replace it &#8217;cause I don&#8217;t know myself yet.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/08/21/a-long-overdue-update/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Learning Takes Time</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/04/06/learning-takes-time</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/04/06/learning-takes-time#comments</comments>
		<pubDate>Thu, 06 Apr 2006 23:19:12 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<category><![CDATA[Mac]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/04/06/learning-takes-time</guid>
		<description><![CDATA[I often feel that Trifle is progressing at a snail&#8217;s pace.  Shouldn&#8217;t I have gotten more done by now?  But in my clearer moments I remember that I&#8217;m not just developing an app, I&#8217;m learning a new platform (Mac OS X), framework (Cocoa), and language (Objective-C).  
Learning takes time.  There&#8217;s no [...]]]></description>
			<content:encoded><![CDATA[<p>I often feel that Trifle is progressing at a snail&#8217;s pace.  Shouldn&#8217;t I have gotten more done by now?  But in my clearer moments I remember that I&#8217;m not just developing an app, I&#8217;m learning a new platform (Mac OS X), framework (Cocoa), and language (Objective-C).  </p>
<p>Learning takes time.  There&#8217;s no getting around it.  I&#8217;m not just talking about the direct time it takes to learn something, but also the false starts and fruitless investigations that go along with it.</p>
<p>Last week I thought up a couple of different ways to handle custom columns in Trifle.  I picked a solution and spent several days coding it.  This week I realized that it was the wrong choice; the other way would be simpler and easier.  So I had to rip out the work I&#8217;d done and start over.</p>
<p>Or take Core Data.  Trifle is an awfully database-ish app, so I had to investigate whether Core Data made sense for it.  I&#8217;ve learned quite a bit about Core Data now, in multiple stints, but it still isn&#8217;t the right choice for Trifle.</p>
<p>I could call that wasted time, but it isn&#8217;t, really.  It&#8217;s just part of the overhead of learning to operate in a new environment.  Besides, learning is one of my favorite things to do.  Maybe that&#8217;s what attracted me to programming in the first place: there&#8217;s always something new to learn.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/04/06/learning-takes-time/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Exceptions to Every Rule</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/03/13/exceptions-to-every-rule</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/03/13/exceptions-to-every-rule#comments</comments>
		<pubDate>Tue, 14 Mar 2006 02:55:54 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/03/13/exceptions-to-every-rule</guid>
		<description><![CDATA[An answer to my rule dilemma: declarative rules with exceptions.  A collection is defined by declarative rules in the same way as a smart playlist.  But items can also be added and removed manually, creating exceptions to the rules.  
At the implementation level, each collection tracks two sets of exceptions.  One [...]]]></description>
			<content:encoded><![CDATA[<p>An answer to <a href="/blog/archives/2006/03/10/declarative-vs-imperative-rules">my rule dilemma</a>: declarative rules with exceptions.  A collection is defined by declarative rules in the same way as a smart playlist.  But items can also be added and removed manually, creating exceptions to the rules.  </p>
<p>At the implementation level, each collection tracks two sets of exceptions.  One set contains items to always include, because the user put them there.  The other set contains items to always exclude, because the user took them out.  There are a few corner cases that get tricky, but overall, it&#8217;s not too hard to do the right thing.</p>
<p>This approach abolishes the distinction between regular collections and smart collections.  Instead, those two cases become endpoints of a continuum.  A regular collection is just a collection with no rules (only exceptions!).  A smart collection is just a collection with no exceptions (only rules).</p>
<p>Now that I&#8217;m thinking in these terms, I&#8217;ve realized that this is part of the plan for <a href="http://wiki.osafoundation.org/bin/view/Projects/ItemCollectionDesign#Structure">Chandler&#8217;s collection model</a>.  So this isn&#8217;t an original idea.  That&#8217;s a good thing, though: if nobody was using this model, I&#8217;d drive myself crazy trying to figure out what fatal flaw kept people from using it in their apps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/03/13/exceptions-to-every-rule/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Declarative vs. Imperative Rules</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/03/10/declarative-vs-imperative-rules</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/03/10/declarative-vs-imperative-rules#comments</comments>
		<pubDate>Fri, 10 Mar 2006 20:38:34 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/03/10/declarative-vs-imperative-rules</guid>
		<description><![CDATA[Should Trifle&#8217;s rules be declarative or imperative?  I&#8217;ll give examples instead of definitions: spreadsheet formulas and smart playlists are declarative, while email filter rules are imperative.
Declarative rules are the success story of end-user programming.  Millions of nonprogrammers create and use them daily.  But in the form of smart playlists (and their smart-* [...]]]></description>
			<content:encoded><![CDATA[<p>Should Trifle&#8217;s rules be declarative or imperative?  I&#8217;ll give examples instead of definitions: spreadsheet formulas and smart playlists are declarative, while email filter rules are imperative.</p>
<p>Declarative rules are the success story of end-user programming.  Millions of nonprogrammers create and use them daily.  But in the form of smart playlists (and their smart-* kin), they have some problems.  For instance, they make it hard to fine-tune their contents.  If the query for a smart playlist gets you almost there, the only way to get all there is to either tweak the query some more (add or remove conditions) or tweak some items (change them to fit/not fit existing conditions).  The Chandler folk have been <a href="http://wiki.osafoundation.org/bin/view/Projects/ItemCollectionDesign#Structure">wrestling with this</a>, trying to come up with a more flexible model.</p>
<p>Imperative rules are much more flexible.  Lotus Agenda provided powerful imperative rules that could be triggered by various actions.  But that power and flexibility had a price.  As Agenda&#8217;s creators <a href="http://home.neo.rr.com/pim/article1.htm">said</a>, &#8220;The results of cascading program-initiated actions often surprise even experienced users&#8230;&#8221;  And <a href="http://www.faqs.org/docs/artu/ch01s06.html#id2878339">surprise is a Bad Thing</a> here.</p>
<p>So I&#8217;m not happy with either approach at the moment.  To use <a href="http://www.adambosworth.net/archives/000031.html">Adam Bosworth&#8217;s terminology</a>, declarative rules are simple but not sloppy, while imperative rules are sloppy but not simple.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/03/10/declarative-vs-imperative-rules/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Rules Redux</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/03/10/rules-redux</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/03/10/rules-redux#comments</comments>
		<pubDate>Fri, 10 Mar 2006 19:31:24 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/03/10/rules-redux</guid>
		<description><![CDATA[I&#8217;m having second thoughts about cutting rules.  My arguments against them don&#8217;t seem convincing anymore.
&#8220;Rules are a major schedule risk.&#8221;  Yes, but I&#8217;m not on a particularly tight schedule.  Sure, I want to ship expeditiously, but a few months either way won&#8217;t make a big difference.
&#8220;Rules need to be done right or [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m having second thoughts about <a href="/blog/archives/2006/02/22/the-agony-and-ecstasy-of-cutting-features">cutting rules</a>.  My arguments against them don&#8217;t seem convincing anymore.</p>
<p>&#8220;Rules are a major schedule risk.&#8221;  Yes, but I&#8217;m not on a particularly tight schedule.  Sure, I want to ship expeditiously, but a few months either way won&#8217;t make a big difference.</p>
<p>&#8220;Rules need to be done right or not at all&#8221; &#8212; otherwise I&#8217;d be stuck supporting a broken rule model.  But I think this is actually an argument <i>for</i> rules.  By designing rules now, in concert with Trifle&#8217;s overall data model, I have a better chance of making a single coherent system.</p>
<p>&#8220;Trifle will still be a useful application without rules.&#8221;  True.  But the question is whether Trifle will be a distinctively interesting application without rules.  I doubt a simple list/table editor would generate much if any buzz, and for a shoestring operation like mine, no buzz means no sales.</p>
<p>Besides, the whole reason I started this experiment of independent development was to create an innovative and useful app.  If I reduce that to a lowest common denominator by eliminating the tricky-but-interesting features, not only will I fail to excite potential users, I&#8217;ll fail to excite myself.  And that will quickly suck all the fun out of this (ad)venture.</p>
<p>So now I&#8217;m in design mode, trying to find a rule model that works.  It&#8217;s a frustrating endeavor, &#8217;cause I don&#8217;t like any of the solutions I&#8217;ve found so far, and I don&#8217;t feel like I&#8217;m making much progress.  But that, too, was part of the reason I started doing this: to find a challenge.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/03/10/rules-redux/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Scripting Automated Tests</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/02/27/scripting-automated-tests</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/02/27/scripting-automated-tests#comments</comments>
		<pubDate>Mon, 27 Feb 2006 21:08:53 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/02/27/scripting-automated-tests</guid>
		<description><![CDATA[When using AppleScript, most people see GUI Scripting as a last resort: it&#8217;s a lot nicer to say &#8220;select first collection&#8221; than &#8220;select row 1 of table 1 of scroll view 1 of splitter group 1.&#8221;  But the very qualities that make GUI Scripting unattractive&#8212;such as fragility, and dependence on explicit mouse and keyboard [...]]]></description>
			<content:encoded><![CDATA[<p>When using AppleScript, most people see <a href="http://www.apple.com/applescript/uiscripting/">GUI Scripting</a> as a last resort: it&#8217;s a lot nicer to say &#8220;select first collection&#8221; than &#8220;select row 1 of table 1 of scroll view 1 of splitter group 1.&#8221;  But the very qualities that make GUI Scripting unattractive&#8212;such as fragility, and dependence on explicit mouse and keyboard actions&#8212;make it a great tool for automated testing.  I don&#8217;t even have to wait till Trifle is scriptable: I can write tests now.</p>
<p>AppleScript, though, is far from my favorite programming language.  Thank goodness there&#8217;s <a href="http://freespace.virgin.net/hamish.sanderson/appscript.html">appscript</a>, a bridge that lets you use Python to script AppleEvents.  Appscript can&#8217;t paper over all the oddnesses of AppleScript, but life becomes much easier with all of Python at my disposal.  </p>
<p>For instance: I can drop down to the Objective-C level to verify something using <a href="http://pyobjc.sourceforge.net/">PyObjC</a>.  I can use any of several test frameworks.  And I can verify saved Trifle documents using Python&#8217;s XML support.  This is Python&#8217;s sweet spot: libraries to connect to just about everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/02/27/scripting-automated-tests/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Agony and Ecstasy of Cutting Features</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/02/22/the-agony-and-ecstasy-of-cutting-features</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/02/22/the-agony-and-ecstasy-of-cutting-features#comments</comments>
		<pubDate>Thu, 23 Feb 2006 03:31:28 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/02/22/the-agony-and-ecstasy-of-cutting-features</guid>
		<description><![CDATA[I&#8217;m making a round of feature cuts to keep Trifle&#8217;s schedule sane.  Cutting features is tough: the goal is to cut as much as possible to make the schedule tractable, but leave in the essential and distinctive features that make Trifle appealing.  There&#8217;s an upside, too: it&#8217;s liberating to let go of feature [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m making a round of feature cuts to keep Trifle&#8217;s schedule sane.  Cutting features is tough: the goal is to cut as much as possible to make the schedule tractable, but leave in the essential and distinctive features that make Trifle appealing.  There&#8217;s an upside, too: it&#8217;s liberating to let go of feature baggage and see a schedule that looks doable again.</p>
<p>Some features are easy to cut.  Group-by-column doesn&#8217;t fit Trifle&#8217;s nonhierarchical model.  Automator actions will be easy to add later.  Comment popups are just window dressing.  </p>
<p>But of course there had to be a big difficult cut that&#8217;s hard to do but probably the right thing.  And that, in this case, means rules.  Rules are central to what I want Trifle to be.  Rules are phenomenally useful.  And rules need to be cut from Trifle 1.0 because (a) they&#8217;re the biggest schedule risk, (b) they need to be done right or not at all, and (c) Trifle is still a useful application without them.</p>
<p>Rules are a major schedule risk because their design is still awfully murky.  I don&#8217;t even know whether they should be imperative or declarative&#8212;at this point, I dislike both choices.  But in whatever form they take, rules will require a bunch of extra UI, which means more design work, and more potential slippage.</p>
<p>Rules need to be done right or not at all.  If I pick a rule model and a UI and ship them with Trifle 1.0, and later realize they should have been completely different, I&#8217;m still stuck supporting the original model.</p>
<p>Trifle will still be a useful application without rules.  You&#8217;ll still be able to make and manage lists and tables, and do simple calculations like totaling a column.  There just won&#8217;t be that extra layer of automation that rules provide.  Even without rules, though, normal scripting support should allow for plenty of automation.</p>
<p>So here I am trying to talk myself into a major feature cut.  It&#8217;s discouraging, but I think it&#8217;s the right thing.  At least I can console myself by dreaming of rules in Trifle 2.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/02/22/the-agony-and-ecstasy-of-cutting-features/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Choosing an Embedded Language</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/02/10/choosing-an-embedded-language</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/02/10/choosing-an-embedded-language#comments</comments>
		<pubDate>Sat, 11 Feb 2006 01:04:30 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<category><![CDATA[Languages]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/02/10/choosing-an-embedded-language</guid>
		<description><![CDATA[Evidently I&#8217;m doomed to have to choose among programming languages over and over again.  This time I need a language for Trifle&#8217;s rules.  The qualifications:

Abstraction mechanisms &#8212; not just simple expressions.
Simple, approachable syntax &#8212; People with only a smidgeon of programming experience should be able to do basic things with it.  (There [...]]]></description>
			<content:encoded><![CDATA[<p>Evidently I&#8217;m doomed to have to choose among programming languages over and over again.  This time I need a language for Trifle&#8217;s rules.  The qualifications:</p>
<ul>
<li>Abstraction mechanisms &#8212; not just simple expressions.</li>
<li>Simple, approachable syntax &#8212; People with only a smidgeon of programming experience should be able to do basic things with it.  (There will be a dropdown-list UI wrapper for those with no programming experience.)</li>
<li>Sandbox security &#8212; rules will be saved in Trifle documents, and I don&#8217;t want macro viruses on my hands.  Those who need more power can hook into Trifle via AppleScript or another external scripting language.</li>
<li>Small and embeddable &#8212; in particular, a clean and usable C interface.</li>
</ul>
<p>F-Script and Tcl fail the syntax test; regrettably, so does Scheme.  AppleScript isn&#8217;t sandboxed (plus it&#8217;s just a little too funky for its own good).  The plausible prospects, as I see them, are Lua, Io, and JavaScript.</p>
<p><a href="http://www.lua.org/">Lua</a> was made for this scenario.  It&#8217;s tiny, easy to compile, and simple to embed.  Somehow, though, it always manages to rub me the wrong way.  For instance, the distinction between dot and colon for accessing objects constantly trips up folks coming from other languages.</p>
<p><a href="http://iolanguage.com">Io</a> was inspired by Lua, but emphasizes simplicity and regularity of syntax (perhaps to a fault).  I find it very attractive, not least because Io expressions look an awful lot like spreadsheet formulas.  But it has a small user base, and still hasn&#8217;t quite hit 1.0.</p>
<p><a href="http://webkit.opendarwin.org/projects/javascript/">JavaScript</a> is the elephant of this bunch (or would that be the rhino?).  It&#8217;s probably bigger than Io or Lua, but it&#8217;s available in a standard Mac OS X library (WebKit), so I wouldn&#8217;t have to ship it.  The syntax is full of C-isms, but it&#8217;s so widely known that wouldn&#8217;t be much of a problem.  And the security sandbox is heavily tested.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/02/10/choosing-an-embedded-language/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dogfoodability</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/01/20/dogfoodability</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/01/20/dogfoodability#comments</comments>
		<pubDate>Sat, 21 Jan 2006 02:25:07 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/01/20/dogfoodability</guid>
		<description><![CDATA[Once upon a time, some overly-clever soul applied the phrase &#8220;eating your own dog food&#8221; to the practice of using your own product before inflicting it on customers.  Then, in the twinkling of an eye, &#8220;to dogfood&#8221; became a verb.  &#8220;Sure, I&#8217;ll start dogfooding that.&#8221;  &#8220;Is it dogfoodable yet?&#8221;  (The scary [...]]]></description>
			<content:encoded><![CDATA[<p>Once upon a time, some overly-clever soul applied the phrase &#8220;eating your own dog food&#8221; to the practice of using your own product before inflicting it on customers.  Then, in the twinkling of an eye, &#8220;to dogfood&#8221; became a verb.  &#8220;Sure, I&#8217;ll start dogfooding that.&#8221;  &#8220;Is it dogfoodable yet?&#8221;  (The scary thing is that those sentences now sound completely normal to me.)</p>
<p>Anyway, Trifle has reached dogfoodability (dogfoodableness?).  There are no columns or rules yet, just lists&#8212;but that&#8217;s enough for simple task lists, and that&#8217;s what I&#8217;m using it for.  I ported over my GTD stuff this afternoon.</p>
<p>I won&#8217;t be working on Trifle itself for the next couple of weeks, but I&#8217;ll be using it.  No doubt I&#8217;ll accumulate quite a list&#8212;in the form of a Trifle document, of course&#8212;of things I want to tweak, extend, and fix.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/01/20/dogfoodability/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Choosing a File Format</title>
		<link>http://www.matthewmorgan.net/blog/archives/2006/01/19/choosing-a-file-format</link>
		<comments>http://www.matthewmorgan.net/blog/archives/2006/01/19/choosing-a-file-format#comments</comments>
		<pubDate>Thu, 19 Jan 2006 17:05:49 +0000</pubDate>
		<dc:creator>Matthew Morgan</dc:creator>
		
		<category><![CDATA[Trifle]]></category>

		<category><![CDATA[Programming]]></category>

		<guid isPermaLink="false">http://www.matthewmorgan.net/blog/archives/2006/01/19/choosing-a-file-format</guid>
		<description><![CDATA[I knew starting out that Trifle&#8217;s file format should be textual.  Trying to avoid the knee-jerk answer of XML, I looked at alternatives, such as YAML and Turtle.  But XML still won out: I can use existing libraries to parse and generate it, and it interoperates with a staggering quantity of tools.
That took [...]]]></description>
			<content:encoded><![CDATA[<p>I knew starting out that Trifle&#8217;s file format should be textual.  Trying to avoid the knee-jerk answer of XML, I looked at alternatives, such as <a href="http://yaml.org/">YAML</a> and <a href="http://www.dajobe.org/2004/01/turtle/">Turtle</a>.  But XML still won out: I can use existing libraries to parse and generate it, and it interoperates with a staggering quantity of tools.</p>
<p>That took the question to another level: what XML format should I use?  My instinct was to find and use an existing XML vocabulary, rather than invent my own.  Tim Bray reinforced that with <a href="http://www.tbray.org/ongoing/When/200x/2006/01/08/No-New-XML-Languages">Don&#8217;t Invent XML Languages</a>.</p>
<p>But none of Tim&#8217;s Big Five fit the task.  DocBook, ODF, and UBL weren&#8217;t even in the neighborhood.  Atom could just barely work, but only if I added a bunch of extensions in a separate namespace.  An XHTML microformat like <a href="http://microformats.org/wiki/xoxo">XOXO</a> could be made to work by shoehorning everything in, but my goals don&#8217;t match <a href="http://microformats.org/wiki/microformats">those of the microformat folk</a>.  (For instance, I don&#8217;t want to support presentability&#8212;these are data files.)</p>
<p>RDF is a better match for Trifle&#8217;s graph semantics, but RDF/XML is a pain to use and process.  In fact, using RDF/XML would effectively shut out a lot of XML tools.  I checked out Turtle as a non-XML RDF syntax, but almost nobody is using it; again, XML has the advantage of existing libraries and tools.</p>
<p>So my only remaining option was to design my own XML vocabulary.  And I don&#8217;t think that&#8217;s a bad thing in this case.  Tim&#8217;s arguments mostly involve designing a vocabulary for interchange between independently developed pieces of software.  That&#8217;s not my situation.  Other than current and future versions of Trifle, the only consumers of the format will be purpose-built scripts written by power users.</p>
<p>Besides, Trifle won&#8217;t ignore those common formats.  I&#8217;ll include some form of Atom import and export, and probably HTML too.  Maybe I&#8217;ll even do it by using XSLT to transform to and from Trifle&#8217;s format.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.matthewmorgan.net/blog/archives/2006/01/19/choosing-a-file-format/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
