[Twisted-Python] Film At 11
glyph at twistedmatrix.com
Wed Nov 7 09:49:56 EST 2001
This conversation has been edited for length, to fit your screen, and,
in some cases, content:
<itamar> hi glyph
<glyph> hit itamar
<glyph> hi itamar, even ;)
<itamar> I'm glad to say we now have java interop
<glyph> itamar: So I read from the list
<itamar> now's about the point where I could use some help
<itamar> not that that's gonna happen
<glyph> itamar: So I thought of another cool hack that you might want to
<glyph> totally unrelated to java ;)
<glyph> itamar: Don't run away --
<glyph> "The configuration system"
<glyph> itamar: I just had a conversation about it last night.
<itamar> what exactly where you thinking of?
<glyph> itamar: Let me ramble about vision for a moment (you'll probably
see this in an email sometime soon, too)
<glyph> Twisted isn't a particularly great webserver, when you compare
functionality blow-for-blow with apache. It's not a great chatserver,
when it has to slug it out with ircd. But we all like Twisted more than
either of those -- why?
<glyph> Well, because it's an IRC server *and* a web server.
<glyph> What makes Twisted special is the degree of integration that it
allows for all its services.
<glyph> However, this integration is effectively lost to anyone who
isn't a programmer (and to some extent, to anyone who isn't already
rather familiar with the codebase) because there's no metaphor for the
integration. Everything is rather concrete, speaking in terms of file
descriptors and delayed events and what-have-you.
<itamar> glyph: ok -
<glyph> With the refactoring that we're talking about, centering around
t.i.m.A, there is going to be at least a common metaphor for what stuff
connects to what bit of the network...
<glyph> The configuration application that I envision has a unified
notion of the "things that do stuff", although I haven't come up with a
good name for them. Zope-like, you'll have a menu to create an object
of lots of different types (like a Words service, a mail service, a web
site, etc), some of which listen on ports directly, some of which are
indirectly connected to the network through PB publishers or web
<itamar> well, meanwhile it sounds like a mktap with a slightly better UI
<glyph> itamar: the use-case that I'm thinking of for it is creating a
web site and a words service, hooking up a tendril to a persistent IRC
server, creating a personal website and mounting the registration and
userlist widgets somewhere within your personal web space.
<itamar> hmmm... a configuration tool for web would be quite nice for
<glyph> itamar: Note that I mention spawning a tendril as well -- one of
the goals of this tool would be to unify mktap and im. You really ought
to just create a "persistent outgoing chat connection w/ Tkinter UI" as
an object, put it in your tap, and have it run in your personal twistd
<glyph> itamar: this would also clearly define the role of "plugins" --
they are code which adds stuff to that menu of base types of objects one
<glyph> I'm inclined to say that for starters, each object defines its
own web form that allows you to configure it
<itamar> how would you model something that connects web and a words
<itamar> this is where you start wishing for a 3d gui
<glyph> itamar: optimally, yeah, you'd have something like a 3D visio
where you could dynamically drag connections
<itamar> actually a 2d one would do
<glyph> but working with "web form" as the metaphor, there's still quite
a lot you can do :)
<itamar> where you drag lines from a object to another
<glyph> when you create a words service, it publishes several web
objects, none of which are connected to anything
<glyph> so when you go to a page that wants to pop up a list of possible
objects you could add as a web resource, those appear.
<glyph> It's like your application has a "bag" of sub-objects that you
"carry around" in the configuration interface
<itamar> I like it. of course my innate dislike of web (or GUI, for that
matter) programming is getting in the way.
<itamar> but it would be good for my software as well, since it has all
these pluggable components you need to mix and match
<itamar> and then there's monitoring components (web, nt performance
<itamar> and logging components (syslog, file, nt log)
<glyph> itamar: Yeah. The reason that this configuration thing came to
me is because someone who was asked to do a technical evaluation of
Twisted, upon completing his evaluation, had only one thing to say
<glyph> "What is it *for*?"
<itamar> what is what for?
<glyph> itamar: What is Twisted for.
<sayke> glyph: that was my response. "that's a damn impressive kitchen
sink ya got there" ;)
<glyph> itamar: and I realized that *this* is what Twisted is for. Even
though we don't have a very good metaphor for it or interface to it, no
other server framework even aspires to this sort of integrated
<glyph> There are a few "java Application servers" that make-believe,
except that they ONLY do web, and ONLY for business, and severely limit
the sort of apps you can write with them.
<itamar> yeah, or Zope, which has ftp/http/webdav/xmlrpc, but attempts
to add nttp or imap have failed
<glyph> itamar: ftp/http/webdav/xmlrpc are still all just ways of
publishing structured documents
<glyph> itamar: they're not fundamentally different ways of interacting
with the system
<glyph> itamar: nntp and imap, strangely enough, are :)
<itamar> well, actually, there's a irc bot written for zope
<itamar> on to concretes - is there any way we can do without a web
<glyph> itamar: well, a first step in this direction is just a unified
set of utility methods :)
<itamar> how about anygui? they are promising a html interface
<glyph> itamar: anygui is crack
<itamar> and a curses interface
<itamar> glyph: why do you say that?
<glyph> itamar: Have you ever done any work with webwidgets?
<glyph> itamar: take a look at the form widget
<glyph> itamar: it's staggeringly little code to write
<itamar> one sec
<itamar> where can I find an example?
<glyph> You might have to refactor it a little bit, but the basic idea
is you define what inputs your form takes, then it renders the form for
you and calls back to a method with the appropriate signature with each
form value as an arguemnt when the user POSTs
<itamar> ok, so we can have a generic configuration API, and have a web
interface to that, and a tkinter interface to it etc.?
<glyph> itamar: twisted.web.guard.AuthForm
<glyph> itamar: yes.
<glyph> itamar: I don't want to do anygui, because I'd like the tkinter
interface to be *different* from the web interface. To begin with I
think we should go with web-only and refactor once we see what
ocnfiguration patterns emerge, but if you want to go with tkinter-only
or gtk-only for the first pass... hey, I don't have the time to write
<itamar> how about registry.registerThingie(type, description,
<itamar> I'm going to eat
<itamar> glyph: mail the log to the list
______ you are in a maze of twisted little applications, all
| |_\ remarkably consistent.
| | -- glyph lefkowitz, glyph @ twisted matrix . com
More information about the Twisted-Python