<?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: What Does A WebOb App Look Like?</title>
	<atom:link href="http://blog.ianbicking.org/2010/03/12/a-webob-app-example/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/</link>
	<description></description>
	<lastBuildDate>Fri, 06 May 2011 07:16:39 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>By: Peter Keane</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-157376</link>
		<dc:creator>Peter Keane</dc:creator>
		<pubDate>Sat, 27 Mar 2010 17:06:33 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-157376</guid>
		<description>I&#039;d love to see a routing system w/ a similar API to that described here (but Python, not PHP):

http://www.google.com/buzz/pjkeane/CWyFG8ydaoT/URL-Dispatching-made-easy-Ive-not-yet-found-a-URL</description>
		<content:encoded><![CDATA[<p>I&#8217;d love to see a routing system w/ a similar API to that described here (but Python, not PHP):</p>

<p><a href="http://www.google.com/buzz/pjkeane/CWyFG8ydaoT/URL-Dispatching-made-easy-Ive-not-yet-found-a-URL" rel="nofollow">http://www.google.com/buzz/pjkeane/CWyFG8ydaoT/URL-Dispatching-made-easy-Ive-not-yet-found-a-URL</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sergey Schetinin</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156581</link>
		<dc:creator>Sergey Schetinin</dc:creator>
		<pubDate>Thu, 18 Mar 2010 09:43:39 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156581</guid>
		<description>@Chris,
The wsgify-decorated functions/methods have dual-signatures and they are actually WSGI apps, but the fact it&#039;s not obvious is bad enough. I voiced this concern some time ago, so you might want to check out the discussion: 
 * http://groups.google.com/group/paste-users/browse_thread/thread/7346e75940413f46
 * http://groups.google.com/group/paste-users/browse_thread/thread/aae70301addad062</description>
		<content:encoded><![CDATA[<p>@Chris,
The wsgify-decorated functions/methods have dual-signatures and they are actually WSGI apps, but the fact it&#8217;s not obvious is bad enough. I voiced this concern some time ago, so you might want to check out the discussion: 
 * <a href="http://groups.google.com/group/paste-users/browse&#95;thread/thread/7346e75940413f46" rel="nofollow">http://groups.google.com/group/paste-users/browse<em>thread/thread/7346e75940413f46</em></a>
 * <a href="http://groups.google.com/group/paste-users/browse&#95;thread/thread/aae70301addad062" rel="nofollow">http://groups.google.com/group/paste-users/browsethread/thread/aae70301addad062</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Chris Dent</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156579</link>
		<dc:creator>Chris Dent</dc:creator>
		<pubDate>Thu, 18 Mar 2010 09:30:06 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156579</guid>
		<description>This vast collection of comments has helped me to work out part of what my issues are. I&#039;m not attempting to make any claim to correctness on my part, more just exploring. Firstly I think I have an unfortunate tendency to have a knee jerk negative reaction to seeing objects where I wouldn&#039;t want them to be. They make grand sense in all kinds of places, but I do not like them as the first visible manifestation of the handler of a web request: too much tendency towards action at a distance and various buried magic. I prefer something much closer to properly functional because in my mental model (what &quot;fits my brain&quot;) a web request is functional (not strictly so, there are side effects which show up in the persistence layer but for the most part I want them as state free and idempotent as possible). In that sense, a bare WSGI callable is really quite nice. That leads nicely to the second point: In Ian&#039;s second code block (prefixed with &quot;Then the app needs to be a WSGI app&quot;) at first glance I see no WSGI app. I see something which under the covers is a wsgi app, being made so by &quot;other stuff&quot;.

I have no objection to there being an object which encapsulates an HTTP request or response nor extensive use of libraries, what is the problem is the WSGI stack being obscured. Establish the request object further up the stack and hork it into `environ` and let me pull it out later if I want, but don&#039;t change my application signatures. Those signatures help to ensure that I&#039;m creating what amounts to a stackable series of independent tiny little web apps (even if to the outside world they look like just one). Creating using that model helps to ensure that my codebase is deliciously extensible and scalable.</description>
		<content:encoded><![CDATA[<p>This vast collection of comments has helped me to work out part of what my issues are. I&#8217;m not attempting to make any claim to correctness on my part, more just exploring. Firstly I think I have an unfortunate tendency to have a knee jerk negative reaction to seeing objects where I wouldn&#8217;t want them to be. They make grand sense in all kinds of places, but I do not like them as the first visible manifestation of the handler of a web request: too much tendency towards action at a distance and various buried magic. I prefer something much closer to properly functional because in my mental model (what &#8220;fits my brain&#8221;) a web request is functional (not strictly so, there are side effects which show up in the persistence layer but for the most part I want them as state free and idempotent as possible). In that sense, a bare WSGI callable is really quite nice. That leads nicely to the second point: In Ian&#8217;s second code block (prefixed with &#8220;Then the app needs to be a WSGI app&#8221;) at first glance I see no WSGI app. I see something which under the covers is a wsgi app, being made so by &#8220;other stuff&#8221;.</p>

<p>I have no objection to there being an object which encapsulates an HTTP request or response nor extensive use of libraries, what is the problem is the WSGI stack being obscured. Establish the request object further up the stack and hork it into <code>environ</code> and let me pull it out later if I want, but don&#8217;t change my application signatures. Those signatures help to ensure that I&#8217;m creating what amounts to a stackable series of independent tiny little web apps (even if to the outside world they look like just one). Creating using that model helps to ensure that my codebase is deliciously extensible and scalable.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Sergey Schetinin</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156263</link>
		<dc:creator>Sergey Schetinin</dc:creator>
		<pubDate>Tue, 16 Mar 2010 05:38:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156263</guid>
		<description>It is somewhat similar to CherryPy, but there are important differences. First of all everything is WSGI, no query-as-arguments and stuff. Second, the names are picked in such a way that there&#039;s no need for @expose. It also handles edge cases very well.

I know the other solutions and their shortcomings, so you might find that Autodispatch finally gets it right.</description>
		<content:encoded><![CDATA[<p>It is somewhat similar to CherryPy, but there are important differences. First of all everything is WSGI, no query-as-arguments and stuff. Second, the names are picked in such a way that there&#8217;s no need for @expose. It also handles edge cases very well.</p>

<p>I know the other solutions and their shortcomings, so you might find that Autodispatch finally gets it right.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian Bicking</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156261</link>
		<dc:creator>Ian Bicking</dc:creator>
		<pubDate>Tue, 16 Mar 2010 05:11:40 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156261</guid>
		<description>Re: routing: I&#039;ve done if/else routing and found it very hard to maintain.  It&#039;s like when I&#039;ve generated HTML without a template: in some circumstances it might seem okay or even a good idea at first, but I always am annoyed with my choice later.  The one exception in my experience is something like a CMS where the routing itself is very application-specific and data-driven.  In my example it would still be easy to do A/B testing, as the routing just returns a match but doesn&#039;t invoke it, so it&#039;s clear where you&#039;d put different logic in.

I&#039;d be curious what people think: if you were making an application, what&#039;s the next thing you&#039;d look to a library for?  Templates are a no-brainer.  I&#039;d add an optional constraint: barring things that abstract out logic and conditionals (e.g.,, what `Application` does), what library (or kind of library) would you want to use?</description>
		<content:encoded><![CDATA[<p>Re: routing: I&#8217;ve done if/else routing and found it very hard to maintain.  It&#8217;s like when I&#8217;ve generated HTML without a template: in some circumstances it might seem okay or even a good idea at first, but I always am annoyed with my choice later.  The one exception in my experience is something like a CMS where the routing itself is very application-specific and data-driven.  In my example it would still be easy to do A/B testing, as the routing just returns a match but doesn&#8217;t invoke it, so it&#8217;s clear where you&#8217;d put different logic in.</p>

<p>I&#8217;d be curious what people think: if you were making an application, what&#8217;s the next thing you&#8217;d look to a library for?  Templates are a no-brainer.  I&#8217;d add an optional constraint: barring things that abstract out logic and conditionals (e.g.,, what <code>Application</code> does), what library (or kind of library) would you want to use?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ian Bicking</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156260</link>
		<dc:creator>Ian Bicking</dc:creator>
		<pubDate>Tue, 16 Mar 2010 05:05:05 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156260</guid>
		<description>For a web**site** I generally would not promote this style of microframework.  Bottle seems to be focused on smaller things.  I am not anti-library... Bottle eschews all libraries, which to me makes it uninteresting.  I might steal some ideas from it if I thought there were ideas worth stealing.  I&#039;m not aware of any.  I don&#039;t like the decorators for routes technique as it relies on import side-effects (the routes get registered when the decorator is executed).  The thread-local request object is bad stuff.</description>
		<content:encoded><![CDATA[<p>For a web<strong>site</strong> I generally would not promote this style of microframework.  Bottle seems to be focused on smaller things.  I am not anti-library&#8230; Bottle eschews all libraries, which to me makes it uninteresting.  I might steal some ideas from it if I thought there were ideas worth stealing.  I&#8217;m not aware of any.  I don&#8217;t like the decorators for routes technique as it relies on import side-effects (the routes get registered when the decorator is executed).  The thread-local request object is bad stuff.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Vargas</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156259</link>
		<dc:creator>Jorge Vargas</dc:creator>
		<pubDate>Tue, 16 Mar 2010 04:56:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156259</guid>
		<description>Two things

1- removing repetition for example in this case you will get tired of creating Response objects on every return so you will either create a default response you clone and return a string (this is what pylons did) or make up some marker to determine how to create it (this is what TurboGears did with the @expose decorator + returning a dict)

2- Raw WSGI is hard to maintain not to mention very unfriendly to object oriented programming, reading from the environ and checking if the key is valid gets old quick which is why webob was born.

In other words as others have pointed out the framework grows out of the necessity of eliminating repetition which pulls in constraints on design and style. IMO that is the trade off and I&#039;ll salute everyone that will be able to abstract repetition without adding constraints.</description>
		<content:encoded><![CDATA[<p>Two things</p>

<p>1- removing repetition for example in this case you will get tired of creating Response objects on every return so you will either create a default response you clone and return a string (this is what pylons did) or make up some marker to determine how to create it (this is what TurboGears did with the @expose decorator + returning a dict)</p>

<p>2- Raw WSGI is hard to maintain not to mention very unfriendly to object oriented programming, reading from the environ and checking if the key is valid gets old quick which is why webob was born.</p>

<p>In other words as others have pointed out the framework grows out of the necessity of eliminating repetition which pulls in constraints on design and style. IMO that is the trade off and I&#8217;ll salute everyone that will be able to abstract repetition without adding constraints.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Vargas</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156256</link>
		<dc:creator>Jorge Vargas</dc:creator>
		<pubDate>Tue, 16 Mar 2010 04:49:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156256</guid>
		<description>This seems like the start of CherryPy dispatching, which was later know as Object Dispatch and popularized by TurboGears. I both love and hate it. It&#039;s awesome to give structure to your code and app eliminating that pesky routes configuration, however it&#039;s bad when you need to get outside of the norm and you have to add several workarounds for the edge cases, take a look at __dispatch__ and other __*__ methods in TurboGears2.1 codebase.</description>
		<content:encoded><![CDATA[<p>This seems like the start of CherryPy dispatching, which was later know as Object Dispatch and popularized by TurboGears. I both love and hate it. It&#8217;s awesome to give structure to your code and app eliminating that pesky routes configuration, however it&#8217;s bad when you need to get outside of the norm and you have to add several workarounds for the edge cases, take a look at <strong>dispatch</strong> and other <strong>*</strong> methods in TurboGears2.1 codebase.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Vargas</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156255</link>
		<dc:creator>Jorge Vargas</dc:creator>
		<pubDate>Tue, 16 Mar 2010 04:45:57 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156255</guid>
		<description>Bottle fits into the &quot;why don&#039;t you use webob&quot; problem. IMO it&#039;s a great tool but why implement all the parsing yet one more time.</description>
		<content:encoded><![CDATA[<p>Bottle fits into the &#8220;why don&#8217;t you use webob&#8221; problem. IMO it&#8217;s a great tool but why implement all the parsing yet one more time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jorge Vargas</title>
		<link>http://blog.ianbicking.org/2010/03/12/a-webob-app-example/comment-page-1/#comment-156254</link>
		<dc:creator>Jorge Vargas</dc:creator>
		<pubDate>Tue, 16 Mar 2010 04:45:00 +0000</pubDate>
		<guid isPermaLink="false">http://blog.ianbicking.org/?p=192#comment-156254</guid>
		<description>Sorry to jump late into the party but I have to say I both agree and disagree with this approach. First of all the moment I discovered webob.wsgify I was like ohhh that is what I have been wanting for quite some time and I was stuck at the problem regarding routing (btw why is the if/else approach naive? is it because of routes optimization or I&#039;m missing something?) in fact I find python based routing to be a good thing! because then you are not forced to route on URL, and you can do interesting things like A/B testing or just use completely different code paths depending on the type of user. So I guess in this particular case this fits my brain. I also agree that it could become bad fast for &quot;big applications&quot; but then the problem could be framed in &quot;do we really need big applications&quot;? 

That said this leads us down the route of having to reinvent everything as it is not possible to reuse anything for this &quot;framework&quot; as there is nothing written in it except for what you wrote and IMO that is very bad, mainly because there is always someone out there that could and in fact already wrote a better solution to this particular problem.

That brings me to another plus point which is code reuse, in this no-framework environment reusing code is actually the best part of it as it is all wsgi and since you are using the least amount of code it means you will be compatible with others and (at least in theory) you should be able to plug in code written in other frameworks into your own system.

Last but not least thank you for putting words to what I have been playing around with. I have been doing something like this for two small apps playing around with this idea, and so far I like what I have. I have been slowly getting converted into the philosophy of libraries &gt; frameworks and the ability to plug-n-play with component to create that dream of a &quot;Best of&quot; framework.

As for the argument regarding &quot;developers that don&#039;t know better&quot; I think we have to be pragmatic here, you should (at different points in time) both be the super wise guy that dives into the HTTP headers while at others you just want to have a method be called and return a string. 

Anyway sorry for the long comment and keep up the good work recently your post have been enlightening filling peaces of the puzzle</description>
		<content:encoded><![CDATA[<p>Sorry to jump late into the party but I have to say I both agree and disagree with this approach. First of all the moment I discovered webob.wsgify I was like ohhh that is what I have been wanting for quite some time and I was stuck at the problem regarding routing (btw why is the if/else approach naive? is it because of routes optimization or I&#8217;m missing something?) in fact I find python based routing to be a good thing! because then you are not forced to route on URL, and you can do interesting things like A/B testing or just use completely different code paths depending on the type of user. So I guess in this particular case this fits my brain. I also agree that it could become bad fast for &#8220;big applications&#8221; but then the problem could be framed in &#8220;do we really need big applications&#8221;? </p>

<p>That said this leads us down the route of having to reinvent everything as it is not possible to reuse anything for this &#8220;framework&#8221; as there is nothing written in it except for what you wrote and IMO that is very bad, mainly because there is always someone out there that could and in fact already wrote a better solution to this particular problem.</p>

<p>That brings me to another plus point which is code reuse, in this no-framework environment reusing code is actually the best part of it as it is all wsgi and since you are using the least amount of code it means you will be compatible with others and (at least in theory) you should be able to plug in code written in other frameworks into your own system.</p>

<p>Last but not least thank you for putting words to what I have been playing around with. I have been doing something like this for two small apps playing around with this idea, and so far I like what I have. I have been slowly getting converted into the philosophy of libraries &gt; frameworks and the ability to plug-n-play with component to create that dream of a &#8220;Best of&#8221; framework.</p>

<p>As for the argument regarding &#8220;developers that don&#8217;t know better&#8221; I think we have to be pragmatic here, you should (at different points in time) both be the super wise guy that dives into the HTTP headers while at others you just want to have a method be called and return a string. </p>

<p>Anyway sorry for the long comment and keep up the good work recently your post have been enlightening filling peaces of the puzzle</p>
]]></content:encoded>
	</item>
</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.113 seconds -->

