<?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: The Odd Couples</title>
	<atom:link href="http://clubtroppo.com.au/2008/05/28/the-odd-couples/feed/" rel="self" type="application/rss+xml" />
	<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/</link>
	<description></description>
	<lastBuildDate>Tue, 16 Mar 2010 20:11:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276596</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Thu, 29 May 2008 23:38:40 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276596</guid>
		<description>James;

That&#039;s the best critique of PHP I&#039;ve ever seen. Mostly I have fixated on the usual polluted namespace and crappy typing as well as the other warts.</description>
		<content:encoded><![CDATA[<p>James;</p>
<p>That&#8217;s the best critique of PHP I&#8217;ve ever seen. Mostly I have fixated on the usual polluted namespace and crappy typing as well as the other warts.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James A</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276459</link>
		<dc:creator>James A</dc:creator>
		<pubDate>Thu, 29 May 2008 12:18:16 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276459</guid>
		<description>http://blogs.awesomeplay.com/elanthis/archives/2008/05/28/464/ is a much more eloquent statement of PHP&#039;s failings than I managed. Also the point you made Jacques made in IRC: &quot;Unfortunately for all of us working with PHP professionally, the only thing PHP has going for it that any other languages dont is that PHP comes as standard in pretty much every web hosting provider service out there.&quot;</description>
		<content:encoded><![CDATA[<p><a href="http://blogs.awesomeplay.com/elanthis/archives/2008/05/28/464/" rel="nofollow">http://blogs.awesomeplay.com/elanthis/archives/2008/05/28/464/</a> is a much more eloquent statement of PHP&#8217;s failings than I managed. Also the point you made Jacques made in IRC: &#8220;Unfortunately for all of us working with PHP professionally, the only thing PHP has going for it that any other languages dont is that PHP comes as standard in pretty much every web hosting provider service out there.&#8221;</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James A</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276456</link>
		<dc:creator>James A</dc:creator>
		<pubDate>Thu, 29 May 2008 11:54:08 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276456</guid>
		<description>I just came across http://oubiwann.blogspot.com/2008/05/mantissa-alternative-to-lamp.html might be what you&#039;re talking about.</description>
		<content:encoded><![CDATA[<p>I just came across <a href="http://oubiwann.blogspot.com/2008/05/mantissa-alternative-to-lamp.html" rel="nofollow">http://oubiwann.blogspot.com/2008/05/mantissa-alternative-to-lamp.html</a> might be what you&#8217;re talking about.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vidar Hokstad</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276424</link>
		<dc:creator>Vidar Hokstad</dc:creator>
		<pubDate>Thu, 29 May 2008 08:46:49 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276424</guid>
		<description>Jacques,

For Wordpress this may be the case, but you then used that as an argument against the LAMP style separation, when the problem is Wordpress not LAMP.

My point being that the LAMP separation is the bare minimum for a reasonably scalable web app - for a large setup you&#039;re likely to end up with &lt;em&gt;more&lt;/em&gt; layers, not fewer, simply because you will end up wanting to be able to scale out at the pinch points, and the web application server and the database at the very least are completely different in terms of how you scale them.</description>
		<content:encoded><![CDATA[<p>Jacques,</p>
<p>For Wordpress this may be the case, but you then used that as an argument against the LAMP style separation, when the problem is Wordpress not LAMP.</p>
<p>My point being that the LAMP separation is the bare minimum for a reasonably scalable web app &#8211; for a large setup you&#8217;re likely to end up with <em>more</em> layers, not fewer, simply because you will end up wanting to be able to scale out at the pinch points, and the web application server and the database at the very least are completely different in terms of how you scale them.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Helen</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276406</link>
		<dc:creator>Helen</dc:creator>
		<pubDate>Thu, 29 May 2008 05:13:01 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276406</guid>
		<description>Sorry, I did mean java. I do know the difference, but am a bit dyslexic with the two.</description>
		<content:encoded><![CDATA[<p>Sorry, I did mean java. I do know the difference, but am a bit dyslexic with the two.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Rubie</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276378</link>
		<dc:creator>David Rubie</dc:creator>
		<pubDate>Thu, 29 May 2008 00:57:36 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276378</guid>
		<description>Helen wrote:
&lt;blockquote&gt;My workplace uses Smalltalk and the stories I could tell! We are right this moment rebuilding everything in Javascript. There is no support available for Smalltalk any more, its an orphan.&lt;/blockquote&gt;

It was terribly fashionable 10-15 years ago.  But as gilmae said, I can&#039;t see a smalltalk system running in Javascript unless you&#039;re talking about one of those funky systems that spat out web pages directly from a running Smalltalk program, in which case you&#039;ll still need something else at the back doing the grunt work.

I really, really miss the workspaces in Smalltalk, where you could just type a bit of code, say &quot;do it&quot; and look at the results.  Makes incremental development trivial, but the whole system suffered from the tightly coupled syndrome.  Since everything is running in one complete image, to deploy a program you throw things away (rather than in a normal environment where necessary things are included).  Some developers just didn&#039;t &quot;get it&quot; and struggled with the whole concept, never successfully packaged an image for deployment and relied on their cow-orkers to do it for them.  These were smart people, but the whole environment is so alien it&#039;s no wonder it withered (kinda like Pick which suffered in the same way).</description>
		<content:encoded><![CDATA[<p>Helen wrote:</p>
<blockquote><p>My workplace uses Smalltalk and the stories I could tell! We are right this moment rebuilding everything in Javascript. There is no support available for Smalltalk any more, its an orphan.</p></blockquote>
<p>It was terribly fashionable 10-15 years ago.  But as gilmae said, I can&#8217;t see a smalltalk system running in Javascript unless you&#8217;re talking about one of those funky systems that spat out web pages directly from a running Smalltalk program, in which case you&#8217;ll still need something else at the back doing the grunt work.</p>
<p>I really, really miss the workspaces in Smalltalk, where you could just type a bit of code, say &#8220;do it&#8221; and look at the results.  Makes incremental development trivial, but the whole system suffered from the tightly coupled syndrome.  Since everything is running in one complete image, to deploy a program you throw things away (rather than in a normal environment where necessary things are included).  Some developers just didn&#8217;t &#8220;get it&#8221; and struggled with the whole concept, never successfully packaged an image for deployment and relied on their cow-orkers to do it for them.  These were smart people, but the whole environment is so alien it&#8217;s no wonder it withered (kinda like Pick which suffered in the same way).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gilmae</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276372</link>
		<dc:creator>gilmae</dc:creator>
		<pubDate>Thu, 29 May 2008 00:42:55 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276372</guid>
		<description>I love javascript as much as the next web developer, but god I hope you meant to say Java.</description>
		<content:encoded><![CDATA[<p>I love javascript as much as the next web developer, but god I hope you meant to say Java.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Helen</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276371</link>
		<dc:creator>Helen</dc:creator>
		<pubDate>Thu, 29 May 2008 00:41:05 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276371</guid>
		<description>&lt;i&gt;A non-technical example might be the old Russian way of running a store. Go to table one, get a numbered ticket. Go to table two, get the item on the ticket. Go to table three, ticket gets stamped and the item bagged. Go to table four, pay for item, then leave.&lt;/i&gt;

That&#039;s how the Lions club were doing things at the sausage sizzle at Bunnings the other day. &lt;i&gt;Communists!&lt;/i&gt;

Do you have time for a question from a mere front-end user? :-) Why does it take aeons for Wordpress to save a post containing an embed link to a YouTube video? I mean, it&#039;s only HTML innit? I don&#039;t see why the nature of what it links to would affect anything. Maybe this has something to do with the problems you describe but I&#039;m too technically clueless to see it.

My workplace uses Smalltalk and the stories I could tell! We are right this moment rebuilding everything in Javascript. There is no support available for Smalltalk any more, it&#039;s an orphan.</description>
		<content:encoded><![CDATA[<p><i>A non-technical example might be the old Russian way of running a store. Go to table one, get a numbered ticket. Go to table two, get the item on the ticket. Go to table three, ticket gets stamped and the item bagged. Go to table four, pay for item, then leave.</i></p>
<p>That&#8217;s how the Lions club were doing things at the sausage sizzle at Bunnings the other day. <i>Communists!</i></p>
<p>Do you have time for a question from a mere front-end user? <img src='http://clubtroppo.com.au/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Why does it take aeons for Wordpress to save a post containing an embed link to a YouTube video? I mean, it&#8217;s only HTML innit? I don&#8217;t see why the nature of what it links to would affect anything. Maybe this has something to do with the problems you describe but I&#8217;m too technically clueless to see it.</p>
<p>My workplace uses Smalltalk and the stories I could tell! We are right this moment rebuilding everything in Javascript. There is no support available for Smalltalk any more, it&#8217;s an orphan.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Rubie</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276349</link>
		<dc:creator>David Rubie</dc:creator>
		<pubDate>Wed, 28 May 2008 23:35:06 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276349</guid>
		<description>Jacques wrote:
&lt;blockquote&gt;I mean, to work with an SQL database you need to know the schema anyway.&lt;/blockquote&gt;

The neat thing about modern RDBMS&#039;s is they contain the meta-information to discover bits of the schema - not quite self describing, but good enough to be able to write generic DB management tools and externally walk relational dependencies.  The whole &quot;object/relational impedence mismatch&quot; is just a load of hooey - while it&#039;s non-trivial to write a good object/db layer, they can be found just about anywhere so you can treat it as a solved problem.

James A wrote:
&lt;blockquote&gt;although some sort of file-based RDF store plugged into git would be hot. Hmm. Some sort of query language or ORM on top of small files stored in git would be hot.&lt;/blockquote&gt;

James, it&#039;s been done and it was called &lt;a href=&quot;http://en.wikipedia.org/wiki/Pick_operating_system&quot; rel=&quot;nofollow&quot;&gt;Pick&lt;/a&gt; - quite successful in it&#039;s day (20 years ago it dropped off in competition with networked relational databases).</description>
		<content:encoded><![CDATA[<p>Jacques wrote:</p>
<blockquote><p>I mean, to work with an SQL database you need to know the schema anyway.</p></blockquote>
<p>The neat thing about modern RDBMS&#8217;s is they contain the meta-information to discover bits of the schema &#8211; not quite self describing, but good enough to be able to write generic DB management tools and externally walk relational dependencies.  The whole &#8220;object/relational impedence mismatch&#8221; is just a load of hooey &#8211; while it&#8217;s non-trivial to write a good object/db layer, they can be found just about anywhere so you can treat it as a solved problem.</p>
<p>James A wrote:</p>
<blockquote><p>although some sort of file-based RDF store plugged into git would be hot. Hmm. Some sort of query language or ORM on top of small files stored in git would be hot.</p></blockquote>
<p>James, it&#8217;s been done and it was called <a href="http://en.wikipedia.org/wiki/Pick_operating_system" rel="nofollow">Pick</a> &#8211; quite successful in it&#8217;s day (20 years ago it dropped off in competition with networked relational databases).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gilmae</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276344</link>
		<dc:creator>gilmae</dc:creator>
		<pubDate>Wed, 28 May 2008 23:16:55 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276344</guid>
		<description>Good lord!</description>
		<content:encoded><![CDATA[<p>Good lord!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276343</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 23:14:37 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276343</guid>
		<description>It only works with MySQL.</description>
		<content:encoded><![CDATA[<p>It only works with MySQL.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: gilmae</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276341</link>
		<dc:creator>gilmae</dc:creator>
		<pubDate>Wed, 28 May 2008 23:06:50 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276341</guid>
		<description>Does Wordpress only work with MySql, or do you mean you need to know about database replication in general to scale up Wordpress? I ask as someone who has willfully ignored Wordpress as much as possible and knows almost nothing about it specifically.</description>
		<content:encoded><![CDATA[<p>Does Wordpress only work with MySql, or do you mean you need to know about database replication in general to scale up Wordpress? I ask as someone who has willfully ignored Wordpress as much as possible and knows almost nothing about it specifically.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276337</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 22:49:36 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276337</guid>
		<description>Vidar;

I don&#039;t think you see my point. It&#039;s not loosely coupled &lt;em&gt;as it is now&lt;/em&gt; because I need to know the whole stack to scale up Wordpress -- I need to know MySQL replication and possibly get up to speed on memcached. Each individual component is coherent, which is a good design indicator; but they are still too tightly coupled for my taste.

It&#039;s been interesting getting feedback so far.</description>
		<content:encoded><![CDATA[<p>Vidar;</p>
<p>I don&#8217;t think you see my point. It&#8217;s not loosely coupled <em>as it is now</em> because I need to know the whole stack to scale up Wordpress &#8212; I need to know MySQL replication and possibly get up to speed on memcached. Each individual component is coherent, which is a good design indicator; but they are still too tightly coupled for my taste.</p>
<p>It&#8217;s been interesting getting feedback so far.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Vidar Hokstad</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276331</link>
		<dc:creator>Vidar Hokstad</dc:creator>
		<pubDate>Wed, 28 May 2008 22:21:47 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276331</guid>
		<description>Your argument seems incoherent. On one hand you complain about coupling in the LAMP stack, and on the other hand you propose collapsing the layers in a way that create tighter coupling.

Not only that, but what you are proposing makes scalability a nightmare. Scaling the LAMP stack is usually easy:

You add frontends as required. Once you hit database limits, you add replicas.

A well written LAMP style application will handle this well. At some point you&#039;ll add one or more caches to reduce load on the backends. And as with anything there&#039;s a number of ways of tuning each element.

That some LAMP based apps aren&#039;t designed to handle this well is an application problem, not a problem with the separation.

Now, there&#039;s nothing wrong with for example linking the app into a HTTP library, as long as the interfaces are narrow and clearly defined, but the main reason people do that is when they use languages (like Ruby) where the startup cost for the interpreter is significant and/or where there&#039;s poor support for the &quot;traditional&quot; model. In the Ruby community at least a lot of people have been clamoring for a mod_php like module for a while, and Passenger is promising to deliver at least part of that functionality for Rails, but even when using a standalone server, we tend to put things behind Apache, Nginx etc. - in a sense we&#039;re adding a layer to the stack, not collapsing it.

Revisiting the interface boundaries is useful, but you&#039;re arguing about layering that is well established for a reason: Separating out data storage for example is done exactly because scaling and managing storage and processing are vastly different in terms of how you approach it, and pinchpoints. 

Separating out the data storage in a database (what type of database it is is secondary) allow you to scale each element based on when you run into limits, which is vital in a large scale environment. And nothing stops you from running it in a single process if you like - there&#039;s always solutions like Sqlite. Again the point of the separation is stable interfaces, not whether or not it runs in the same process.</description>
		<content:encoded><![CDATA[<p>Your argument seems incoherent. On one hand you complain about coupling in the LAMP stack, and on the other hand you propose collapsing the layers in a way that create tighter coupling.</p>
<p>Not only that, but what you are proposing makes scalability a nightmare. Scaling the LAMP stack is usually easy:</p>
<p>You add frontends as required. Once you hit database limits, you add replicas.</p>
<p>A well written LAMP style application will handle this well. At some point you&#8217;ll add one or more caches to reduce load on the backends. And as with anything there&#8217;s a number of ways of tuning each element.</p>
<p>That some LAMP based apps aren&#8217;t designed to handle this well is an application problem, not a problem with the separation.</p>
<p>Now, there&#8217;s nothing wrong with for example linking the app into a HTTP library, as long as the interfaces are narrow and clearly defined, but the main reason people do that is when they use languages (like Ruby) where the startup cost for the interpreter is significant and/or where there&#8217;s poor support for the &#8220;traditional&#8221; model. In the Ruby community at least a lot of people have been clamoring for a mod_php like module for a while, and Passenger is promising to deliver at least part of that functionality for Rails, but even when using a standalone server, we tend to put things behind Apache, Nginx etc. &#8211; in a sense we&#8217;re adding a layer to the stack, not collapsing it.</p>
<p>Revisiting the interface boundaries is useful, but you&#8217;re arguing about layering that is well established for a reason: Separating out data storage for example is done exactly because scaling and managing storage and processing are vastly different in terms of how you approach it, and pinchpoints. </p>
<p>Separating out the data storage in a database (what type of database it is is secondary) allow you to scale each element based on when you run into limits, which is vital in a large scale environment. And nothing stops you from running it in a single process if you like &#8211; there&#8217;s always solutions like Sqlite. Again the point of the separation is stable interfaces, not whether or not it runs in the same process.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James A</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276253</link>
		<dc:creator>James A</dc:creator>
		<pubDate>Wed, 28 May 2008 15:35:00 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276253</guid>
		<description>Yeah, but ORMs range from ActiveRecord, which will build objects from the schema, to ORMs which use the db as a glorified key-value store with no schema and do all the magic away from the SQL server, to things that make the Daily WTF. Even so, schema sucks in SQL, and it sucks in LDAP. Schema-less dbs do exist (couchdb is the first one that comes to mind) but suck differently. So while I&#039;m talking about things that don&#039;t exist (some sort of non-sucky schema), I&#039;d really like a database that does versioning natively. RDF is particularly bad at this ... although some sort of file-based RDF store plugged into git would be hot. Hmm. Some sort of query language or ORM on top of small files stored in git would be hot.</description>
		<content:encoded><![CDATA[<p>Yeah, but ORMs range from ActiveRecord, which will build objects from the schema, to ORMs which use the db as a glorified key-value store with no schema and do all the magic away from the SQL server, to things that make the Daily WTF. Even so, schema sucks in SQL, and it sucks in LDAP. Schema-less dbs do exist (couchdb is the first one that comes to mind) but suck differently. So while I&#8217;m talking about things that don&#8217;t exist (some sort of non-sucky schema), I&#8217;d really like a database that does versioning natively. RDF is particularly bad at this &#8230; although some sort of file-based RDF store plugged into git would be hot. Hmm. Some sort of query language or ORM on top of small files stored in git would be hot.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276252</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 15:17:21 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276252</guid>
		<description>I mean, to work with an SQL database you need to know the schema anyway.</description>
		<content:encoded><![CDATA[<p>I mean, to work with an SQL database you need to know the schema anyway.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276251</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 15:16:35 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276251</guid>
		<description>&lt;blockquote&gt;All of them were based entirely on navigation like the old IMS databases of crusty programmer nightmare - if you didnt know where to start, you were stuffed.&lt;/blockquote&gt;

I got to chatting with a professor of mine the other week about this. You&#039;re quite right that most object databases are hiding the network-database nature of object graphs. My hunch is that the answer will actually be to bend object oriented languages to include relational theory, rather than treating RDBMSes as ugly, inconvenient but necessary datastores.

As for your story -- you should write it up and submit it to the Daily WTF.</description>
		<content:encoded><![CDATA[<blockquote><p>All of them were based entirely on navigation like the old IMS databases of crusty programmer nightmare &#8211; if you didnt know where to start, you were stuffed.</p></blockquote>
<p>I got to chatting with a professor of mine the other week about this. You&#8217;re quite right that most object databases are hiding the network-database nature of object graphs. My hunch is that the answer will actually be to bend object oriented languages to include relational theory, rather than treating RDBMSes as ugly, inconvenient but necessary datastores.</p>
<p>As for your story &#8212; you should write it up and submit it to the Daily WTF.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James A</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276249</link>
		<dc:creator>James A</dc:creator>
		<pubDate>Wed, 28 May 2008 14:49:03 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276249</guid>
		<description>I&#039;ll start out by saying Sun have what they call &lt;a href=&quot;http://cooltools.sunsource.net/coolstack/&quot; rel=&quot;nofollow&quot;&gt;Cool Stack&lt;/a&gt;, a set of pre-optimised AMP packages for Solaris, so it&#039;s not quite as dire as you portray (although they added lighttpd recently).

The performance nightmare is pretty obvious in most Java web applications - in theory the application server is responsible for managing all that icky HTTP, database and authentication goo in one place. In practice they turn out to be poorly performing piles of shit that still have byzantine configuration/tuning. This might be because Java also encourages flexibility at each layer so it&#039;s not really an integrated system, it&#039;s still a katamari of discrete components.

Most non-dedicated webservers (ie language libraries) tend to have poor performance - the way to performance is mod_perl, not use Apache; mod_python not import BaseHTTPServer. I think this is because the HTTP model is actually quite different to imperative programming, so na</description>
		<content:encoded><![CDATA[<p>I&#8217;ll start out by saying Sun have what they call <a href="http://cooltools.sunsource.net/coolstack/" rel="nofollow">Cool Stack</a>, a set of pre-optimised AMP packages for Solaris, so it&#8217;s not quite as dire as you portray (although they added lighttpd recently).</p>
<p>The performance nightmare is pretty obvious in most Java web applications &#8211; in theory the application server is responsible for managing all that icky HTTP, database and authentication goo in one place. In practice they turn out to be poorly performing piles of shit that still have byzantine configuration/tuning. This might be because Java also encourages flexibility at each layer so it&#8217;s not really an integrated system, it&#8217;s still a katamari of discrete components.</p>
<p>Most non-dedicated webservers (ie language libraries) tend to have poor performance &#8211; the way to performance is mod_perl, not use Apache; mod_python not import BaseHTTPServer. I think this is because the HTTP model is actually quite different to imperative programming, so na</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Rubie</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276245</link>
		<dc:creator>David Rubie</dc:creator>
		<pubDate>Wed, 28 May 2008 14:32:19 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276245</guid>
		<description>Object databases are my worst nightmare.  We played with a few of them in the early nineties with Smalltalk and C++ - oh the humanity!

All of them were based entirely on &quot;navigation&quot; like the old IMS databases of crusty programmer nightmare - if you didn&#039;t know where to start, you were stuffed.  If you couldn&#039;t remember the record layout, you were stuffed.  If somebody accidently broke the only link to a big table of stuff, you were stuffed.  Those old guys with long, grey beards know a thing or two if you come across them.

Some of the truly awful object DBs (not naming names) stored memory snapshots of your objects, so if you wanted to try sharing between ST and C++ or a PC and a Sun you were SOL.  Some of them fell to bits when you changed your object as the object versioning stuff was either broken or missing.  The good ones (that stored things in an architecture and language independent way) were like molasses and were fundamentally untuneable.

Then, one of the geniuses I worked with decided he could use the BLOB feature of Sybase to store objects if he shared the marshalling/unmarshalling code and had a library that checked the version of the object before loading it.  That resulted in a runaway Smalltalk program that tried to store every object in a running image into the Sybase database.  Same genius got knuckle rap, then went ahead and implemented it anyway with the broken feature (the bit that walked the object tree a leeetle too far when storing) sorta-kinda-fixed.  Into production it went.  Said application took 20 minutes to start after 3 months and as the data wasn&#039;t indexable, it wasn&#039;t tuneable and the Sybase DBA washed his hands of the team.

Then, an unnamed junior programmer &quot;fixed&quot; that feature in a running, production environment and hosed the app completely, resulting in much hair pulling and me having to debug it.  Live.  With crowd.

Object storage - just say no.  Don&#039;t get me started on Corba as I will have to punch somebody.</description>
		<content:encoded><![CDATA[<p>Object databases are my worst nightmare.  We played with a few of them in the early nineties with Smalltalk and C++ &#8211; oh the humanity!</p>
<p>All of them were based entirely on &#8220;navigation&#8221; like the old IMS databases of crusty programmer nightmare &#8211; if you didn&#8217;t know where to start, you were stuffed.  If you couldn&#8217;t remember the record layout, you were stuffed.  If somebody accidently broke the only link to a big table of stuff, you were stuffed.  Those old guys with long, grey beards know a thing or two if you come across them.</p>
<p>Some of the truly awful object DBs (not naming names) stored memory snapshots of your objects, so if you wanted to try sharing between ST and C++ or a PC and a Sun you were SOL.  Some of them fell to bits when you changed your object as the object versioning stuff was either broken or missing.  The good ones (that stored things in an architecture and language independent way) were like molasses and were fundamentally untuneable.</p>
<p>Then, one of the geniuses I worked with decided he could use the BLOB feature of Sybase to store objects if he shared the marshalling/unmarshalling code and had a library that checked the version of the object before loading it.  That resulted in a runaway Smalltalk program that tried to store every object in a running image into the Sybase database.  Same genius got knuckle rap, then went ahead and implemented it anyway with the broken feature (the bit that walked the object tree a leeetle too far when storing) sorta-kinda-fixed.  Into production it went.  Said application took 20 minutes to start after 3 months and as the data wasn&#8217;t indexable, it wasn&#8217;t tuneable and the Sybase DBA washed his hands of the team.</p>
<p>Then, an unnamed junior programmer &#8220;fixed&#8221; that feature in a running, production environment and hosed the app completely, resulting in much hair pulling and me having to debug it.  Live.  With crowd.</p>
<p>Object storage &#8211; just say no.  Don&#8217;t get me started on Corba as I will have to punch somebody.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276240</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 14:06:34 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276240</guid>
		<description>&lt;blockquote&gt;I dont disagree with you  I am a big fan of relational databases.&lt;/blockquote&gt;

&quot;Some of my best friends are relational databases!&quot; :)

For example, I work in a firm that does HR software. The next generation of product is currently being designed and I am definitely keen on using an RDBMS as the backing store and authoritative data model.</description>
		<content:encoded><![CDATA[<blockquote><p>I dont disagree with you  I am a big fan of relational databases.</p></blockquote>
<p>&#8220;Some of my best friends are relational databases!&#8221; <img src='http://clubtroppo.com.au/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>For example, I work in a firm that does HR software. The next generation of product is currently being designed and I am definitely keen on using an RDBMS as the backing store and authoritative data model.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276239</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 14:03:26 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276239</guid>
		<description>David;

I don&#039;t disagree with you -- I am a big fan of relational databases. I am also interested in the so-called &#039;impedance mismatch&#039; between object oriented programming and databases, which is a related problem.

I&#039;m not proposing flatfiles as an alternative. Possibly something along the lines of persistent objects as you can find in several flavours in Smalltalk and Common Lisp. You give up some of the declarative advantages of an RDBMS, including fast, flexible ad hoc querying, in exchange for an almost invisible data layer.

Most LAMP software is just using MySQL store-and-fetch, not decision support, so in this case the tradeoff could be sound.</description>
		<content:encoded><![CDATA[<p>David;</p>
<p>I don&#8217;t disagree with you &#8212; I am a big fan of relational databases. I am also interested in the so-called &#8216;impedance mismatch&#8217; between object oriented programming and databases, which is a related problem.</p>
<p>I&#8217;m not proposing flatfiles as an alternative. Possibly something along the lines of persistent objects as you can find in several flavours in Smalltalk and Common Lisp. You give up some of the declarative advantages of an RDBMS, including fast, flexible ad hoc querying, in exchange for an almost invisible data layer.</p>
<p>Most LAMP software is just using MySQL store-and-fetch, not decision support, so in this case the tradeoff could be sound.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Rubie</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276237</link>
		<dc:creator>David Rubie</dc:creator>
		<pubDate>Wed, 28 May 2008 13:56:40 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276237</guid>
		<description>Jacques Chester wrote:
&lt;blockquote&gt;It was about complexity that might not really be necessary.&lt;/blockquote&gt;

That perhaps is a reflection on Wordpress, rather than unnecessary complexity.  I remember thinking much the same thing on first encountering database programming - thinking it was an overly complex way to solve something easy (i.e. what&#039;s wrong with flat files?).  In some cases, flat files are perfect, but for anything where the data is going to get large, you need indexing capabilities, an interface to make programming easier, mechanisms to clean up removed data without fragmentation ruining things, concurrency features etc.  As soon as you step beyond trivial, complexity starts to compound.  I think it&#039;s hard to characterise as unnecessary even if you aren&#039;t using 100% of the features available.

I would equate schema evolution and object versioning - there&#039;s just no getting away from breaking an interface every now and again.  That&#039;s a problem that there is no solution to.

I&#039;d agree about HTTP though - it&#039;s simple protocol, widely implemented and there are few risks in &quot;re-inventing the wheel&quot; because it&#039;s not much more complex than a wheel.  Databases and database implemention, however, is a different animal.</description>
		<content:encoded><![CDATA[<p>Jacques Chester wrote:</p>
<blockquote><p>It was about complexity that might not really be necessary.</p></blockquote>
<p>That perhaps is a reflection on Wordpress, rather than unnecessary complexity.  I remember thinking much the same thing on first encountering database programming &#8211; thinking it was an overly complex way to solve something easy (i.e. what&#8217;s wrong with flat files?).  In some cases, flat files are perfect, but for anything where the data is going to get large, you need indexing capabilities, an interface to make programming easier, mechanisms to clean up removed data without fragmentation ruining things, concurrency features etc.  As soon as you step beyond trivial, complexity starts to compound.  I think it&#8217;s hard to characterise as unnecessary even if you aren&#8217;t using 100% of the features available.</p>
<p>I would equate schema evolution and object versioning &#8211; there&#8217;s just no getting away from breaking an interface every now and again.  That&#8217;s a problem that there is no solution to.</p>
<p>I&#8217;d agree about HTTP though &#8211; it&#8217;s simple protocol, widely implemented and there are few risks in &#8220;re-inventing the wheel&#8221; because it&#8217;s not much more complex than a wheel.  Databases and database implemention, however, is a different animal.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jacques Chester</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276232</link>
		<dc:creator>Jacques Chester</dc:creator>
		<pubDate>Wed, 28 May 2008 13:36:23 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276232</guid>
		<description>David;

&lt;blockquote&gt;MySQL has other uses than a backend for Wordpress&lt;/blockquote&gt;

Yes, but Wordpress doesn&#039;t really use a fraction of what a full SQL database provides, but still gets all the complexity.

I do recognise that there are problems with versioning, but that&#039;s a problem with schema evolution too. Common Lisp has some degree of hot-swappability and Erlang (to pick a currently trendy example) even more so.

As for the HTTP server, that problem has been solved so thoroughly so many times it&#039;s not funny. People don&#039;t want pure HTTP servers any more; they want a plugin engine built around the protocol. It seems to me to be valid to fold HTTP into a plugin or library and include it in the base application.

I suppose I didn&#039;t really make my point well. It wasn&#039;t so much about performance tuning; that was just the example. It was about complexity that might not really be necessary. Performance tuning is more complex because I have to do it in a bunch of places.</description>
		<content:encoded><![CDATA[<p>David;</p>
<blockquote><p>MySQL has other uses than a backend for Wordpress</p></blockquote>
<p>Yes, but Wordpress doesn&#8217;t really use a fraction of what a full SQL database provides, but still gets all the complexity.</p>
<p>I do recognise that there are problems with versioning, but that&#8217;s a problem with schema evolution too. Common Lisp has some degree of hot-swappability and Erlang (to pick a currently trendy example) even more so.</p>
<p>As for the HTTP server, that problem has been solved so thoroughly so many times it&#8217;s not funny. People don&#8217;t want pure HTTP servers any more; they want a plugin engine built around the protocol. It seems to me to be valid to fold HTTP into a plugin or library and include it in the base application.</p>
<p>I suppose I didn&#8217;t really make my point well. It wasn&#8217;t so much about performance tuning; that was just the example. It was about complexity that might not really be necessary. Performance tuning is more complex because I have to do it in a bunch of places.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Rubie</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276231</link>
		<dc:creator>David Rubie</dc:creator>
		<pubDate>Wed, 28 May 2008 13:29:03 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276231</guid>
		<description>I dunno Jacques - MySQL has other uses than a backend for Wordpress, and merging a DB layer directly into the code is generally a bad idea that&#039;s been tried before (with much hair pulling afterwards) - those old pre-DB2 IBM mainframe databases come to mind, you end up with 15 versions of the DB code spread across your applications because none of them work with one version, and all the embedded versions have been tweaked up the kazoo to work just with your app.  Similarly with the HTTP server (although much less so - there are quite a few applications that embed minimal HTTP service functionality into the application or device).

Fundamentally, I think it&#039;s been tried and rejected (probably guaranteeing it&#039;ll be tried again).  .NET comes to mind - everything is floating around as a library of some sort, but it still doesn&#039;t buy you the convenience of not having to tune the different layers when you hit a performance problem.

I think the ultimate incarnation of this kind of thinking was the early object based systems (Lisp or more specifically CLOS, and Smalltalk).  Everything you need was embedded in a running &quot;image&quot; with Smalltalk, with loose coupling being the object interfaces.  It *still* needed tuning when it performed badly.

So, in a long winded way, I don&#039;t think tighter or looser coupling of code bases really buys you much when performance is a problem, as the problem is really taking general purpose code and specialising it.  Every time a bit of specialisation takes place, you get an incompatible fork of something and suddenly you&#039;re up Mac Plus creek without a ram stick, while your competitors sail past having successfully compromised.</description>
		<content:encoded><![CDATA[<p>I dunno Jacques &#8211; MySQL has other uses than a backend for Wordpress, and merging a DB layer directly into the code is generally a bad idea that&#8217;s been tried before (with much hair pulling afterwards) &#8211; those old pre-DB2 IBM mainframe databases come to mind, you end up with 15 versions of the DB code spread across your applications because none of them work with one version, and all the embedded versions have been tweaked up the kazoo to work just with your app.  Similarly with the HTTP server (although much less so &#8211; there are quite a few applications that embed minimal HTTP service functionality into the application or device).</p>
<p>Fundamentally, I think it&#8217;s been tried and rejected (probably guaranteeing it&#8217;ll be tried again).  .NET comes to mind &#8211; everything is floating around as a library of some sort, but it still doesn&#8217;t buy you the convenience of not having to tune the different layers when you hit a performance problem.</p>
<p>I think the ultimate incarnation of this kind of thinking was the early object based systems (Lisp or more specifically CLOS, and Smalltalk).  Everything you need was embedded in a running &#8220;image&#8221; with Smalltalk, with loose coupling being the object interfaces.  It *still* needed tuning when it performed badly.</p>
<p>So, in a long winded way, I don&#8217;t think tighter or looser coupling of code bases really buys you much when performance is a problem, as the problem is really taking general purpose code and specialising it.  Every time a bit of specialisation takes place, you get an incompatible fork of something and suddenly you&#8217;re up Mac Plus creek without a ram stick, while your competitors sail past having successfully compromised.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Francis Xavier Holden</title>
		<link>http://clubtroppo.com.au/2008/05/28/the-odd-couples/#comment-276229</link>
		<dc:creator>Francis Xavier Holden</dc:creator>
		<pubDate>Wed, 28 May 2008 13:09:31 +0000</pubDate>
		<guid isPermaLink="false">http://clubtroppo.com.au/?p=5390#comment-276229</guid>
		<description>In the Soviet system you would go to the fifth table to actually pick up your item. Or come back the next week.</description>
		<content:encoded><![CDATA[<p>In the Soviet system you would go to the fifth table to actually pick up your item. Or come back the next week.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
