<?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 for Made of Bugs</title>
	<atom:link href="http://blog.nelhage.com/comments/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.nelhage.com</link>
	<description>It's software. It's made of bugs.</description>
	<lastBuildDate>Mon, 19 Jul 2010 13:58:05 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
	<item>
		<title>Comment on Some musings on ORMs by Adam Fletcher</title>
		<link>http://blog.nelhage.com/2010/07/some-musings-on-orms/comment-page-1/#comment-2267</link>
		<dc:creator>Adam Fletcher</dc:creator>
		<pubDate>Mon, 19 Jul 2010 13:58:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=278#comment-2267</guid>
		<description>&lt;p&gt;There&#039;s a lot of work in the object database (https://secure.wikimedia.org/wikipedia/en/wiki/Object_database) space that attempts to solve the same problem by not having an ORM layer. &lt;/p&gt;

&lt;p&gt;However, a good RDBMs will have a large cache of commonly accessed data, so in your /places/list/ and /places/detail/ example, if the a user has already queried for /detail/ the performance cost of /list/ will be largely in the network call to the DB &amp; the query parsing because all the I/O will be in-memory (assuming the data isn&#039;t dirty from a write that happened in between the read queries). But scaling a read-heavy database is actually fairly easy, especially if writes can be eventually consistent. The problem is more interesting when you have a write-heavy database with strict ACID needs. &lt;/p&gt;

&lt;p&gt;What ORMs could attempt to do is ongoing, lightweight instrumentation (like a sampling profiler) so the ORM can tell when the query is running very slowly; the problem is that the ORM knows nothing about the physical structure of the database nor anything about were the RDBMs is actually spending time (query parsing? query execution? Block I/O? Block contention?) so the ORM will never be able to optimize away the biggest problems in scaling traditional RDMBs (I/O contention) and the problems in database performance (the aforementioned contention and also query execution). Oracle and other &quot;enterprise&quot; RDBMs spend a lot of time trying to get their query optimizations correct use dynamic analysis, profiling, hints, and other knobs, and they don&#039;t do such a great job at optimization despite all of that data. &lt;/p&gt;

&lt;p&gt;Umm, not sure where I&#039;m going with this. But you should check out object databases, they may be the droids you are looking for.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>There&#8217;s a lot of work in the object database (<a href="https://secure.wikimedia.org/wikipedia/en/wiki/Object_database" rel="nofollow">https://secure.wikimedia.org/wikipedia/en/wiki/Object_database</a>) space that attempts to solve the same problem by not having an ORM layer. </p>

<p>However, a good RDBMs will have a large cache of commonly accessed data, so in your /places/list/ and /places/detail/ example, if the a user has already queried for /detail/ the performance cost of /list/ will be largely in the network call to the DB &amp; the query parsing because all the I/O will be in-memory (assuming the data isn&#8217;t dirty from a write that happened in between the read queries). But scaling a read-heavy database is actually fairly easy, especially if writes can be eventually consistent. The problem is more interesting when you have a write-heavy database with strict ACID needs. </p>

<p>What ORMs could attempt to do is ongoing, lightweight instrumentation (like a sampling profiler) so the ORM can tell when the query is running very slowly; the problem is that the ORM knows nothing about the physical structure of the database nor anything about were the RDBMs is actually spending time (query parsing? query execution? Block I/O? Block contention?) so the ORM will never be able to optimize away the biggest problems in scaling traditional RDMBs (I/O contention) and the problems in database performance (the aforementioned contention and also query execution). Oracle and other &#8220;enterprise&#8221; RDBMs spend a lot of time trying to get their query optimizations correct use dynamic analysis, profiling, hints, and other knobs, and they don&#8217;t do such a great job at optimization despite all of that data. </p>

<p>Umm, not sure where I&#8217;m going with this. But you should check out object databases, they may be the droids you are looking for.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Implementing a declarative mini-language in the C preprocessor by Josh</title>
		<link>http://blog.nelhage.com/2010/07/implementing-an-edsl-in-cpp/comment-page-1/#comment-1992</link>
		<dc:creator>Josh</dc:creator>
		<pubDate>Mon, 05 Jul 2010 07:06:42 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=272#comment-1992</guid>
		<description>&lt;p&gt;Very nice! gPXE uses that ELF trick to implement the &quot;initialize a bunch of features that might or might not be compiled in&quot; pattern without #ifdefs; it&#039;s quite amazing how much you can do with the linker. Weak symbols are also a great deal of fun.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Very nice! gPXE uses that ELF trick to implement the &#8220;initialize a bunch of features that might or might not be compiled in&#8221; pattern without #ifdefs; it&#8217;s quite amazing how much you can do with the linker. Weak symbols are also a great deal of fun.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lab Notebooking for the Software Engineer by Chris</title>
		<link>http://blog.nelhage.com/2010/06/lab-notebooking-for-the-software-engineer/comment-page-1/#comment-1952</link>
		<dc:creator>Chris</dc:creator>
		<pubDate>Sat, 03 Jul 2010 22:41:11 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=254#comment-1952</guid>
		<description>&lt;p&gt;I set up a flat file blog on my private web space. I use 3-4 categories and put all the stuff into the blog. That way I have a searchable &quot;notebook&quot; that also works as some kind of a timeline.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>I set up a flat file blog on my private web space. I use 3-4 categories and put all the stuff into the blog. That way I have a searchable &#8220;notebook&#8221; that also works as some kind of a timeline.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Check Plus: An EDSL for writing unit tests in C by nelhage</title>
		<link>http://blog.nelhage.com/2010/06/check-plus-an-edsl-for-writing-unit-tests-in-c/comment-page-1/#comment-1866</link>
		<dc:creator>nelhage</dc:creator>
		<pubDate>Mon, 28 Jun 2010 20:51:08 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=263#comment-1866</guid>
		<description>&lt;p&gt;Check (and Check Plus) are pure C, whereas googletest (and I believe most similar things) are written in C++. So even though they can potentially be used to test C code, there are some environments where introducing a C++ dependency, even for the test suite, is annoying or unacceptable.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Check (and Check Plus) are pure C, whereas googletest (and I believe most similar things) are written in C++. So even though they can potentially be used to test C code, there are some environments where introducing a C++ dependency, even for the test suite, is annoying or unacceptable.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Check Plus: An EDSL for writing unit tests in C by phaero</title>
		<link>http://blog.nelhage.com/2010/06/check-plus-an-edsl-for-writing-unit-tests-in-c/comment-page-1/#comment-1865</link>
		<dc:creator>phaero</dc:creator>
		<pubDate>Mon, 28 Jun 2010 20:46:47 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=263#comment-1865</guid>
		<description>&lt;p&gt;What makes this test framework any better than the existing ones like, for instance, googletest?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>What makes this test framework any better than the existing ones like, for instance, googletest?</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Check Plus: An EDSL for writing unit tests in C by nelhage</title>
		<link>http://blog.nelhage.com/2010/06/check-plus-an-edsl-for-writing-unit-tests-in-c/comment-page-1/#comment-1846</link>
		<dc:creator>nelhage</dc:creator>
		<pubDate>Sun, 27 Jun 2010 18:36:20 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=263#comment-1846</guid>
		<description>&lt;p&gt;My crimes against the preprocessor are insignificant compared to
those perpetrated by the &lt;a href=&quot;http://lwn.net/Articles/379903/&quot; rel=&quot;nofollow&quot;&gt;Linux&lt;/a&gt; &lt;a href=&quot;http://lwn.net/Articles/381064&quot; rel=&quot;nofollow&quot;&gt;kernel&lt;/a&gt; &lt;a href=&quot;http://lwn.net/Articles/383362/&quot; rel=&quot;nofollow&quot;&gt;developers&lt;/a&gt;&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>My crimes against the preprocessor are insignificant compared to
those perpetrated by the <a href="http://lwn.net/Articles/379903/" rel="nofollow">Linux</a> <a href="http://lwn.net/Articles/381064" rel="nofollow">kernel</a> <a href="http://lwn.net/Articles/383362/" rel="nofollow">developers</a></p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Check Plus: An EDSL for writing unit tests in C by Karl</title>
		<link>http://blog.nelhage.com/2010/06/check-plus-an-edsl-for-writing-unit-tests-in-c/comment-page-1/#comment-1830</link>
		<dc:creator>Karl</dc:creator>
		<pubDate>Sun, 27 Jun 2010 01:36:22 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=263#comment-1830</guid>
		<description>&lt;p&gt;Hasn&#039;t the C preprocessor suffered enough?&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Hasn&#8217;t the C preprocessor suffered enough?</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lab Notebooking for the Software Engineer by RJ Ryan</title>
		<link>http://blog.nelhage.com/2010/06/lab-notebooking-for-the-software-engineer/comment-page-1/#comment-1797</link>
		<dc:creator>RJ Ryan</dc:creator>
		<pubDate>Fri, 25 Jun 2010 17:30:45 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=254#comment-1797</guid>
		<description>&lt;p&gt;Another effective tip (more in a research setting) is building your experimental tools such that every time you invoke them, they record the invocation (arguments, data used, etc) and prompt you for a description of why you are running the experiment and what you hope to evaluate. I&#039;ve done this with my tools and as long as I take the time to fill in the description, the output data is annotated with the command I used, the data I used, and a description of what I was thinking at the time of running them. That way my results are self-documenting, and I don&#039;t have to cross reference with my lab notebook.&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>Another effective tip (more in a research setting) is building your experimental tools such that every time you invoke them, they record the invocation (arguments, data used, etc) and prompt you for a description of why you are running the experiment and what you hope to evaluate. I&#8217;ve done this with my tools and as long as I take the time to fill in the description, the output data is annotated with the command I used, the data I used, and a description of what I was thinking at the time of running them. That way my results are self-documenting, and I don&#8217;t have to cross reference with my lab notebook.</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lab Notebooking for the Software Engineer by links for 2010-06-22 &#171; Daniel Harrison&#39;s Personal Blog</title>
		<link>http://blog.nelhage.com/2010/06/lab-notebooking-for-the-software-engineer/comment-page-1/#comment-1751</link>
		<dc:creator>links for 2010-06-22 &#171; Daniel Harrison&#39;s Personal Blog</dc:creator>
		<pubDate>Wed, 23 Jun 2010 02:05:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=254#comment-1751</guid>
		<description>&lt;p&gt;[...] Made of Bugs » Lab Notebooking for the Software Engineer (tags: programming productivity development writing) [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] Made of Bugs » Lab Notebooking for the Software Engineer (tags: programming productivity development writing) [...]</p>]]></content:encoded>
	</item>
	<item>
		<title>Comment on Lab Notebooking for the Software Engineer by Looking Out To Sea &#187; A simple lab book</title>
		<link>http://blog.nelhage.com/2010/06/lab-notebooking-for-the-software-engineer/comment-page-1/#comment-1742</link>
		<dc:creator>Looking Out To Sea &#187; A simple lab book</dc:creator>
		<pubDate>Tue, 22 Jun 2010 10:13:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.nelhage.com/?p=254#comment-1742</guid>
		<description>&lt;p&gt;[...] seeing this post on keeping a &#8220;lab book&#8221; I realised I could make extra use of this environment variable that I already [...]&lt;/p&gt;
</description>
		<content:encoded><![CDATA[<p>[...] seeing this post on keeping a &#8220;lab book&#8221; I realised I could make extra use of this environment variable that I already [...]</p>]]></content:encoded>
	</item>
</channel>
</rss>
