<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2.3" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>
<channel>
	<title>Comments on: OmniFocus: What We&#8217;ve Learned So Far (Engineering)</title>
	<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/</link>
	<description>The Omni Mouth: standing outside your bedroom window playing \"In Your Eyes\" since 2006.</description>
	<pubDate>Tue, 08 Jul 2008 21:28:46 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.3</generator>

	<item>
		<title>By: Tim</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63587</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Wed, 26 Sep 2007 16:50:11 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63587</guid>
		<description>Thanks for the pointer; I'll check it out!</description>
		<content:encoded><![CDATA[<p>Thanks for the pointer; I&#8217;ll check it out!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nigelito</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63572</link>
		<dc:creator>Nigelito</dc:creator>
		<pubDate>Fri, 21 Sep 2007 16:28:25 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63572</guid>
		<description>Sounds pretty smart. Regarding the sync... once you've got the XML data store format going, you might want to look at SSE (simple sharing extensions) for doing a lightweight sync. http://en.wikipedia.org/wiki/Simple_Sharing_Extensions</description>
		<content:encoded><![CDATA[<p>Sounds pretty smart. Regarding the sync&#8230; once you&#8217;ve got the XML data store format going, you might want to look at SSE (simple sharing extensions) for doing a lightweight sync. <a href="http://en.wikipedia.org/wiki/Simple_Sharing_Extensions" rel="nofollow">http://en.wikipedia.org/wiki/Simple_Sharing_Extensions</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Greg</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63570</link>
		<dc:creator>Greg</dc:creator>
		<pubDate>Fri, 21 Sep 2007 04:12:56 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63570</guid>
		<description>Technically, if you say the letters (like RTFM) then it is an initialism, and if you pronounce it as if it is a word (like NASA) then it is an acronym.</description>
		<content:encoded><![CDATA[<p>Technically, if you say the letters (like RTFM) then it is an initialism, and if you pronounce it as if it is a word (like NASA) then it is an acronym.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tim</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63539</link>
		<dc:creator>Tim</dc:creator>
		<pubDate>Mon, 17 Sep 2007 22:48:06 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63539</guid>
		<description>Capturing the inserts/updates/deletes is done via the notification, as you guessed.  CoreData could use more API to make this easier -- right now you can just ask it for its inserted, updated and deleted objects, but these sets can get modified during -save: due to the -willFoo and -validateForFoo: hooks.  It would be really nice to have some sort of -prepareForSave: on NSManagedObjectContext that would do all the validation &#38; delete propagation.  Then, assuming you didn't make any more edits, you could trust those sets.

So, we use a silly little approach were we subscribe to the notification, call -save: and in the notification capture the inserts, updates and deletes that *actually* happened in our XMLOperationSet instance.  This then gets used when serializing the transaction.

Of course, by this point, we've optimistically committed to SQLite, hence the comparison check at launch time on the latest transaction identifier on both CoreData and Our .ofocus file; if we crash between saving to CoreData and saving our XML transaction, we'll catch it there and rebuild the CoreData cache.</description>
		<content:encoded><![CDATA[<p>Capturing the inserts/updates/deletes is done via the notification, as you guessed.  CoreData could use more API to make this easier &#8212; right now you can just ask it for its inserted, updated and deleted objects, but these sets can get modified during -save: due to the -willFoo and -validateForFoo: hooks.  It would be really nice to have some sort of -prepareForSave: on NSManagedObjectContext that would do all the validation &amp; delete propagation.  Then, assuming you didn&#8217;t make any more edits, you could trust those sets.</p>
<p>So, we use a silly little approach were we subscribe to the notification, call -save: and in the notification capture the inserts, updates and deletes that *actually* happened in our XMLOperationSet instance.  This then gets used when serializing the transaction.</p>
<p>Of course, by this point, we&#8217;ve optimistically committed to SQLite, hence the comparison check at launch time on the latest transaction identifier on both CoreData and Our .ofocus file; if we crash between saving to CoreData and saving our XML transaction, we&#8217;ll catch it there and rebuild the CoreData cache.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Linda</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63538</link>
		<dc:creator>Linda</dc:creator>
		<pubDate>Mon, 17 Sep 2007 22:04:18 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63538</guid>
		<description>What, our documentation guru has never heard of RTFM? ; )</description>
		<content:encoded><![CDATA[<p>What, our documentation guru has never heard of RTFM? ; )</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: wvh</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63537</link>
		<dc:creator>wvh</dc:creator>
		<pubDate>Mon, 17 Sep 2007 22:01:08 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63537</guid>
		<description>I don't think it counts as an acronym if you can't pronounce it. I'm just sayin'.</description>
		<content:encoded><![CDATA[<p>I don&#8217;t think it counts as an acronym if you can&#8217;t pronounce it. I&#8217;m just sayin&#8217;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Erik M. Buck</title>
		<link>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63536</link>
		<dc:creator>Erik M. Buck</dc:creator>
		<pubDate>Mon, 17 Sep 2007 21:23:35 +0000</pubDate>
		<guid>http://blog.omnigroup.com/2007/09/17/omnifocus-what-weve-learned-so-far-engineering/#comment-63536</guid>
		<description>"Given that, I tweaked our XML archiving to support writing a set of CoreData inserts, updates and deletes as a transaction."

Cool!  How did you do it ?  Do you plug into Core Data with a custom store or use notifications to capture the information?  Do you instruments all of your entity inserts, updates, and deletes in code ?</description>
		<content:encoded><![CDATA[<p>&#8220;Given that, I tweaked our XML archiving to support writing a set of CoreData inserts, updates and deletes as a transaction.&#8221;</p>
<p>Cool!  How did you do it ?  Do you plug into Core Data with a custom store or use notifications to capture the information?  Do you instruments all of your entity inserts, updates, and deletes in code ?</p>
]]></content:encoded>
	</item>
</channel>
</rss>
