<?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"
	>
<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>
	<pubDate>Mon, 01 Dec 2008 19:16:56 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
		<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's the best critique of PHP I'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's failings than I managed. Also the point you made Jacques made in IRC: "Unfortunately for all of us working with PHP professionally, the only thing PHP has going for it that any other languages don’t is that PHP comes as standard in pretty much every web hosting provider service out there."</description>
		<content:encoded><![CDATA[<p><a href="http://blogs.awesomeplay.com/elanthis/archives/2008/05/28/464/" >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 don’t 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'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" >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'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 - 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, it’s an orphan.&lt;/blockquote&gt;

It was terribly fashionable 10-15 years ago.  But as gilmae said, I can't see a smalltalk system running in Javascript unless you're talking about one of those funky systems that spat out web pages directly from a running Smalltalk program, in which case you'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 "do it" 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't "get it" 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'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, it’s 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'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's only HTML innit? I don'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'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'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'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 "object/relational impedence mismatch" is just a load of hooey - while it'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's been done and it was called &lt;a href="http://en.wikipedia.org/wiki/Pick_operating_system" rel="nofollow"&gt;Pick&lt;/a&gt; - quite successful in it'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 - 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 - 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" >Pick</a> - 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't think you see my point. It'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'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'll add one or more caches to reduce load on the backends. And as with anything there's a number of ways of tuning each element.

That some LAMP based apps aren't designed to handle this well is an application problem, not a problem with the separation.

Now, there'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's poor support for the "traditional" 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're adding a layer to the stack, not collapsing it.

Revisiting the interface boundaries is useful, but you'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'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. - 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 - 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'm talking about things that don't exist (some sort of non-sucky schema), I'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 didn’t 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'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 - if you didn’t 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'll start out by saying Sun have what they call &lt;a href="http://cooltools.sunsource.net/coolstack/" rel="nofollow"&gt;Cool Stack&lt;/a&gt;, a set of pre-optimised AMP packages for Solaris, so it'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's not really an integrated system, it'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ïve approaches just aren't performant at all. And real-world web clients are frankly, a PITA - see LiveJournal's creation of PerlBal, a reverse proxy that sucks the response into RAM then slowly (compared to LAN speeds) feeds it out to the client, just to free up the serving Apache for another request.

The real problem is PHP is just a poor language, encouraging raw SQL and bad templating - the base design of PHP was as a templating language, as shown by the name, PHP Hypertext Preprocessor, and though it's outgrown this, people still use it that way. Use of higher-level constructs like ORMs and proper templating needs to be enforced - Steve Yegge puts it well when he notes &lt;a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html" rel="nofollow"&gt;Microsoft's C++ framework outperformed Geowork's assembly one because the Geoworks one had lost perspective&lt;/a&gt; and so wasn't possible to optimise any more.

ORMs basically are a data storage library, so I guess you're kind of right. Straight object stores (I'm thinking Zope here) however don't have a history of high-performance, if only because the big-name SQL servers have had a lot more work put into optimising them. I'm not sure if I actually had a point in all of this, apart from ranting a bit, but oh well.</description>
		<content:encoded><![CDATA[<p>I&#8217;ll start out by saying Sun have what they call <a href="http://cooltools.sunsource.net/coolstack/" >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 - 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 - 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ïve approaches just aren&#8217;t performant at all. And real-world web clients are frankly, a PITA - see LiveJournal&#8217;s creation of PerlBal, a reverse proxy that sucks the response into RAM then slowly (compared to LAN speeds) feeds it out to the client, just to free up the serving Apache for another request.</p>
<p>The real problem is PHP is just a poor language, encouraging raw SQL and bad templating - the base design of PHP was as a templating language, as shown by the name, PHP Hypertext Preprocessor, and though it&#8217;s outgrown this, people still use it that way. Use of higher-level constructs like ORMs and proper templating needs to be enforced - Steve Yegge puts it well when he notes <a href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html" >Microsoft&#8217;s C++ framework outperformed Geowork&#8217;s assembly one because the Geoworks one had lost perspective</a> and so wasn&#8217;t possible to optimise any more.</p>
<p>ORMs basically are a data storage library, so I guess you&#8217;re kind of right. Straight object stores (I&#8217;m thinking Zope here) however don&#8217;t have a history of high-performance, if only because the big-name SQL servers have had a lot more work put into optimising them. I&#8217;m not sure if I actually had a point in all of this, apart from ranting a bit, but oh well.</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 "navigation" like the old IMS databases of crusty programmer nightmare - if you didn't know where to start, you were stuffed.  If you couldn'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't indexable, it wasn't tuneable and the Sybase DBA washed his hands of the team.

Then, an unnamed junior programmer "fixed" 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'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++ - oh the humanity!</p>
<p>All of them were based entirely on &#8220;navigation&#8221; like the old IMS databases of crusty programmer nightmare - 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 - 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 don’t disagree with you — I am a big fan of relational databases.&lt;/blockquote&gt;

"Some of my best friends are relational databases!" :)

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 don’t 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>
</channel>
</rss>
