<?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: zope.pipeline</title>
	<atom:link href="http://shane.willowrise.com/archives/zopepipeline/feed/" rel="self" type="application/rss+xml" />
	<link>http://shane.willowrise.com/archives/zopepipeline/</link>
	<description>Tech Notes from Shane Hathaway</description>
	<lastBuildDate>Sat, 23 Jan 2010 08:49:28 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Jerry Spicklemire</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1343</link>
		<dc:creator>Jerry Spicklemire</dc:creator>
		<pubDate>Fri, 13 Mar 2009 21:52:42 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1343</guid>
		<description>Projecting the pipeline concept to it&#039;s &quot;logical conclusion&quot; leads to pondering the &quot;growing pains&quot; of managing an exponentially expanding number of possible pathways, as more and more WSGI goodies appear on the horizon.

The PyKE (Python Knowledge Engine) may offer a useful way to capture and store (compile as &quot;plans&quot;) any number of &quot;dynamic&quot; pipelines, based on declarative rules about introspectable (is that a word!?) features. Ultimately, that&#039;s what PyKE is for, to enable compiling an arbitrarily large range of possible solutions into re-usable plans, matched to present conditions via a rule-base.

The excerpt below is submitted strictly as an _example_ of the kinds of code re-use that PyKE makes possible. Dynamic is wonderful, but once you&#039;ve crunched through a solution, store it! Then, call it back on demand, when similar rules apply. Think WSGI widgets as &quot;functions&quot;, piped together as defined in the appropriate plan. If such a plan doesn&#039;t already exist, it may be &quot;discovered&quot;, and _next_time_, it will already exist ...

&quot;it occurred to me that backward-chaining could be used to automatically figure out how to join database tables together and generate SQL statements.

And if the backward-chaining rules could see which substitution variables are needed by an HTML templating system, it could automatically generate the SQL to get these data and build the code to update the template.

It seemed that it would no longer be necessary to include anything that looks like code in the HTML templates. The graphic designers could just add simple attributes to their tags and the backward-chaining system would figure out the rest. This would mean that the programmers don&#039;t need to modify the HTML templates, and the graphic designers could maintain full ownership of the HTML.

I had a WSGI front-end that would simply assert the data passed to it as facts.

The forward-chaining rules took these starting facts, parsed the cookie information, form information, browser information, and url, determined whether the user was logged in, figured out which client the request was for, established all of this as additional facts and activated the appropriate rule base for this client.

Then the WSGI front-end simply asked for a proof of the process() goal and executed the resulting plan function which returned the final HTTP status codes and HTML document.&quot;

http://pyke.sourceforge.net/PyCon2008-paper.html#initial-results

