This directory contains various demonstrations of what you can do with
Python.  They were all written by me except where explicitly stated
otherwise -- in general, demos contributed by others ends up in the
../Contrib directory, unless I think they're of utmost general
importance (like Matt Conway's Tk demos).

A fair number of utilities that are useful when while developing
Python code can be found in the ../Tools directory -- some of these
can also be considered good examples of how to write Python code.

Finally, in order to save disk space and net bandwidth, not all
subdirectories listed here are distributed.  They are listed just
in case I change my mind about them.


classes		Some examples of how to use classes.

embed		An example of embedding Python in another application.

ibrowse		An Emacs info file browser (uses stdwin).
		See also ../doc (the Python library documentation can
		be converted to info format).

md5test		Test program for the optional md5 module.

rpc		A set of classes for building clients and servers for
		Sun RPC.

scripts		Some useful Python scripts that I put in my bin
		directory.  No optional built-in modules needed.

sockets		Examples for the new built-in module 'socket'.

sgi		Demos that only run on Silicon Graphics machines.
		These require at least one of the optional built-in
		modules that only make sense for the SGI, such as
		'gl', 'al', and 'sv'.  Split in subdirectories
		per subject.

stdwin		Demos that use the STDWIN library.  Require the 'stdwin'
		built-in module.

threads		Demos that use the 'thread' module.  (Currently these
		only run on SGIs, but this may change in the future.)

tkinter		Demos using the Tk interface (including Matt Conway's
		excellent set of demos).

www		An old, abandoned collection of WWW utilities.


--Guido van Rossum, CWI, Amsterdam <mailto:Guido.van.Rossum@cwi.nl>
<http://www.cwi.nl/cwi/people/Guido.van.Rossum.html>
