<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'><id>tag:blogger.com,1999:blog-8729083.post7190388803250341952..comments</id><updated>2009-10-08T16:48:03.968-07:00</updated><title type='text'>Comments on Deciphering Glyph: Making Twisted Specific</title><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://glyph.twistedmatrix.com/feeds/7190388803250341952/comments/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html'/><author><name>glyph</name><uri>http://www.blogger.com/profile/07021175796928101086</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>9</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8729083.post-8968458352053946269</id><published>2009-10-08T16:48:04.254-07:00</published><updated>2009-10-08T16:48:04.254-07:00</updated><title type='text'>&gt;&gt; I was put off as I couldn't see where to start....</title><content type='html'>&amp;gt;&amp;gt; I was put off as I couldn&amp;#39;t see where to start.&lt;br /&gt;&lt;br /&gt;Yup.  I inherited an app and am constantly wondering why the heck anything was done anywhich way and, no, a finger tutorial doesn&amp;#39;t do me any good.  I haven&amp;#39;t even thought about finger in more years than I care to count.&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt; The opposite of this has to be the django project, within a short time in the tutorials you have something useful to work with.&lt;br /&gt;&lt;br /&gt;Yes, except when you try to go beyond that.  I&amp;#39;ve heard lots of &amp;quot;Ok, I did the tutorial and got the awesome polling, or blogger or whatever, now what?&amp;quot;&lt;br /&gt;&lt;br /&gt;Twisted&amp;#39;s problem is much bigger, though, because it&amp;#39;s so wide that the documentation for hooking together the disparate pieces is sorely lacking.&lt;br /&gt;&lt;br /&gt;I&amp;#39;ve also found a lot of the documentation and examples I&amp;#39;ve tried were of the &amp;quot;doesn&amp;#39;t work with current versions&amp;quot; variety.&lt;br /&gt;&lt;br /&gt;I&amp;#39;d love to help but all I could do is serve as a guinea pig for tutorials about the stuff I actually care about (mostly web client, ajax and, the comet client and server that I wish I could figure out how to use from Twisted but can&amp;#39;t get off square one with).&lt;br /&gt;&lt;br /&gt;For me it&amp;#39;s not that I don&amp;#39;t understand the programming model  as it seems it is for many new users, it&amp;#39;s the &amp;quot;how do I hook this to that and why do it that way&amp;quot; that I stumble over, if there&amp;#39;s anything there doc-wise to even stumble on at all.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/8968458352053946269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/8968458352053946269'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1255045684254#c8968458352053946269' title=''/><author><name>ssteinerX</name><uri>http://www.blogger.com/profile/09454801205606562347</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-6744796365149621653</id><published>2009-09-28T19:14:48.722-07:00</published><updated>2009-09-28T19:14:48.722-07:00</updated><title type='text'>@VanL  This is exactly what is needed, as a potent...</title><content type='html'>@VanL  This is exactly what is needed, as a potential twisted user, the shear amount of documentation is just boggling, when I last looked into it I was put off as I couldn&amp;#39;t see where to start.&lt;br /&gt;&lt;br /&gt;The opposite of this has to be the django project, within a short time in the tutorials you have something useful to work with.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/6744796365149621653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/6744796365149621653'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1254190488722#c6744796365149621653' title=''/><author><name>Stu</name><uri>http://www.blogger.com/profile/08755227063937859112</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-1422861128102111467</id><published>2009-09-26T19:54:04.709-07:00</published><updated>2009-09-26T19:54:04.709-07:00</updated><title type='text'>The problem with Twisted is not technical, its soc...</title><content type='html'>The problem with Twisted is not technical, its social. People don&amp;#39;t know where to start.&lt;br /&gt;&lt;br /&gt;If I may digress for a minute, I was talking recently with a friend about an interesting series of books that we both read. I was explaining how much I loved that the plot got larger as the books progressed.&lt;br /&gt;&lt;br /&gt;My friend replied, &amp;quot;Yes, but what I liked is that the plot started out small. It started out with a few people you cared about, and then grew once you already knew the characters.&amp;quot;&lt;br /&gt;&lt;br /&gt;The problem with Twisted is that the plot doesn&amp;#39;t start out small, with characters that you care about. Yes, I know about the finger server tutorial. The problem is that 1) finger servers aren&amp;#39;t what people care about, and 2) its not clear how to progress from the finger server to the problem that I am trying to solve, today.&lt;br /&gt;&lt;br /&gt;This post, for example, tells me that Twisted has lots of possible applications... but it doesn&amp;#39;t tell me where to start. There is (in some ways) too much emphasis on the higher levels in the stack. If twisted is, at bottom, an event loop, then give me a way that I can start with just the event loop.&lt;br /&gt;&lt;br /&gt;What is the most basic thing you can do with an event loop? Have some &amp;quot;container&amp;quot; of code, and have it get called when something happens. But I really don&amp;#39;t know how to import a reactor, implement a container, and go.&lt;br /&gt;&lt;br /&gt;If I were writing a tutorial on Twisted, I would do it as follows:&lt;br /&gt;&lt;br /&gt;1. The big idea: Tell me when I need to do something.&lt;br /&gt;&lt;br /&gt;In most applications, you spend a lot of time waiting. Or your code does, at least. You have a piece of code that does something important when a button is pushed, when a network request comes, or when there is new data to process.&lt;br /&gt;&lt;br /&gt;Twisted is plumbing. It allows you to write that one thing that is important to your application, and then it makes sure that your code is called at the right time.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;class http_server()....&lt;br /&gt;[Blocking, simple server. Show that there is a bunch of looping/waiting going on - and the code for that dominates returning the &amp;quot;Hello World&amp;quot; page.]&lt;br /&gt;&lt;br /&gt;Wouldn&amp;#39;t it be nice to have this?&lt;br /&gt;&lt;br /&gt;class http_server()...&lt;br /&gt;[Simple as possible. have it receive a request, return the hello world page.]&lt;br /&gt;&lt;br /&gt;The difference between #1 and #2 is that in #2, we decided to let twisted take care of all the plumbing.&lt;br /&gt;&lt;br /&gt;2. Blocks of code.&lt;br /&gt;&lt;br /&gt;[The point of this section is to show the simplest possible code container that does something. It is a glorified function: it gets inputs, it does stuff, it returns outputs. You can steal - and simplify - the inbox/outbox concept of Kamaelia. Something comes in, you handle it, you send it on. Use something like corotwine to do it blocking, first. Then show that you can trivially adjust it to do things in nonblocking way... and that is the point! No more waiting. Your code is called when it is needed.]&lt;br /&gt;&lt;br /&gt;3. Lets build it up, add some options...&lt;br /&gt;&lt;br /&gt;Now, start adding options, factoring, etc.&lt;br /&gt;&lt;br /&gt;If I had this tutorial, I would know a lot easier where to start with Twisted.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/1422861128102111467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/1422861128102111467'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1254020044709#c1422861128102111467' title=''/><author><name>VanL</name><uri>http://www.blogger.com/profile/15361575080931041976</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-5473510519988063792</id><published>2009-09-24T16:59:32.210-07:00</published><updated>2009-09-24T16:59:32.210-07:00</updated><title type='text'>&gt; That's nowhere near sufficient to make the Twist...</title><content type='html'>&amp;gt; That&amp;#39;s nowhere near sufficient to make the Twisted HTTP experience more about my application than your framework. But it&amp;#39;s a good starting point, for some specialist who truly cared about the user experience.&lt;br /&gt;&lt;br /&gt;This is probably another documentation issue.  For writing a straight up HTTP app, it&amp;#39;s very likely you&amp;#39;ll never have to import the reactor.  Lots of the web examples do it anyway, though.  Improving the documentation so that there is an excellent new-user experience is definitely one of the kinds of polish that would make Twisted Web a much more successful competitor to the other projects out there.  Now, to find someone to do that work... :)</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/5473510519988063792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/5473510519988063792'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253836772210#c5473510519988063792' title=''/><author><name>Jean-Paul</name><uri>http://www.blogger.com/profile/15144405957500773467</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-2871264571308784793</id><published>2009-09-24T15:57:21.656-07:00</published><updated>2009-09-24T15:57:21.656-07:00</updated><title type='text'>Glyph said "...In order to sprout and take root, t...</title><content type='html'>Glyph said &amp;quot;...In order to sprout and take root, those seeds each need a dedicated advocate, someone who cares deeply about the experience of a user or administrator who just wants Twisted to perform one particular function and doesn&amp;#39;t want to write their own application code to make it do that.&amp;quot;&lt;br /&gt;&lt;br /&gt;Let&amp;#39;s take HTTP as an example of &amp;quot;one particular function&amp;quot;. Learning how Twisted can do DNS or chat or SMTP doesn&amp;#39;t help me write an HTTP application; instead, it gets in the way. Any abstractions which serve the Twisted implementation over my user experience as an author of an HTTP application get in the way. Someone who cared deeply about my experience as a user would work to let me import everything I needed from a web-specific package, so I wouldn&amp;#39;t have to remember that the Site class is in twisted.web but the reactor is in twisted.internet--that&amp;#39;s a layer of abstraction which I as an HTTP application author shouldn&amp;#39;t have to deal with.&lt;br /&gt;&lt;br /&gt;Now, you *could* make a new specialized layer on top of twisted which did that, but IMO you don&amp;#39;t need to; just allow the reactor to be importable from the twisted.web namespace. Ditto for the Site class, actually, since it&amp;#39;s almost universally necessary.&lt;br /&gt;&lt;br /&gt;That&amp;#39;s nowhere near sufficient to make the Twisted HTTP experience more about my application than your framework. But it&amp;#39;s a good starting point, for some specialist who truly cared about the user experience.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/2871264571308784793'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/2871264571308784793'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253833041656#c2871264571308784793' title=''/><author><name>fumanchu</name><uri>http://www.blogger.com/profile/12100140919727858844</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-69574315680424681</id><published>2009-09-24T13:36:52.401-07:00</published><updated>2009-09-24T13:36:52.401-07:00</updated><title type='text'>It's not entirely obvious to me how minor API chan...</title><content type='html'>It&amp;#39;s not entirely obvious to me how minor API changes achieve the goal of recruiting specialists to polish different areas of the project.  I&amp;#39;m all for improving the clarity of APIs, but is this point really related to this post?</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/69574315680424681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/69574315680424681'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253824612401#c69574315680424681' title=''/><author><name>Jean-Paul</name><uri>http://www.blogger.com/profile/15144405957500773467</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-492789331502560106</id><published>2009-09-24T13:31:41.429-07:00</published><updated>2009-09-24T13:31:41.429-07:00</updated><title type='text'>Erm... you just want the name to be different, or ...</title><content type='html'>Erm... you just want the name to be different, or what? the HTTP library does not seem, at first blush, to be a reasonable place to place the global reference to the event loop.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/492789331502560106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/492789331502560106'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253824301429#c492789331502560106' title=''/><author><name>Allen Short</name><uri>http://www.blogger.com/profile/02476178041186364808</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-1317520423315761101</id><published>2009-09-24T10:34:08.647-07:00</published><updated>2009-09-24T10:34:08.647-07:00</updated><title type='text'>from twisted.web import reactor

