<?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: Documentation for Telepathic Developers</title>
	<atom:link href="http://gojko.net/2007/04/03/documentation-for-telepathic-developers/feed/" rel="self" type="application/rss+xml" />
	<link>http://gojko.net/2007/04/03/documentation-for-telepathic-developers/</link>
	<description>The Quest for Software++</description>
	<pubDate>Wed, 07 Jan 2009 02:58:02 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Stefano</title>
		<link>http://gojko.net/2007/04/03/documentation-for-telepathic-developers/comment-page-1/#comment-6629</link>
		<dc:creator>Stefano</dc:creator>
		<pubDate>Fri, 06 Apr 2007 17:26:36 +0000</pubDate>
		<guid isPermaLink="false">http://gojko.net/2007/04/03/documentation-for-telepathic-developers/#comment-6629</guid>
		<description>Great post, definitely one of my favourites in the last weeks. Most of the times developers actually explore a new API by trials and errors and learn it by intuition, not with the complete documentation, so it is better to deal also with this approach.</description>
		<content:encoded><![CDATA[<p>Great post, definitely one of my favourites in the last weeks. Most of the times developers actually explore a new API by trials and errors and learn it by intuition, not with the complete documentation, so it is better to deal also with this approach.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: paulo</title>
		<link>http://gojko.net/2007/04/03/documentation-for-telepathic-developers/comment-page-1/#comment-6492</link>
		<dc:creator>paulo</dc:creator>
		<pubDate>Wed, 04 Apr 2007 22:32:36 +0000</pubDate>
		<guid isPermaLink="false">http://gojko.net/2007/04/03/documentation-for-telepathic-developers/#comment-6492</guid>
		<description>There's an attempt to make the kind of "transparent API" that you advoke in the AbstractDocument class. It defines a one writer many readers lock on each document so it can be used on many views, and all functions that alter the document invoke the lock. However they "forgot" to expose the lock, or a function that was lockless for altering the document. Result : copying things out of a document, applying custom text shaping and putting the text back on the document is much slower that it should be. The alternative would be to either subclass the document (and reimplement some horrible logic, quite impossible for most developers), reimplement the parser if our shaping is amenable to that (even more impossible). The lesson is, ofcourse to actually provide the mechanisms for the efficient case. (Another thing, the AbstractDocument again, gives a custom "unprotected String" that is mutable a "Segment" backed by the char array in the document. However there is no way to put the segment into a new document without 1) a toString() and (inside the AbstractDocumentClass) a String.getBytes (that allocates a new array to copy the string contents. The other lesson is "Take your abstractions to their logical conclusion".</description>
		<content:encoded><![CDATA[<p>There&#8217;s an attempt to make the kind of &#8220;transparent API&#8221; that you advoke in the AbstractDocument class. It defines a one writer many readers lock on each document so it can be used on many views, and all functions that alter the document invoke the lock. However they &#8220;forgot&#8221; to expose the lock, or a function that was lockless for altering the document. Result : copying things out of a document, applying custom text shaping and putting the text back on the document is much slower that it should be. The alternative would be to either subclass the document (and reimplement some horrible logic, quite impossible for most developers), reimplement the parser if our shaping is amenable to that (even more impossible). The lesson is, ofcourse to actually provide the mechanisms for the efficient case. (Another thing, the AbstractDocument again, gives a custom &#8220;unprotected String&#8221; that is mutable a &#8220;Segment&#8221; backed by the char array in the document. However there is no way to put the segment into a new document without 1) a toString() and (inside the AbstractDocumentClass) a String.getBytes (that allocates a new array to copy the string contents. The other lesson is &#8220;Take your abstractions to their logical conclusion&#8221;.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 800px</title>
		<link>http://gojko.net/2007/04/03/documentation-for-telepathic-developers/comment-page-1/#comment-6342</link>
		<dc:creator>800px</dc:creator>
		<pubDate>Wed, 04 Apr 2007 08:54:45 +0000</pubDate>
		<guid isPermaLink="false">http://gojko.net/2007/04/03/documentation-for-telepathic-developers/#comment-6342</guid>
		<description>On the basis that most developers are the sort of people who will press buttons till something does what they want (and be proud of the fact) this makes complete sense.</description>
		<content:encoded><![CDATA[<p>On the basis that most developers are the sort of people who will press buttons till something does what they want (and be proud of the fact) this makes complete sense.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: creaothceann</title>
		<link>http://gojko.net/2007/04/03/documentation-for-telepathic-developers/comment-page-1/#comment-6233</link>
		<dc:creator>creaothceann</dc:creator>
		<pubDate>Tue, 03 Apr 2007 21:50:20 +0000</pubDate>
		<guid isPermaLink="false">http://gojko.net/2007/04/03/documentation-for-telepathic-developers/#comment-6233</guid>
		<description>Great article.

"if Clean() should be called anyway, then just call it internally"
Yes, but hopefully there's a "dirty" flag that skips cleaning when not required.</description>
		<content:encoded><![CDATA[<p>Great article.</p>
<p>&#8220;if Clean() should be called anyway, then just call it internally&#8221;<br />
Yes, but hopefully there&#8217;s a &#8220;dirty&#8221; flag that skips cleaning when not required.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