Thanks for all the Zope,
Jerry S.</description>
		<content:encoded><![CDATA[<p>Projecting the pipeline concept to it&#8217;s &#8220;logical conclusion&#8221; leads to pondering the &#8220;growing pains&#8221; of managing an exponentially expanding number of possible pathways, as more and more WSGI goodies appear on the horizon.</p>
<p>The PyKE (Python Knowledge Engine) may offer a useful way to capture and store (compile as &#8220;plans&#8221;) any number of &#8220;dynamic&#8221; pipelines, based on declarative rules about introspectable (is that a word!?) features. Ultimately, that&#8217;s what PyKE is for, to enable compiling an arbitrarily large range of possible solutions into re-usable plans, matched to present conditions via a rule-base.</p>
<p>The excerpt below is submitted strictly as an _example_ of the kinds of code re-use that PyKE makes possible. Dynamic is wonderful, but once you&#8217;ve crunched through a solution, store it! Then, call it back on demand, when similar rules apply. Think WSGI widgets as &#8220;functions&#8221;, piped together as defined in the appropriate plan. If such a plan doesn&#8217;t already exist, it may be &#8220;discovered&#8221;, and _next_time_, it will already exist &#8230;</p>
<p>&#8220;it occurred to me that backward-chaining could be used to automatically figure out how to join database tables together and generate SQL statements.</p>
<p>And if the backward-chaining rules could see which substitution variables are needed by an HTML templating system, it could automatically generate the SQL to get these data and build the code to update the template.</p>
<p>It seemed that it would no longer be necessary to include anything that looks like code in the HTML templates. The graphic designers could just add simple attributes to their tags and the backward-chaining system would figure out the rest. This would mean that the programmers don&#8217;t need to modify the HTML templates, and the graphic designers could maintain full ownership of the HTML.</p>
<p>I had a WSGI front-end that would simply assert the data passed to it as facts.</p>
<p>The forward-chaining rules took these starting facts, parsed the cookie information, form information, browser information, and url, determined whether the user was logged in, figured out which client the request was for, established all of this as additional facts and activated the appropriate rule base for this client.</p>
<p>Then the WSGI front-end simply asked for a proof of the process() goal and executed the resulting plan function which returned the final HTTP status codes and HTML document.&#8221;</p>
<p><a href="http://pyke.sourceforge.net/PyCon2008-paper.html#initial-results" rel="nofollow">http://pyke.sourceforge.net/Py.....al-results</a></p>
<p>Thanks for all the Zope,<br />
Jerry S.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martijn Faassen</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1317</link>
		<dc:creator>Martijn Faassen</dc:creator>
		<pubDate>Sun, 15 Feb 2009 17:10:11 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1317</guid>
		<description>Martin, I think this is the road to least reinvention for the time being, as Shane&#039;s refactoring the existing code to be WSGI-ish, instead of replacing them wholesale with components that do something similar but in a different way. I agree with Shane we should look at those, but later, when things that work now have been improved first.</description>
		<content:encoded><![CDATA[<p>Martin, I think this is the road to least reinvention for the time being, as Shane&#8217;s refactoring the existing code to be WSGI-ish, instead of replacing them wholesale with components that do something similar but in a different way. I agree with Shane we should look at those, but later, when things that work now have been improved first.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Hathaway</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1315</link>
		<dc:creator>Shane Hathaway</dc:creator>
		<pubDate>Sun, 15 Feb 2009 05:32:26 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1315</guid>
		<description>Repoze is not (and is not intended to be) a replacement for zope.publisher, while zope.pipeline is.  I hope we can integrate Repoze components into zope.pipeline, but it&#039;s not time for that yet.  It&#039;s easier to start by just pulling all of the code from zope.publisher, while looking at Repoze for design ideas.</description>
		<content:encoded><![CDATA[<p>Repoze is not (and is not intended to be) a replacement for zope.publisher, while zope.pipeline is.  I hope we can integrate Repoze components into zope.pipeline, but it&#8217;s not time for that yet.  It&#8217;s easier to start by just pulling all of the code from zope.publisher, while looking at Repoze for design ideas.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martin Aspeli</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1314</link>
		<dc:creator>Martin Aspeli</dc:creator>
		<pubDate>Sun, 15 Feb 2009 01:43:20 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1314</guid>
		<description>Hi Shane,

Great to see you working on Zope again!

I think I&#039;d like to understand slightly better how this relates to the Repoze stuff. Conceptually, at least, there seems to be some overlap, though I understand the backwards compatibility question may make some things different. Still, middleware like repoze.who and repoze.tm2 sound like good candidates for re-use rather than re-invention. These are already used in the wild outside Zope-ish applications.

Martin

P.S.
We should get your blog onto planet.plone.org. If you want that, you can put in a ticket on http://dev.plone.org/plone.org with an RSS URL.</description>
		<content:encoded><![CDATA[<p>Hi Shane,</p>
<p>Great to see you working on Zope again!</p>
<p>I think I&#8217;d like to understand slightly better how this relates to the Repoze stuff. Conceptually, at least, there seems to be some overlap, though I understand the backwards compatibility question may make some things different. Still, middleware like repoze.who and repoze.tm2 sound like good candidates for re-use rather than re-invention. These are already used in the wild outside Zope-ish applications.</p>
<p>Martin</p>
<p>P.S.<br />
We should get your blog onto planet.plone.org. If you want that, you can put in a ticket on <a href="http://dev.plone.org/plone.org" rel="nofollow">http://dev.plone.org/plone.org</a> with an RSS URL.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Hathaway</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1313</link>
		<dc:creator>Shane Hathaway</dc:creator>
		<pubDate>Sat, 14 Feb 2009 20:42:40 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1313</guid>
		<description>Chris: &quot;endware&quot;, huh?  Yeah, middleware isn&#039;t quite the right name, but I&#039;m not sure about endware either.  Maybe it will grow on me.

Martijn: right, no tests yet, and I suspect there are even syntax errors. :-)  Tests are next.</description>
		<content:encoded><![CDATA[<p>Chris: &#8220;endware&#8221;, huh?  Yeah, middleware isn&#8217;t quite the right name, but I&#8217;m not sure about endware either.  Maybe it will grow on me.</p>
<p>Martijn: right, no tests yet, and I suspect there are even syntax errors. <img src='http://shane.willowrise.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />   Tests are next.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Martijn Faassen</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1312</link>
		<dc:creator>Martijn Faassen</dc:creator>
		<pubDate>Sat, 14 Feb 2009 18:31:38 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1312</guid>
		<description>Shane, great start and I&#039;m really happy to see this work finally happened  - the publisher has been on the &quot;to overhaul&quot; list for a while. I assume you&#039;re going to focus on adding tests next, as there are none right now, right? Another thing I saw is that some apps pull in some dependencies such as zope.app.security that we will need to look at.

Once your design has stabilized the grok project will investigate creating a grokker to register pipeline stages. :)</description>
		<content:encoded><![CDATA[<p>Shane, great start and I&#8217;m really happy to see this work finally happened  &#8211; the publisher has been on the &#8220;to overhaul&#8221; list for a while. I assume you&#8217;re going to focus on adding tests next, as there are none right now, right? Another thing I saw is that some apps pull in some dependencies such as zope.app.security that we will need to look at.</p>
<p>Once your design has stabilized the grok project will investigate creating a grokker to register pipeline stages. <img src='http://shane.willowrise.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris McDonough</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1310</link>
		<dc:creator>Chris McDonough</dc:creator>
		<pubDate>Sat, 14 Feb 2009 12:35:37 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1310</guid>
		<description>Hi Shane,

zope.pipeline is starting to look good!  It looks like a really elegant way to compose a pipeline of &lt;a href=&quot;http://plope.com/Members/chrism/endware&quot; rel=&quot;nofollow&quot;&gt;endware&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Hi Shane,</p>
<p>zope.pipeline is starting to look good!  It looks like a really elegant way to compose a pipeline of <a href="http://plope.com/Members/chrism/endware" rel="nofollow">endware</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Hathaway</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1309</link>
		<dc:creator>Shane Hathaway</dc:creator>
		<pubDate>Sat, 14 Feb 2009 09:01:59 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1309</guid>
		<description>Update on my last comment: Tonight I found a nice simplification that makes it easy to pass application constructor parameters.  I also figured out I can move the pipeline cache out of module scope.  Yay!</description>
		<content:encoded><![CDATA[<p>Update on my last comment: Tonight I found a nice simplification that makes it easy to pass application constructor parameters.  I also figured out I can move the pipeline cache out of module scope.  Yay!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Carlos de la Guardia</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1307</link>
		<dc:creator>Carlos de la Guardia</dc:creator>
		<pubDate>Fri, 13 Feb 2009 20:03:44 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1307</guid>
		<description>Rudd-O: Zope + Plone will never perfom at that level because they do a lot more than just rendering the website and adding dynamic bits, which is basically what the repoze.bfg video showed. The point of the video was that sometimes you don&#039;t need all the extras that Plone gives you for the front end, but still want a great application for managing your content.

Shane: it&#039;s great to see you working in Zope again!</description>
		<content:encoded><![CDATA[<p>Rudd-O: Zope + Plone will never perfom at that level because they do a lot more than just rendering the website and adding dynamic bits, which is basically what the repoze.bfg video showed. The point of the video was that sometimes you don&#8217;t need all the extras that Plone gives you for the front end, but still want a great application for managing your content.</p>
<p>Shane: it&#8217;s great to see you working in Zope again!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Shane Hathaway</title>
		<link>http://shane.willowrise.com/archives/zopepipeline/comment-page-1/#comment-1306</link>
		<dc:creator>Shane Hathaway</dc:creator>
		<pubDate>Fri, 13 Feb 2009 17:35:02 +0000</pubDate>
		<guid isPermaLink="false">http://shane.willowrise.com/?p=109#comment-1306</guid>
		<description>Rudd-O: part of the idea behind this project is people will be able to reduce the pipeline to fit their needs, making it faster.  I don&#039;t know how much faster.

Chris: the zope.pipeline.entry module caches the pipeline by request type (it uses tuple(providedBy(request)) as the key), so it should be plenty fast.  Static pipelines should be easy because everything in zope.pipeline.apps is intended to be usable directly by tools like Paste Deploy.  We might break out some of those applications into their own packages or even just replace them with Repoze apps.

The &quot;more configuration than a name&quot; requirement is still bothering me a little, though.  I haven&#039;t yet figured out what I should do about that.  I invented a solution but I&#039;m not happy with it.</description>
		<content:encoded><![CDATA[<p>Rudd-O: part of the idea behind this project is people will be able to reduce the pipeline to fit their needs, making it faster.  I don&#8217;t know how much faster.</p>
<p>Chris: the zope.pipeline.entry module caches the pipeline by request type (it uses tuple(providedBy(request)) as the key), so it should be plenty fast.  Static pipelines should be easy because everything in zope.pipeline.apps is intended to be usable directly by tools like Paste Deploy.  We might break out some of those applications into their own packages or even just replace them with Repoze apps.</p>
<p>The &#8220;more configuration than a name&#8221; requirement is still bothering me a little, though.  I haven&#8217;t yet figured out what I should do about that.  I invented a solution but I&#8217;m not happy with it.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