...would be a nic...</title><content type='html'>from twisted.web import reactor&lt;br /&gt;&lt;br /&gt;...would be a nice start.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/1317520423315761101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/1317520423315761101'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253813648647#c1317520423315761101' title=''/><author><name>fumanchu</name><uri>http://www.blogger.com/profile/12100140919727858844</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry><entry><id>tag:blogger.com,1999:blog-8729083.post-3781767487568248589</id><published>2009-09-24T08:45:34.119-07:00</published><updated>2009-09-24T08:45:34.119-07:00</updated><title type='text'>Screw that.  I want to be head of the secret polic...</title><content type='html'>Screw that.  I want to be head of the secret police.  I&amp;#39;ll root out threaded application developers wherever they may lie.</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/3781767487568248589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8729083/7190388803250341952/comments/default/3781767487568248589'/><link rel='alternate' type='text/html' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html?showComment=1253807134119#c3781767487568248589' title=''/><author><name>Cory</name><uri>http://www.blogger.com/profile/16763371844879659730</uri><email>noreply@blogger.com</email></author><thr:in-reply-to xmlns:thr='http://purl.org/syndication/thread/1.0' href='http://glyph.twistedmatrix.com/2009/09/making-twisted-specific.html' ref='tag:blogger.com,1999:blog-8729083.post-7190388803250341952' source='http://www.blogger.com/feeds/8729083/posts/default/7190388803250341952' type='text/html'/></entry></feed>