Money for Nothing

As some of you may be aware, my birthday is coming up soon. I'd like to say publicly the same thing that I've said several years running: if I didn't get a present for you, don't get a present for me. I have plenty of stuff lying around - way too much, in fact. Ying has been busily EBaying off the things that we don't use, and we're not close to halfway done.

However, I realize that these words are an empty gesture, especially to my family, who are routinely generous and wonderful to me regardless of how callous and awful a person I am. So for those of you who are hell-bent on making something of this most recent anniversary of my birth, I will stoop to a new low with this suggestion. Send money:
.

I'll put down the self-deprecation for a moment and explain. A major source of anxiety for me these days is the state of the Twisted project's direction. I know there are several things that need to happen to push it to the next level of success, and there are plenty of people who only need a little bit of encouragement to do those things. However, I am spending most of my time and encouragement on another project right now, and it doesn't look like I'm going to get a reprieve any time soon. I've also got a personal deal with myself that I'm not going to spend any more of my own monetary resources on Twisted until something related to it has made me a millionaire ;-).

There has been plenty of discussion recently on the mailing list about problems with the project's public presence, even some specific recommendations about soliciting donations.

It would make a terrific gift for people to put some money towards this goal. It would encourage me personally to go out and write up some explanations of what needs to be done, secure in the knowledge that I'll actually be able to incent other peoples' contribution of time and my effort writing those specifications wouldn't be wasted. Ultimately, It would take a huge burden off my mind to see Twisted's progress towards my goals for it get unstuck.

By the way - since I'm asking for this as a gift, not as an official fund drive, I'm not going to post public statistics or fundraising goals or anything like that. If I had the time and energy to do a real fund drive I probably wouldn't be posting anything more than that initial paragraph. In fact, if there are a lot of donations I will probably contribute some of them towards the work required for setting up such a drive.

The Theologians That Feed

Okay, I realize I'm a bit late to the phenomenon here, but wow.

Listen to The Ghost That Feeds - and while you're at it, read about hungry ghosts.

I guess this means they have won something

Congratulations, . Getting sued by a major corporation is probably a rite of passage for every successful business owner. I just hope we're as well prepared when we get one.

Meta-Roadmap for Twisted

or, "let's figure out where we're going before we get there"

I realized during the huge thread this week on TPML that one of the major problems with Twisted's documentation is the lack of any roadmap.

I am prone to starting overly ambitious projects, so of course my first idea was to start on a new "roadmap website" where I would document the 5-year-plan.

Through some force of will I am managing not to do this and I will try to break up a few ideas that I have and post them here.




Twisted as a library



This closely matches how people are using Twisted right now.

There should be a simple template from which all 'twistified' programs are taken. It should provide support to your command for a useful subset of the same command-line options that twistd supports, and should provide a nice easy way to identify which reactor needs to be installed in order to use it.

It should be easy to identify a 'twistified' program in the same way that it is easy to identify a GNU program. There should be a large set of consistent options and a consistent configuration file format (probably some subset of Python).

Twisted as a framework



There should be very good plugin support, and good plugin detection support for every protocol. There should be a plugin management interface (echoes of COIL anyone?) available through the web UI.

There should be a program included with the Twisted sumo distribution, that uses the startup library described above, which starts up and binds a port for every protocol Twisted supports. At the least, it should do IRC, OSCAR, HTTP, FTP, SSH, LDAP*, IMAP, POP, and SMTP.

Each of these servers should have some level of application running on it - a thin enough layer that implements the semantics of some protocol that it's possible to find a interface point for plugins. Installed on each should be (for properly authenticated users) a plugin which executes Python commands. For example, manhole/conch under SSH, an AJAX-y web form that serves as an interactive prompt, a chatterbot over OSCAR and IRC that does the same.

Cred should also be extended to handle basic user creation and there should be a provided web control panel UI for manipulating a user-database of your choice.




I feel that this latter objective is neglected because the design is difficult, but it is still very important. Without some "official" way of making protocols interoperate, Twisted will be an underachiever, since it will only provide a simpler way to write applications that you could have built from scratch. When people can write components that hook together in novel and unexpected ways though - that is when an entirely new class of application can be enabled.

That doesn't mean that people should stop writing applications, either - simply that applications which embed the Twisted webserver have the option (default to on, but of course can be turned off) of allowing Twisted web plugins to be loaded into that server. Twisted chat server applications can similarly embed in-server bots.

Eventually, if the APIs for these respective application domains are really good, applications would be small wrappers that launched the plugin daemon with a pre-set configuration. The optimal situation would be if I could unconditionally declare that using plugins is a better idea than writing your own Twisted mainpoint. In order for that to be the case though, there will have to be a plugin system which loads UI modules in a variety of different toolkits and that is an even bigger project I don't want to talk about today.

*: Yes, I realize this is not a currently supported protocol. We'd have to write something.

Useful

I am spending quite a bit more time in Windows lately.  Since I generally use CapsLock as an additional Control key, I am frequently annoyed by the inability to do this easily on Windows.  I'm sure there are others with the same problem, so here's a nice, easy way to do it.