[dev] plumb 1.0

From: Mate Nagy <mnagy_AT_port70.net>
Date: Wed, 14 Jul 2010 18:00:34 +0200

Hello all,

here I am advertising my own personal project. (Technically it's a
complete rewrite, the old version was announced here once before.)

Home page: http://repo.hu/projects/plumb/

Plumb is a program that runs multiple processes and lets you define
arbitrary pipes between them (it uses libevent to manage the data
transfer).

The major new feature in the rewrite is that it has a fairly comfy
"control language" that it can also read from pipes in runtime; this
means that a program running under Plumb can start new processes, shut
down old ones, create or kill pipes.

The simplest, most common application would be to start two processes
and connect them in a "69" configuration - STDIN to STDOUT of the other.
This is how you can use Animator (http://repo.hu/projects/animator/)
to write simple interactive apps.

A slightly more complex application: I wrote an interactive, graphical
Gopher client in AWK. It uses Animator for the display, and spawns nc
for downloads as needed. Multiple downloads can be ongoing at the same
time. It manages all this from a simple AWK script that does nothing
else but read from STDIN and write to STDOUT.

There's another tool that is part of the "Plumb package", called
plumbnet. It's a TCP server that listens on a port and accepts
multiple connections at once (again, using libevent).
It writes lines received from connections to STDOUT, and reads
lines to send on its STDIN. Connections are distinguished by
integer connection ID prefixes in either direction.

You'd tipically use plumbnet by wiring it together with your program
using Plumb. It may be a good alternative to inetd, when you
want to accept multiple TCP connections but there is common state
(so you'd have to do some sort of IPC, or write a complete network
daemon from scratch).

Plumb basically lets you use STDIN/STDOUT in new and flexible ways.
Most of this was possible to do before by hand (e.g. by using mkfifo),
but with Plumb, it should be much more comfortable. I don't know,
it might even serve to connect a controlling script with a window
manager, so the wm logic is moved outside the core wm :)

The core use case is probably the "hack up something fast" "i really
like AWK" "i'm at a programming compo" scenario.

Suggestions/complaints/bug reports/flame is very welcome as usual
(except regarding the license or VCS ;)

Thanks for reading,
 Mate
Received on Wed Jul 14 2010 - 18:00:34 CEST

This archive was generated by hypermail 2.2.0 : Wed Jul 14 2010 - 18:12:02 CEST