[Pythonjp-checkins] [python-doc-ja] push by songo****@gmail***** - Add howto/diff on 2011-03-19 15:45 GMT

Zurück zum Archiv-Index

pytho****@googl***** pytho****@googl*****
2011年 3月 20日 (日) 04:35:41 JST


Revision: 81e674add80d
Author:   Naoki INADA  <inada****@klab*****>
Date:     Sat Mar 19 08:45:35 2011
Log:      Add howto/diff
http://code.google.com/p/python-doc-ja/source/detail?r=81e674add80d

Added:
  /howto/diff/cporting.rst.diff
  /howto/diff/cporting.rst.html
  /howto/diff/curses.rst.diff
  /howto/diff/curses.rst.html
  /howto/diff/doanddont.rst.diff
  /howto/diff/doanddont.rst.html
  /howto/diff/functional.rst.diff
  /howto/diff/functional.rst.html
  /howto/diff/index.rst.diff
  /howto/diff/index.rst.html
  /howto/diff/regex.rst.diff
  /howto/diff/regex.rst.html
  /howto/diff/sockets.rst.diff
  /howto/diff/sockets.rst.html
  /howto/diff/unicode.rst.diff
  /howto/diff/unicode.rst.html
  /howto/diff/urllib2.rst.diff
  /howto/diff/urllib2.rst.html
  /howto/diff/webservers.rst.diff
  /howto/diff/webservers.rst.html

=======================================
--- /dev/null
+++ /howto/diff/cporting.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,29 @@
+--- r262/howto/cporting.rst	2009-04-04 06:56:36.770670000 +0900
++++ r266/howto/cporting.rst	2010-05-14 23:30:11.711058000 +0900
+@@ -109,25 +109,25 @@
+
+        if (!PyArg_ParseTuple(args, "ii:add_ints", &one, &two))
+            return NULL;
+
+        return PyInt_FromLong(one + two);
+    }
+
+
+
+ Module initialization and state
+ ===============================
+
+-Python 3.0 has a revamped extension module initialization system.  (See  
PEP
++Python 3.0 has a revamped extension module initialization system.  (See
+ :pep:`3121`.)  Instead of storing module state in globals, they should be  
stored
+ in an interpreter specific structure.  Creating modules that act  
correctly in
+ both 2.x and 3.0 is tricky.  The following simple example demonstrates  
how. ::
+
+    #include "Python.h"
+
+    struct module_state {
+        PyObject *error;
+    };
+
+    #if PY_MAJOR_VERSION >= 3
+    #define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
=======================================
--- /dev/null
+++ /howto/diff/cporting.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,50 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to46__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/cporting.rst =&gt;  
r266/howto/cporting.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to46__0"></td><td class="diff_header"  
id="from46_113">113</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;PyInt_FromLong(one&nbsp;+&nbsp;two);</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_114">114</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;}</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from46_115">115</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from46_116">116</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from46_117">117</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from46_118">118</td><td  
nowrap="nowrap">Module&nbsp;initialization&nbsp;and&nbsp;state</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_119">119</td><td  
nowrap="nowrap">===============================</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_120">120</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to46__top">t</a></td><td  
class="diff_header" id="from46_121">121-</td><td  
nowrap="nowrap">Python&nbsp;3.0&nbsp;has&nbsp;a&nbsp;revamped&nbsp;extension&nbsp;module&nbsp;initialization&nbsp;system.&nbsp;&nbsp;(See<span  
class="diff_sub">&nbsp;PEP</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to46__top">t</a></td><td  
class="diff_header" id="to46_121">121+</td><td  
nowrap="nowrap">Python&nbsp;3.0&nbsp;has&nbsp;a&nbsp;revamped&nbsp;extension&nbsp;module&nbsp;initialization&nbsp;system.&nbsp;&nbsp;(See</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from46_122">122</td><td  
nowrap="nowrap">:pep:`3121`.)&nbsp;&nbsp;Instead&nbsp;of&nbsp;storing&nbsp;module&nbsp;state&nbsp;in&nbsp;globals,&nbsp;they&nbsp;should&nbsp;be&nbsp;stored</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_123">123</td><td  
nowrap="nowrap">in&nbsp;an&nbsp;interpreter&nbsp;specific&nbsp;structure.&nbsp;&nbsp;Creating&nbsp;modules&nbsp;that&nbsp;act&nbsp;correctly&nbsp;in</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_124">124</td><td  
nowrap="nowrap">both&nbsp;2.x&nbsp;and&nbsp;3.0&nbsp;is&nbsp;tricky.&nbsp;&nbsp;The&nbsp;following&nbsp;simple&nbsp;example&nbsp;demonstrates&nbsp;how.&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_125">125</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from46_126">126</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;#include&nbsp;"Python.h"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_127">127</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from46_128">128</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;struct&nbsp;module_state&nbsp;{</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from46_129">129</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PyObject&nbsp;*error;</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/curses.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,24 @@
+--- r262/howto/curses.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/curses.rst	2009-10-27 22:44:06.332664000 +0900
+@@ -417,20 +417,20 @@
+ capturing mouse events from an xterm instance.  But the Python library  
page for
+ the curses modules is now pretty complete.  You should browse it next.
+
+ If you're in doubt about the detailed behavior of any of the ncurses entry
+ points, consult the manual pages for your curses implementation, whether  
it's
+ ncurses or a proprietary Unix vendor's.  The manual pages will document  
any
+ quirks, and provide complete lists of all the functions, attributes, and
+ :const:`ACS_\*` characters available to you.
+
+ Because the curses API is so large, some functions aren't supported in the
+ Python interface, not because they're difficult to implement, but because  
no one
+ has needed them yet.  Feel free to add them and then submit a patch.   
Also, we
+-don't yet have support for the menus or panels libraries associated with
++don't yet have support for the menu library associated with
+ ncurses; feel free to add that.
+
+ If you write an interesting little program, feel free to contribute it as
+ another demo.  We can always use more of them!
+
+ The ncurses FAQ: http://invisible-island.net/ncurses/ncurses.faq.html
+
=======================================
--- /dev/null
+++ /howto/diff/curses.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,50 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to47__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/curses.rst =&gt;  
r266/howto/curses.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to47__0"></td><td class="diff_header"  
id="from47_421">421</td><td  
nowrap="nowrap">points,&nbsp;consult&nbsp;the&nbsp;manual&nbsp;pages&nbsp;for&nbsp;your&nbsp;curses&nbsp;implementation,&nbsp;whether&nbsp;it's</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_422">422</td><td  
nowrap="nowrap">ncurses&nbsp;or&nbsp;a&nbsp;proprietary&nbsp;Unix&nbsp;vendor's.&nbsp;&nbsp;The&nbsp;manual&nbsp;pages&nbsp;will&nbsp;document&nbsp;any</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_423">423</td><td  
nowrap="nowrap">quirks,&nbsp;and&nbsp;provide&nbsp;complete&nbsp;lists&nbsp;of&nbsp;all&nbsp;the&nbsp;functions,&nbsp;attributes,&nbsp;and</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_424">424</td><td  
nowrap="nowrap">:const:`ACS_\*`&nbsp;characters&nbsp;available&nbsp;to&nbsp;you.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_425">425</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from47_426">426</td><td  
nowrap="nowrap">Because&nbsp;the&nbsp;curses&nbsp;API&nbsp;is&nbsp;so&nbsp;large,&nbsp;some&nbsp;functions&nbsp;aren't&nbsp;supported&nbsp;in&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_427">427</td><td  
nowrap="nowrap">Python&nbsp;interface,&nbsp;not&nbsp;because&nbsp;they're&nbsp;difficult&nbsp;to&nbsp;implement,&nbsp;but&nbsp;because&nbsp;no&nbsp;one</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_428">428</td><td  
nowrap="nowrap">has&nbsp;needed&nbsp;them&nbsp;yet.&nbsp;&nbsp;Feel&nbsp;free&nbsp;to&nbsp;add&nbsp;them&nbsp;and&nbsp;then&nbsp;submit&nbsp;a&nbsp;patch.&nbsp;&nbsp;Also,&nbsp;we</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to47__top">t</a></td><td  
class="diff_header" id="from47_429">429-</td><td  
nowrap="nowrap">don't&nbsp;yet&nbsp;have&nbsp;support&nbsp;for&nbsp;the&nbsp;menu<span  
class="diff_sub">s&nbsp;or&nbsp;panels</span>&nbsp;librar<span  
class="diff_chg">ies</span>&nbsp;associated&nbsp;with</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to47__top">t</a></td><td  
class="diff_header" id="to47_429">429+</td><td  
nowrap="nowrap">don't&nbsp;yet&nbsp;have&nbsp;support&nbsp;for&nbsp;the&nbsp;menu&nbsp;librar<span  
class="diff_chg">y</span>&nbsp;associated&nbsp;with</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from47_430">430</td><td  
nowrap="nowrap">ncurses;&nbsp;feel&nbsp;free&nbsp;to&nbsp;add&nbsp;that.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_431">431</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from47_432">432</td><td  
nowrap="nowrap">If&nbsp;you&nbsp;write&nbsp;an&nbsp;interesting&nbsp;little&nbsp;program,&nbsp;feel&nbsp;free&nbsp;to&nbsp;contribute&nbsp;it&nbsp;as</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_433">433</td><td  
nowrap="nowrap">another&nbsp;demo.&nbsp;&nbsp;We&nbsp;can&nbsp;always&nbsp;use&nbsp;more&nbsp;of&nbsp;them!</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_434">434</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from47_435">435</td><td  
nowrap="nowrap">The&nbsp;ncurses&nbsp;FAQ:&nbsp;http://invisible-island.net/ncurses/ncurses.faq.html</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from47_436">436</td><td nowrap="nowrap"></td></tr>        </tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/doanddont.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,168 @@
+--- r262/howto/doanddont.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/doanddont.rst	2010-04-25 19:18:59.875456000 +0900
+@@ -21,50 +21,50 @@
+ dangerous.
+
+
+ from module import \*
+ ---------------------
+
+
+ Inside Function Definitions
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ ``from module import *`` is *invalid* inside function definitions. While  
many
+ versions of Python do not check for the invalidity, it does not make it  
more
+-valid, no more then having a smart lawyer makes a man innocent. Do not  
use it
++valid, no more than having a smart lawyer makes a man innocent. Do not  
use it
+ like that ever. Even in versions where it was accepted, it made the  
function
+ execution slower, because the compiler could not be certain which names  
are
+ local and which are global. In Python 2.1 this construct causes warnings,  
and
+ sometimes even errors.
+
+
+ At Module Level
+ ^^^^^^^^^^^^^^^
+
+ While it is valid to use ``from module import *`` at module level it is  
usually
+ a bad idea. For one, this loses an important property Python otherwise  
has ---
+ you can know where each toplevel name is defined by a simple "search"  
function
+ in your favourite editor. You also open yourself to trouble in the  
future, if
+ some module grows additional functions or classes.
+
+ One of the most awful question asked on the newsgroup is why this code::
+
+    f = open("www")
+    f.read()
+
+ does not work. Of course, it works just fine (assuming you have a file  
called
+-"www".) But it does not work if somewhere in the module, the statement  
``from os
+-import *`` is present. The :mod:`os` module has a function  
called :func:`open`
+-which returns an integer. While it is very useful, shadowing builtins is  
one of
+-its least useful properties.
++"www".) But it does not work if somewhere in the module, the statement  
``from
++os import *`` is present. The :mod:`os` module has a function called
++:func:`open` which returns an integer. While it is very useful, shadowing  
a
++builtin is one of its least useful properties.
+
+ Remember, you can never know for sure what names a module exports, so  
either
+ take what you need --- ``from module import name1, name2``, or keep them  
in the
+ module and access on a per-need basis ---  ``import module;print  
module.name``.
+
+
+ When It Is Just Fine
+ ^^^^^^^^^^^^^^^^^^^^
+
+ There are situations in which ``from module import *`` is just fine:
+
+ * The interactive prompt. For example, ``from math import *`` makes  
Python an
+@@ -102,25 +102,25 @@
+    >>> def func(s, **kw):
+    >>>     for var, val in kw.items():
+    >>>         setattr(s, var, val)
+    >>> d={}
+    >>> execfile("handle.py", d, d)
+    >>> handle = d['handle']
+    >>> handle()
+
+
+ from module import name1, name2
+ -------------------------------
+
+-This is a "don't" which is much weaker then the previous "don't"s but is  
still
++This is a "don't" which is much weaker than the previous "don't"s but is  
still
+ something you should not do if you don't have good reasons to do that. The
+ reason it is usually bad idea is because you suddenly have an object  
which lives
+ in two separate namespaces. When the binding in one namespace changes, the
+ binding in the other will not, so there will be a discrepancy between  
them. This
+ happens when, for example, one module is reloaded, or changes the  
definition of
+ a function at runtime.
+
+ Bad example::
+
+    # foo.py
+    a = 1
+
+@@ -223,77 +223,74 @@
+    def get_status(file):
+        return open(file).readline()
+
+ The caller can deal with the exception if it wants (for example, if it   
tries
+ several files in a loop), or just let the exception filter upwards to  
*its*
+ caller.
+
+ The last version is not very good either --- due to implementation  
details, the
+ file would not be closed when an exception is raised until the handler  
finishes,
+ and perhaps not at all in non-C implementations (e.g., Jython). ::
+
+    def get_status(file):
+-       fp = open(file)
+-       try:
++       with open(file) as fp:
+            return fp.readline()
+-       finally:
+-           fp.close()
+
+
+ Using the Batteries
+ ===================
+
+ Every so often, people seem to be writing stuff in the Python library  
again,
+ usually poorly. While the occasional module has a poor interface, it is  
usually
+ much better to use the rich standard library and data types that come with
+-Python then inventing your own.
++Python than inventing your own.
+
+ A useful module very few people know about is :mod:`os.path`. It  always  
has the
+ correct path arithmetic for your operating system, and will usually be  
much
+-better then whatever you come up with yourself.
++better than whatever you come up with yourself.
+
+ Compare::
+
+    # ugh!
+    return dir+"/"+file
+    # better
+    return os.path.join(dir, file)
+
+ More useful functions  
in :mod:`os.path`: :func:`basename`,  :func:`dirname` and
+ :func:`splitext`.
+
+-There are also many useful builtin functions people seem not to be aware  
of for
++There are also many useful built-in functions people seem not to be aware  
of for
+ some reason: :func:`min` and :func:`max` can find the minimum/maximum of  
any
+ sequence with comparable semantics, for example, yet many people write  
their own
+ :func:`max`/:func:`min`. Another highly useful function  
is :func:`reduce`. A
+ classical use of :func:`reduce` is something like ::
+
+    import sys, operator
+    nums = map(float, sys.argv[1:])
+    print reduce(operator.add, nums)/len(nums)
+
+ This cute little script prints the average of all numbers given on the  
command
+ line. The :func:`reduce` adds up all the numbers, and the rest is just  
some
+ pre- and postprocessing.
+
+ On the same note, note that :func:`float`, :func:`int` and :func:`long`  
all
+ accept arguments of type string, and so are suited to parsing ---  
assuming you
+ are ready to deal with the :exc:`ValueError` they raise.
+
+
+ Using Backslash to Continue Statements
+ ======================================
+
+ Since Python treats a newline as a statement terminator, and since  
statements
+-are often more then is comfortable to put in one line, many people do::
++are often more than is comfortable to put in one line, many people do::
+
+    if foo.bar()['first'][0] == baz.quux(1, 2)[5:9] and \
+       calculate_number(10, 20) != forbulate(500, 360):
+          pass
+
+ You should realize that this is dangerous: a stray space after the ``\``  
would
+ make this line wrong, and stray spaces are notoriously hard to see in  
editors.
+ In this case, at least it would be a syntax error, but if the code was::
+
+    value = foo.bar()['first'][0]*baz.quux(1, 2)[5:9] \
+            + calculate_number(10, 20)*forbulate(500, 360)
+
=======================================
--- /dev/null
+++ /howto/diff/doanddont.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,81 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to48__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/doanddont.rst =&gt;  
r266/howto/doanddont.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to48__0"></td><td class="diff_header"  
id="from48_25">25</td><td  
nowrap="nowrap">---------------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_26">26</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_27">27</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_28">28</td><td  
nowrap="nowrap">Inside&nbsp;Function&nbsp;Definitions</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_29">29</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^^^^^^^^^^</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_30">30</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_31">31</td><td  
nowrap="nowrap">``from&nbsp;module&nbsp;import&nbsp;*``&nbsp;is&nbsp;*invalid*&nbsp;inside&nbsp;function&nbsp;definitions.&nbsp;While&nbsp;many</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_32">32</td><td  
nowrap="nowrap">versions&nbsp;of&nbsp;Python&nbsp;do&nbsp;not&nbsp;check&nbsp;for&nbsp;the&nbsp;invalidity,&nbsp;it&nbsp;does&nbsp;not&nbsp;make&nbsp;it&nbsp;more</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__1">n</a></td><td  
class="diff_header" id="from48_33">33-</td><td  
nowrap="nowrap">valid,&nbsp;no&nbsp;more&nbsp;th<span  
class="diff_chg">e</span>n&nbsp;having&nbsp;a&nbsp;smart&nbsp;lawyer&nbsp;makes&nbsp;a&nbsp;man&nbsp;innocent.&nbsp;Do&nbsp;not&nbsp;use&nbsp;it</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__1">n</a></td><td  
class="diff_header" id="to48_33">33+</td><td  
nowrap="nowrap">valid,&nbsp;no&nbsp;more&nbsp;th<span  
class="diff_chg">a</span>n&nbsp;having&nbsp;a&nbsp;smart&nbsp;lawyer&nbsp;makes&nbsp;a&nbsp;man&nbsp;innocent.&nbsp;Do&nbsp;not&nbsp;use&nbsp;it</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_34">34</td><td  
nowrap="nowrap">like&nbsp;that&nbsp;ever.&nbsp;Even&nbsp;in&nbsp;versions&nbsp;where&nbsp;it&nbsp;was&nbsp;accepted,&nbsp;it&nbsp;made&nbsp;the&nbsp;function</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_35">35</td><td  
nowrap="nowrap">execution&nbsp;slower,&nbsp;because&nbsp;the&nbsp;compiler&nbsp;could&nbsp;not&nbsp;be&nbsp;certain&nbsp;which&nbsp;names&nbsp;are</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_36">36</td><td  
nowrap="nowrap">local&nbsp;and&nbsp;which&nbsp;are&nbsp;global.&nbsp;In&nbsp;Python&nbsp;2.1&nbsp;this&nbsp;construct&nbsp;causes&nbsp;warnings,&nbsp;and</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_37">37</td><td  
nowrap="nowrap">sometimes&nbsp;even&nbsp;errors.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_38">38</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_39">39</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_40">40</td><td  
nowrap="nowrap">At&nbsp;Module&nbsp;Level</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_41">41</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to48__1"></td><td  
class="diff_header" id="from48_47">47</td><td  
nowrap="nowrap">some&nbsp;module&nbsp;grows&nbsp;additional&nbsp;functions&nbsp;or&nbsp;classes.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_48">48</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_49">49</td><td  
nowrap="nowrap">One&nbsp;of&nbsp;the&nbsp;most&nbsp;awful&nbsp;question&nbsp;asked&nbsp;on&nbsp;the&nbsp;newsgroup&nbsp;is&nbsp;why&nbsp;this&nbsp;code::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_50">50</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_51">51</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;f&nbsp;=&nbsp;open("www")</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_52">52</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;f.read()</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_53">53</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_54">54</td><td  
nowrap="nowrap">does&nbsp;not&nbsp;work.&nbsp;Of&nbsp;course,&nbsp;it&nbsp;works&nbsp;just&nbsp;fine&nbsp;(assuming&nbsp;you&nbsp;have&nbsp;a&nbsp;file&nbsp;called</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__2">n</a></td><td  
class="diff_header" id="from48_55">55-</td><td  
nowrap="nowrap">"www".)&nbsp;But&nbsp;it&nbsp;does&nbsp;not&nbsp;work&nbsp;if&nbsp;somewhere&nbsp;in&nbsp;the&nbsp;module,&nbsp;the&nbsp;statement&nbsp;``from<span  
class="diff_sub">&nbsp;os</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__2">n</a></td><td  
class="diff_header" id="to48_55">55+</td><td  
nowrap="nowrap">"www".)&nbsp;But&nbsp;it&nbsp;does&nbsp;not&nbsp;work&nbsp;if&nbsp;somewhere&nbsp;in&nbsp;the&nbsp;module,&nbsp;the&nbsp;statement&nbsp;``from</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_56">56-</td><td  
nowrap="nowrap">import&nbsp;*``&nbsp;is&nbsp;present.&nbsp;The&nbsp;:mod:`os`&nbsp;module&nbsp;has&nbsp;a&nbsp;function&nbsp;called<span  
class="diff_sub">&nbsp;:func:`open`</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to48_56">56+</td><td nowrap="nowrap"><span  
class="diff_add">os&nbsp;</span>import&nbsp;*``&nbsp;is&nbsp;present.&nbsp;The&nbsp;:mod:`os`&nbsp;module&nbsp;has&nbsp;a&nbsp;function&nbsp;called</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_57">57-</td><td  
nowrap="nowrap">which&nbsp;returns&nbsp;an&nbsp;integer.&nbsp;While&nbsp;it&nbsp;is&nbsp;very&nbsp;useful,&nbsp;shadowing&nbsp;<span  
class="diff_chg">builtins&nbsp;is&nbsp;one&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to48_57">57+</td><td nowrap="nowrap"><span  
class="diff_add">:func:`open`&nbsp;</span>which&nbsp;returns&nbsp;an&nbsp;integer.&nbsp;While&nbsp;it&nbsp;is&nbsp;very&nbsp;useful,&nbsp;shadowing&nbsp;<span  
class="diff_chg">a</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_58">58-</td><td  
nowrap="nowrap">its&nbsp;least&nbsp;useful&nbsp;properties.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to48_58">58+</td><td nowrap="nowrap"><span  
class="diff_add">builtin&nbsp;is&nbsp;one&nbsp;of&nbsp;</span>its&nbsp;least&nbsp;useful&nbsp;properties.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_59">59</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_60">60</td><td  
nowrap="nowrap">Remember,&nbsp;you&nbsp;can&nbsp;never&nbsp;know&nbsp;for&nbsp;sure&nbsp;what&nbsp;names&nbsp;a&nbsp;module&nbsp;exports,&nbsp;so&nbsp;either</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_61">61</td><td  
nowrap="nowrap">take&nbsp;what&nbsp;you&nbsp;need&nbsp;---&nbsp;``from&nbsp;module&nbsp;import&nbsp;name1,&nbsp;name2``,&nbsp;or&nbsp;keep&nbsp;them&nbsp;in&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_62">62</td><td  
nowrap="nowrap">module&nbsp;and&nbsp;access&nbsp;on&nbsp;a&nbsp;per-need&nbsp;basis&nbsp;---&nbsp;&nbsp;``import&nbsp;module;print&nbsp;module.name``.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_63">63</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_64">64</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_65">65</td><td  
nowrap="nowrap">When&nbsp;It&nbsp;Is&nbsp;Just&nbsp;Fine</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_66">66</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^^^</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to48__2"></td><td  
class="diff_header" id="from48_106">106</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;execfile("handle.py",&nbsp;d,&nbsp;d)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_107">107</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;handle&nbsp;=&nbsp;d['handle']</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_108">108</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;handle()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_109">109</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_110">110</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_111">111</td><td  
nowrap="nowrap">from&nbsp;module&nbsp;import&nbsp;name1,&nbsp;name2</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_112">112</td><td  
nowrap="nowrap">-------------------------------</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_113">113</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__3">n</a></td><td  
class="diff_header" id="from48_114">114-</td><td  
nowrap="nowrap">This&nbsp;is&nbsp;a&nbsp;"don't"&nbsp;which&nbsp;is&nbsp;much&nbsp;weaker&nbsp;the<span  
class="diff_sub">n&nbsp;the</span>&nbsp;previous&nbsp;"don't"s&nbsp;but&nbsp;is&nbsp;still</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__3">n</a></td><td  
class="diff_header" id="to48_114">114+</td><td  
nowrap="nowrap">This&nbsp;is&nbsp;a&nbsp;"don't"&nbsp;which&nbsp;is&nbsp;much&nbsp;weaker&nbsp;<span  
class="diff_add">than&nbsp;</span>the&nbsp;previous&nbsp;"don't"s&nbsp;but&nbsp;is&nbsp;still</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_115">115</td><td  
nowrap="nowrap">something&nbsp;you&nbsp;should&nbsp;not&nbsp;do&nbsp;if&nbsp;you&nbsp;don't&nbsp;have&nbsp;good&nbsp;reasons&nbsp;to&nbsp;do&nbsp;that.&nbsp;The</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_116">116</td><td  
nowrap="nowrap">reason&nbsp;it&nbsp;is&nbsp;usually&nbsp;bad&nbsp;idea&nbsp;is&nbsp;because&nbsp;you&nbsp;suddenly&nbsp;have&nbsp;an&nbsp;object&nbsp;which&nbsp;lives</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_117">117</td><td  
nowrap="nowrap">in&nbsp;two&nbsp;separate&nbsp;namespaces.&nbsp;When&nbsp;the&nbsp;binding&nbsp;in&nbsp;one&nbsp;namespace&nbsp;changes,&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_118">118</td><td  
nowrap="nowrap">binding&nbsp;in&nbsp;the&nbsp;other&nbsp;will&nbsp;not,&nbsp;so&nbsp;there&nbsp;will&nbsp;be&nbsp;a&nbsp;discrepancy&nbsp;between&nbsp;them.&nbsp;This</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_119">119</td><td  
nowrap="nowrap">happens&nbsp;when,&nbsp;for&nbsp;example,&nbsp;one&nbsp;module&nbsp;is&nbsp;reloaded,&nbsp;or&nbsp;changes&nbsp;the&nbsp;definition&nbsp;of</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_120">120</td><td  
nowrap="nowrap">a&nbsp;function&nbsp;at&nbsp;runtime.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_121">121</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_122">122</td><td  
nowrap="nowrap">Bad&nbsp;example::</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to48__3"></td><td  
class="diff_header" id="from48_227">227</td><td  
nowrap="nowrap">several&nbsp;files&nbsp;in&nbsp;a&nbsp;loop),&nbsp;or&nbsp;just&nbsp;let&nbsp;the&nbsp;exception&nbsp;filter&nbsp;upwards&nbsp;to&nbsp;*its*</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_228">228</td><td nowrap="nowrap">caller.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_229">229</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to48__4"></td><td class="diff_header"  
id="from48_230">230</td><td  
nowrap="nowrap">The&nbsp;last&nbsp;version&nbsp;is&nbsp;not&nbsp;very&nbsp;good&nbsp;either&nbsp;---&nbsp;due&nbsp;to&nbsp;implementation&nbsp;details,&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_231">231</td><td  
nowrap="nowrap">file&nbsp;would&nbsp;not&nbsp;be&nbsp;closed&nbsp;when&nbsp;an&nbsp;exception&nbsp;is&nbsp;raised&nbsp;until&nbsp;the&nbsp;handler&nbsp;finishes,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_232">232</td><td  
nowrap="nowrap">and&nbsp;perhaps&nbsp;not&nbsp;at&nbsp;all&nbsp;in&nbsp;non-C&nbsp;implementations&nbsp;(e.g.,&nbsp;Jython).&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_233">233</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_234">234</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;def&nbsp;get_status(file):</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__4">n</a></td><td  
class="diff_header" id="from48_235">235-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp&nbsp;=&nbsp;open(file)</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__4">n</a></td><td  
class="diff_header" id="to48_235">235+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;with&nbsp;open(file)&nbsp;as&nbsp;fp:</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_236">236-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try:</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_237">237</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;fp.readline()</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__5">n</a></td><td  
class="diff_header" id="from48_238">238-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;finally:</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_239">239-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fp.close()</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to48__5"></td><td  
class="diff_header" id="from48_240">240</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_241">241</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_242">242</td><td  
nowrap="nowrap">Using&nbsp;the&nbsp;Batteries</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_243">243</td><td  
nowrap="nowrap">===================</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to48__6"></td><td class="diff_header"  
id="from48_244">244</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_245">245</td><td  
nowrap="nowrap">Every&nbsp;so&nbsp;often,&nbsp;people&nbsp;seem&nbsp;to&nbsp;be&nbsp;writing&nbsp;stuff&nbsp;in&nbsp;the&nbsp;Python&nbsp;library&nbsp;again,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_246">246</td><td  
nowrap="nowrap">usually&nbsp;poorly.&nbsp;While&nbsp;the&nbsp;occasional&nbsp;module&nbsp;has&nbsp;a&nbsp;poor&nbsp;interface,&nbsp;it&nbsp;is&nbsp;usually</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_247">247</td><td  
nowrap="nowrap">much&nbsp;better&nbsp;to&nbsp;use&nbsp;the&nbsp;rich&nbsp;standard&nbsp;library&nbsp;and&nbsp;data&nbsp;types&nbsp;that&nbsp;come&nbsp;with</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__6">n</a></td><td  
class="diff_header" id="from48_248">248-</td><td  
nowrap="nowrap">Python&nbsp;th<span  
class="diff_chg">e</span>n&nbsp;inventing&nbsp;your&nbsp;own.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__6">n</a></td><td  
class="diff_header" id="to48_245">245+</td><td  
nowrap="nowrap">Python&nbsp;th<span  
class="diff_chg">a</span>n&nbsp;inventing&nbsp;your&nbsp;own.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_249">249</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_250">250</td><td  
nowrap="nowrap">A&nbsp;useful&nbsp;module&nbsp;very&nbsp;few&nbsp;people&nbsp;know&nbsp;about&nbsp;is&nbsp;:mod:`os.path`.&nbsp;It&nbsp;&nbsp;always&nbsp;has&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_251">251</td><td  
nowrap="nowrap">correct&nbsp;path&nbsp;arithmetic&nbsp;for&nbsp;your&nbsp;operating&nbsp;system,&nbsp;and&nbsp;will&nbsp;usually&nbsp;be&nbsp;much</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__7">n</a></td><td  
class="diff_header" id="from48_252">252-</td><td  
nowrap="nowrap">better&nbsp;th<span  
class="diff_chg">e</span>n&nbsp;whatever&nbsp;you&nbsp;come&nbsp;up&nbsp;with&nbsp;yourself.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__7">n</a></td><td  
class="diff_header" id="to48_249">249+</td><td  
nowrap="nowrap">better&nbsp;th<span  
class="diff_chg">a</span>n&nbsp;whatever&nbsp;you&nbsp;come&nbsp;up&nbsp;with&nbsp;yourself.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_253">253</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_254">254</td><td  
nowrap="nowrap">Compare::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_255">255</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to48__7"></td><td class="diff_header"  
id="from48_256">256</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;#&nbsp;ugh!</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_257">257</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;return&nbsp;dir+"/"+file</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_258">258</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;#&nbsp;better</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_259">259</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;return&nbsp;os.path.join(dir,&nbsp;file)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_260">260</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_261">261</td><td  
nowrap="nowrap">More&nbsp;useful&nbsp;functions&nbsp;in&nbsp;:mod:`os.path`:&nbsp;:func:`basename`,&nbsp;&nbsp;:func:`dirname`&nbsp;and</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_262">262</td><td  
nowrap="nowrap">:func:`splitext`.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_263">263</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to48__8">n</a></td><td class="diff_header"  
id="from48_264">264-</td><td  
nowrap="nowrap">There&nbsp;are&nbsp;also&nbsp;many&nbsp;useful&nbsp;builtin&nbsp;functions&nbsp;people&nbsp;seem&nbsp;not&nbsp;to&nbsp;be&nbsp;aware&nbsp;of&nbsp;for</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__8">n</a></td><td  
class="diff_header" id="to48_261">261+</td><td  
nowrap="nowrap">There&nbsp;are&nbsp;also&nbsp;many&nbsp;useful&nbsp;built<span  
class="diff_add">-</span>in&nbsp;functions&nbsp;people&nbsp;seem&nbsp;not&nbsp;to&nbsp;be&nbsp;aware&nbsp;of&nbsp;for</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_265">265</td><td  
nowrap="nowrap">some&nbsp;reason:&nbsp;:func:`min`&nbsp;and&nbsp;:func:`max`&nbsp;can&nbsp;find&nbsp;the&nbsp;minimum/maximum&nbsp;of&nbsp;any</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_266">266</td><td  
nowrap="nowrap">sequence&nbsp;with&nbsp;comparable&nbsp;semantics,&nbsp;for&nbsp;example,&nbsp;yet&nbsp;many&nbsp;people&nbsp;write&nbsp;their&nbsp;own</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_267">267</td><td  
nowrap="nowrap">:func:`max`/:func:`min`.&nbsp;Another&nbsp;highly&nbsp;useful&nbsp;function&nbsp;is&nbsp;:func:`reduce`.&nbsp;A</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_268">268</td><td  
nowrap="nowrap">classical&nbsp;use&nbsp;of&nbsp;:func:`reduce`&nbsp;is&nbsp;something&nbsp;like&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_269">269</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_270">270</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;import&nbsp;sys,&nbsp;operator</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_271">271</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;nums&nbsp;=&nbsp;map(float,&nbsp;sys.argv[1:])</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_272">272</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;print&nbsp;reduce(operator.add,&nbsp;nums)/len(nums)</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to48__8"></td><td  
class="diff_header" id="from48_279">279</td><td  
nowrap="nowrap">accept&nbsp;arguments&nbsp;of&nbsp;type&nbsp;string,&nbsp;and&nbsp;so&nbsp;are&nbsp;suited&nbsp;to&nbsp;parsing&nbsp;---&nbsp;assuming&nbsp;you</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_280">280</td><td  
nowrap="nowrap">are&nbsp;ready&nbsp;to&nbsp;deal&nbsp;with&nbsp;the&nbsp;:exc:`ValueError`&nbsp;they&nbsp;raise.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_281">281</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_282">282</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from48_283">283</td><td  
nowrap="nowrap">Using&nbsp;Backslash&nbsp;to&nbsp;Continue&nbsp;Statements</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_284">284</td><td  
nowrap="nowrap">======================================</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_285">285</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_286">286</td><td  
nowrap="nowrap">Since&nbsp;Python&nbsp;treats&nbsp;a&nbsp;newline&nbsp;as&nbsp;a&nbsp;statement&nbsp;terminator,&nbsp;and&nbsp;since&nbsp;statements</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to48__top">t</a></td><td  
class="diff_header" id="from48_287">287-</td><td  
nowrap="nowrap">are&nbsp;often&nbsp;more&nbsp;th<span  
class="diff_chg">e</span>n&nbsp;is&nbsp;comfortable&nbsp;to&nbsp;put&nbsp;in&nbsp;one&nbsp;line,&nbsp;many&nbsp;people&nbsp;do::</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to48__top">t</a></td><td  
class="diff_header" id="to48_284">284+</td><td  
nowrap="nowrap">are&nbsp;often&nbsp;more&nbsp;th<span  
class="diff_chg">a</span>n&nbsp;is&nbsp;comfortable&nbsp;to&nbsp;put&nbsp;in&nbsp;one&nbsp;line,&nbsp;many&nbsp;people&nbsp;do::</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from48_288">288</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_289">289</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;if&nbsp;foo.bar()['first'][0]&nbsp;==&nbsp;baz.quux(1,&nbsp;2)[5:9]&nbsp;and&nbsp;\</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_290">290</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;calculate_number(10,&nbsp;20)&nbsp;!=&nbsp;forbulate(500,&nbsp;360):</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_291">291</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pass</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_292">292</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from48_293">293</td><td  
nowrap="nowrap">You&nbsp;should&nbsp;realize&nbsp;that&nbsp;this&nbsp;is&nbsp;dangerous:&nbsp;a&nbsp;stray&nbsp;space&nbsp;after&nbsp;the&nbsp;``\``&nbsp;would</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_294">294</td><td  
nowrap="nowrap">make&nbsp;this&nbsp;line&nbsp;wrong,&nbsp;and&nbsp;stray&nbsp;spaces&nbsp;are&nbsp;notoriously&nbsp;hard&nbsp;to&nbsp;see&nbsp;in&nbsp;editors.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from48_295">295</td><td  
nowrap="nowrap">In&nbsp;this&nbsp;case,&nbsp;at&nbsp;least&nbsp;it&nbsp;would&nbsp;be&nbsp;a&nbsp;syntax&nbsp;error,&nbsp;but&nbsp;if&nbsp;the&nbsp;code&nbsp;was::</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/functional.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,56 @@
+--- r262/howto/functional.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/functional.rst	2010-04-05 21:55:05.908767000 +0900
+@@ -326,25 +326,25 @@
+
+ Generator expressions and list comprehensions
+ =============================================
+
+ Two common operations on an iterator's output are 1) performing some  
operation
+ for every element, 2) selecting a subset of elements that meet some  
condition.
+ For example, given a list of strings, you might want to strip off trailing
+ whitespace from each line or extract all the strings containing a given
+ substring.
+
+ List comprehensions and generator expressions (short form: "listcomps" and
+ "genexps") are a concise notation for such operations, borrowed from the
+-functional programming language Haskell (http://www.haskell.org).  You  
can strip
++functional programming language Haskell (http://www.haskell.org/).  You  
can strip
+ all the whitespace from a stream of strings with the following code::
+
+     line_list = ['  line 1\n', 'line 2  \n', ...]
+
+     # Generator expression -- returns iterator
+     stripped_iter = (line.strip() for line in line_list)
+
+     # List comprehension -- returns list
+     stripped_list = [line.strip() for line in line_list]
+
+ You can select only certain elements by adding an ``"if"`` condition::
+
+@@ -463,25 +463,25 @@
+ When you call a generator function, it doesn't return a single value;  
instead it
+ returns a generator object that supports the iterator protocol.  On  
executing
+ the ``yield`` expression, the generator outputs the value of ``i``,  
similar to a
+ ``return`` statement.  The big difference between ``yield`` and a  
``return``
+ statement is that on reaching a ``yield`` the generator's state of  
execution is
+ suspended and local variables are preserved.  On the next call to the
+ generator's ``.next()`` method, the function will resume executing.
+
+ Here's a sample usage of the ``generate_ints()`` generator:
+
+     >>> gen = generate_ints(3)
+     >>> gen
+-    <generator object at ...>
++    <generator object generate_ints at ...>
+     >>> gen.next()
+     0
+     >>> gen.next()
+     1
+     >>> gen.next()
+     2
+     >>> gen.next()
+     Traceback (most recent call last):
+       File "stdin", line 1, in ?
+       File "stdin", line 2, in generate_ints
+     StopIteration
+
=======================================
--- /dev/null
+++ /howto/diff/functional.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,54 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to49__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/functional.rst =&gt;  
r266/howto/functional.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to49__0"></td><td class="diff_header"  
id="from49_330">330</td><td  
nowrap="nowrap">Two&nbsp;common&nbsp;operations&nbsp;on&nbsp;an&nbsp;iterator's&nbsp;output&nbsp;are&nbsp;1)&nbsp;performing&nbsp;some&nbsp;operation</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_331">331</td><td  
nowrap="nowrap">for&nbsp;every&nbsp;element,&nbsp;2)&nbsp;selecting&nbsp;a&nbsp;subset&nbsp;of&nbsp;elements&nbsp;that&nbsp;meet&nbsp;some&nbsp;condition.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_332">332</td><td  
nowrap="nowrap">For&nbsp;example,&nbsp;given&nbsp;a&nbsp;list&nbsp;of&nbsp;strings,&nbsp;you&nbsp;might&nbsp;want&nbsp;to&nbsp;strip&nbsp;off&nbsp;trailing</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_333">333</td><td  
nowrap="nowrap">whitespace&nbsp;from&nbsp;each&nbsp;line&nbsp;or&nbsp;extract&nbsp;all&nbsp;the&nbsp;strings&nbsp;containing&nbsp;a&nbsp;given</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_334">334</td><td nowrap="nowrap">substring.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_335">335</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_336">336</td><td  
nowrap="nowrap">List&nbsp;comprehensions&nbsp;and&nbsp;generator&nbsp;expressions&nbsp;(short&nbsp;form:&nbsp;"listcomps"&nbsp;and</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_337">337</td><td  
nowrap="nowrap">"genexps")&nbsp;are&nbsp;a&nbsp;concise&nbsp;notation&nbsp;for&nbsp;such&nbsp;operations,&nbsp;borrowed&nbsp;from&nbsp;the</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to49__1">n</a></td><td  
class="diff_header" id="from49_338">338-</td><td  
nowrap="nowrap">functional&nbsp;programming&nbsp;language&nbsp;Haskell&nbsp;(http://www.haskell.org).&nbsp;&nbsp;You&nbsp;can&nbsp;strip</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to49__1">n</a></td><td  
class="diff_header" id="to49_338">338+</td><td  
nowrap="nowrap">functional&nbsp;programming&nbsp;language&nbsp;Haskell&nbsp;(http://www.haskell.org<span  
class="diff_add">/</span>).&nbsp;&nbsp;You&nbsp;can&nbsp;strip</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from49_339">339</td><td  
nowrap="nowrap">all&nbsp;the&nbsp;whitespace&nbsp;from&nbsp;a&nbsp;stream&nbsp;of&nbsp;strings&nbsp;with&nbsp;the&nbsp;following&nbsp;code::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_340">340</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_341">341</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;line_list&nbsp;=&nbsp;['&nbsp;&nbsp;line&nbsp;1\n',&nbsp;'line&nbsp;2&nbsp;&nbsp;\n',&nbsp;...]</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_342">342</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_343">343</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Generator&nbsp;expression&nbsp;--&nbsp;returns&nbsp;iterator</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_344">344</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;stripped_iter&nbsp;=&nbsp;(line.strip()&nbsp;for&nbsp;line&nbsp;in&nbsp;line_list)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_345">345</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_346">346</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;List&nbsp;comprehension&nbsp;--&nbsp;returns&nbsp;list</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to49__1"></td><td  
class="diff_header" id="from49_467">467</td><td  
nowrap="nowrap">statement&nbsp;is&nbsp;that&nbsp;on&nbsp;reaching&nbsp;a&nbsp;``yield``&nbsp;the&nbsp;generator's&nbsp;state&nbsp;of&nbsp;execution&nbsp;is</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_468">468</td><td  
nowrap="nowrap">suspended&nbsp;and&nbsp;local&nbsp;variables&nbsp;are&nbsp;preserved.&nbsp;&nbsp;On&nbsp;the&nbsp;next&nbsp;call&nbsp;to&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_469">469</td><td  
nowrap="nowrap">generator's&nbsp;``.next()``&nbsp;method,&nbsp;the&nbsp;function&nbsp;will&nbsp;resume&nbsp;executing.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_470">470</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_471">471</td><td  
nowrap="nowrap">Here's&nbsp;a&nbsp;sample&nbsp;usage&nbsp;of&nbsp;the&nbsp;``generate_ints()``&nbsp;generator:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_472">472</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_473">473</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen&nbsp;=&nbsp;generate_ints(3)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_474">474</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to49__top">t</a></td><td  
class="diff_header" id="from49_475">475-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;object&nbsp;at&nbsp;...&gt;</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to49__top">t</a></td><td  
class="diff_header" id="to49_475">475+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&lt;generator&nbsp;object&nbsp;<span  
class="diff_add">gener</span>at<span  
class="diff_add">e_ints&nbsp;at</span>&nbsp;...&gt;</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from49_476">476</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen.next()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_477">477</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;0</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_478">478</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen.next()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_479">479</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;1</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_480">480</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen.next()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_481">481</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;2</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from49_482">482</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;gen.next()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from49_483">483</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;Traceback&nbsp;(most&nbsp;recent&nbsp;call&nbsp;last):</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/index.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,25 @@
+--- r262/howto/index.rst	2008-09-26 11:58:36.001088000 +0900
++++ r266/howto/index.rst	2010-04-11 17:17:32.454948000 +0900
+@@ -7,20 +7,22 @@
+ Documentation Project's HOWTO collection, this collection is an
+ effort to foster documentation that's more detailed than the
+ Python Library Reference.
+
+ Currently, the HOWTOs are:
+
+ .. toctree::
+    :maxdepth: 1
+
+    advocacy.rst
+    cporting.rst
+    curses.rst
++   descriptor.rst
+    doanddont.rst
+    functional.rst
+    regex.rst
+    sockets.rst
++   sorting.rst
+    unicode.rst
+    urllib2.rst
+    webservers.rst
+
=======================================
--- /dev/null
+++ /howto/diff/index.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,50 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to50__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/index.rst =&gt;  
r266/howto/index.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to50__0"></td><td class="diff_header"  
id="from50_11">11</td><td  
nowrap="nowrap">Currently,&nbsp;the&nbsp;HOWTOs&nbsp;are:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from50_12">12</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_13">13</td><td  
nowrap="nowrap">..&nbsp;toctree::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_14">14</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;:maxdepth:&nbsp;1</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from50_15">15</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to50__1"></td><td class="diff_header"  
id="from50_16">16</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;advocacy.rst</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_17">17</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;cporting.rst</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_18">18</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;curses.rst</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to50__1">n</a></td><td  
class="diff_header" id="to50_19">19+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;descriptor.rst</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from50_19">19</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;doanddont.rst</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from50_20">20</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;functional.rst</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from50_21">21</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;regex.rst</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_22">22</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;sockets.rst</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to50__top">t</a></td><td  
class="diff_header" id="to50_24">24+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;sorting.rst</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from50_23">23</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;unicode.rst</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_24">24</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;urllib2.rst</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from50_25">25</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;webservers.rst</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from50_26">26</td><td nowrap="nowrap"></td></tr>        </tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/regex.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,242 @@
+--- r262/howto/regex.rst	2009-04-06 09:24:29.561602000 +0900
++++ r266/howto/regex.rst	2009-10-27 23:19:50.039185000 +0900
+@@ -248,32 +248,32 @@
+ Using Regular Expressions
+ =========================
+
+ Now that we've looked at some simple regular expressions, how do we  
actually use
+ them in Python?  The :mod:`re` module provides an interface to the regular
+ expression engine, allowing you to compile REs into objects and then  
perform
+ matches with them.
+
+
+ Compiling Regular Expressions
+ -----------------------------
+
+-Regular expressions are compiled into :class:`RegexObject` instances,  
which have
++Regular expressions are compiled into pattern objects, which have
+ methods for various operations such as searching for pattern matches or
+ performing string substitutions. ::
+
+    >>> import re
+    >>> p = re.compile('ab*')
+    >>> print p
+-   <re.RegexObject instance at 80b4150>
++   <_sre.SRE_Pattern object at 80b4150>
+
+ :func:`re.compile` also accepts an optional *flags* argument, used to  
enable
+ various special features and syntax variations.  We'll go over the  
available
+ settings later, but for now a single example will do::
+
+    >>> p = re.compile('ab*', re.IGNORECASE)
+
+ The RE is passed to :func:`re.compile` as a string.  REs are handled as  
strings
+ because regular expressions aren't part of the core Python language, and  
no
+ special syntax was created for expressing them.  (There are applications  
that
+ don't need REs at all, so there's no need to bloat the language  
specification by
+ including them.) Instead, the :mod:`re` module is simply a C extension  
module
+@@ -327,25 +327,25 @@
+ | ``"ab*"``         | ``r"ab*"``       |
+ +-------------------+------------------+
+ | ``"\\\\section"`` | ``r"\\section"`` |
+ +-------------------+------------------+
+ | ``"\\w+\\s+\\1"`` | ``r"\w+\s+\1"``  |
+ +-------------------+------------------+
+
+
+ Performing Matches
+ ------------------
+
+ Once you have an object representing a compiled regular expression, what  
do you
+-do with it?  :class:`RegexObject` instances have several methods and  
attributes.
++do with it?  Pattern objects have several methods and attributes.
+ Only the most significant ones will be covered here; consult  
the :mod:`re` docs
+ for a complete listing.
+
+ +------------------+-----------------------------------------------+
+ | Method/Attribute | Purpose                                       |
+ +==================+===============================================+
+ | ``match()``      | Determine if the RE matches at the beginning  |
+ |                  | of the string.                                |
+ +------------------+-----------------------------------------------+
+ | ``search()``     | Scan through a string, looking for any        |
+ |                  | location where this RE matches.               |
+ +------------------+-----------------------------------------------+
+@@ -418,90 +418,90 @@
+
+    >>> m.group()
+    'tempo'
+    >>> m.start(), m.end()
+    (0, 5)
+    >>> m.span()
+    (0, 5)
+
+ :meth:`group` returns the substring that was matched by the  
RE.  :meth:`start`
+ and :meth:`end` return the starting and ending index of the  
match. :meth:`span`
+ returns both start and end indexes in a single tuple.  Since  
the :meth:`match`
+ method only checks if the RE matches at the start of a  
string, :meth:`start`
+-will always be zero.  However, the :meth:`search` method  
of :class:`RegexObject`
+-instances scans through the string, so  the match may not start at zero  
in that
++will always be zero.  However, the :meth:`search` method of patterns
++scans through the string, so  the match may not start at zero in that
+ case. ::
+
+    >>> print p.match('::: message')
+    None
+    >>> m = p.search('::: message') ; print m
+    <re.MatchObject instance at 80c9650>
+    >>> m.group()
+    'message'
+    >>> m.span()
+    (4, 11)
+
+ In actual programs, the most common style is to store  
the :class:`MatchObject`
+ in a variable, and then check if it was ``None``.  This usually looks  
like::
+
+    p = re.compile( ... )
+    m = p.match( 'string goes here' )
+    if m:
+        print 'Match found: ', m.group()
+    else:
+        print 'No match'
+
+-Two :class:`RegexObject` methods return all of the matches for a pattern.
++Two pattern methods return all of the matches for a pattern.
+ :meth:`findall` returns a list of matching strings::
+
+    >>> p = re.compile('\d+')
+    >>> p.findall('12 drummers drumming, 11 pipers piping, 10 lords  
a-leaping')
+    ['12', '11', '10']
+
+ :meth:`findall` has to create the entire list before it can be returned  
as the
+ result.  The :meth:`finditer` method returns a sequence  
of :class:`MatchObject`
+ instances as an :term:`iterator`. [#]_ ::
+
+    >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
+    >>> iterator
+    <callable-iterator object at 0x401833ac>
+    >>> for match in iterator:
+    ...     print match.span()
+    ...
+    (0, 2)
+    (22, 24)
+    (29, 31)
+
+
+ Module-Level Functions
+ ----------------------
+
+-You don't have to create a :class:`RegexObject` and call its methods; the
++You don't have to create a pattern object and call its methods; the
+ :mod:`re` module also provides top-level functions called :func:`match`,
+ :func:`search`, :func:`findall`, :func:`sub`, and so forth.  These  
functions
+-take the same arguments as the corresponding :class:`RegexObject` method,  
with
++take the same arguments as the corresponding pattern method, with
+ the RE string added as the first argument, and still return either  
``None`` or a
+ :class:`MatchObject` instance. ::
+
+    >>> print re.match(r'From\s+', 'Fromage amk')
+    None
+    >>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
+    <re.MatchObject instance at 80c5978>
+
+-Under the hood, these functions simply produce a :class:`RegexObject` for  
you
++Under the hood, these functions simply create a pattern object for you
+ and call the appropriate method on it.  They also store the compiled  
object in a
+ cache, so future calls using the same RE are faster.
+
+ Should you use these module-level functions, or should you get the
+-:class:`RegexObject` and call its methods yourself?  That choice depends  
on how
++pattern and call its methods yourself?  That choice depends on how
+ frequently the RE will be used, and on your personal coding style.  If  
the RE is
+ being used at only one point in the code, then the module functions are  
probably
+ more convenient.  If a program contains a lot of regular expressions, or  
re-uses
+ the same ones in several locations, then it might be worthwhile to  
collect all
+ the definitions in one place, in a section of code that compiles all the  
REs
+ ahead of time.  To take an example from the standard library, here's an  
extract
+ from :file:`xmllib.py`::
+
+    ref = re.compile( ... )
+    entityref = re.compile( ... )
+    charref = re.compile( ... )
+    starttagopen = re.compile( ... )
+@@ -1021,45 +1021,45 @@
+ Excluding another filename extension is now easy; simply add it as an
+ alternative inside the assertion.  The following pattern excludes  
filenames that
+ end in either ``bat`` or ``exe``:
+
+ ``.*[.](?!bat$|exe$).*$``
+
+
+ Modifying Strings
+ =================
+
+ Up to this point, we've simply performed searches against a static string.
+ Regular expressions are also commonly used to modify strings in various  
ways,
+-using the following :class:`RegexObject` methods:
++using the following pattern methods:
+
+ +------------------+-----------------------------------------------+
+ | Method/Attribute | Purpose                                       |
+ +==================+===============================================+
+ | ``split()``      | Split the string into a list, splitting it    |
+ |                  | wherever the RE matches                       |
+ +------------------+-----------------------------------------------+
+ | ``sub()``        | Find all substrings where the RE matches, and |
+ |                  | replace them with a different string          |
+ +------------------+-----------------------------------------------+
+ | ``subn()``       | Does the same thing as :meth:`sub`,  but      |
+ |                  | returns the new string and the number of      |
+ |                  | replacements                                  |
+ +------------------+-----------------------------------------------+
+
+
+ Splitting Strings
+ -----------------
+
+-The :meth:`split` method of a :class:`RegexObject` splits a string apart
++The :meth:`split` method of a pattern splits a string apart
+ wherever the RE matches, returning a list of the pieces. It's similar to  
the
+ :meth:`split` method of strings but provides much more generality in the
+ delimiters that you can split by; :meth:`split` only supports splitting by
+ whitespace or by a fixed string.  As you'd expect, there's a module-level
+ :func:`re.split` function, too.
+
+
+ .. method:: .split(string [, maxsplit=0])
+    :noindex:
+
+    Split *string* by the matches of the regular expression.  If capturing
+    parentheses are used in the RE, then their contents will also be  
returned as
+@@ -1186,28 +1186,28 @@
+ hexadecimal::
+
+    >>> def hexrepl( match ):
+    ...     "Return the hex string for a decimal number"
+    ...     value = int( match.group() )
+    ...     return hex(value)
+    ...
+    >>> p = re.compile(r'\d+')
+    >>> p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.')
+    'Call 0xffd2 for printing, 0xc000 for user code.'
+
+ When using the module-level :func:`re.sub` function, the pattern is  
passed as
+-the first argument.  The pattern may be a string or  
a :class:`RegexObject`; if
++the first argument.  The pattern may be provided as an object or as a  
string; if
+ you need to specify regular expression flags, you must either use a
+-:class:`RegexObject` as the first parameter, or use embedded modifiers in  
the
+-pattern, e.g.  ``sub("(?i)b+", "x", "bbbb BBBB")`` returns ``'x x'``.
++pattern object as the first parameter, or use embedded modifiers in the
++pattern string, e.g. ``sub("(?i)b+", "x", "bbbb BBBB")`` returns ``'x  
x'``.
+
+
+ Common Problems
+ ===============
+
+ Regular expressions are a powerful tool for some applications, but in  
some ways
+ their behaviour isn't intuitive and at times they don't behave the way  
you may
+ expect them to.  This section will point out some of the most common  
pitfalls.
+
+
+ Use String Methods
+ ------------------
=======================================
--- /dev/null
+++ /howto/diff/regex.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,92 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to51__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/regex.rst =&gt;  
r266/howto/regex.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to51__0"></td><td class="diff_header"  
id="from51_252">252</td><td  
nowrap="nowrap">them&nbsp;in&nbsp;Python?&nbsp;&nbsp;The&nbsp;:mod:`re`&nbsp;module&nbsp;provides&nbsp;an&nbsp;interface&nbsp;to&nbsp;the&nbsp;regular</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_253">253</td><td  
nowrap="nowrap">expression&nbsp;engine,&nbsp;allowing&nbsp;you&nbsp;to&nbsp;compile&nbsp;REs&nbsp;into&nbsp;objects&nbsp;and&nbsp;then&nbsp;perform</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_254">254</td><td  
nowrap="nowrap">matches&nbsp;with&nbsp;them.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_255">255</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_256">256</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_257">257</td><td  
nowrap="nowrap">Compiling&nbsp;Regular&nbsp;Expressions</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_258">258</td><td  
nowrap="nowrap">-----------------------------</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to51__1"></td><td class="diff_header"  
id="from51_259">259</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__1">n</a></td><td  
class="diff_header" id="from51_260">260-</td><td  
nowrap="nowrap">Regular&nbsp;expressions&nbsp;are&nbsp;compiled&nbsp;into&nbsp;<span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexO</span>bject<span  
class="diff_sub">`&nbsp;instance</span>s,&nbsp;which&nbsp;have</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__1">n</a></td><td  
class="diff_header" id="to51_260">260+</td><td  
nowrap="nowrap">Regular&nbsp;expressions&nbsp;are&nbsp;compiled&nbsp;into&nbsp;<span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn&nbsp;o</span>bjects,&nbsp;which&nbsp;have</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_261">261</td><td  
nowrap="nowrap">methods&nbsp;for&nbsp;various&nbsp;operations&nbsp;such&nbsp;as&nbsp;searching&nbsp;for&nbsp;pattern&nbsp;matches&nbsp;or</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_262">262</td><td  
nowrap="nowrap">performing&nbsp;string&nbsp;substitutions.&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_263">263</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_264">264</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;import&nbsp;re</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_265">265</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p&nbsp;=&nbsp;re.compile('ab*')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_266">266</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;print&nbsp;p</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__2">n</a></td><td  
class="diff_header" id="from51_267">267-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&lt;re.RegexObject&nbsp;instance&nbsp;at&nbsp;80b4150&gt;</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__2">n</a></td><td  
class="diff_header" id="to51_267">267+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&lt;_sre.SRE_Pattern&nbsp;object&nbsp;at&nbsp;80b4150&gt;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_268">268</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_269">269</td><td  
nowrap="nowrap">:func:`re.compile`&nbsp;also&nbsp;accepts&nbsp;an&nbsp;optional&nbsp;*flags*&nbsp;argument,&nbsp;used&nbsp;to&nbsp;enable</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_270">270</td><td  
nowrap="nowrap">various&nbsp;special&nbsp;features&nbsp;and&nbsp;syntax&nbsp;variations.&nbsp;&nbsp;We'll&nbsp;go&nbsp;over&nbsp;the&nbsp;available</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_271">271</td><td  
nowrap="nowrap">settings&nbsp;later,&nbsp;but&nbsp;for&nbsp;now&nbsp;a&nbsp;single&nbsp;example&nbsp;will&nbsp;do::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_272">272</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_273">273</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p&nbsp;=&nbsp;re.compile('ab*',&nbsp;re.IGNORECASE)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_274">274</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_275">275</td><td  
nowrap="nowrap">The&nbsp;RE&nbsp;is&nbsp;passed&nbsp;to&nbsp;:func:`re.compile`&nbsp;as&nbsp;a&nbsp;string.&nbsp;&nbsp;REs&nbsp;are&nbsp;handled&nbsp;as&nbsp;strings</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__2"></td><td  
class="diff_header" id="from51_331">331</td><td nowrap="nowrap">| 
&nbsp;``"\\w+\\s+\\1"``&nbsp;|&nbsp;``r"\w+\s+\1"``&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_332">332</td><td  
nowrap="nowrap">+-------------------+------------------+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_333">333</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_334">334</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_335">335</td><td  
nowrap="nowrap">Performing&nbsp;Matches</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_336">336</td><td  
nowrap="nowrap">------------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_337">337</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_338">338</td><td  
nowrap="nowrap">Once&nbsp;you&nbsp;have&nbsp;an&nbsp;object&nbsp;representing&nbsp;a&nbsp;compiled&nbsp;regular&nbsp;expression,&nbsp;what&nbsp;do&nbsp;you</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__3">n</a></td><td  
class="diff_header" id="from51_339">339-</td><td  
nowrap="nowrap">do&nbsp;with&nbsp;it?&nbsp;&nbsp;<span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexO</span>bject<span  
class="diff_sub">`&nbsp;in</span>s<span  
class="diff_sub">tances</span>&nbsp;have&nbsp;several&nbsp;methods&nbsp;and&nbsp;attributes.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__3">n</a></td><td  
class="diff_header" id="to51_339">339+</td><td  
nowrap="nowrap">do&nbsp;with&nbsp;it?&nbsp;&nbsp;<span  
class="diff_chg">P</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn&nbsp;o</span>bjects&nbsp;have&nbsp;several&nbsp;methods&nbsp;and&nbsp;attributes.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_340">340</td><td  
nowrap="nowrap">Only&nbsp;the&nbsp;most&nbsp;significant&nbsp;ones&nbsp;will&nbsp;be&nbsp;covered&nbsp;here;&nbsp;consult&nbsp;the&nbsp;:mod:`re`&nbsp;docs</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_341">341</td><td  
nowrap="nowrap">for&nbsp;a&nbsp;complete&nbsp;listing.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_342">342</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_343">343</td><td  
nowrap="nowrap">+------------------+-----------------------------------------------+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_344">344</td><td nowrap="nowrap">|&nbsp;Method/Attribute&nbsp;| 
&nbsp;Purpose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_345">345</td><td  
nowrap="nowrap">+==================+===============================================+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_346">346</td><td nowrap="nowrap">| 
&nbsp;``match()``&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;Determine&nbsp;if&nbsp;the&nbsp;RE&nbsp;matches&nbsp;at&nbsp;the&nbsp;beginning&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_347">347</td><td nowrap="nowrap">| 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;of&nbsp;the&nbsp;string.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__3"></td><td  
class="diff_header" id="from51_422">422</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(0,&nbsp;5)</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_423">423</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;m.span()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_424">424</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(0,&nbsp;5)</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_425">425</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_426">426</td><td  
nowrap="nowrap">:meth:`group`&nbsp;returns&nbsp;the&nbsp;substring&nbsp;that&nbsp;was&nbsp;matched&nbsp;by&nbsp;the&nbsp;RE.&nbsp;&nbsp;:meth:`start`</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_427">427</td><td  
nowrap="nowrap">and&nbsp;:meth:`end`&nbsp;return&nbsp;the&nbsp;starting&nbsp;and&nbsp;ending&nbsp;index&nbsp;of&nbsp;the&nbsp;match.&nbsp;:meth:`span`</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_428">428</td><td  
nowrap="nowrap">returns&nbsp;both&nbsp;start&nbsp;and&nbsp;end&nbsp;indexes&nbsp;in&nbsp;a&nbsp;single&nbsp;tuple.&nbsp;&nbsp;Since&nbsp;the&nbsp;:meth:`match`</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_429">429</td><td  
nowrap="nowrap">method&nbsp;only&nbsp;checks&nbsp;if&nbsp;the&nbsp;RE&nbsp;matches&nbsp;at&nbsp;the&nbsp;start&nbsp;of&nbsp;a&nbsp;string,&nbsp;:meth:`start`</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__4">n</a></td><td  
class="diff_header" id="from51_430">430-</td><td  
nowrap="nowrap">will&nbsp;always&nbsp;be&nbsp;zero.&nbsp;&nbsp;However,&nbsp;the&nbsp;:meth:`search`&nbsp;method&nbsp;of&nbsp;<span  
class="diff_chg">:cl</span>as<span  
class="diff_sub">s:`RegexObject`</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__4">n</a></td><td  
class="diff_header" id="to51_430">430+</td><td  
nowrap="nowrap">will&nbsp;always&nbsp;be&nbsp;zero.&nbsp;&nbsp;However,&nbsp;the&nbsp;:meth:`search`&nbsp;method&nbsp;of&nbsp;<span  
class="diff_chg">p</span>a<span class="diff_add">ttern</span>s</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_431">431-</td><td nowrap="nowrap"><span  
class="diff_sub">instances&nbsp;</span>scans&nbsp;through&nbsp;the&nbsp;string,&nbsp;so&nbsp;&nbsp;the&nbsp;match&nbsp;may&nbsp;not&nbsp;start&nbsp;at&nbsp;zero&nbsp;in&nbsp;that</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to51_431">431+</td><td  
nowrap="nowrap">scans&nbsp;through&nbsp;the&nbsp;string,&nbsp;so&nbsp;&nbsp;the&nbsp;match&nbsp;may&nbsp;not&nbsp;start&nbsp;at&nbsp;zero&nbsp;in&nbsp;that</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_432">432</td><td  
nowrap="nowrap">case.&nbsp;::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_433">433</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_434">434</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;print&nbsp;p.match(':::&nbsp;message')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_435">435</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;None</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_436">436</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;m&nbsp;=&nbsp;p.search(':::&nbsp;message')&nbsp;;&nbsp;print&nbsp;m</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_437">437</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;re.MatchObject&nbsp;instance&nbsp;at&nbsp;80c9650&gt;</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_438">438</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;m.group()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_439">439</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;'message'</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__4"></td><td  
class="diff_header" id="from51_445">445</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_446">446</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;re.compile(&nbsp;...&nbsp;)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_447">447</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;m&nbsp;=&nbsp;p.match(&nbsp;'string&nbsp;goes&nbsp;here'&nbsp;)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_448">448</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;if&nbsp;m:</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_449">449</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;'Match&nbsp;found:&nbsp;',&nbsp;m.group()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_450">450</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;else:</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_451">451</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;'No&nbsp;match'</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_452">452</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__5">n</a></td><td  
class="diff_header" id="from51_453">453-</td><td  
nowrap="nowrap">Two&nbsp;<span class="diff_chg">:cl</span>a<span  
class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexObject`</span>&nbsp;methods&nbsp;return&nbsp;all&nbsp;of&nbsp;the&nbsp;matches&nbsp;for&nbsp;a&nbsp;pattern.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__5">n</a></td><td  
class="diff_header" id="to51_453">453+</td><td  
nowrap="nowrap">Two&nbsp;<span class="diff_chg">p</span>a<span  
class="diff_chg">tt</span>e<span  
class="diff_chg">rn</span>&nbsp;methods&nbsp;return&nbsp;all&nbsp;of&nbsp;the&nbsp;matches&nbsp;for&nbsp;a&nbsp;pattern.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_454">454</td><td  
nowrap="nowrap">:meth:`findall`&nbsp;returns&nbsp;a&nbsp;list&nbsp;of&nbsp;matching&nbsp;strings::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_455">455</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_456">456</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p&nbsp;=&nbsp;re.compile('\d+')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_457">457</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p.findall('12&nbsp;drummers&nbsp;drumming,&nbsp;11&nbsp;pipers&nbsp;piping,&nbsp;10&nbsp;lords&nbsp;a-leaping')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_458">458</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;['12',&nbsp;'11',&nbsp;'10']</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_459">459</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_460">460</td><td  
nowrap="nowrap">:meth:`findall`&nbsp;has&nbsp;to&nbsp;create&nbsp;the&nbsp;entire&nbsp;list&nbsp;before&nbsp;it&nbsp;can&nbsp;be&nbsp;returned&nbsp;as&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_461">461</td><td  
nowrap="nowrap">result.&nbsp;&nbsp;The&nbsp;:meth:`finditer`&nbsp;method&nbsp;returns&nbsp;a&nbsp;sequence&nbsp;of&nbsp;:class:`MatchObject`</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__5"></td><td  
class="diff_header" id="from51_470">470</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(0,&nbsp;2)</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_471">471</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(22,&nbsp;24)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_472">472</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(29,&nbsp;31)</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to51__6"></td><td  
class="diff_header" id="from51_473">473</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_474">474</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_475">475</td><td  
nowrap="nowrap">Module-Level&nbsp;Functions</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_476">476</td><td  
nowrap="nowrap">----------------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_477">477</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to51__6">n</a></td><td class="diff_header"  
id="from51_478">478-</td><td  
nowrap="nowrap">You&nbsp;don't&nbsp;have&nbsp;to&nbsp;create&nbsp;a&nbsp;<span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexO</span>bject<span  
class="diff_sub">`</span>&nbsp;and&nbsp;call&nbsp;its&nbsp;methods;&nbsp;the</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__6">n</a></td><td  
class="diff_header" id="to51_478">478+</td><td  
nowrap="nowrap">You&nbsp;don't&nbsp;have&nbsp;to&nbsp;create&nbsp;a&nbsp;<span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn&nbsp;o</span>bject&nbsp;and&nbsp;call&nbsp;its&nbsp;methods;&nbsp;the</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_479">479</td><td  
nowrap="nowrap">:mod:`re`&nbsp;module&nbsp;also&nbsp;provides&nbsp;top-level&nbsp;functions&nbsp;called&nbsp;:func:`match`,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_480">480</td><td  
nowrap="nowrap">:func:`search`,&nbsp;:func:`findall`,&nbsp;:func:`sub`,&nbsp;and&nbsp;so&nbsp;forth.&nbsp;&nbsp;These&nbsp;functions</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__7">n</a></td><td  
class="diff_header" id="from51_481">481-</td><td  
nowrap="nowrap">take&nbsp;the&nbsp;same&nbsp;arguments&nbsp;as&nbsp;the&nbsp;corresponding&nbsp;<span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexObject`</span>&nbsp;method,&nbsp;with</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__7">n</a></td><td  
class="diff_header" id="to51_481">481+</td><td  
nowrap="nowrap">take&nbsp;the&nbsp;same&nbsp;arguments&nbsp;as&nbsp;the&nbsp;corresponding&nbsp;<span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn</span>&nbsp;method,&nbsp;with</td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to51__7"></td><td  
class="diff_header" id="from51_482">482</td><td  
nowrap="nowrap">the&nbsp;RE&nbsp;string&nbsp;added&nbsp;as&nbsp;the&nbsp;first&nbsp;argument,&nbsp;and&nbsp;still&nbsp;return&nbsp;either&nbsp;``None``&nbsp;or&nbsp;a</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_483">483</td><td  
nowrap="nowrap">:class:`MatchObject`&nbsp;instance.&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_484">484</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_485">485</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;print&nbsp;re.match(r'From\s+',&nbsp;'Fromage&nbsp;amk')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_486">486</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;None</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to51__8"></td><td class="diff_header"  
id="from51_487">487</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;re.match(r'From\s+',&nbsp;'From&nbsp;amk&nbsp;Thu&nbsp;May&nbsp;14&nbsp;19:12:10&nbsp;1998')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_488">488</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;re.MatchObject&nbsp;instance&nbsp;at&nbsp;80c5978&gt;</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_489">489</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__8">n</a></td><td  
class="diff_header" id="from51_490">490-</td><td nowrap="nowrap"><span  
class="diff_sub">Under&nbsp;the&nbsp;hood,&nbsp;these&nbsp;functions&nbsp;simply&nbsp;produce&nbsp;a&nbsp;:class:`RegexObject`&nbsp;for&nbsp;you</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__8">n</a></td><td  
class="diff_header" id="to51_490">490+</td><td nowrap="nowrap"><span  
class="diff_add">Under&nbsp;the&nbsp;hood,&nbsp;these&nbsp;functions&nbsp;simply&nbsp;create&nbsp;a&nbsp;pattern&nbsp;object&nbsp;for&nbsp;you</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_491">491</td><td  
nowrap="nowrap">and&nbsp;call&nbsp;the&nbsp;appropriate&nbsp;method&nbsp;on&nbsp;it.&nbsp;&nbsp;They&nbsp;also&nbsp;store&nbsp;the&nbsp;compiled&nbsp;object&nbsp;in&nbsp;a</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_492">492</td><td  
nowrap="nowrap">cache,&nbsp;so&nbsp;future&nbsp;calls&nbsp;using&nbsp;the&nbsp;same&nbsp;RE&nbsp;are&nbsp;faster.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_493">493</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_494">494</td><td  
nowrap="nowrap">Should&nbsp;you&nbsp;use&nbsp;these&nbsp;module-level&nbsp;functions,&nbsp;or&nbsp;should&nbsp;you&nbsp;get&nbsp;the</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__9">n</a></td><td  
class="diff_header" id="from51_495">495-</td><td nowrap="nowrap"><span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexObject`</span>&nbsp;and&nbsp;call&nbsp;its&nbsp;methods&nbsp;yourself?&nbsp;&nbsp;That&nbsp;choice&nbsp;depends&nbsp;on&nbsp;how</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__9">n</a></td><td  
class="diff_header" id="to51_495">495+</td><td nowrap="nowrap"><span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn</span>&nbsp;and&nbsp;call&nbsp;its&nbsp;methods&nbsp;yourself?&nbsp;&nbsp;That&nbsp;choice&nbsp;depends&nbsp;on&nbsp;how</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_496">496</td><td  
nowrap="nowrap">frequently&nbsp;the&nbsp;RE&nbsp;will&nbsp;be&nbsp;used,&nbsp;and&nbsp;on&nbsp;your&nbsp;personal&nbsp;coding&nbsp;style.&nbsp;&nbsp;If&nbsp;the&nbsp;RE&nbsp;is</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_497">497</td><td  
nowrap="nowrap">being&nbsp;used&nbsp;at&nbsp;only&nbsp;one&nbsp;point&nbsp;in&nbsp;the&nbsp;code,&nbsp;then&nbsp;the&nbsp;module&nbsp;functions&nbsp;are&nbsp;probably</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_498">498</td><td  
nowrap="nowrap">more&nbsp;convenient.&nbsp;&nbsp;If&nbsp;a&nbsp;program&nbsp;contains&nbsp;a&nbsp;lot&nbsp;of&nbsp;regular&nbsp;expressions,&nbsp;or&nbsp;re-uses</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_499">499</td><td  
nowrap="nowrap">the&nbsp;same&nbsp;ones&nbsp;in&nbsp;several&nbsp;locations,&nbsp;then&nbsp;it&nbsp;might&nbsp;be&nbsp;worthwhile&nbsp;to&nbsp;collect&nbsp;all</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_500">500</td><td  
nowrap="nowrap">the&nbsp;definitions&nbsp;in&nbsp;one&nbsp;place,&nbsp;in&nbsp;a&nbsp;section&nbsp;of&nbsp;code&nbsp;that&nbsp;compiles&nbsp;all&nbsp;the&nbsp;REs</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_501">501</td><td  
nowrap="nowrap">ahead&nbsp;of&nbsp;time.&nbsp;&nbsp;To&nbsp;take&nbsp;an&nbsp;example&nbsp;from&nbsp;the&nbsp;standard&nbsp;library,&nbsp;here's&nbsp;an&nbsp;extract</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_502">502</td><td  
nowrap="nowrap">from&nbsp;:file:`xmllib.py`::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from51_503">503</td><td  
nowrap="nowrap"></td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__9"></td><td  
class="diff_header" id="from51_1025">1025</td><td  
nowrap="nowrap">``.*[.](?!bat$|exe$).*$``</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1026">1026</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1027">1027</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1028">1028</td><td  
nowrap="nowrap">Modifying&nbsp;Strings</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1029">1029</td><td  
nowrap="nowrap">=================</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1030">1030</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1031">1031</td><td  
nowrap="nowrap">Up&nbsp;to&nbsp;this&nbsp;point,&nbsp;we've&nbsp;simply&nbsp;performed&nbsp;searches&nbsp;against&nbsp;a&nbsp;static&nbsp;string.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1032">1032</td><td  
nowrap="nowrap">Regular&nbsp;expressions&nbsp;are&nbsp;also&nbsp;commonly&nbsp;used&nbsp;to&nbsp;modify&nbsp;strings&nbsp;in&nbsp;various&nbsp;ways,</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__10">n</a></td><td  
class="diff_header" id="from51_1033">1033-</td><td nowrap="nowrap"><span  
class="diff_sub">using&nbsp;the&nbsp;following&nbsp;:class:`RegexObject`&nbsp;methods:</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__10">n</a></td><td  
class="diff_header" id="to51_1033">1033+</td><td nowrap="nowrap"><span  
class="diff_add">using&nbsp;the&nbsp;following&nbsp;pattern&nbsp;methods:</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1034">1034</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1035">1035</td><td  
nowrap="nowrap">+------------------+-----------------------------------------------+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1036">1036</td><td nowrap="nowrap">|&nbsp;Method/Attribute&nbsp;| 
&nbsp;Purpose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_1037">1037</td><td  
nowrap="nowrap">+==================+===============================================+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1038">1038</td><td nowrap="nowrap">| 
&nbsp;``split()``&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;Split&nbsp;the&nbsp;string&nbsp;into&nbsp;a&nbsp;list,&nbsp;splitting&nbsp;it&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_1039">1039</td><td nowrap="nowrap">| 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;wherever&nbsp;the&nbsp;RE&nbsp;matches&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_1040">1040</td><td  
nowrap="nowrap">+------------------+-----------------------------------------------+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1041">1041</td><td nowrap="nowrap">| 
&nbsp;``sub()``&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;Find&nbsp;all&nbsp;substrings&nbsp;where&nbsp;the&nbsp;RE&nbsp;matches,&nbsp;and&nbsp;| 
</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__10"></td><td  
class="diff_header" id="from51_1045">1045</td><td nowrap="nowrap">| 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;returns&nbsp;the&nbsp;new&nbsp;string&nbsp;and&nbsp;the&nbsp;number&nbsp;of&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_1046">1046</td><td nowrap="nowrap">| 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
&nbsp;replacements&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 
</td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from51_1047">1047</td><td  
nowrap="nowrap">+------------------+-----------------------------------------------+</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1048">1048</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1049">1049</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1050">1050</td><td  
nowrap="nowrap">Splitting&nbsp;Strings</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1051">1051</td><td  
nowrap="nowrap">-----------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1052">1052</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__11">n</a></td><td  
class="diff_header" id="from51_1053">1053-</td><td  
nowrap="nowrap">The&nbsp;:meth:`split`&nbsp;method&nbsp;of&nbsp;a&nbsp;<span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexObject`</span>&nbsp;splits&nbsp;a&nbsp;string&nbsp;apart</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__11">n</a></td><td  
class="diff_header" id="to51_1053">1053+</td><td  
nowrap="nowrap">The&nbsp;:meth:`split`&nbsp;method&nbsp;of&nbsp;a&nbsp;<span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn</span>&nbsp;splits&nbsp;a&nbsp;string&nbsp;apart</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1054">1054</td><td  
nowrap="nowrap">wherever&nbsp;the&nbsp;RE&nbsp;matches,&nbsp;returning&nbsp;a&nbsp;list&nbsp;of&nbsp;the&nbsp;pieces.&nbsp;It's&nbsp;similar&nbsp;to&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1055">1055</td><td  
nowrap="nowrap">:meth:`split`&nbsp;method&nbsp;of&nbsp;strings&nbsp;but&nbsp;provides&nbsp;much&nbsp;more&nbsp;generality&nbsp;in&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1056">1056</td><td  
nowrap="nowrap">delimiters&nbsp;that&nbsp;you&nbsp;can&nbsp;split&nbsp;by;&nbsp;:meth:`split`&nbsp;only&nbsp;supports&nbsp;splitting&nbsp;by</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1057">1057</td><td  
nowrap="nowrap">whitespace&nbsp;or&nbsp;by&nbsp;a&nbsp;fixed&nbsp;string.&nbsp;&nbsp;As&nbsp;you'd&nbsp;expect,&nbsp;there's&nbsp;a&nbsp;module-level</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1058">1058</td><td  
nowrap="nowrap">:func:`re.split`&nbsp;function,&nbsp;too.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1059">1059</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1060">1060</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1061">1061</td><td  
nowrap="nowrap">..&nbsp;method::&nbsp;.split(string&nbsp;[,&nbsp;maxsplit=0])</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to51__11"></td><td  
class="diff_header" id="from51_1190">1190</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value&nbsp;=&nbsp;int(&nbsp;match.group()&nbsp;)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1191">1191</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hex(value)</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to51__12"></td><td  
class="diff_header" id="from51_1192">1192</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;...</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1193">1193</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p&nbsp;=&nbsp;re.compile(r'\d+')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1194">1194</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;p.sub(hexrepl,&nbsp;'Call&nbsp;65490&nbsp;for&nbsp;printing,&nbsp;49152&nbsp;for&nbsp;user&nbsp;code.')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1195">1195</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;'Call&nbsp;0xffd2&nbsp;for&nbsp;printing,&nbsp;0xc000&nbsp;for&nbsp;user&nbsp;code.'</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1196">1196</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1197">1197</td><td  
nowrap="nowrap">When&nbsp;using&nbsp;the&nbsp;module-level&nbsp;:func:`re.sub`&nbsp;function,&nbsp;the&nbsp;pattern&nbsp;is&nbsp;passed&nbsp;as</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__12">n</a></td><td  
class="diff_header" id="from51_1198">1198-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;first&nbsp;argument.&nbsp;&nbsp;The&nbsp;pattern&nbsp;may&nbsp;be&nbsp;a&nbsp;string&nbsp;or&nbsp;a&nbsp;:class:`RegexObject`;&nbsp;if</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__12">n</a></td><td  
class="diff_header" id="to51_1198">1198+</td><td nowrap="nowrap"><span  
class="diff_add">the&nbsp;first&nbsp;argument.&nbsp;&nbsp;The&nbsp;pattern&nbsp;may&nbsp;be&nbsp;provided&nbsp;as&nbsp;an&nbsp;object&nbsp;or&nbsp;as&nbsp;a&nbsp;string;&nbsp;if</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1199">1199</td><td  
nowrap="nowrap">you&nbsp;need&nbsp;to&nbsp;specify&nbsp;regular&nbsp;expression&nbsp;flags,&nbsp;you&nbsp;must&nbsp;either&nbsp;use&nbsp;a</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to51__top">t</a></td><td  
class="diff_header" id="from51_1200">1200-</td><td nowrap="nowrap"><span  
class="diff_chg">:cl</span>a<span class="diff_chg">ss:`R</span>e<span  
class="diff_chg">gexO</span>bject<span  
class="diff_sub">`</span>&nbsp;as&nbsp;the&nbsp;first&nbsp;parameter,&nbsp;or&nbsp;use&nbsp;embedded&nbsp;modifiers&nbsp;in&nbsp;the</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to51__top">t</a></td><td  
class="diff_header" id="to51_1200">1200+</td><td nowrap="nowrap"><span  
class="diff_chg">p</span>a<span class="diff_chg">tt</span>e<span  
class="diff_chg">rn&nbsp;o</span>bject&nbsp;as&nbsp;the&nbsp;first&nbsp;parameter,&nbsp;or&nbsp;use&nbsp;embedded&nbsp;modifiers&nbsp;in&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1201">1201-</td><td nowrap="nowrap">pattern,&nbsp;e.g.<span  
class="diff_sub">&nbsp;</span>&nbsp;``sub("(?i)b+",&nbsp;"x",&nbsp;"bbbb&nbsp;BBBB")``&nbsp;returns&nbsp;``'x&nbsp;x'``.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to51_1201">1201+</td><td nowrap="nowrap">pattern<span  
class="diff_add">&nbsp;string</span>,&nbsp;e.g.&nbsp;``sub("(?i)b+",&nbsp;"x",&nbsp;"bbbb&nbsp;BBBB")``&nbsp;returns&nbsp;``'x&nbsp;x'``.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1202">1202</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1203">1203</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1204">1204</td><td  
nowrap="nowrap">Common&nbsp;Problems</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1205">1205</td><td  
nowrap="nowrap">===============</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1206">1206</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header"  
id="from51_1207">1207</td><td  
nowrap="nowrap">Regular&nbsp;expressions&nbsp;are&nbsp;a&nbsp;powerful&nbsp;tool&nbsp;for&nbsp;some&nbsp;applications,&nbsp;but&nbsp;in&nbsp;some&nbsp;ways</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1208">1208</td><td  
nowrap="nowrap">their&nbsp;behaviour&nbsp;isn't&nbsp;intuitive&nbsp;and&nbsp;at&nbsp;times&nbsp;they&nbsp;don't&nbsp;behave&nbsp;the&nbsp;way&nbsp;you&nbsp;may</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from51_1209">1209</td><td  
nowrap="nowrap">expect&nbsp;them&nbsp;to.&nbsp;&nbsp;This&nbsp;section&nbsp;will&nbsp;point&nbsp;out&nbsp;some&nbsp;of&nbsp;the&nbsp;most&nbsp;common&nbsp;pitfalls.</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/sockets.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,40 @@
+--- r262/howto/sockets.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/sockets.rst	2009-10-27 23:19:50.039185000 +0900
+@@ -195,35 +195,33 @@
+                    socket.AF_INET, socket.SOCK_STREAM)
+            else:
+                self.sock = sock
+
+        def connect(self, host, port):
+            self.sock.connect((host, port))
+
+        def mysend(self, msg):
+            totalsent = 0
+            while totalsent < MSGLEN:
+                sent = self.sock.send(msg[totalsent:])
+                if sent == 0:
+-                   raise RuntimeError, \
+-                       "socket connection broken"
++                   raise RuntimeError("socket connection broken")
+                totalsent = totalsent + sent
+
+        def myreceive(self):
+            msg = ''
+            while len(msg) < MSGLEN:
+                chunk = self.sock.recv(MSGLEN-len(msg))
+                if chunk == '':
+-                   raise RuntimeError, \
+-                       "socket connection broken"
++                   raise RuntimeError("socket connection broken")
+                msg = msg + chunk
+            return msg
+
+ The sending code here is usable for almost any messaging scheme - in  
Python you
+ send strings, and you can use ``len()`` to determine its length (even if  
it has
+ embedded ``\0`` characters). It's mostly the receiving code that gets more
+ complex. (And in C, it's not much worse, except you can't use ``strlen``  
if the
+ message has embedded ``\0``\ s.)
+
+ The easiest enhancement is to make the first character of the message an
+ indicator of message type, and have the type determine the length. Now  
you have
+ two ``recv``\ s - the first to get (at least) that first character so you  
can
=======================================
--- /dev/null
+++ /howto/diff/sockets.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,54 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to52__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/sockets.rst =&gt;  
r266/howto/sockets.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to52__0"></td><td class="diff_header"  
id="from52_199">199</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;connect(self,&nbsp;host,&nbsp;port):</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_200">200</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.sock.connect((host,&nbsp;port))</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_201">201</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from52_202">202</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;mysend(self,&nbsp;msg):</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_203">203</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalsent&nbsp;=&nbsp;0</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_204">204</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;totalsent&nbsp;&lt;&nbsp;MSGLEN:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_205">205</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sent&nbsp;=&nbsp;self.sock.send(msg[totalsent:])</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_206">206</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;sent&nbsp;==&nbsp;0:</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to52__1">n</a></td><td  
class="diff_header" id="from52_207">207-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise&nbsp;RuntimeError,&nbsp;\</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to52__1"></td><td  
class="diff_header" id="from52_208">208-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">&nbsp;&nbsp;&nbsp;&nbsp;</span>"socket&nbsp;connection&nbsp;broken"</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to52__1"></td><td  
class="diff_header" id="to52_207">207+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">raise&nbsp;RuntimeError(</span>"socket&nbsp;connection&nbsp;broken"<span  
class="diff_add">)</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from52_209">209</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;totalsent&nbsp;=&nbsp;totalsent&nbsp;+&nbsp;sent</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_210">210</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from52_211">211</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;def&nbsp;myreceive(self):</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_212">212</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;''</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_213">213</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while&nbsp;len(msg)&nbsp;&lt;&nbsp;MSGLEN:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_214">214</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chunk&nbsp;=&nbsp;self.sock.recv(MSGLEN-len(msg))</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_215">215</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;chunk&nbsp;==&nbsp;'':</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to52__top">t</a></td><td  
class="diff_header" id="from52_216">216-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;raise&nbsp;RuntimeError,&nbsp;\</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_217">217-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">&nbsp;&nbsp;&nbsp;&nbsp;</span>"socket&nbsp;connection&nbsp;broken"</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to52_215">215+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">raise&nbsp;RuntimeError(</span>"socket&nbsp;connection&nbsp;broken"<span  
class="diff_add">)</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from52_218">218</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;msg&nbsp;=&nbsp;msg&nbsp;+&nbsp;chunk</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_219">219</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;msg</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_220">220</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from52_221">221</td><td  
nowrap="nowrap">The&nbsp;sending&nbsp;code&nbsp;here&nbsp;is&nbsp;usable&nbsp;for&nbsp;almost&nbsp;any&nbsp;messaging&nbsp;scheme&nbsp;-&nbsp;in&nbsp;Python&nbsp;you</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_222">222</td><td  
nowrap="nowrap">send&nbsp;strings,&nbsp;and&nbsp;you&nbsp;can&nbsp;use&nbsp;``len()``&nbsp;to&nbsp;determine&nbsp;its&nbsp;length&nbsp;(even&nbsp;if&nbsp;it&nbsp;has</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_223">223</td><td  
nowrap="nowrap">embedded&nbsp;``\0``&nbsp;characters).&nbsp;It's&nbsp;mostly&nbsp;the&nbsp;receiving&nbsp;code&nbsp;that&nbsp;gets&nbsp;more</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_224">224</td><td  
nowrap="nowrap">complex.&nbsp;(And&nbsp;in&nbsp;C,&nbsp;it's&nbsp;not&nbsp;much&nbsp;worse,&nbsp;except&nbsp;you&nbsp;can't&nbsp;use&nbsp;``strlen``&nbsp;if&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from52_225">225</td><td  
nowrap="nowrap">message&nbsp;has&nbsp;embedded&nbsp;``\0``\&nbsp;s.)</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/unicode.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,65 @@
+--- r262/howto/unicode.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/unicode.rst	2009-10-28 00:08:27.384772000 +0900
+@@ -201,29 +201,30 @@
+ References
+ ----------
+
+ The Unicode Consortium site at <http://www.unicode.org> has character  
charts, a
+ glossary, and PDF versions of the Unicode specification.  Be prepared for  
some
+ difficult reading.  <http://www.unicode.org/history/> is a chronology of  
the
+ origin and development of Unicode.
+
+ To help understand the standard, Jukka Korpela has written an  
introductory guide
+ to reading the Unicode character tables, available at
+ <http://www.cs.tut.fi/~jkorpela/unicode/guide.html>.
+
+-Two other good introductory articles were written by Joel Spolsky
+-<http://www.joelonsoftware.com/articles/Unicode.html> and Jason Orendorff
+-<http://www.jorendorff.com/articles/unicode/>.  If this introduction  
didn't make
+-things clear to you, you should try reading one of these alternate  
articles
+-before continuing.
++Another good introductory article was written by Joel Spolsky
++<http://www.joelonsoftware.com/articles/Unicode.html>.
++If this introduction didn't make things clear to you, you should try  
reading this
++alternate article before continuing.
++
++.. Jason Orendorff XXX http://www.jorendorff.com/articles/unicode/ is  
broken
+
+ Wikipedia entries are often helpful; see the entries for "character  
encoding"
+ <http://en.wikipedia.org/wiki/Character_encoding> and UTF-8
+ <http://en.wikipedia.org/wiki/UTF-8>, for example.
+
+
+ Python's Unicode Support
+ ========================
+
+ Now that you've learned the rudiments of Unicode, we can look at Python's
+ Unicode features.
+
+@@ -462,25 +463,25 @@
+     1 0bf2 No TAMIL NUMBER ONE THOUSAND
+     2 0f84 Mn TIBETAN MARK HALANTA
+     3 1770 Lo TAGBANWA LETTER SA
+     4 33af So SQUARE RAD OVER S SQUARED
+     1000.0
+
+ The category codes are abbreviations describing the nature of the  
character.
+ These are grouped into categories such  
as "Letter", "Number", "Punctuation", or
+ "Symbol", which in turn are broken up into subcategories.  To take the  
codes
+ from the above output, ``'Ll'`` means 'Letter, lowercase', ``'No'`` means
+ "Number, other", ``'Mn'`` is "Mark, nonspacing", and ``'So'`` is "Symbol,
+ other".  See
+-<http://www.unicode.org/Public/UNIDATA/UCD.html#General_Category_Values>  
for a
++<http://unicode.org/Public/5.1.0/ucd/UCD.html#General_Category_Values>  
for a
+ list of category codes.
+
+ References
+ ----------
+
+ The Unicode and 8-bit string types are described in the Python library  
reference
+ at :ref:`typesseq`.
+
+ The documentation for the :mod:`unicodedata` module.
+
+ The documentation for the :mod:`codecs` module.
+
=======================================
--- /dev/null
+++ /howto/diff/unicode.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,63 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to53__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/unicode.rst =&gt;  
r266/howto/unicode.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to53__0"></td><td class="diff_header"  
id="from53_205">205</td><td  
nowrap="nowrap">glossary,&nbsp;and&nbsp;PDF&nbsp;versions&nbsp;of&nbsp;the&nbsp;Unicode&nbsp;specification.&nbsp;&nbsp;Be&nbsp;prepared&nbsp;for&nbsp;some</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_206">206</td><td  
nowrap="nowrap">difficult&nbsp;reading.&nbsp;&nbsp;&lt;http://www.unicode.org/history/&gt;&nbsp;is&nbsp;a&nbsp;chronology&nbsp;of&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_207">207</td><td  
nowrap="nowrap">origin&nbsp;and&nbsp;development&nbsp;of&nbsp;Unicode.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_208">208</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_209">209</td><td  
nowrap="nowrap">To&nbsp;help&nbsp;understand&nbsp;the&nbsp;standard,&nbsp;Jukka&nbsp;Korpela&nbsp;has&nbsp;written&nbsp;an&nbsp;introductory&nbsp;guide</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_210">210</td><td  
nowrap="nowrap">to&nbsp;reading&nbsp;the&nbsp;Unicode&nbsp;character&nbsp;tables,&nbsp;available&nbsp;at</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_211">211</td><td  
nowrap="nowrap">&lt;http://www.cs.tut.fi/~jkorpela/unicode/guide.html&gt;.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_212">212</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to53__1">n</a></td><td  
class="diff_header" id="from53_213">213-</td><td nowrap="nowrap"><span  
class="diff_chg">Two&nbsp;</span>other&nbsp;good&nbsp;introductory&nbsp;articles<span  
class="diff_sub">&nbsp;were</span>&nbsp;written&nbsp;by&nbsp;Joel&nbsp;Spolsky</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to53__1">n</a></td><td  
class="diff_header" id="to53_213">213+</td><td nowrap="nowrap"><span  
class="diff_chg">An</span>other&nbsp;good&nbsp;introductory&nbsp;article<span  
class="diff_add">&nbsp;wa</span>s&nbsp;written&nbsp;by&nbsp;Joel&nbsp;Spolsky</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_214">214-</td><td  
nowrap="nowrap">&lt;http://www.joelonsoftware.com/articles/Unicode.html&gt;<span  
class="diff_chg">&nbsp;and&nbsp;Jason&nbsp;Orendorff</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to53_214">214+</td><td  
nowrap="nowrap">&lt;http://www.joelonsoftware.com/articles/Unicode.html&gt;<span  
class="diff_chg">.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_215">215-</td><td nowrap="nowrap"><span  
class="diff_sub">&lt;http://www.jorendorff.com/articles/unicode/&gt;.&nbsp;&nbsp;If&nbsp;this&nbsp;introduction&nbsp;didn't&nbsp;make</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to53_215">215+</td><td nowrap="nowrap"><span  
class="diff_add">If&nbsp;this&nbsp;introduction&nbsp;didn't&nbsp;make&nbsp;things&nbsp;clear&nbsp;to&nbsp;you,&nbsp;you&nbsp;should&nbsp;try&nbsp;reading&nbsp;this</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_216">216-</td><td nowrap="nowrap"><span  
class="diff_sub">things&nbsp;clear&nbsp;to&nbsp;you,&nbsp;you&nbsp;should&nbsp;try&nbsp;reading&nbsp;one&nbsp;of&nbsp;these&nbsp;alternate&nbsp;articles</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to53_216">216+</td><td nowrap="nowrap"><span  
class="diff_add">alternate&nbsp;article&nbsp;before&nbsp;continuing.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_217">217-</td><td nowrap="nowrap"><span  
class="diff_sub">before&nbsp;continuing.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to53_217">217+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to53_218">218+</td><td nowrap="nowrap"><span  
class="diff_add">..&nbsp;Jason&nbsp;Orendorff&nbsp;XXX&nbsp;http://www.jorendorff.com/articles/unicode/&nbsp;is&nbsp;broken</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from53_218">218</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_219">219</td><td  
nowrap="nowrap">Wikipedia&nbsp;entries&nbsp;are&nbsp;often&nbsp;helpful;&nbsp;see&nbsp;the&nbsp;entries&nbsp;for&nbsp;"character&nbsp;encoding"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_220">220</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/Character_encoding&gt;&nbsp;and&nbsp;UTF-8</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_221">221</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/UTF-8&gt;,&nbsp;for&nbsp;example.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_222">222</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_223">223</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from53_224">224</td><td  
nowrap="nowrap">Python's&nbsp;Unicode&nbsp;Support</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_225">225</td><td  
nowrap="nowrap">========================</td></tr>        </tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to53__1"></td><td  
class="diff_header" id="from53_466">466</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;1000.0</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_467">467</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from53_468">468</td><td  
nowrap="nowrap">The&nbsp;category&nbsp;codes&nbsp;are&nbsp;abbreviations&nbsp;describing&nbsp;the&nbsp;nature&nbsp;of&nbsp;the&nbsp;character.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_469">469</td><td  
nowrap="nowrap">These&nbsp;are&nbsp;grouped&nbsp;into&nbsp;categories&nbsp;such&nbsp;as&nbsp;"Letter",&nbsp;"Number",&nbsp;"Punctuation",&nbsp;or</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_470">470</td><td  
nowrap="nowrap">"Symbol",&nbsp;which&nbsp;in&nbsp;turn&nbsp;are&nbsp;broken&nbsp;up&nbsp;into&nbsp;subcategories.&nbsp;&nbsp;To&nbsp;take&nbsp;the&nbsp;codes</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_471">471</td><td  
nowrap="nowrap">from&nbsp;the&nbsp;above&nbsp;output,&nbsp;``'Ll'``&nbsp;means&nbsp;'Letter,&nbsp;lowercase',&nbsp;``'No'``&nbsp;means</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_472">472</td><td  
nowrap="nowrap">"Number,&nbsp;other",&nbsp;``'Mn'``&nbsp;is&nbsp;"Mark,&nbsp;nonspacing",&nbsp;and&nbsp;``'So'``&nbsp;is&nbsp;"Symbol,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_473">473</td><td  
nowrap="nowrap">other".&nbsp;&nbsp;See</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to53__top">t</a></td><td  
class="diff_header" id="from53_474">474-</td><td  
nowrap="nowrap">&lt;http://<span  
class="diff_sub">www.</span>unicode.org/Public/<span  
class="diff_chg">UNIDATA</span>/UCD.html#General_Category_Values&gt;&nbsp;for&nbsp;a</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to53__top">t</a></td><td  
class="diff_header" id="to53_475">475+</td><td  
nowrap="nowrap">&lt;http://unicode.org/Public/<span  
class="diff_chg">5.1.0/ucd</span>/UCD.html#General_Category_Values&gt;&nbsp;for&nbsp;a</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from53_475">475</td><td  
nowrap="nowrap">list&nbsp;of&nbsp;category&nbsp;codes.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_476">476</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_477">477</td><td  
nowrap="nowrap">References</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_478">478</td><td  
nowrap="nowrap">----------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_479">479</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from53_480">480</td><td  
nowrap="nowrap">The&nbsp;Unicode&nbsp;and&nbsp;8-bit&nbsp;string&nbsp;types&nbsp;are&nbsp;described&nbsp;in&nbsp;the&nbsp;Python&nbsp;library&nbsp;reference</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from53_481">481</td><td  
nowrap="nowrap">at&nbsp;:ref:`typesseq`.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from53_482">482</td><td  
nowrap="nowrap"></td></tr>        </tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/urllib2.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,88 @@
+--- r262/howto/urllib2.rst	2009-01-04 06:55:17.853888000 +0900
++++ r266/howto/urllib2.rst	2009-10-27 23:37:48.900246000 +0900
+@@ -173,28 +173,27 @@
+     data = urllib.urlencode(values)
+     req = urllib2.Request(url, data, headers)
+     response = urllib2.urlopen(req)
+     the_page = response.read()
+
+ The response also has two useful methods. See the section on `info and  
geturl`_
+ which comes after we have a look at what happens when things go wrong.
+
+
+ Handling Exceptions
+ ===================
+
+-*urlopen* raises :exc:`URLError` when it cannot handle a response (though  
as usual
+-with Python APIs, builtin exceptions such as
+-:exc:`ValueError`, :exc:`TypeError` etc. may also
+-be raised).
++*urlopen* raises :exc:`URLError` when it cannot handle a response (though  
as
++usual with Python APIs, built-in exceptions such as :exc:`ValueError`,
++:exc:`TypeError` etc. may also be raised).
+
+ :exc:`HTTPError` is the subclass of :exc:`URLError` raised in the  
specific case of
+ HTTP URLs.
+
+ URLError
+ --------
+
+ Often, URLError is raised because there is no network connection (no  
route to
+ the specified server), or the specified server doesn't exist.  In this  
case, the
+ exception raised will have a 'reason' attribute, which is a tuple  
containing an
+ error code and a text error message.
+
+@@ -302,25 +301,25 @@
+               'The gateway server did not receive a timely response'),
+         505: ('HTTP Version Not Supported', 'Cannot fulfill request.'),
+         }
+
+ When an error is raised the server responds by returning an HTTP error  
code
+ *and* an error page. You can use the :exc:`HTTPError` instance as a  
response on the
+ page returned. This means that as well as the code attribute, it also has  
read,
+ geturl, and info, methods. ::
+
+     >>> req = urllib2.Request('http://www.python.org/fish.html')
+     >>> try:
+     >>>     urllib2.urlopen(req)
+-    >>> except URLError, e:
++    >>> except HTTPError, e:
+     >>>     print e.code
+     >>>     print e.read()
+     >>>
+     404
+     <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+         "http://www.w3.org/TR/html4/loose.dtd">
+     <?xml-stylesheet href="./css/ht2html.css"
+         type="text/css"?>
+     <html><head><title>Error 404: File Not Found</title>
+     ...... etc...
+
+ Wrapping it Up
+@@ -479,25 +478,25 @@
+     # create "opener" (OpenerDirector instance)
+     opener = urllib2.build_opener(handler)
+
+     # use the opener to fetch a URL
+     opener.open(a_url)
+
+     # Install the opener.
+     # Now all calls to urllib2.urlopen use our opener.
+     urllib2.install_opener(opener)
+
+ .. note::
+
+-    In the above example we only supplied our ``HHTPBasicAuthHandler`` to
++    In the above example we only supplied our ``HTTPBasicAuthHandler`` to
+     ``build_opener``. By default openers have the handlers for normal  
situations
+     -- ``ProxyHandler``, ``UnknownHandler``, ``HTTPHandler``,
+     ``HTTPDefaultErrorHandler``, ``HTTPRedirectHandler``, ``FTPHandler``,
+     ``FileHandler``, ``HTTPErrorProcessor``.
+
+ ``top_level_url`` is in fact *either* a full URL (including the 'http:'  
scheme
+ component and the hostname and optionally the port number)
+ e.g. "http://example.com/" *or* an "authority" (i.e. the hostname,
+ optionally including the port number) e.g. "example.com"  
or "example.com:8080"
+ (the latter example includes a port number).  The authority, if present,  
must
+ NOT contain the "userinfo" component - for  
example "joe @ password:example.com" is
+ not correct.
=======================================
--- /dev/null
+++ /howto/diff/urllib2.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,63 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to54__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/urllib2.rst =&gt;  
r266/howto/urllib2.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next"  
id="difflib_chg_to54__0"></td><td class="diff_header"  
id="from54_177">177</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_178">178</td><td  
nowrap="nowrap">The&nbsp;response&nbsp;also&nbsp;has&nbsp;two&nbsp;useful&nbsp;methods.&nbsp;See&nbsp;the&nbsp;section&nbsp;on&nbsp;`info&nbsp;and&nbsp;geturl`_</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_179">179</td><td  
nowrap="nowrap">which&nbsp;comes&nbsp;after&nbsp;we&nbsp;have&nbsp;a&nbsp;look&nbsp;at&nbsp;what&nbsp;happens&nbsp;when&nbsp;things&nbsp;go&nbsp;wrong.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_180">180</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_181">181</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from54_182">182</td><td  
nowrap="nowrap">Handling&nbsp;Exceptions</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_183">183</td><td  
nowrap="nowrap">===================</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_184">184</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to54__1">n</a></td><td class="diff_header"  
id="from54_185">185-</td><td  
nowrap="nowrap">*urlopen*&nbsp;raises&nbsp;:exc:`URLError`&nbsp;when&nbsp;it&nbsp;cannot&nbsp;handle&nbsp;a&nbsp;response&nbsp;(though&nbsp;as<span  
class="diff_sub">&nbsp;usual</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to54__1">n</a></td><td  
class="diff_header" id="to54_185">185+</td><td  
nowrap="nowrap">*urlopen*&nbsp;raises&nbsp;:exc:`URLError`&nbsp;when&nbsp;it&nbsp;cannot&nbsp;handle&nbsp;a&nbsp;response&nbsp;(though&nbsp;as</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_186">186-</td><td  
nowrap="nowrap">with&nbsp;Python&nbsp;APIs,&nbsp;builtin&nbsp;exceptions&nbsp;such&nbsp;as</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to54_186">186+</td><td nowrap="nowrap"><span  
class="diff_add">usual&nbsp;</span>with&nbsp;Python&nbsp;APIs,&nbsp;built<span  
class="diff_add">-</span>in&nbsp;exceptions&nbsp;such&nbsp;as<span  
class="diff_add">&nbsp;:exc:`ValueError`,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_187">187-</td><td nowrap="nowrap"><span  
class="diff_sub">:exc:`ValueError`,&nbsp;:exc:`TypeError`&nbsp;etc.&nbsp;may&nbsp;also</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to54_187">187+</td><td nowrap="nowrap"><span  
class="diff_add">:exc:`TypeError`&nbsp;etc.&nbsp;may&nbsp;also&nbsp;be&nbsp;raised).</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_188">188-</td><td nowrap="nowrap"><span  
class="diff_sub">be&nbsp;raised).</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from54_189">189</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_190">190</td><td  
nowrap="nowrap">:exc:`HTTPError`&nbsp;is&nbsp;the&nbsp;subclass&nbsp;of&nbsp;:exc:`URLError`&nbsp;raised&nbsp;in&nbsp;the&nbsp;specific&nbsp;case&nbsp;of</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_191">191</td><td  
nowrap="nowrap">HTTP&nbsp;URLs.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_192">192</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from54_193">193</td><td  
nowrap="nowrap">URLError</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_194">194</td><td  
nowrap="nowrap">--------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_195">195</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from54_196">196</td><td  
nowrap="nowrap">Often,&nbsp;URLError&nbsp;is&nbsp;raised&nbsp;because&nbsp;there&nbsp;is&nbsp;no&nbsp;network&nbsp;connection&nbsp;(no&nbsp;route&nbsp;to</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to54__1"></td><td  
class="diff_header" id="from54_306">306</td><td  
nowrap="nowrap">When&nbsp;an&nbsp;error&nbsp;is&nbsp;raised&nbsp;the&nbsp;server&nbsp;responds&nbsp;by&nbsp;returning&nbsp;an&nbsp;HTTP&nbsp;error&nbsp;code</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_307">307</td><td  
nowrap="nowrap">*and*&nbsp;an&nbsp;error&nbsp;page.&nbsp;You&nbsp;can&nbsp;use&nbsp;the&nbsp;:exc:`HTTPError`&nbsp;instance&nbsp;as&nbsp;a&nbsp;response&nbsp;on&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_308">308</td><td  
nowrap="nowrap">page&nbsp;returned.&nbsp;This&nbsp;means&nbsp;that&nbsp;as&nbsp;well&nbsp;as&nbsp;the&nbsp;code&nbsp;attribute,&nbsp;it&nbsp;also&nbsp;has&nbsp;read,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_309">309</td><td  
nowrap="nowrap">geturl,&nbsp;and&nbsp;info,&nbsp;methods.&nbsp;::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_310">310</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_311">311</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;req&nbsp;=&nbsp;urllib2.Request('http://www.python.org/fish.html')</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_312">312</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;try:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_313">313</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;urllib2.urlopen(req)</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to54__2">n</a></td><td  
class="diff_header" id="from54_314">314-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;except&nbsp;<span  
class="diff_chg">URL</span>Error,&nbsp;e:</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to54__2">n</a></td><td  
class="diff_header" id="to54_313">313+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;except&nbsp;<span  
class="diff_chg">HTTP</span>Error,&nbsp;e:</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from54_315">315</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;e.code</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_316">316</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;e.read()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_317">317</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_318">318</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;404</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_319">319</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&lt;!DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_320">320</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"http://www.w3.org/TR/html4/loose.dtd"&gt;</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_321">321</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&lt;?xml-stylesheet&nbsp;href="./css/ht2html.css"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_322">322</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;type="text/css"?&gt;</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to54__2"></td><td  
class="diff_header" id="from54_483">483</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;opener.open(a_url)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_484">484</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_485">485</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Install&nbsp;the&nbsp;opener.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_486">486</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;Now&nbsp;all&nbsp;calls&nbsp;to&nbsp;urllib2.urlopen&nbsp;use&nbsp;our&nbsp;opener.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_487">487</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;urllib2.install_opener(opener)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_488">488</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_489">489</td><td  
nowrap="nowrap">..&nbsp;note::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_490">490</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to54__top">t</a></td><td class="diff_header"  
id="from54_491">491-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;the&nbsp;above&nbsp;example&nbsp;we&nbsp;only&nbsp;supplied&nbsp;our&nbsp;``H<span  
class="diff_chg">H</span>TPBasicAuthHandler``&nbsp;to</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to54__top">t</a></td><td  
class="diff_header" id="to54_490">490+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;In&nbsp;the&nbsp;above&nbsp;example&nbsp;we&nbsp;only&nbsp;supplied&nbsp;our&nbsp;``H<span  
class="diff_chg">T</span>TPBasicAuthHandler``&nbsp;to</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from54_492">492</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;``build_opener``.&nbsp;By&nbsp;default&nbsp;openers&nbsp;have&nbsp;the&nbsp;handlers&nbsp;for&nbsp;normal&nbsp;situations</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_493">493</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;--&nbsp;``ProxyHandler``,&nbsp;``UnknownHandler``,&nbsp;``HTTPHandler``,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_494">494</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;``HTTPDefaultErrorHandler``,&nbsp;``HTTPRedirectHandler``,&nbsp;``FTPHandler``,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_495">495</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;``FileHandler``,&nbsp;``HTTPErrorProcessor``.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_496">496</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from54_497">497</td><td  
nowrap="nowrap">``top_level_url``&nbsp;is&nbsp;in&nbsp;fact&nbsp;*either*&nbsp;a&nbsp;full&nbsp;URL&nbsp;(including&nbsp;the&nbsp;'http:'&nbsp;scheme</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_498">498</td><td  
nowrap="nowrap">component&nbsp;and&nbsp;the&nbsp;hostname&nbsp;and&nbsp;optionally&nbsp;the&nbsp;port&nbsp;number)</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from54_499">499</td><td  
nowrap="nowrap">e.g.&nbsp;"http://example.com/"&nbsp;*or*&nbsp;an&nbsp;"authority"&nbsp;(i.e.&nbsp;the&nbsp;hostname,</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>
=======================================
--- /dev/null
+++ /howto/diff/webservers.rst.diff	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,1132 @@
+--- r262/howto/webservers.rst	2009-02-23 19:41:11.107573000 +0900
++++ r266/howto/webservers.rst	2010-04-05 13:00:14.619029000 +0900
+@@ -1,96 +1,97 @@
+ *******************************
+   HOWTO Use Python in the web
+ *******************************
+
+ :Author: Marek Kubica
+
+ .. topic:: Abstract
+
+-   This document shows how Python fits into the web.  It presents some  
ways on
+-   how to integrate Python with the web server and general practices  
useful for
++   This document shows how Python fits into the web.  It presents some  
ways
++   to integrate Python with a web server, and general practices useful for
+    developing web sites.
+
+
+-Programming for the Web has become a hot topic since the raise of  
the "Web 2.0",
++Programming for the Web has become a hot topic since the rise of "Web  
2.0",
+ which focuses on user-generated content on web sites.  It has always been
+ possible to use Python for creating web sites, but it was a rather  
tedious task.
+-Therefore, many so-called "frameworks" and helper tools were created to  
help
+-developers creating sites faster and these sites being more robust.  This  
HOWTO
+-describes some of the methods used to combine Python with a web server to  
create
+-dynamic content.  It is not meant as a general introduction as this topic  
is far
+-too broad to be covered in one single document.  However, a short  
overview of
+-the most popular libraries is provided.
++Therefore, many frameworks and helper tools have been created to assist
++developers in creating faster and more robust sites.  This HOWTO describes
++some of the methods used to combine Python with a web server to create
++dynamic content.  It is not meant as a complete introduction, as this  
topic is
++far too broad to be covered in one single document.  However, a short  
overview
++of the most popular libraries is provided.
+
+ .. seealso::
+
+-   While this HOWTO tries to give an overview over Python in the Web, it  
cannot
+-   always be as up to date as desired.  Web development in Python is  
moving
+-   forward rapidly, so the wiki page on `Web Programming
+-   <http://wiki.python.org/moin/WebProgramming>`_ might be more in sync  
with
++   While this HOWTO tries to give an overview of Python in the web, it  
cannot
++   always be as up to date as desired.  Web development in Python is  
rapidly
++   moving forward, so the wiki page on `Web Programming
++   <http://wiki.python.org/moin/WebProgramming>`_ may be more in sync with
+    recent development.
+
+
+-The low-level view
++The Low-Level View
+ ==================
+
+-.. .. image:: http.png
+-
+-When a user enters a web site, his browser makes a connection to the  
site's
+-webserver (this is called the *request*).  The server looks up the file  
in the
++When a user enters a web site, their browser makes a connection to the  
site's
++web server (this is called the *request*).  The server looks up the file  
in the
+ file system and sends it back to the user's browser, which displays it  
(this is
+-the *response*).  This is roughly how the unterlying protocol, HTTP works.
++the *response*).  This is roughly how the underlying protocol, HTTP,  
works.
+
+-Now, dynamic web sites are not files in the file system, but rather  
programs
+-which are run by the web server when a request comes in.  They can do all  
sorts
+-of useful things, like display the postings of a bulletin board, show your
+-mails, configurate software or just display the current time.  These  
programs
+-can be written in about any programming language the server supports, so  
it is
+-easy to use Python for creating dynamic web sites.
+-
+-As most of HTTP servers are written in C or C++, they cannot execute  
Python code
+-in a simple way -- a bridge is needed between the server and the  
program.  These
+-bridges or rather interfaces define how programs interact with the  
server.  In
+-the past there have been numerous attempts to create the best possible
+-interface, but there are only a few worth mentioning.
+-
+-Not every web server supports every interface.  Many web servers do  
support only
+-old, now-obsolete interfaces.  But they can often be extended using some
+-third-party modules to support new interfaces.
++Dynamic web sites are not based on files in the file system, but rather on
++programs which are run by the web server when a request comes in, and  
which
++*generate* the content that is returned to the user.  They can do all  
sorts of
++useful things, like display the postings of a bulletin board, show your  
email,
++configure software, or just display the current time.  These programs can  
be
++written in any programming language the server supports.  Since most  
servers
++support Python, it is easy to use Python to create dynamic web sites.
++
++Most HTTP servers are written in C or C++, so they cannot execute Python  
code
++directly -- a bridge is needed between the server and the program.  These
++bridges, or rather interfaces, define how programs interact with the  
server.
++There have been numerous attempts to create the best possible interface,  
but
++there are only a few worth mentioning.
++
++Not every web server supports every interface.  Many web servers only  
support
++old, now-obsolete interfaces; however, they can often be extended using
++third-party modules to support newer ones.
+
+
+ Common Gateway Interface
+ ------------------------
+
+-This interface is the oldest one, supported by nearly every web server  
out of
+-the box.  Programs using CGI to communicate with their web server need to  
be
+-started by the server for every request.  So, every request starts a new  
Python
+-interpreter -- which takes some time to start up -- thus making the whole
+-interface only usable for low load situations.
+-
+-The upside of CGI is that it is simple -- writing a program which uses  
CGI is a
+-matter of about three lines of code.  But this simplicity comes at a  
price: it
+-does very few things to help the developer.
+-
+-Writing CGI programs, while still possible, is not recommended anymore.   
With
+-WSGI (more on that later) it is possible to write programs that emulate  
CGI, so
+-they can be run as CGI if no better option is available.
++This interface, most commonly referred to as "CGI", is the oldest, and is
++supported by nearly every web server out of the box.  Programs using CGI  
to
++communicate with their web server need to be started by the server for  
every
++request.  So, every request starts a new Python interpreter -- which  
takes some
++time to start up -- thus making the whole interface only usable for low  
load
++situations.
++
++The upside of CGI is that it is simple -- writing a Python program which  
uses
++CGI is a matter of about three lines of code.  This simplicity comes at a
++price: it does very few things to help the developer.
++
++Writing CGI programs, while still possible, is no longer recommended.   
With
++:ref:`WSGI <WSGI>`, a topic covered later in this document, it is  
possible to write
++programs that emulate CGI, so they can be run as CGI if no better option  
is
++available.
+
+ .. seealso::
+
+    The Python standard library includes some modules that are helpful for
+    creating plain CGI programs:
+
+    * :mod:`cgi` -- Handling of user input in CGI scripts
+-   * :mod:`cgitb` -- Displays nice tracebacks when errors happen in of CGI
++   * :mod:`cgitb` -- Displays nice tracebacks when errors happen in CGI
+      applications, instead of presenting a "500 Internal Server Error"  
message
+
+    The Python wiki features a page on `CGI scripts
+    <http://wiki.python.org/moin/CgiScripts>`_ with some additional  
information
+    about CGI in Python.
+
+
+ Simple script for testing CGI
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ To test whether your web server works with CGI, you can use this short and
+ simple CGI program::
+@@ -98,189 +99,201 @@
+     #!/usr/bin/env python
+     # -*- coding: UTF-8 -*-
+
+     # enable debugging
+     import cgitb
+     cgitb.enable()
+
+     print "Content-Type: text/plain;charset=utf-8"
+     print
+
+     print "Hello World!"
+
+-You need to write this code into a file with a ``.py`` or ``.cgi``  
extension,
+-this depends on your web server configuration.  Depending on your web  
server
+-configuration, this file may also need to be in a ``cgi-bin`` folder, for
+-security reasons.
++Depending on your web server configuration, you may need to save this  
code with
++a ``.py`` or ``.cgi`` extension.  Additionally, this file may also need  
to be
++in a ``cgi-bin`` folder, for security reasons.
+
+ You might wonder what the ``cgitb`` line is about.  This line makes it  
possible
+ to display a nice traceback instead of just crashing and displaying  
an "Internal
+ Server Error" in the user's browser.  This is useful for debugging, but  
it might
+-risk exposing some confident data to the user.  Don't use it when the  
script is
+-ready for production use.  Still, you should *always* catch exceptions,  
and
++risk exposing some confidential data to the user.  You should not use  
``cgitb``
++in production code for this reason.  You should *always* catch  
exceptions, and
+ display proper error pages -- end-users don't like to see  
nondescript "Internal
+ Server Errors" in their browsers.
+
+
+ Setting up CGI on your own server
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+ If you don't have your own web server, this does not apply to you.  You  
can
+-check whether if works as-is and if not you need to talk to the  
administrator of
+-your web server anyway. If it is a big hoster, you can try filing a ticket
+-asking for Python support.
+-
+-If you're your own administrator or want to install it for testing  
purposes on
+-your own computers, you have to configure it by yourself.  There is no  
one and
+-single way on how to configure CGI, as there are many web servers with  
different
+-configuration options.  The currently most widely used free web server is
+-`Apache HTTPd <http://httpd.apache.org/>`_, Apache for short -- this is  
the one
+-that most people use, it can be easily installed on nearly every system  
using
+-the systems' package management.  But `lighttpd  
<http://www.lighttpd.net>`_ has
+-been gaining attention since some time and is said to have a better  
performance.
+-On many systems this server can also be installed using the package  
management,
+-so manually compiling the web server is never needed.
++check whether it works as-is, and if not you will need to talk to the
++administrator of your web server. If it is a big host, you can try filing  
a
++ticket asking for Python support.
++
++If you are your own administrator or want to set up CGI for testing  
purposes on
++your own computers, you have to configure it by yourself.  There is no  
single
++way to configure CGI, as there are many web servers with different
++configuration options.  Currently the most widely used free web server is
++`Apache HTTPd <http://httpd.apache.org/>`_, or Apache for short. Apache  
can be
++easily installed on nearly every system using the system's package  
management
++tool.  `lighttpd <http://www.lighttpd.net>`_ is another alternative and is
++said to have better performance.  On many systems this server can also be
++installed using the package management tool, so manually compiling the web
++server may not be needed.
+
+-* On Apache you can take a look into the `Dynamic Content with CGI
++* On Apache you can take a look at the `Dynamic Content with CGI
+   <http://httpd.apache.org/docs/2.2/howto/cgi.html>`_ tutorial, where  
everything
+   is described.  Most of the time it is enough just to set ``+ExecCGI``.   
The
+   tutorial also describes the most common gotchas that might arise.
++
+ * On lighttpd you need to use the `CGI module
+-  <http://trac.lighttpd.net/trac/wiki/Docs%3AModCGI>`_ which can be  
configured
++  <http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModCGI>`_\ , which can  
be configured
+   in a straightforward way.  It boils down to setting ``cgi.assign``  
properly.
+
+
+ Common problems with CGI scripts
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+-Trying to use CGI sometimes leads to small annoyances that one might  
experience
+-while trying to get these scripts to run.  Sometimes it happens that a  
seemingly
+-correct script does not work as expected, which is caused by some small  
hidden
+-reason that's difficult to spot.
++Using CGI sometimes leads to small annoyances while trying to get these
++scripts to run.  Sometimes a seemingly correct script does not work as
++expected, the cause being some small hidden problem that's difficult to  
spot.
+
+-Some of these reasons are:
++Some of these potential problems are:
+
+-* The Python script is not marked executable.  When CGI scripts are not
+-  executable most of the web servers will let the user download it,  
instead of
++* The Python script is not marked as executable.  When CGI scripts are not
++  executable most web servers will let the user download it, instead of
+   running it and sending the output to the user.  For CGI scripts to run
+-  properly the ``+x`` bit needs to be set.  Using ``chmod a+x  
your_script.py``
+-  might already solve the problem.
+-* The line endings must be of Unix-type.  This is important because the  
web
+-  server checks the first line of the script (called shebang) and tries  
to run
+-  the program specified there.  It gets easily confused by Windows line  
endings
+-  (Carriage Return & Line Feed, also called CRLF), so you have to convert  
the
+-  file to Unix line endings (only Line Feed, LF).  This can be done
+-  automatically by uploading the file via FTP in text mode instead of  
binary
+-  mode, but the preferred way is just telling your editor to save the  
files with
+-  Unix line endings.  Most proper editors support this.
+-* Your web server must be able to read the file, you need to make sure the
+-  permissions are fine.  Often the server runs as user and group  
``www-data``,
+-  so it might be worth a try to change the file ownership or making the  
file
+-  world readable by using ``chmod a+r your_script.py``.
+-* The webserver must be able to know that the file you're trying to  
access is a
+-  CGI script.  Check the configuration of your web server, maybe there is  
some
+-  mistake.
+-* The path to the interpreter in the shebang (``#!/usr/bin/env python``)  
must be
+-  currect.  This line calls ``/usr/bin/env`` to find Python, but it'll  
fail if
+-  there is no ``/usr/bin/env``.  If you know where your Python is  
installed, you
+-  can also use that path.  The commands ``whereis python`` and ``type -p
+-  python`` might also help to find where it is installed.  Once this is  
known,
+-  the shebang line can be changed accordingly: ``#!/usr/bin/python``.
++  properly on Unix-like operating systems, the ``+x`` bit needs to be set.
++  Using ``chmod a+x your_script.py`` may solve this problem.
++
++* On a Unix-like system, The line endings in the program file must be Unix
++  style line endings.  This is important because the web server checks the
++  first line of the script (called shebang) and tries to run the program
++  specified there.  It gets easily confused by Windows line endings  
(Carriage
++  Return & Line Feed, also called CRLF), so you have to convert the file  
to
++  Unix line endings (only Line Feed, LF).  This can be done automatically  
by
++  uploading the file via FTP in text mode instead of binary mode, but the
++  preferred way is just telling your editor to save the files with Unix  
line
++  endings.  Most editors support this.
++
++* Your web server must be able to read the file, and you need to make  
sure the
++  permissions are correct.  On unix-like systems, the server often runs  
as user
++  and group ``www-data``, so it might be worth a try to change the file
++  ownership, or making the file world readable by using ``chmod a+r
++  your_script.py``.
++
++* The web server must know that the file you're trying to access is a CGI  
script.
++  Check the configuration of your web server, as it may be configured
++  to expect a specific file extension for CGI scripts.
++
++* On Unix-like systems, the path to the interpreter in the shebang
++  (``#!/usr/bin/env python``) must be correct.  This line calls
++  ``/usr/bin/env`` to find Python, but it will fail if there is no
++  ``/usr/bin/env``, or if Python is not in the web server's path.  If you  
know
++  where your Python is installed, you can also use that full path.  The
++  commands ``whereis python`` and ``type -p python`` could help you find
++  where it is installed.  Once you know the path, you can change the  
shebang
++  accordingly: ``#!/usr/bin/python``.
++
+ * The file must not contain a BOM (Byte Order Mark). The BOM is meant for
+-  determining the byte order of UTF-16 encodings, but some editors write  
this
+-  also into UTF-8 files.  The BOM interferes with the shebang line, so be  
sure
+-  to tell your editor not to write the BOM.
+-* :ref:`mod-python` might be making problems.  mod_python is able to  
handle CGI
+-  scripts by itself, but it can also be a source for problems.  Be sure  
you
+-  disable it.
++  determining the byte order of UTF-16 and UTF-32 encodings, but some  
editors
++  write this also into UTF-8 files.  The BOM interferes with the shebang  
line,
++  so be sure to tell your editor not to write the BOM.
++
++* If the web server is using :ref:`mod-python`, ``mod_python`` may be  
having
++  problems.  ``mod_python`` is able to handle CGI scripts by itself, but  
it can
++  also be a source of issues.
+
+
+ .. _mod-python:
+
+ mod_python
+ ----------
+
+ People coming from PHP often find it hard to grasp how to use Python in  
the web.
+-Their first thought is mostly `mod_python <http://www.modpython.org/>`_  
because
+-they think that this is the equivalent to ``mod_php``.  Actually it is not
+-really.  It does embed the interpreter into the Apache process, thus  
speeding up
+-requests by not having to start a Python interpreter every request.  On  
the
+-other hand, it is by far not "Python intermixed with HTML" as PHP often  
does.
+-The Python equivalent of that is a template engine.  mod_python itself is  
much
+-more powerful and gives more access to Apache internals.  It can emulate  
CGI, it
+-can work an a "Python Server Pages" mode similar to JSP which is "HTML
+-intermangled with Python" and it has a "Publisher" which destignates one  
file to
+-accept all requests and decide on what to do then.
+-
+-But mod_python has some problems.  Unlike the PHP interpreter the Python
+-interpreter uses caching when executing files, so when changing a file  
the whole
+-web server needs to be re-started to update.  Another problem ist the  
basic
+-concept -- Apache starts some child processes to handle the requests and
+-unfortunately every child process needs to load the whole Python  
interpreter
+-even if it does not use it.  This makes the whole web server slower.   
Another
+-problem is that as mod_python is linked against a specific version of
+-``libpython``, it is not possible to switch from an older version to a  
newer
+-(e.g. 2.4 to 2.5) without recompiling mod_python.  mod_python is also  
bound to
+-the Apache web server, so programs written for mod_python cannot easily  
run on
+-other web servers.
+-
+-These are the reasons why mod_python should be avoided when writing new
+-programs.  In some circumstances it might be still a good idea to use  
mod_python
+-for deployment, but WSGI makes it possible to run WSGI programs under  
mod_python
+-as well.
++Their first thought is mostly `mod_python <http://www.modpython.org/>`_\ ,
++because they think that this is the equivalent to ``mod_php``.  Actually,  
there
++are many differences.  What ``mod_python`` does is embed the interpreter  
into
++the Apache process, thus speeding up requests by not having to start a  
Python
++interpreter for each request.  On the other hand, it is not "Python  
intermixed
++with HTML" in the way that PHP is often intermixed with HTML. The Python
++equivalent of that is a template engine.  ``mod_python`` itself is much  
more
++powerful and provides more access to Apache internals.  It can emulate  
CGI,
++work in a "Python Server Pages" mode (similar to JSP) which is "HTML
++intermingled with Python", and it has a "Publisher" which designates one  
file
++to accept all requests and decide what to do with them.
++
++``mod_python`` does have some problems.  Unlike the PHP interpreter, the  
Python
++interpreter uses caching when executing files, so changes to a file will
++require the web server to be restarted.  Another problem is the basic  
concept
++-- Apache starts child processes to handle the requests, and unfortunately
++every child process needs to load the whole Python interpreter even if it  
does
++not use it.  This makes the whole web server slower.  Another problem is  
that,
++because ``mod_python`` is linked against a specific version of  
``libpython``,
++it is not possible to switch from an older version to a newer (e.g. 2.4  
to 2.5)
++without recompiling ``mod_python``.  ``mod_python`` is also bound to the  
Apache
++web server, so programs written for ``mod_python`` cannot easily run on  
other
++web servers.
++
++These are the reasons why ``mod_python`` should be avoided when writing  
new
++programs.  In some circumstances it still might be a good idea to use
++``mod_python`` for deployment, but WSGI makes it possible to run WSGI  
programs
++under ``mod_python`` as well.
+
+
+ FastCGI and SCGI
+ ----------------
+
+ FastCGI and SCGI try to solve the performance problem of CGI in another  
way.
+ Instead of embedding the interpreter into the web server, they create
+-long-running processes which run in the background. There still is some  
module
+-in the web server which makes it possible for the web server to "speak"  
with the
+-background process.  As the background process is independent from the  
server,
+-it can be written in any language of course also in Python.  The language  
just
+-needs to have a library which handles the communication with the web  
server.
++long-running background processes. There is still a module in the web  
server
++which makes it possible for the web server to "speak" with the background
++process.  As the background process is independent of the server, it can  
be
++written in any language, including Python.  The language just needs to  
have a
++library which handles the communication with the webserver.
+
+ The difference between FastCGI and SCGI is very small, as SCGI is  
essentially
+-just a "simpler FastCGI".  But as the web server support for SCGI is  
limited
++just a "simpler FastCGI".  As the web server support for SCGI is limited,
+ most people use FastCGI instead, which works the same way.  Almost  
everything
+-that applies to SCGI also applies to FastCGI as well, so we'll only write  
about
++that applies to SCGI also applies to FastCGI as well, so we'll only cover
+ the latter.
+
+-These days, FastCGI is never used directly.  Just like ``mod_python`` it  
is only
++These days, FastCGI is never used directly.  Just like ``mod_python``, it  
is only
+ used for the deployment of WSGI applications.
+
+ .. seealso::
+
+    * `FastCGI, SCGI, and Apache: Background and Future
+       
<http://www.vmunix.com/mark/blog/archives/2006/01/02/fastcgi-scgi-and-apache-background-and-future/>`_
+      is a discussion on why the concept of FastCGI and SCGI is better  
that that
+      of mod_python.
+
+
+ Setting up FastCGI
+ ^^^^^^^^^^^^^^^^^^
+
+-Depending on the web server you need to have a special module.
++Each web server requires a specific module.
+
+-* Apache has both `mod_fastcgi <http://www.fastcgi.com/>`_ and `mod_fcgid
++* Apache has both `mod_fastcgi <http://www.fastcgi.com/drupal/>`_ and  
`mod_fcgid
+   <http://fastcgi.coremail.cn/>`_.  ``mod_fastcgi`` is the original one,  
but it
+-  has some licensing issues that's why it is sometimes considered  
non-free.
+-  ``mod_fcgid`` is a smaller, compatible alternative. One of these  
modules needs
++  has some licensing issues, which is why it is sometimes considered  
non-free.
++  ``mod_fcgid`` is a smaller, compatible alternative.  One of these  
modules needs
+   to be loaded by Apache.
++
+ * lighttpd ships its own `FastCGI module
+-  <http://trac.lighttpd.net/trac/wiki/Docs%3AModFastCGI>`_ as well as an  
`SCGI
+-  module <http://trac.lighttpd.net/trac/wiki/Docs%3AModSCGI>`_.
+-* nginx also supports `FastCGI
+-  <http://wiki.codemongers.com/NginxSimplePythonFCGI>`_.
++  <http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModFastCGI>`_ as well  
as an
++  `SCGI module <http://redmine.lighttpd.net/wiki/lighttpd/Docs:ModSCGI>`_.
++
++* `nginx <http://nginx.org/>`_ also supports `FastCGI
++  <http://wiki.nginx.org/NginxSimplePythonFCGI>`_.
+
+ Once you have installed and configured the module, you can test it with  
the
+ following WSGI-application::
+
+     #!/usr/bin/env python
+     # -*- coding: UTF-8 -*-
+
+     from cgi import escape
+     import sys, os
+     from flup.server.fcgi import WSGIServer
+
+     def app(environ, start_response):
+@@ -292,407 +305,440 @@
+              yield '<tr><th>%s</th><td>%s</td></tr>' % (escape(k),  
escape(v))
+         yield '</table>'
+
+     WSGIServer(app).run()
+
+ This is a simple WSGI application, but you need to install `flup
+ <http://pypi.python.org/pypi/flup/1.0>`_ first, as flup handles the low  
level
+ FastCGI access.
+
+ .. seealso::
+
+    There is some documentation on `setting up Django with FastCGI
+-   <http://www.djangoproject.com/documentation/fastcgi/>`_, most of which  
can be
+-   reused for other WSGI-compliant frameworks and libraries.  Only the
+-   ``manage.py`` part has to be changed, the example used here can be used
+-   instead. Django does more or less the exact same thing.
++   <http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/>`_,  
most of
++   which can be reused for other WSGI-compliant frameworks and libraries.
++   Only the ``manage.py`` part has to be changed, the example used here  
can be
++   used instead.  Django does more or less the exact same thing.
+
+
+ mod_wsgi
+ --------
+
+-`mod_wsgi <http://www.modwsgi.org/>`_ is an attempt to get rid of the low  
level
+-gateways.  As FastCGI, SCGI, mod_python are mostly used to deploy WSGI
+-applications anyway, mod_wsgi was started to directly embed WSGI  
aplications
+-into the Apache web server.  The benefit from this approach is that WSGI
+-applications can be deployed much easier as is is specially designed to  
host
+-WSGI applications -- unlike the other low level methods which have glue  
code to
+-host WSGI applications (like flup which was mentioned before).  The  
downside is
+-that mod_wsgi is limited to the Apache web server, other servers would  
need
++`mod_wsgi <http://code.google.com/p/modwsgi/>`_ is an attempt to get rid  
of the
++low level gateways.  Given that FastCGI, SCGI, and mod_python are mostly  
used to
++deploy WSGI applications, mod_wsgi was started to directly embed WSGI  
applications
++into the Apache web server. mod_wsgi is specifically designed to host WSGI
++applications.  It makes the deployment of WSGI applications much easier  
than
++deployment using other low level methods, which need glue code.  The  
downside
++is that mod_wsgi is limited to the Apache web server; other servers would  
need
+ their own implementations of mod_wsgi.
+
+-It supports two modes: the embedded mode in which it integrates with the  
Apache
+-process and the daemon mode which is more FastCGI-like.  Contrary to  
FastCGI,
+-mod_wsgi handles the worker-processes by itself which makes administration
++mod_wsgi supports two modes: embedded mode, in which it integrates with  
the
++Apache process, and daemon mode, which is more FastCGI-like.  Unlike  
FastCGI,
++mod_wsgi handles the worker-processes by itself, which makes  
administration
+ easier.
+
+
+ .. _WSGI:
+
+ Step back: WSGI
+ ===============
+
+-WSGI was already mentioned several times so it has to be something  
important.
+-In fact it really is, so now it's time to explain.
++WSGI has already been mentioned several times, so it has to be something
++important.  In fact it really is, and now it is time to explain it.
+
+-The *Web Server Gateway Interface*, :pep:`333` or WSGI for short is  
currently
+-the best possible way to Python web programming.  While it is great for
+-programmers writing frameworks, the normal person does not need to get in  
direct
+-contact with it.  But when choosing a framework for web development it is  
a good
+-idea to take one which supports WSGI.
+-
+-The big profit from WSGI is the unification.  When your program is  
compatible
+-with WSGI -- that means that your framework has support for WSGI, your  
program
+-can be deployed on every web server interface for which there are WSGI  
wrappers.
+-So you do not need to care about whether the user uses mod_python or  
FastCGI --
+-with WSGI it just works on any gateway interface.  The Python standard  
library
+-contains its own WSGI server :mod:`wsgiref`, which is a small web server  
that
+-can be used for testing.
+-
+-A really great WSGI feature are the middlewares.  Middlewares are layers  
around
+-your program which can add various functionality to it.  There is a  
`number of
+-middlewares <http://wsgi.org/wsgi/Middleware_and_Utilities>`_ already  
available.
+-For example, instead of writing your own session management (to identify  
a user
+-in subsequent requests, as HTTP does not maintain state, so it does now  
know
+-that the requests belong to the same user) you can just take one  
middleware,
+-plug it in and you can rely an already existing functionality.  The same  
thing
+-is compression -- say you want to compress your HTML using gzip, to save  
your
+-server's bandwidth.  So you only need to plug-in a middleware and you're  
done.
+-Authentication is also a problem easily solved using a middleware.
+-
+-So, generally -- although WSGI may seem complex, the initial phase of  
learning
+-can be very rewarding as WSGI does already have solutions to many  
problems that
+-might arise while writing web sites.
++The *Web Server Gateway Interface*,  or WSGI for short, is defined in
++:pep:`333` and is currently the best way to do Python web programming.   
While
++it is great for programmers writing frameworks, a normal web developer  
does not
++need to get in direct contact with it.  When choosing a framework for web
++development it is a good idea to choose one which supports WSGI.
++
++The big benefit of WSGI is the unification of the application programming
++interface.  When your program is compatible with WSGI -- which at the  
outer
++level means that the framework you are using has support for WSGI -- your
++program can be deployed via any web server interface for which there are  
WSGI
++wrappers.  You do not need to care about whether the application user uses
++mod_python or FastCGI or mod_wsgi -- with WSGI your application will work  
on
++any gateway interface.  The Python standard library contains its own WSGI
++server, :mod:`wsgiref`, which is a small web server that can be used for
++testing.
++
++A really great WSGI feature is middleware.  Middleware is a layer around  
your
++program which can add various functionality to it.  There is quite a bit  
of
++`middleware <http://wsgi.org/wsgi/Middleware_and_Utilities>`_ already
++available.  For example, instead of writing your own session management  
(HTTP
++is a stateless protocol, so to associate multiple HTTP requests with a  
single
++user your application must create and manage such state via a session),  
you can
++just download middleware which does that, plug it in, and get on with  
coding
++the unique parts of your application.  The same thing with compression --  
there
++is existing middleware which handles compressing your HTML using gzip to  
save
++on your server's bandwidth.  Authentication is another a problem easily  
solved
++using existing middleware.
++
++Although WSGI may seem complex, the initial phase of learning can be very
++rewarding because WSGI and the associated middleware already have  
solutions to
++many problems that might arise while developing web sites.
+
+
+ WSGI Servers
+ ------------
+
+ The code that is used to connect to various low level gateways like CGI or
+-mod_python is called *WSGI server*.  One of these servers is ``flup``  
which was
+-already mentioned and supports FastCGI, SCGI as well as `AJP
++mod_python is called a *WSGI server*.  One of these servers is ``flup``,  
which
++supports FastCGI and SCGI, as well as `AJP
+ <http://en.wikipedia.org/wiki/Apache_JServ_Protocol>`_.  Some of these  
servers
+-are written in Python as ``flup`` is, but there also exist others which  
are
++are written in Python, as ``flup`` is, but there also exist others which  
are
+ written in C and can be used as drop-in replacements.
+
+-There are quite a lot of servers already available, so a Python web  
application
+-can be deployed nearly everywhere.  This is one big advantage that Python  
has
+-compared with other web techniques.
++There are many servers already available, so a Python web application
++can be deployed nearly anywhere.  This is one big advantage that Python  
has
++compared with other web technologies.
+
+ .. seealso::
+
+-   A good overview of all WSGI-related code can be found in the `WSGI wiki
++   A good overview of WSGI-related code can be found in the `WSGI wiki
+    <http://wsgi.org/wsgi>`_, which contains an extensive list of `WSGI  
servers
+-   <http://wsgi.org/wsgi/Servers>`_, which can be used by *every*  
application
++   <http://wsgi.org/wsgi/Servers>`_ which can be used by *any* application
+    supporting WSGI.
+
+    You might be interested in some WSGI-supporting modules already  
contained in
+    the standard library, namely:
+
+    * :mod:`wsgiref` -- some tiny utilities and servers for WSGI
+
+
+ Case study: MoinMoin
+ --------------------
+
+-What does WSGI give the web application developer?  Let's take a look on  
one
+-long existing web application written in Python without using WSGI.
+-
+-One of the most widely used wiki software is `MoinMoin  
<http://moinmo.in/>`_.
+-It was created in 2000, so it predates WSGI by about three years.  While  
it now
+-includes support for WSGI, older versions needed separate code to run on  
CGI,
+-mod_python, FastCGI and standalone.  Now, this all is possible by using  
WSGI and
+-the already-written gateways.  For running with on FastCGI ``flup`` can  
be used,
+-for running a standalone server :mod:`wsgiref` is the way to go.
++What does WSGI give the web application developer?  Let's take a look at
++an application that's been around for a while, which was written in
++Python without using WSGI.
++
++One of the most widely used wiki software packages is `MoinMoin
++<http://moinmo.in/>`_.  It was created in 2000, so it predates WSGI by  
about
++three years.  Older versions needed separate code to run on CGI,  
mod_python,
++FastCGI and standalone.
++
++It now includes support for WSGI.  Using WSGI, it is possible to deploy
++MoinMoin on any WSGI compliant server, with no additional glue code.
++Unlike the pre-WSGI versions, this could include WSGI servers that the
++authors of MoinMoin know nothing about.
+
+
+-Model-view-controller
++Model-View-Controller
+ =====================
+
+-The term *MVC* is often heard in statements like "framework *foo*  
supports MVC".
+-While MVC is not really something technical but rather organisational,  
many web
+-frameworks use this model to help the developer to bring structure into  
his
+-program.  Bigger web applications can have lots of code so it is a good  
idea to
+-have structure in the program right from the beginnings.  That way, even  
users
+-of other frameworks (or even languages, as MVC is nothing  
Python-specific) can
+-understand the existing code easier, as they are already familiar with the
+-structure.
++The term *MVC* is often encountered in statements such as "framework *foo*
++supports MVC".  MVC is more about the overall organization of code,  
rather than
++any particular API.  Many web frameworks use this model to help the  
developer
++bring structure to their program.  Bigger web applications can have lots  
of
++code, so it is a good idea to have an effective structure right from the  
beginning.
++That way, even users of other frameworks (or even other languages, since  
MVC is
++not Python-specific) can easily understand the code, given that they are
++already familiar with the MVC structure.
+
+ MVC stands for three components:
+
+-* The *model*.  This is the data that is meant to modify.  In Python  
frameworks
+-  this component is often represented by the classes used by the
+-  object-relational mapper.  So, all declarations go here.
++* The *model*.  This is the data that will be displayed and modified.  In
++  Python frameworks, this component is often represented by the classes  
used by
++  an object-relational mapper.
++
+ * The *view*.  This component's job is to display the data of the model  
to the
+-  user.  Typically this component is represented by the templates.
++  user.  Typically this component is implemented via templates.
++
+ * The *controller*.  This is the layer between the user and the model.   
The
+-  controller reacts on user actions (like opening some specific URL) and  
tells
+-  the model to modify the data if neccessary.
++  controller reacts to user actions (like opening some specific URL),  
tells
++  the model to modify the data if necessary, and tells the view code what  
to
++  display,
+
+ While one might think that MVC is a complex design pattern, in fact it is  
not.
+ It is used in Python because it has turned out to be useful for creating  
clean,
+ maintainable web sites.
+
+ .. note::
+
+    While not all Python frameworks explicitly support MVC, it is often  
trivial
+-   to create a web site which uses the MVC pattern by seperating the data  
logic
++   to create a web site which uses the MVC pattern by separating the data  
logic
+    (the model) from the user interaction logic (the controller) and the
+-   templates (the view).  That's why it is important not to write  
unneccessary
+-   Python code in the templates -- it is against MVC and creates more  
chaos.
++   templates (the view).  That's why it is important not to write  
unnecessary
++   Python code in the templates -- it works against the MVC model and  
creates
++   chaos in the code base, making it harder to understand and modify.
+
+ .. seealso::
+
+-   The english Wikipedia has an article about the `Model-View-Controller  
pattern
+-   <http://en.wikipedia.org/wiki/Model-view-controller>`_, which includes  
a long
+-   list of web frameworks for different programming languages.
++   The English Wikipedia has an article about the `Model-View-Controller  
pattern
++   <http://en.wikipedia.org/wiki/Model-view-controller>`_.  It includes a  
long
++   list of web frameworks for various programming languages.
+
+
+-Ingredients for web sites
+-=========================
+-
+-Web sites are complex constructs, so tools were created to help the web  
site
+-developer to make his work maintainable.  None of these tools are in any  
way
+-Python specific, they also exist for other programming languages as  
well.  Of
+-course, developers are not forced to use these tools and often there is no
+-"best" tool, but it is worth informing yourself before choosing something
+-because of the big number of helpers that the developer can use.
++Ingredients for Websites
++========================
++
++Websites are complex constructs, so tools have been created to help web
++developers make their code easier to write and more maintainable.  Tools  
like
++these exist for all web frameworks in all languages.  Developers are not  
forced
++to use these tools, and often there is no "best" tool.  It is worth  
learning
++about the available tools because they can greatly simplify the process of
++developing a web site.
+
+
+ .. seealso::
+
+-   People have written far more components that can be combined than these
+-   presented here.  The Python wiki has a page about these components,  
called
++   There are far more components than can be presented here.  The Python  
wiki
++   has a page about these components, called
+    `Web Components <http://wiki.python.org/moin/WebComponents>`_.
+
+
+ Templates
+ ---------
+
+-Mixing of HTML and Python code is possible with some libraries.  While
++Mixing of HTML and Python code is made possible by a few libraries.  While
+ convenient at first, it leads to horribly unmaintainable code.  That's why
+ templates exist.  Templates are, in the simplest case, just HTML files  
with
+-placeholders.  The HTML is sent to the user's browser after filling out  
the
++placeholders.  The HTML is sent to the user's browser after filling in the
+ placeholders.
+
+-Python already includes such simple templates::
++Python already includes two ways to build simple templates::
+
+-    # a simple template
+-    template = "<html><body><h1>Hello %s!</h1></body></html>"
+-    print template % "Reader"
+-
+-The Python standard library also includes some more advanced templates  
usable
+-through :class:`string.Template`, but in HTML templates it is needed to  
use
+-conditional and looping contructs like Python's *for* and *if*.  So, some
+-*template engine* is needed.
+-
+-Now, Python has a lot of template engines which can be used with or  
without a
+-`framework`_.  Some of these are using a plain-text programming language  
which
+-is very easy to learn as it is quite limited while others use XML so the
+-template output is always guaranteed to be valid XML.  Some `frameworks`_  
ship
+-their own template engine or recommend one particular.  If one is not yet  
sure,
+-using these is a good idea.
+-
+-.. note::
+-
+-   While Python has quite a lot of different template engines it usually  
does
+-   not make sense to use a homebrewed template system.  The time needed to
+-   evaluate all templating systems is not really worth it, better invest  
the
+-   time in looking through the most popular ones.  Some frameworks have  
their
+-   own template engine or have a recommentation for one.  It's wise to use
+-   these.
+-
+-   Popular template engines include:
+-
+-   * Mako
+-   * Genshi
+-   * Jinja
++    >>> template = "<html><body><h1>Hello %s!</h1></body></html>"
++    >>> print template % "Reader"
++    <html><body><h1>Hello Reader!</h1></body></html>
++
++    >>> from string import Template
++    >>> template = Template("<html><body><h1>Hello  
${name}</h1></body></html>")
++    >>> print template.substitute(dict(name='Dinsdale'))
++    <html><body><h1>Hello Dinsdale!</h1></body></html>
++
++To generate complex HTML based on non-trivial model data, conditional
++and looping constructs like Python's *for* and *if* are generally needed.
++*Template engines* support templates of this complexity.
++
++There are a lot of template engines available for Python which can be  
used with
++or without a `framework`_.  Some of these define a plain-text programming
++language which is easy to learn, partly because it is limited in scope.
++Others use XML, and the template output is guaranteed to be always be  
valid
++XML.  There are many other variations.
++
++Some `frameworks`_ ship their own template engine or recommend one in
++particular.  In the absence of a reason to use a different template  
engine,
++using the one provided by or recommended by the framework is a good idea.
++
++Popular template engines include:
++
++   * `Mako <http://www.makotemplates.org/>`_
++   * `Genshi <http://genshi.edgewall.org/>`_
++   * `Jinja <http://jinja.pocoo.org/2/>`_
+
+ .. seealso::
+
+-   Lots of different template engines divide the attention between  
themselves
+-   because it's easy to create them in Python.  The page `Templating
++   There are many template engines competing for attention, becuase it is
++   pretty easy to create them in Python.  The page `Templating
+    <http://wiki.python.org/moin/Templating>`_ in the wiki lists a big,
+-   ever-growing number of these.
++   ever-growing number of these.  The three listed above are  
considered "second
++   generation" template engines and are a good place to start.
+
+
+ Data persistence
+ ----------------
+
+-*Data persistence*, while sounding very complicated is just about storing  
data.
+-This data might be the text of blog entries, the postings of a bulletin  
board or
+-the text of a wiki page.  As always, there are different ways to store
+-informations on a web server.
+-
+-Often relational database engines like `MySQL <http://www.mysql.com/>`_ or
+-`PostgreSQL <http://http://www.postgresql.org/>`_ are used due to their  
good
+-performance handling very large databases consisting of up to millions of
+-entries.  These are *queried* using a language called `SQL
+-<http://en.wikipedia.org/wiki/SQL>`_.  Python programmers in general do  
not like
+-SQL too much, they prefer to work with objects.  It is possible to save  
Python
+-objects into a database using a technology called `ORM
+-<http://en.wikipedia.org/wiki/Object-relational_mapping>`_.  ORM  
translates all
+-object-oriented access into SQL code under the hood, the user does not  
need to
+-think about it.  Most `frameworks`_ use ORMs and it works quite well.
+-
+-A second possibility is using files that are saved on the hard disk  
(sometimes
+-called flatfiles).  This is very easy, but is not too fast.  There is  
even a
+-small database engine called `SQLite <http://www.sqlite.org/>`_ which is  
bundled
+-with Python in the :mod:`sqlite` module and uses only one file.  This  
database
+-can be used to store objects via an ORM and has no other dependencies.   
For
+-smaller sites SQLite is just enough.  But it is not the only way in which  
data
+-can be saved into the file systems.  Sometimes normal, plain text files  
are
+-enough.
+-
+-The third and least used possibility are so-called object oriented  
databases.
+-These databases store the *actual objects* instead of the relations that
+-OR-mapping creates between rows in a database.  This has the advantage  
that
+-nearly all objects can be saven in a straightforward way, unlike in  
relational
+-databases where some objects are very hard to represent with ORMs.
+-
+-`Frameworks`_ often give the users hints on which method to choose, it is
+-usually a good idea to stick to these unless there are some special  
requirements
+-which require to use the one method and not the other.
++*Data persistence*, while sounding very complicated, is just about  
storing data.
++This data might be the text of blog entries, the postings on a bulletin  
board or
++the text of a wiki page.  There are, of course, a number of different  
ways to store
++information on a web server.
++
++Often, relational database engines like `MySQL <http://www.mysql.com/>`_  
or
++`PostgreSQL <http://www.postgresql.org/>`_ are used because of their good
++performance when handling very large databases consisting of millions of
++entries.  There is also a small database engine called `SQLite
++<http://www.sqlite.org/>`_, which is bundled with Python in  
the :mod:`sqlite3`
++module, and which uses only one file.  It has no other dependencies.  For
++smaller sites SQLite is just enough.
++
++Relational databases are *queried* using a language called `SQL
++<http://en.wikipedia.org/wiki/SQL>`_.  Python programmers in general do  
not
++like SQL too much, as they prefer to work with objects.  It is possible  
to save
++Python objects into a database using a technology called `ORM
++<http://en.wikipedia.org/wiki/Object-relational_mapping>`_ (Object  
Relational
++Mapping).  ORM translates all object-oriented access into SQL code under  
the
++hood, so the developer does not need to think about it.  Most  
`frameworks`_ use
++ORMs, and it works quite well.
++
++A second possibility is storing data in normal, plain text files (some
++times called "flat files").  This is very easy for simple sites,
++but can be difficult to get right if the web site is performing many
++updates to the stored data.
++
++A third possibility are object oriented databases (also called "object
++databases").  These databases store the object data in a form that closely
++parallels the way the objects are structured in memory during program
++execution.  (By contrast, ORMs store the object data as rows of data in  
tables
++and relations between those rows.)  Storing the objects directly has the
++advantage that nearly all objects can be saved in a straightforward way,  
unlike
++in relational databases where some objects are very hard to represent.
++
++`Frameworks`_ often give hints on which data storage method to choose.   
It is
++usually a good idea to stick to the data store recommended by the  
framework
++unless the application has special requirements better satisfied by an
++alternate storage mechanism.
+
+ .. seealso::
+
+    * `Persistence Tools <http://wiki.python.org/moin/PersistenceTools>`_  
lists
+-     possibilities on how to save data in the file system, some of these  
modules
+-     are part of the standard library
++     possibilities on how to save data in the file system.  Some of these
++     modules are part of the standard library
++
+    * `Database Programming  
<http://wiki.python.org/moin/DatabaseProgramming>`_
+-     helps on choosing a method on how to save the data
+-   * `SQLAlchemy <http://www.sqlalchemy.org/>`_, the most powerful  
OR-Mapper for
+-     Python and `Elixir <http://elixir.ematia.de/>`_ which makes it  
easier to
+-     use
++     helps with choosing a method for saving data
++
++   * `SQLAlchemy <http://www.sqlalchemy.org/>`_, the most powerful  
OR-Mapper
++     for Python, and `Elixir <http://elixir.ematia.de/>`_, which makes
++     SQLAlchemy easier to use
++
+    * `SQLObject <http://www.sqlobject.org/>`_, another popular OR-Mapper
++
+    * `ZODB <https://launchpad.net/zodb>`_ and `Durus
+      <http://www.mems-exchange.org/software/durus/>`_, two object oriented
+      databases
+
+
+ .. _framework:
+
+ Frameworks
+ ==========
+
+-As web sites can easily become quite large, there are so-called  
frameworks which
+-were created to help the developer with making these sites.  Although the  
most
+-well-known framework is Ruby on Rails, Python does also have its own  
frameworks
+-which are partly inspired by Rails or which were existing a long time  
before
+-Rails.
+-
+-Two possible approaches to web frameworks exist: the minimalistic  
approach and
+-the all-inclusive approach (somtimes called *full-stack*). Frameworks  
which are
+-all-inclusive give you everything you need to start working, like a  
template
+-engine, some way to save and access data in databases and many features  
more.
+-Most users are best off using these as they are widely used by lots of  
other
+-users and well documented in form of books and tutorials.  Other web  
frameworks
+-go the minimalistic approach trying to be as flexible as possible leaving  
the
+-user the freedom to choose what's best for him.
+-
+-The majority of users is best off with all-inclusive framewors.  They  
bring
+-everything along so a user can just jump in and start to code.  While  
they do
+-have some limitations they can fullfill 80% of what one will ever want to
+-perfectly.  They consist of various components which are designed to work
+-together as good as possible.
+-
+-The multitude of web frameworks written in Python demonstrates that it is  
really
+-easy to write one.  One of the most well-known web applications written in
+-Python is `Zope <http://www.zope.org/>`_ which can be regarded as some  
kind of
+-big framework.  But Zope was not the only framework, there were some  
others
+-which are by now nearly forgotten.  These do not need to be mentioned  
anymore,
+-because most people that used them moved on to newer ones.
++The process of creating code to run web sites involves writing code to  
provide
++various services.  The code to provide a particular service often works  
the
++same way regardless of the complexity or purpose of the web site in  
question.
++Abstracting these common solutions into reusable code produces what are  
called
++"frameworks" for web development.  Perhaps the most well-known framework  
for
++web development is Ruby on Rails, but Python has its own frameworks.   
Some of
++these were partly inspired by Rails, or borrowed ideas from Rails, but  
many
++existed a long time before Rails.
++
++Originally Python web frameworks tended to incorporate all of the services
++needed to develop web sites as a giant, integrated set of tools.  No two  
web
++frameworks were interoperable:  a program developed for one could not be
++deployed on a different one without considerable re-engineering work.   
This led
++to the development of "minimalist" web frameworks that provided just the  
tools
++to communicate between the Python code and the http protocol, with all  
other
++services to be added on top via separate components.  Some ad hoc  
standards
++were developed that allowed for limited interoperability between  
frameworks,
++such as a standard that allowed different template engines to be used
++interchangeably.
++
++Since the advent of WSGI, the Python web framework world has been evolving
++toward interoperability based on the WSGI standard.  Now many web  
frameworks,
++whether "full stack" (providing all the tools one needs to deploy the most
++complex web sites) or minimalist, or anything in between, are built from
++collections of reusable components that can be used with more than one
++framework.
++
++The majority of users will probably want to select a "full stack"  
framework
++that has an active community.  These frameworks tend to be well  
documented,
++and provide the easiest path to producing a fully functional web site in
++minimal time.
+
+
+ Some notable frameworks
+ -----------------------
+
+-There is an incredible number of frameworks, so there is no way to  
describe them
+-all.  It is not even neccessary, as most of these frameworks are nothing  
special
+-and everything that can be done with these can also be done with one of  
the
+-popular ones.
++There are an incredible number of frameworks, so they cannot all be  
covered
++here.  Instead we will briefly touch on some of the most popular.
+
+
+ Django
***The diff for this file has been truncated for email.***
=======================================
--- /dev/null
+++ /howto/diff/webservers.rst.html	Sat Mar 19 08:45:35 2011
@@ -0,0 +1,828 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html>
+
+<head>
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=ISO-8859-1" />
+    <title></title>
+    <style type="text/css">
+        table.diff {font-family:Courier; border:medium;}
+        .diff_header {background-color:#e0e0e0}
+        td.diff_header {text-align:right}
+        .diff_next {background-color:#c0c0c0}
+        .diff_add {background-color:#aaffaa}
+        .diff_chg {background-color:#ffff77}
+        .diff_sub {background-color:#ffaaaa}
+    </style>
+</head>
+
+<body>
+
+        <table class="diff" id="difflib_chg_to55__top"
+               cellspacing="0" cellpadding="0" rules="groups" >
+            <colgroup></colgroup> <colgroup></colgroup>  
<colgroup></colgroup>
+            <thead><tr><th class="diff_next"><br /></th><th colspan="2"  
class="diff_header">r262/howto/webservers.rst =&gt;  
r266/howto/webservers.rst</th></tr></thead>
+            <tbody>
+                <tr><td class="diff_next" id="difflib_chg_to55__0"><a  
href="#difflib_chg_to55__0">f</a></td><td class="diff_header"  
id="from55_1">1</td><td  
nowrap="nowrap">*******************************</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_2">2</td><td  
nowrap="nowrap">&nbsp;&nbsp;HOWTO&nbsp;Use&nbsp;Python&nbsp;in&nbsp;the&nbsp;web</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_3">3</td><td  
nowrap="nowrap">*******************************</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_4">4</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_5">5</td><td  
nowrap="nowrap">:Author:&nbsp;Marek&nbsp;Kubica</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__1"></td><td  
class="diff_header" id="from55_6">6</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_7">7</td><td  
nowrap="nowrap">..&nbsp;topic::&nbsp;Abstract</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_8">8</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"  
id="difflib_chg_to55__2"><a href="#difflib_chg_to55__1">n</a></td><td  
class="diff_header" id="from55_9">9-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;This&nbsp;document&nbsp;shows&nbsp;how&nbsp;Python&nbsp;fits&nbsp;into&nbsp;the&nbsp;web.&nbsp;&nbsp;It&nbsp;presents&nbsp;some&nbsp;ways<span  
class="diff_sub">&nbsp;on</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__2"><a  
href="#difflib_chg_to55__1">n</a></td><td class="diff_header"  
id="to55_9">9+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;This&nbsp;document&nbsp;shows&nbsp;how&nbsp;Python&nbsp;fits&nbsp;into&nbsp;the&nbsp;web.&nbsp;&nbsp;It&nbsp;presents&nbsp;some&nbsp;ways</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_10">10-</td><td nowrap="nowrap">&nbsp;&nbsp;<span  
class="diff_sub">&nbsp;how</span>&nbsp;to&nbsp;integrate&nbsp;Python&nbsp;with&nbsp;<span  
class="diff_chg">the</span>&nbsp;web&nbsp;server&nbsp;and&nbsp;general&nbsp;practices&nbsp;useful&nbsp;for</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_10">10+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;to&nbsp;integrate&nbsp;Python&nbsp;with&nbsp;<span  
class="diff_chg">a</span>&nbsp;web&nbsp;server<span  
class="diff_add">,</span>&nbsp;and&nbsp;general&nbsp;practices&nbsp;useful&nbsp;for</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_11">11</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;developing&nbsp;web&nbsp;sites.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_12">12</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_13">13</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__2">n</a></td><td class="diff_header"  
id="from55_14">14-</td><td  
nowrap="nowrap">Programming&nbsp;for&nbsp;the&nbsp;Web&nbsp;has&nbsp;become&nbsp;a&nbsp;hot&nbsp;topic&nbsp;since&nbsp;the&nbsp;r<span  
class="diff_sub">a</span>ise&nbsp;of<span  
class="diff_sub">&nbsp;the</span>&nbsp;"Web&nbsp;2.0",</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__2">n</a></td><td  
class="diff_header" id="to55_14">14+</td><td  
nowrap="nowrap">Programming&nbsp;for&nbsp;the&nbsp;Web&nbsp;has&nbsp;become&nbsp;a&nbsp;hot&nbsp;topic&nbsp;since&nbsp;the&nbsp;rise&nbsp;of&nbsp;"Web&nbsp;2.0",</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_15">15</td><td  
nowrap="nowrap">which&nbsp;focuses&nbsp;on&nbsp;user-generated&nbsp;content&nbsp;on&nbsp;web&nbsp;sites.&nbsp;&nbsp;It&nbsp;has&nbsp;always&nbsp;been</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_16">16</td><td  
nowrap="nowrap">possible&nbsp;to&nbsp;use&nbsp;Python&nbsp;for&nbsp;creating&nbsp;web&nbsp;sites,&nbsp;but&nbsp;it&nbsp;was&nbsp;a&nbsp;rather&nbsp;tedious&nbsp;task.</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__3">n</a></td><td  
class="diff_header" id="from55_17">17-</td><td  
nowrap="nowrap">Therefore,&nbsp;many&nbsp;<span  
class="diff_sub">so-called&nbsp;"</span>frameworks<span  
class="diff_sub">"</span>&nbsp;and&nbsp;helper&nbsp;tools&nbsp;<span  
class="diff_chg">w</span>e<span  
class="diff_chg">r</span>e&nbsp;created&nbsp;to&nbsp;<span  
class="diff_chg">help</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__3">n</a></td><td  
class="diff_header" id="to55_17">17+</td><td  
nowrap="nowrap">Therefore,&nbsp;many&nbsp;frameworks&nbsp;and&nbsp;helper&nbsp;tools&nbsp;<span  
class="diff_chg">hav</span>e<span class="diff_chg">&nbsp;b</span>e<span  
class="diff_add">en</span>&nbsp;created&nbsp;to&nbsp;<span  
class="diff_chg">assist</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__3"></td><td  
class="diff_header" id="from55_18">18-</td><td nowrap="nowrap"><span  
class="diff_sub">developers&nbsp;creating&nbsp;sites&nbsp;faster&nbsp;and&nbsp;these&nbsp;sites&nbsp;being&nbsp;more&nbsp;robust.&nbsp;&nbsp;This&nbsp;HOWTO</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__3"></td><td  
class="diff_header" id="to55_18">18+</td><td nowrap="nowrap"><span  
class="diff_add">developers&nbsp;in&nbsp;creating&nbsp;faster&nbsp;and&nbsp;more&nbsp;robust&nbsp;sites.&nbsp;&nbsp;This&nbsp;HOWTO&nbsp;describes</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_19">19-</td><td nowrap="nowrap"><span  
class="diff_sub">describes&nbsp;</span>some&nbsp;of&nbsp;the&nbsp;methods&nbsp;used&nbsp;to&nbsp;combine&nbsp;Python&nbsp;with&nbsp;a&nbsp;web&nbsp;server&nbsp;to&nbsp;create</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_19">19+</td><td  
nowrap="nowrap">some&nbsp;of&nbsp;the&nbsp;methods&nbsp;used&nbsp;to&nbsp;combine&nbsp;Python&nbsp;with&nbsp;a&nbsp;web&nbsp;server&nbsp;to&nbsp;create</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_20">20-</td><td  
nowrap="nowrap">dynamic&nbsp;content.&nbsp;&nbsp;It&nbsp;is&nbsp;not&nbsp;meant&nbsp;as&nbsp;a&nbsp;<span  
class="diff_chg">g</span>e<span class="diff_chg">n</span>e<span  
class="diff_sub">ral</span>&nbsp;introduction&nbsp;as&nbsp;this&nbsp;topic&nbsp;is<span  
class="diff_sub">&nbsp;far</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_20">20+</td><td  
nowrap="nowrap">dynamic&nbsp;content.&nbsp;&nbsp;It&nbsp;is&nbsp;not&nbsp;meant&nbsp;as&nbsp;a&nbsp;<span  
class="diff_chg">compl</span>e<span  
class="diff_chg">t</span>e&nbsp;introduction<span  
class="diff_add">,</span>&nbsp;as&nbsp;this&nbsp;topic&nbsp;is</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_21">21-</td><td  
nowrap="nowrap">too&nbsp;broad&nbsp;to&nbsp;be&nbsp;covered&nbsp;in&nbsp;one&nbsp;single&nbsp;document.&nbsp;&nbsp;However,&nbsp;a&nbsp;short&nbsp;overview<span  
class="diff_sub">&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_21">21+</td><td nowrap="nowrap"><span  
class="diff_add">far&nbsp;</span>too&nbsp;broad&nbsp;to&nbsp;be&nbsp;covered&nbsp;in&nbsp;one&nbsp;single&nbsp;document.&nbsp;&nbsp;However,&nbsp;a&nbsp;short&nbsp;overview</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_22">22-</td><td  
nowrap="nowrap">the&nbsp;most&nbsp;popular&nbsp;libraries&nbsp;is&nbsp;provided.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_22">22+</td><td nowrap="nowrap"><span  
class="diff_add">of&nbsp;</span>the&nbsp;most&nbsp;popular&nbsp;libraries&nbsp;is&nbsp;provided.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_23">23</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_24">24</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__4"></td><td class="diff_header"  
id="from55_25">25</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__4">n</a></td><td  
class="diff_header" id="from55_26">26-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;While&nbsp;this&nbsp;HOWTO&nbsp;tries&nbsp;to&nbsp;give&nbsp;an&nbsp;overview&nbsp;o<span  
class="diff_chg">ver</span>&nbsp;Python&nbsp;in&nbsp;the&nbsp;<span  
class="diff_chg">W</span>eb,&nbsp;it&nbsp;cannot</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__4">n</a></td><td  
class="diff_header" id="to55_26">26+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;While&nbsp;this&nbsp;HOWTO&nbsp;tries&nbsp;to&nbsp;give&nbsp;an&nbsp;overview&nbsp;o<span  
class="diff_chg">f</span>&nbsp;Python&nbsp;in&nbsp;the&nbsp;<span  
class="diff_chg">w</span>eb,&nbsp;it&nbsp;cannot</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_27">27-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;always&nbsp;be&nbsp;as&nbsp;up&nbsp;to&nbsp;date&nbsp;as&nbsp;desired.&nbsp;&nbsp;Web&nbsp;development&nbsp;in&nbsp;Python&nbsp;is&nbsp;<span  
class="diff_chg">mov</span>i<span class="diff_chg">ng</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_27">27+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;always&nbsp;be&nbsp;as&nbsp;up&nbsp;to&nbsp;date&nbsp;as&nbsp;desired.&nbsp;&nbsp;Web&nbsp;development&nbsp;in&nbsp;Python&nbsp;is&nbsp;<span  
class="diff_chg">rap</span>i<span class="diff_chg">dly</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__5"></td><td  
class="diff_header" id="from55_28">28-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;forward<span  
class="diff_sub">&nbsp;rapidly</span>,&nbsp;so&nbsp;the&nbsp;wiki&nbsp;page&nbsp;on&nbsp;`Web&nbsp;Programming</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__5"></td><td  
class="diff_header" id="to55_28">28+</td><td  
nowrap="nowrap">&nbsp;&nbsp;<span  
class="diff_add">&nbsp;moving</span>&nbsp;forward,&nbsp;so&nbsp;the&nbsp;wiki&nbsp;page&nbsp;on&nbsp;`Web&nbsp;Programming</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_29">29-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/WebProgramming&gt;`_&nbsp;m<span  
class="diff_chg">ight</span>&nbsp;be&nbsp;more&nbsp;in&nbsp;sync&nbsp;with</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_29">29+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/WebProgramming&gt;`_&nbsp;m<span  
class="diff_chg">ay</span>&nbsp;be&nbsp;more&nbsp;in&nbsp;sync&nbsp;with</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_30">30</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;recent&nbsp;development.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_31">31</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_32">32</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"  
id="difflib_chg_to55__6"><a href="#difflib_chg_to55__5">n</a></td><td  
class="diff_header" id="from55_33">33-</td><td  
nowrap="nowrap">The&nbsp;<span class="diff_chg">l</span>ow-<span  
class="diff_chg">l</span>evel&nbsp;<span  
class="diff_chg">v</span>iew</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__6"><a  
href="#difflib_chg_to55__5">n</a></td><td class="diff_header"  
id="to55_33">33+</td><td nowrap="nowrap">The&nbsp;<span  
class="diff_chg">L</span>ow-<span class="diff_chg">L</span>evel&nbsp;<span  
class="diff_chg">V</span>iew</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_34">34</td><td  
nowrap="nowrap">==================</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__7"></td><td class="diff_header"  
id="from55_35">35</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__6">n</a></td><td  
class="diff_header" id="from55_36">36-</td><td nowrap="nowrap"><span  
class="diff_sub">..&nbsp;..&nbsp;image::&nbsp;http.png</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_37">37-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_38">38-</td><td  
nowrap="nowrap">When&nbsp;a&nbsp;user&nbsp;enters&nbsp;a&nbsp;web&nbsp;site,&nbsp;hi<span  
class="diff_chg">s</span>&nbsp;browser&nbsp;makes&nbsp;a&nbsp;connection&nbsp;to&nbsp;the&nbsp;site's</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_36">36+</td><td  
nowrap="nowrap">When&nbsp;a&nbsp;user&nbsp;enters&nbsp;a&nbsp;web&nbsp;site,&nbsp;<span  
class="diff_add">t</span>h<span class="diff_add">e</span>i<span  
class="diff_chg">r</span>&nbsp;browser&nbsp;makes&nbsp;a&nbsp;connection&nbsp;to&nbsp;the&nbsp;site's</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_39">39-</td><td  
nowrap="nowrap">webserver&nbsp;(this&nbsp;is&nbsp;called&nbsp;the&nbsp;*request*).&nbsp;&nbsp;The&nbsp;server&nbsp;looks&nbsp;up&nbsp;the&nbsp;file&nbsp;in&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_37">37+</td><td nowrap="nowrap">web<span  
class="diff_add">&nbsp;</span>server&nbsp;(this&nbsp;is&nbsp;called&nbsp;the&nbsp;*request*).&nbsp;&nbsp;The&nbsp;server&nbsp;looks&nbsp;up&nbsp;the&nbsp;file&nbsp;in&nbsp;the</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_40">40</td><td  
nowrap="nowrap">file&nbsp;system&nbsp;and&nbsp;sends&nbsp;it&nbsp;back&nbsp;to&nbsp;the&nbsp;user's&nbsp;browser,&nbsp;which&nbsp;displays&nbsp;it&nbsp;(this&nbsp;is</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__7">n</a></td><td  
class="diff_header" id="from55_41">41-</td><td  
nowrap="nowrap">the&nbsp;*response*).&nbsp;&nbsp;This&nbsp;is&nbsp;roughly&nbsp;how&nbsp;the&nbsp;un<span  
class="diff_chg">t</span>erlying&nbsp;protocol,&nbsp;HTTP&nbsp;works.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__7">n</a></td><td  
class="diff_header" id="to55_39">39+</td><td  
nowrap="nowrap">the&nbsp;*response*).&nbsp;&nbsp;This&nbsp;is&nbsp;roughly&nbsp;how&nbsp;the&nbsp;un<span  
class="diff_chg">d</span>erlying&nbsp;protocol,&nbsp;HTTP<span  
class="diff_add">,</span>&nbsp;works.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_42">42</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__8"><a  
href="#difflib_chg_to55__8">n</a></td><td class="diff_header"  
id="from55_43">43-</td><td nowrap="nowrap"><span  
class="diff_chg">Now,&nbsp;d</span>ynamic&nbsp;web&nbsp;sites&nbsp;are&nbsp;not&nbsp;files&nbsp;in&nbsp;the&nbsp;file&nbsp;system,&nbsp;but&nbsp;rather&nbsp;<span  
class="diff_sub">pr</span>o<span class="diff_chg">grams</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__8"><a  
href="#difflib_chg_to55__8">n</a></td><td class="diff_header"  
id="to55_41">41+</td><td nowrap="nowrap"><span  
class="diff_chg">D</span>ynamic&nbsp;web&nbsp;sites&nbsp;are&nbsp;not<span  
class="diff_add">&nbsp;based&nbsp;on</span>&nbsp;files&nbsp;in&nbsp;the&nbsp;file&nbsp;system,&nbsp;but&nbsp;rather&nbsp;o<span  
class="diff_chg">n</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_44">44-</td><td  
nowrap="nowrap">which&nbsp;are&nbsp;run&nbsp;by&nbsp;the&nbsp;web&nbsp;server&nbsp;when&nbsp;a&nbsp;request&nbsp;comes&nbsp;in<span  
class="diff_chg">.&nbsp;&nbsp;They&nbsp;c</span>an<span  
class="diff_sub">&nbsp;</span>d<span  
class="diff_chg">o&nbsp;all&nbsp;sorts</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_42">42+</td><td nowrap="nowrap"><span  
class="diff_add">programs&nbsp;</span>which&nbsp;are&nbsp;run&nbsp;by&nbsp;the&nbsp;web&nbsp;server&nbsp;when&nbsp;a&nbsp;request&nbsp;comes&nbsp;in<span  
class="diff_chg">,&nbsp;</span>and<span  
class="diff_chg">&nbsp;which</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_43">43+</td><td nowrap="nowrap"><span  
class="diff_add">*generate*&nbsp;the&nbsp;content&nbsp;that&nbsp;is&nbsp;returned&nbsp;to&nbsp;the&nbsp;user.&nbsp;&nbsp;They&nbsp;can&nbsp;do&nbsp;all&nbsp;sorts&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_45">45-</td><td nowrap="nowrap"><span  
class="diff_sub">of&nbsp;</span>useful&nbsp;things,&nbsp;like&nbsp;display&nbsp;the&nbsp;postings&nbsp;of&nbsp;a&nbsp;bulletin&nbsp;board,&nbsp;show&nbsp;your</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_44">44+</td><td  
nowrap="nowrap">useful&nbsp;things,&nbsp;like&nbsp;display&nbsp;the&nbsp;postings&nbsp;of&nbsp;a&nbsp;bulletin&nbsp;board,&nbsp;show&nbsp;your<span  
class="diff_add">&nbsp;email,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_46">46-</td><td nowrap="nowrap"><span  
class="diff_sub">mails,&nbsp;</span>configur<span  
class="diff_sub">at</span>e&nbsp;software&nbsp;or&nbsp;just&nbsp;display&nbsp;the&nbsp;current&nbsp;time.&nbsp;&nbsp;These&nbsp;programs</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_45">45+</td><td nowrap="nowrap">configure&nbsp;software<span  
class="diff_add">,</span>&nbsp;or&nbsp;just&nbsp;display&nbsp;the&nbsp;current&nbsp;time.&nbsp;&nbsp;These&nbsp;programs<span  
class="diff_add">&nbsp;can&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_47">47-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;be&nbsp;</span>written&nbsp;in<span  
class="diff_sub">&nbsp;about</span>&nbsp;any&nbsp;programming&nbsp;language&nbsp;the&nbsp;server&nbsp;supports<span  
class="diff_chg">,&nbsp;</span>s<span  
class="diff_sub">o&nbsp;i</span>t&nbsp;<span  
class="diff_sub">i</span>s</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_46">46+</td><td  
nowrap="nowrap">written&nbsp;in&nbsp;any&nbsp;programming&nbsp;language&nbsp;the&nbsp;server&nbsp;supports<span  
class="diff_chg">.&nbsp;&nbsp;Since&nbsp;mo</span>st&nbsp;s<span  
class="diff_add">ervers</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__9"></td><td  
class="diff_header" id="from55_48">48-</td><td nowrap="nowrap"><span  
class="diff_sub">easy&nbsp;to&nbsp;use&nbsp;Python&nbsp;for&nbsp;creating&nbsp;dynamic&nbsp;web&nbsp;sites.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__9"></td><td  
class="diff_header" id="to55_47">47+</td><td nowrap="nowrap"><span  
class="diff_add">support&nbsp;Python,&nbsp;it&nbsp;is&nbsp;easy&nbsp;to&nbsp;use&nbsp;Python&nbsp;to&nbsp;create&nbsp;dynamic&nbsp;web&nbsp;sites.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_49">49</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__9">n</a></td><td  
class="diff_header" id="from55_50">50-</td><td nowrap="nowrap"><span  
class="diff_chg">As&nbsp;m</span>ost<span  
class="diff_sub">&nbsp;of</span>&nbsp;HTTP&nbsp;servers&nbsp;are&nbsp;written&nbsp;in&nbsp;C&nbsp;or&nbsp;C++,&nbsp;they&nbsp;cannot&nbsp;execute&nbsp;Python&nbsp;code</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__9">n</a></td><td  
class="diff_header" id="to55_49">49+</td><td nowrap="nowrap"><span  
class="diff_chg">M</span>ost&nbsp;HTTP&nbsp;servers&nbsp;are&nbsp;written&nbsp;in&nbsp;C&nbsp;or&nbsp;C++,&nbsp;<span  
class="diff_add">so&nbsp;</span>they&nbsp;cannot&nbsp;execute&nbsp;Python&nbsp;code</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_51">51-</td><td nowrap="nowrap">i<span  
class="diff_chg">n&nbsp;a&nbsp;simp</span>l<span  
class="diff_sub">e&nbsp;wa</span>y&nbsp;--&nbsp;a&nbsp;bridge&nbsp;is&nbsp;needed&nbsp;between&nbsp;the&nbsp;server&nbsp;and&nbsp;the&nbsp;program.&nbsp;&nbsp;These</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_50">50+</td><td nowrap="nowrap"><span  
class="diff_add">d</span>i<span  
class="diff_chg">rect</span>ly&nbsp;--&nbsp;a&nbsp;bridge&nbsp;is&nbsp;needed&nbsp;between&nbsp;the&nbsp;server&nbsp;and&nbsp;the&nbsp;program.&nbsp;&nbsp;These</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_52">52-</td><td  
nowrap="nowrap">bridges&nbsp;or&nbsp;rather&nbsp;interfaces&nbsp;define&nbsp;how&nbsp;programs&nbsp;interact&nbsp;with&nbsp;the&nbsp;server.<span  
class="diff_sub">&nbsp;&nbsp;In</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_51">51+</td><td nowrap="nowrap">bridges<span  
class="diff_add">,</span>&nbsp;or&nbsp;rather&nbsp;interfaces<span  
class="diff_add">,</span>&nbsp;define&nbsp;how&nbsp;programs&nbsp;interact&nbsp;with&nbsp;the&nbsp;server.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_53">53-</td><td nowrap="nowrap"><span  
class="diff_chg">the&nbsp;past&nbsp;t</span>here&nbsp;have&nbsp;been&nbsp;numerous&nbsp;attempts&nbsp;to&nbsp;create&nbsp;the&nbsp;best&nbsp;possible</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_52">52+</td><td nowrap="nowrap"><span  
class="diff_chg">T</span>here&nbsp;have&nbsp;been&nbsp;numerous&nbsp;attempts&nbsp;to&nbsp;create&nbsp;the&nbsp;best&nbsp;possible<span  
class="diff_add">&nbsp;interface,&nbsp;but</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_54">54-</td><td nowrap="nowrap"><span  
class="diff_sub">interface,&nbsp;but&nbsp;</span>there&nbsp;are&nbsp;only&nbsp;a&nbsp;few&nbsp;worth&nbsp;mentioning.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_53">53+</td><td  
nowrap="nowrap">there&nbsp;are&nbsp;only&nbsp;a&nbsp;few&nbsp;worth&nbsp;mentioning.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_55">55</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__10"><a  
href="#difflib_chg_to55__10">n</a></td><td class="diff_header"  
id="from55_56">56-</td><td  
nowrap="nowrap">Not&nbsp;every&nbsp;web&nbsp;server&nbsp;supports&nbsp;every&nbsp;interface.&nbsp;&nbsp;Many&nbsp;web&nbsp;servers&nbsp;<span  
class="diff_sub">d</span>o&nbsp;support<span  
class="diff_sub">&nbsp;only</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__10"><a  
href="#difflib_chg_to55__10">n</a></td><td class="diff_header"  
id="to55_55">55+</td><td  
nowrap="nowrap">Not&nbsp;every&nbsp;web&nbsp;server&nbsp;supports&nbsp;every&nbsp;interface.&nbsp;&nbsp;Many&nbsp;web&nbsp;servers&nbsp;o<span  
class="diff_add">nly</span>&nbsp;support</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_57">57-</td><td  
nowrap="nowrap">old,&nbsp;now-obsolete&nbsp;interfaces<span  
class="diff_chg">.&nbsp;&nbsp;But</span>&nbsp;they&nbsp;can&nbsp;often&nbsp;be&nbsp;extended&nbsp;using<span  
class="diff_sub">&nbsp;some</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_56">56+</td><td  
nowrap="nowrap">old,&nbsp;now-obsolete&nbsp;interfaces<span  
class="diff_chg">;&nbsp;however,</span>&nbsp;they&nbsp;can&nbsp;often&nbsp;be&nbsp;extended&nbsp;using</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_58">58-</td><td  
nowrap="nowrap">third-party&nbsp;modules&nbsp;to&nbsp;support&nbsp;new<span  
class="diff_sub">&nbsp;int</span>er<span  
class="diff_chg">fac</span>es.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_57">57+</td><td  
nowrap="nowrap">third-party&nbsp;modules&nbsp;to&nbsp;support&nbsp;newer<span  
class="diff_chg">&nbsp;on</span>es.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_59">59</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_60">60</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_61">61</td><td  
nowrap="nowrap">Common&nbsp;Gateway&nbsp;Interface</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_62">62</td><td  
nowrap="nowrap">------------------------</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__11"></td><td class="diff_header"  
id="from55_63">63</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__11">n</a></td><td  
class="diff_header" id="from55_64">64-</td><td nowrap="nowrap"><span  
class="diff_sub">This&nbsp;interface&nbsp;is&nbsp;the&nbsp;oldest&nbsp;one,&nbsp;supported&nbsp;by&nbsp;nearly&nbsp;every&nbsp;web&nbsp;server&nbsp;out&nbsp;of</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__11">n</a></td><td  
class="diff_header" id="to55_63">63+</td><td nowrap="nowrap"><span  
class="diff_add">This&nbsp;interface,&nbsp;most&nbsp;commonly&nbsp;referred&nbsp;to&nbsp;as&nbsp;"CGI",&nbsp;is&nbsp;the&nbsp;oldest,&nbsp;and&nbsp;is</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_65">65-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;box.&nbsp;&nbsp;Programs&nbsp;using&nbsp;CGI&nbsp;to&nbsp;communicate&nbsp;with&nbsp;their&nbsp;web&nbsp;server&nbsp;need&nbsp;to&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_64">64+</td><td nowrap="nowrap"><span  
class="diff_add">supported&nbsp;by&nbsp;nearly&nbsp;every&nbsp;web&nbsp;server&nbsp;out&nbsp;of&nbsp;the&nbsp;box.&nbsp;&nbsp;Programs&nbsp;using&nbsp;CGI&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_66">66-</td><td nowrap="nowrap"><span  
class="diff_sub">started&nbsp;by&nbsp;the&nbsp;server&nbsp;for&nbsp;every&nbsp;request.&nbsp;&nbsp;So,&nbsp;every&nbsp;request&nbsp;starts&nbsp;a&nbsp;new&nbsp;Python</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_65">65+</td><td nowrap="nowrap"><span  
class="diff_add">communicate&nbsp;with&nbsp;their&nbsp;web&nbsp;server&nbsp;need&nbsp;to&nbsp;be&nbsp;started&nbsp;by&nbsp;the&nbsp;server&nbsp;for&nbsp;every</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__12"></td><td  
class="diff_header" id="from55_67">67-</td><td nowrap="nowrap"><span  
class="diff_sub">interpreter&nbsp;--&nbsp;which&nbsp;takes&nbsp;some&nbsp;time&nbsp;to&nbsp;start&nbsp;up&nbsp;--&nbsp;thus&nbsp;making&nbsp;the&nbsp;whole</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__12"></td><td  
class="diff_header" id="to55_66">66+</td><td nowrap="nowrap"><span  
class="diff_add">request.&nbsp;&nbsp;So,&nbsp;every&nbsp;request&nbsp;starts&nbsp;a&nbsp;new&nbsp;Python&nbsp;interpreter&nbsp;--&nbsp;which&nbsp;takes&nbsp;some</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_68">68-</td><td nowrap="nowrap"><span  
class="diff_sub">interface&nbsp;only&nbsp;usable&nbsp;for&nbsp;low&nbsp;load&nbsp;situations.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_67">67+</td><td nowrap="nowrap"><span  
class="diff_add">time&nbsp;to&nbsp;start&nbsp;up&nbsp;--&nbsp;thus&nbsp;making&nbsp;the&nbsp;whole&nbsp;interface&nbsp;only&nbsp;usable&nbsp;for&nbsp;low&nbsp;load</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_68">68+</td><td nowrap="nowrap"><span  
class="diff_add">situations.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_69">69</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__12">n</a></td><td  
class="diff_header" id="from55_70">70-</td><td  
nowrap="nowrap">The&nbsp;upside&nbsp;of&nbsp;CGI&nbsp;is&nbsp;that&nbsp;it&nbsp;is&nbsp;simple&nbsp;--&nbsp;writing&nbsp;a&nbsp;program&nbsp;which&nbsp;uses<span  
class="diff_sub">&nbsp;CGI&nbsp;is&nbsp;a</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__12">n</a></td><td  
class="diff_header" id="to55_70">70+</td><td  
nowrap="nowrap">The&nbsp;upside&nbsp;of&nbsp;CGI&nbsp;is&nbsp;that&nbsp;it&nbsp;is&nbsp;simple&nbsp;--&nbsp;writing&nbsp;a<span  
class="diff_add">&nbsp;Python</span>&nbsp;program&nbsp;which&nbsp;uses</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_71">71-</td><td  
nowrap="nowrap">matter&nbsp;of&nbsp;about&nbsp;three&nbsp;lines&nbsp;of&nbsp;code.&nbsp;&nbsp;<span  
class="diff_chg">But&nbsp;t</span>his&nbsp;simplicity&nbsp;comes&nbsp;at&nbsp;a<span  
class="diff_sub">&nbsp;price:&nbsp;it</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_71">71+</td><td nowrap="nowrap"><span  
class="diff_add">CGI&nbsp;is&nbsp;a&nbsp;</span>matter&nbsp;of&nbsp;about&nbsp;three&nbsp;lines&nbsp;of&nbsp;code.&nbsp;&nbsp;<span  
class="diff_chg">T</span>his&nbsp;simplicity&nbsp;comes&nbsp;at&nbsp;a</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_72">72-</td><td  
nowrap="nowrap">does&nbsp;very&nbsp;few&nbsp;things&nbsp;to&nbsp;help&nbsp;the&nbsp;developer.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_72">72+</td><td nowrap="nowrap"><span  
class="diff_add">price:&nbsp;it&nbsp;</span>does&nbsp;very&nbsp;few&nbsp;things&nbsp;to&nbsp;help&nbsp;the&nbsp;developer.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_73">73</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__13">n</a></td><td  
class="diff_header" id="from55_74">74-</td><td  
nowrap="nowrap">Writing&nbsp;CGI&nbsp;programs,&nbsp;while&nbsp;still&nbsp;possible,&nbsp;is&nbsp;no<span  
class="diff_chg">t</span>&nbsp;recommended<span  
class="diff_sub">&nbsp;anymore</span>.&nbsp;&nbsp;With</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__13">n</a></td><td  
class="diff_header" id="to55_74">74+</td><td  
nowrap="nowrap">Writing&nbsp;CGI&nbsp;programs,&nbsp;while&nbsp;still&nbsp;possible,&nbsp;is&nbsp;no<span  
class="diff_chg">&nbsp;longer</span>&nbsp;recommended.&nbsp;&nbsp;With</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_75">75-</td><td nowrap="nowrap"><span  
class="diff_sub">WSGI&nbsp;(more&nbsp;on&nbsp;that&nbsp;later)&nbsp;it&nbsp;is&nbsp;possible&nbsp;to&nbsp;write&nbsp;programs&nbsp;that&nbsp;emulate&nbsp;CGI,&nbsp;so</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_75">75+</td><td nowrap="nowrap"><span  
class="diff_add">:ref:`WSGI&nbsp;&lt;WSGI&gt;`,&nbsp;a&nbsp;topic&nbsp;covered&nbsp;later&nbsp;in&nbsp;this&nbsp;document,&nbsp;it&nbsp;is&nbsp;possible&nbsp;to&nbsp;write</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_76">76-</td><td nowrap="nowrap"><span  
class="diff_sub">they&nbsp;can&nbsp;be&nbsp;run&nbsp;as&nbsp;CGI&nbsp;if&nbsp;no&nbsp;better&nbsp;option&nbsp;is&nbsp;available.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_76">76+</td><td nowrap="nowrap"><span  
class="diff_add">programs&nbsp;that&nbsp;emulate&nbsp;CGI,&nbsp;so&nbsp;they&nbsp;can&nbsp;be&nbsp;run&nbsp;as&nbsp;CGI&nbsp;if&nbsp;no&nbsp;better&nbsp;option&nbsp;is</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__13"></td><td  
class="diff_header" id="to55_77">77+</td><td nowrap="nowrap"><span  
class="diff_add">available.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_77">77</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_78">78</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_79">79</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_80">80</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;The&nbsp;Python&nbsp;standard&nbsp;library&nbsp;includes&nbsp;some&nbsp;modules&nbsp;that&nbsp;are&nbsp;helpful&nbsp;for</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_81">81</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;creating&nbsp;plain&nbsp;CGI&nbsp;programs:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_82">82</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_83">83</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;:mod:`cgi`&nbsp;--&nbsp;Handling&nbsp;of&nbsp;user&nbsp;input&nbsp;in&nbsp;CGI&nbsp;scripts</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__14">n</a></td><td  
class="diff_header" id="from55_84">84-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;:mod:`cgitb`&nbsp;--&nbsp;Displays&nbsp;nice&nbsp;tracebacks&nbsp;when&nbsp;errors&nbsp;happen&nbsp;in<span  
class="diff_sub">&nbsp;of</span>&nbsp;CGI</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__14">n</a></td><td  
class="diff_header" id="to55_85">85+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;:mod:`cgitb`&nbsp;--&nbsp;Displays&nbsp;nice&nbsp;tracebacks&nbsp;when&nbsp;errors&nbsp;happen&nbsp;in&nbsp;CGI</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_85">85</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;applications,&nbsp;instead&nbsp;of&nbsp;presenting&nbsp;a&nbsp;"500&nbsp;Internal&nbsp;Server&nbsp;Error"&nbsp;message</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_86">86</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_87">87</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;The&nbsp;Python&nbsp;wiki&nbsp;features&nbsp;a&nbsp;page&nbsp;on&nbsp;`CGI&nbsp;scripts</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_88">88</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/CgiScripts&gt;`_&nbsp;with&nbsp;some&nbsp;additional&nbsp;information</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_89">89</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;about&nbsp;CGI&nbsp;in&nbsp;Python.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_90">90</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_91">91</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_92">92</td><td  
nowrap="nowrap">Simple&nbsp;script&nbsp;for&nbsp;testing&nbsp;CGI</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to55__14"></td><td  
class="diff_header" id="from55_102">102</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;import&nbsp;cgitb</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_103">103</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;cgitb.enable()</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_104">104</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_105">105</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;"Content-Type:&nbsp;text/plain;charset=utf-8"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_106">106</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;print</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_107">107</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_108">108</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;"Hello&nbsp;World!"</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_109">109</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__15"><a  
href="#difflib_chg_to55__15">n</a></td><td class="diff_header"  
id="from55_110">110-</td><td nowrap="nowrap"><span  
class="diff_sub">You&nbsp;need&nbsp;to&nbsp;write&nbsp;this&nbsp;code&nbsp;into&nbsp;a&nbsp;file&nbsp;with&nbsp;a&nbsp;``.py``&nbsp;or&nbsp;``.cgi``&nbsp;extension,</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__15"><a  
href="#difflib_chg_to55__15">n</a></td><td class="diff_header"  
id="to55_111">111+</td><td nowrap="nowrap"><span  
class="diff_add">Depending&nbsp;on&nbsp;your&nbsp;web&nbsp;server&nbsp;configuration,&nbsp;you&nbsp;may&nbsp;need&nbsp;to&nbsp;save&nbsp;this&nbsp;code&nbsp;with</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_111">111-</td><td nowrap="nowrap"><span  
class="diff_sub">this&nbsp;depends&nbsp;on&nbsp;your&nbsp;web&nbsp;server&nbsp;configuration.&nbsp;&nbsp;Depending&nbsp;on&nbsp;your&nbsp;web&nbsp;server</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_112">112+</td><td nowrap="nowrap"><span  
class="diff_add">a&nbsp;``.py``&nbsp;or&nbsp;``.cgi``&nbsp;extension.&nbsp;&nbsp;Additionally,&nbsp;this&nbsp;file&nbsp;may&nbsp;also&nbsp;need&nbsp;to&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_112">112-</td><td nowrap="nowrap"><span  
class="diff_sub">configuration,&nbsp;this&nbsp;file&nbsp;may&nbsp;also&nbsp;need&nbsp;to&nbsp;be&nbsp;in&nbsp;a&nbsp;``cgi-bin``&nbsp;folder,&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_113">113+</td><td nowrap="nowrap"><span  
class="diff_add">in&nbsp;a&nbsp;``cgi-bin``&nbsp;folder,&nbsp;for&nbsp;security&nbsp;reasons.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_113">113-</td><td nowrap="nowrap"><span  
class="diff_sub">security&nbsp;reasons.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_114">114</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_115">115</td><td  
nowrap="nowrap">You&nbsp;might&nbsp;wonder&nbsp;what&nbsp;the&nbsp;``cgitb``&nbsp;line&nbsp;is&nbsp;about.&nbsp;&nbsp;This&nbsp;line&nbsp;makes&nbsp;it&nbsp;possible</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_116">116</td><td  
nowrap="nowrap">to&nbsp;display&nbsp;a&nbsp;nice&nbsp;traceback&nbsp;instead&nbsp;of&nbsp;just&nbsp;crashing&nbsp;and&nbsp;displaying&nbsp;an&nbsp;"Internal</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_117">117</td><td  
nowrap="nowrap">Server&nbsp;Error"&nbsp;in&nbsp;the&nbsp;user's&nbsp;browser.&nbsp;&nbsp;This&nbsp;is&nbsp;useful&nbsp;for&nbsp;debugging,&nbsp;but&nbsp;it&nbsp;might</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__16">n</a></td><td  
class="diff_header" id="from55_118">118-</td><td nowrap="nowrap"><span  
class="diff_sub">risk&nbsp;exposing&nbsp;some&nbsp;confident&nbsp;data&nbsp;to&nbsp;the&nbsp;user.&nbsp;&nbsp;Don't&nbsp;use&nbsp;it&nbsp;when&nbsp;the&nbsp;script&nbsp;is</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__16">n</a></td><td  
class="diff_header" id="to55_118">118+</td><td nowrap="nowrap"><span  
class="diff_add">risk&nbsp;exposing&nbsp;some&nbsp;confidential&nbsp;data&nbsp;to&nbsp;the&nbsp;user.&nbsp;&nbsp;You&nbsp;should&nbsp;not&nbsp;use&nbsp;``cgitb``</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_119">119-</td><td nowrap="nowrap"><span  
class="diff_sub">ready&nbsp;for&nbsp;production&nbsp;use.&nbsp;&nbsp;Still,&nbsp;you&nbsp;should&nbsp;*always*&nbsp;catch&nbsp;exceptions,&nbsp;and</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_119">119+</td><td nowrap="nowrap"><span  
class="diff_add">in&nbsp;production&nbsp;code&nbsp;for&nbsp;this&nbsp;reason.&nbsp;&nbsp;You&nbsp;should&nbsp;*always*&nbsp;catch&nbsp;exceptions,&nbsp;and</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__16"></td><td  
class="diff_header" id="from55_120">120</td><td  
nowrap="nowrap">display&nbsp;proper&nbsp;error&nbsp;pages&nbsp;--&nbsp;end-users&nbsp;don't&nbsp;like&nbsp;to&nbsp;see&nbsp;nondescript&nbsp;"Internal</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_121">121</td><td  
nowrap="nowrap">Server&nbsp;Errors"&nbsp;in&nbsp;their&nbsp;browsers.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_122">122</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_123">123</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__17"></td><td class="diff_header"  
id="from55_124">124</td><td  
nowrap="nowrap">Setting&nbsp;up&nbsp;CGI&nbsp;on&nbsp;your&nbsp;own&nbsp;server</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_125">125</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_126">126</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_127">127</td><td  
nowrap="nowrap">If&nbsp;you&nbsp;don't&nbsp;have&nbsp;your&nbsp;own&nbsp;web&nbsp;server,&nbsp;this&nbsp;does&nbsp;not&nbsp;apply&nbsp;to&nbsp;you.&nbsp;&nbsp;You&nbsp;can</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__17">n</a></td><td  
class="diff_header" id="from55_128">128-</td><td  
nowrap="nowrap">check&nbsp;whether&nbsp;i<span  
class="diff_chg">f</span>&nbsp;works&nbsp;as-is&nbsp;and&nbsp;if&nbsp;not&nbsp;you&nbsp;need&nbsp;to&nbsp;talk&nbsp;to&nbsp;the<span  
class="diff_sub">&nbsp;administrator&nbsp;of</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__17">n</a></td><td  
class="diff_header" id="to55_128">128+</td><td  
nowrap="nowrap">check&nbsp;whether&nbsp;i<span  
class="diff_chg">t</span>&nbsp;works&nbsp;as-is<span  
class="diff_add">,</span>&nbsp;and&nbsp;if&nbsp;not&nbsp;you<span  
class="diff_add">&nbsp;will</span>&nbsp;need&nbsp;to&nbsp;talk&nbsp;to&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_129">129-</td><td nowrap="nowrap">your&nbsp;web&nbsp;server<span  
class="diff_sub">&nbsp;anyway</span>.&nbsp;If&nbsp;it&nbsp;is&nbsp;a&nbsp;big&nbsp;host<span  
class="diff_sub">er</span>,&nbsp;you&nbsp;can&nbsp;try&nbsp;filing&nbsp;a<span  
class="diff_sub">&nbsp;ticket</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_129">129+</td><td nowrap="nowrap"><span  
class="diff_add">administrator&nbsp;of&nbsp;</span>your&nbsp;web&nbsp;server.&nbsp;If&nbsp;it&nbsp;is&nbsp;a&nbsp;big&nbsp;host,&nbsp;you&nbsp;can&nbsp;try&nbsp;filing&nbsp;a</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_130">130-</td><td  
nowrap="nowrap">asking&nbsp;for&nbsp;Python&nbsp;support.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_130">130+</td><td nowrap="nowrap"><span  
class="diff_add">ticket&nbsp;</span>asking&nbsp;for&nbsp;Python&nbsp;support.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_131">131</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__18">n</a></td><td  
class="diff_header" id="from55_132">132-</td><td  
nowrap="nowrap">If&nbsp;you<span  
class="diff_chg">'</span>re&nbsp;your&nbsp;own&nbsp;administrator&nbsp;or&nbsp;want&nbsp;to&nbsp;<span  
class="diff_sub">in</span>st<span  
class="diff_chg">all&nbsp;it</span>&nbsp;for&nbsp;testing&nbsp;purposes&nbsp;on</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__18">n</a></td><td  
class="diff_header" id="to55_132">132+</td><td  
nowrap="nowrap">If&nbsp;you<span  
class="diff_chg">&nbsp;a</span>re&nbsp;your&nbsp;own&nbsp;administrator&nbsp;or&nbsp;want&nbsp;to&nbsp;s<span  
class="diff_add">e</span>t<span  
class="diff_chg">&nbsp;up&nbsp;CGI</span>&nbsp;for&nbsp;testing&nbsp;purposes&nbsp;on</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_133">133-</td><td  
nowrap="nowrap">your&nbsp;own&nbsp;computers,&nbsp;you&nbsp;have&nbsp;to&nbsp;configure&nbsp;it&nbsp;by&nbsp;yourself.&nbsp;&nbsp;There&nbsp;is&nbsp;no&nbsp;<span  
class="diff_chg">o</span>ne<span class="diff_sub">&nbsp;and</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_133">133+</td><td  
nowrap="nowrap">your&nbsp;own&nbsp;computers,&nbsp;you&nbsp;have&nbsp;to&nbsp;configure&nbsp;it&nbsp;by&nbsp;yourself.&nbsp;&nbsp;There&nbsp;is&nbsp;no&nbsp;<span  
class="diff_chg">si</span>n<span class="diff_add">gl</span>e</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_134">134-</td><td nowrap="nowrap"><span  
class="diff_sub">single&nbsp;</span>way&nbsp;<span  
class="diff_sub">on&nbsp;how&nbsp;</span>to&nbsp;configure&nbsp;CGI,&nbsp;as&nbsp;there&nbsp;are&nbsp;many&nbsp;web&nbsp;servers&nbsp;with&nbsp;different</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_134">134+</td><td  
nowrap="nowrap">way&nbsp;to&nbsp;configure&nbsp;CGI,&nbsp;as&nbsp;there&nbsp;are&nbsp;many&nbsp;web&nbsp;servers&nbsp;with&nbsp;different</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__18"></td><td  
class="diff_header" id="from55_135">135-</td><td  
nowrap="nowrap">configuration&nbsp;options.&nbsp;&nbsp;<span  
class="diff_chg">The&nbsp;c</span>urrently&nbsp;most&nbsp;widely&nbsp;used&nbsp;free&nbsp;web&nbsp;server&nbsp;is</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__18"></td><td  
class="diff_header" id="to55_135">135+</td><td  
nowrap="nowrap">configuration&nbsp;options.&nbsp;&nbsp;<span  
class="diff_chg">C</span>urrently&nbsp;<span  
class="diff_add">the&nbsp;</span>most&nbsp;widely&nbsp;used&nbsp;free&nbsp;web&nbsp;server&nbsp;is</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_136">136-</td><td  
nowrap="nowrap">`Apache&nbsp;HTTPd&nbsp;&lt;http://httpd.apache.org/&gt;`_,&nbsp;Apache&nbsp;for&nbsp;short<span  
class="diff_chg">&nbsp;--&nbsp;this&nbsp;is&nbsp;t</span>he&nbsp;<span  
class="diff_chg">o</span>ne</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_136">136+</td><td  
nowrap="nowrap">`Apache&nbsp;HTTPd&nbsp;&lt;http://httpd.apache.org/&gt;`_,&nbsp;<span  
class="diff_add">or&nbsp;</span>Apache&nbsp;for&nbsp;short<span  
class="diff_chg">.&nbsp;Apac</span>he&nbsp;<span  
class="diff_chg">ca</span>n<span class="diff_add">&nbsp;b</span>e</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_137">137-</td><td nowrap="nowrap"><span  
class="diff_sub">that&nbsp;most&nbsp;people&nbsp;use,&nbsp;it&nbsp;can&nbsp;be&nbsp;easily&nbsp;installed&nbsp;on&nbsp;nearly&nbsp;every&nbsp;system&nbsp;using</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_137">137+</td><td nowrap="nowrap"><span  
class="diff_add">easily&nbsp;installed&nbsp;on&nbsp;nearly&nbsp;every&nbsp;system&nbsp;using&nbsp;the&nbsp;system's&nbsp;package&nbsp;management</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_138">138-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;systems'&nbsp;package&nbsp;management.&nbsp;&nbsp;But&nbsp;`lighttpd&nbsp;&lt;http://www.lighttpd.net&gt;`_&nbsp;has</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_138">138+</td><td nowrap="nowrap"><span  
class="diff_add">tool.&nbsp;&nbsp;`lighttpd&nbsp;&lt;http://www.lighttpd.net&gt;`_&nbsp;is&nbsp;another&nbsp;alternative&nbsp;and&nbsp;is</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__19"></td><td  
class="diff_header" id="from55_139">139-</td><td nowrap="nowrap"><span  
class="diff_sub">been&nbsp;gaining&nbsp;attention&nbsp;since&nbsp;some&nbsp;time&nbsp;and&nbsp;is&nbsp;said&nbsp;to&nbsp;have&nbsp;a&nbsp;better&nbsp;performance.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__19"></td><td  
class="diff_header" id="to55_139">139+</td><td nowrap="nowrap"><span  
class="diff_add">said&nbsp;to&nbsp;have&nbsp;better&nbsp;performance.&nbsp;&nbsp;On&nbsp;many&nbsp;systems&nbsp;this&nbsp;server&nbsp;can&nbsp;also&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_140">140-</td><td nowrap="nowrap"><span  
class="diff_sub">On&nbsp;many&nbsp;systems&nbsp;this&nbsp;server&nbsp;can&nbsp;also&nbsp;be&nbsp;installed&nbsp;using&nbsp;the&nbsp;package&nbsp;management,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_140">140+</td><td nowrap="nowrap"><span  
class="diff_add">installed&nbsp;using&nbsp;the&nbsp;package&nbsp;management&nbsp;tool,&nbsp;so&nbsp;manually&nbsp;compiling&nbsp;the&nbsp;web</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__20"></td><td  
class="diff_header" id="from55_141">141-</td><td nowrap="nowrap"><span  
class="diff_sub">so&nbsp;manually&nbsp;compiling&nbsp;the&nbsp;web&nbsp;server&nbsp;is&nbsp;never&nbsp;needed.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__20"></td><td  
class="diff_header" id="to55_141">141+</td><td nowrap="nowrap"><span  
class="diff_add">server&nbsp;may&nbsp;not&nbsp;be&nbsp;needed.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_142">142</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__19">n</a></td><td  
class="diff_header" id="from55_143">143-</td><td  
nowrap="nowrap">*&nbsp;On&nbsp;Apache&nbsp;you&nbsp;can&nbsp;take&nbsp;a&nbsp;look&nbsp;<span  
class="diff_chg">in</span>t<span  
class="diff_sub">o</span>&nbsp;the&nbsp;`Dynamic&nbsp;Content&nbsp;with&nbsp;CGI</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__19">n</a></td><td  
class="diff_header" id="to55_143">143+</td><td  
nowrap="nowrap">*&nbsp;On&nbsp;Apache&nbsp;you&nbsp;can&nbsp;take&nbsp;a&nbsp;look&nbsp;<span  
class="diff_chg">a</span>t&nbsp;the&nbsp;`Dynamic&nbsp;Content&nbsp;with&nbsp;CGI</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_144">144</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://httpd.apache.org/docs/2.2/howto/cgi.html&gt;`_&nbsp;tutorial,&nbsp;where&nbsp;everything</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_145">145</td><td  
nowrap="nowrap">&nbsp;&nbsp;is&nbsp;described.&nbsp;&nbsp;Most&nbsp;of&nbsp;the&nbsp;time&nbsp;it&nbsp;is&nbsp;enough&nbsp;just&nbsp;to&nbsp;set&nbsp;``+ExecCGI``.&nbsp;&nbsp;The</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_146">146</td><td  
nowrap="nowrap">&nbsp;&nbsp;tutorial&nbsp;also&nbsp;describes&nbsp;the&nbsp;most&nbsp;common&nbsp;gotchas&nbsp;that&nbsp;might&nbsp;arise.</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__20">n</a></td><td  
class="diff_header" id="to55_147">147+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__21"></td><td  
class="diff_header" id="from55_147">147</td><td  
nowrap="nowrap">*&nbsp;On&nbsp;lighttpd&nbsp;you&nbsp;need&nbsp;to&nbsp;use&nbsp;the&nbsp;`CGI&nbsp;module</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__21">n</a></td><td  
class="diff_header" id="from55_148">148-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://<span  
class="diff_sub">t</span>r<span  
class="diff_chg">ac</span>.lighttpd.net/<span  
class="diff_sub">trac/</span>wiki/Docs<span  
class="diff_chg">%3A</span>ModCGI&gt;`_&nbsp;which&nbsp;can&nbsp;be&nbsp;configured</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__21">n</a></td><td  
class="diff_header" id="to55_149">149+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://r<span  
class="diff_chg">edmine</span>.lighttpd.net/wiki/<span  
class="diff_add">lighttpd/</span>Docs<span  
class="diff_chg">:</span>ModCGI&gt;`_<span  
class="diff_add">\&nbsp;,</span>&nbsp;which&nbsp;can&nbsp;be&nbsp;configured</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_149">149</td><td  
nowrap="nowrap">&nbsp;&nbsp;in&nbsp;a&nbsp;straightforward&nbsp;way.&nbsp;&nbsp;It&nbsp;boils&nbsp;down&nbsp;to&nbsp;setting&nbsp;``cgi.assign``&nbsp;properly.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_150">150</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_151">151</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__22"></td><td class="diff_header"  
id="from55_152">152</td><td  
nowrap="nowrap">Common&nbsp;problems&nbsp;with&nbsp;CGI&nbsp;scripts</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_153">153</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__23"></td><td  
class="diff_header" id="from55_154">154</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__22">n</a></td><td class="diff_header"  
id="from55_155">155-</td><td nowrap="nowrap"><span  
class="diff_sub">Trying&nbsp;to&nbsp;use&nbsp;CGI&nbsp;sometimes&nbsp;leads&nbsp;to&nbsp;small&nbsp;annoyances&nbsp;that&nbsp;one&nbsp;might&nbsp;experience</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__22">n</a></td><td  
class="diff_header" id="to55_156">156+</td><td nowrap="nowrap"><span  
class="diff_add">Using&nbsp;CGI&nbsp;sometimes&nbsp;leads&nbsp;to&nbsp;small&nbsp;annoyances&nbsp;while&nbsp;trying&nbsp;to&nbsp;get&nbsp;these</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_156">156-</td><td nowrap="nowrap"><span  
class="diff_sub">while&nbsp;trying&nbsp;to&nbsp;get&nbsp;these&nbsp;scripts&nbsp;to&nbsp;run.&nbsp;&nbsp;Sometimes&nbsp;it&nbsp;happens&nbsp;that&nbsp;a&nbsp;seemingly</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_157">157+</td><td nowrap="nowrap"><span  
class="diff_add">scripts&nbsp;to&nbsp;run.&nbsp;&nbsp;Sometimes&nbsp;a&nbsp;seemingly&nbsp;correct&nbsp;script&nbsp;does&nbsp;not&nbsp;work&nbsp;as</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__24"></td><td  
class="diff_header" id="from55_157">157-</td><td nowrap="nowrap"><span  
class="diff_sub">correct&nbsp;script&nbsp;does&nbsp;not&nbsp;work&nbsp;as&nbsp;expected,&nbsp;which&nbsp;is&nbsp;caused&nbsp;by&nbsp;some&nbsp;small&nbsp;hidden</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__24"></td><td  
class="diff_header" id="to55_158">158+</td><td nowrap="nowrap"><span  
class="diff_add">expected,&nbsp;the&nbsp;cause&nbsp;being&nbsp;some&nbsp;small&nbsp;hidden&nbsp;problem&nbsp;that's&nbsp;difficult&nbsp;to&nbsp;spot.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_158">158-</td><td nowrap="nowrap"><span  
class="diff_sub">reason&nbsp;that's&nbsp;difficult&nbsp;to&nbsp;spot.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_159">159</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__23">n</a></td><td  
class="diff_header" id="from55_160">160-</td><td nowrap="nowrap"><span  
class="diff_sub">Some&nbsp;of&nbsp;these&nbsp;reasons&nbsp;are:</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__23">n</a></td><td  
class="diff_header" id="to55_160">160+</td><td nowrap="nowrap"><span  
class="diff_add">Some&nbsp;of&nbsp;these&nbsp;potential&nbsp;problems&nbsp;are:</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_161">161</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__24">n</a></td><td  
class="diff_header" id="from55_162">162-</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;Python&nbsp;script&nbsp;is&nbsp;not&nbsp;marked&nbsp;executable.&nbsp;&nbsp;When&nbsp;CGI&nbsp;scripts&nbsp;are&nbsp;not</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__24">n</a></td><td  
class="diff_header" id="to55_162">162+</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;Python&nbsp;script&nbsp;is&nbsp;not&nbsp;marked<span  
class="diff_add">&nbsp;as</span>&nbsp;executable.&nbsp;&nbsp;When&nbsp;CGI&nbsp;scripts&nbsp;are&nbsp;not</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_163">163-</td><td  
nowrap="nowrap">&nbsp;&nbsp;executable&nbsp;most&nbsp;<span  
class="diff_sub">of&nbsp;the&nbsp;</span>web&nbsp;servers&nbsp;will&nbsp;let&nbsp;the&nbsp;user&nbsp;download&nbsp;it,&nbsp;instead&nbsp;of</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_163">163+</td><td  
nowrap="nowrap">&nbsp;&nbsp;executable&nbsp;most&nbsp;web&nbsp;servers&nbsp;will&nbsp;let&nbsp;the&nbsp;user&nbsp;download&nbsp;it,&nbsp;instead&nbsp;of</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_164">164</td><td  
nowrap="nowrap">&nbsp;&nbsp;running&nbsp;it&nbsp;and&nbsp;sending&nbsp;the&nbsp;output&nbsp;to&nbsp;the&nbsp;user.&nbsp;&nbsp;For&nbsp;CGI&nbsp;scripts&nbsp;to&nbsp;run</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__25">n</a></td><td  
class="diff_header" id="from55_165">165-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;properly&nbsp;the&nbsp;``+x``&nbsp;bit&nbsp;needs&nbsp;to&nbsp;be&nbsp;set.&nbsp;&nbsp;Using&nbsp;``chmod&nbsp;a+x&nbsp;your_script.py``</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__25">n</a></td><td  
class="diff_header" id="to55_165">165+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;properly&nbsp;on&nbsp;Unix-like&nbsp;operating&nbsp;systems,&nbsp;the&nbsp;``+x``&nbsp;bit&nbsp;needs&nbsp;to&nbsp;be&nbsp;set.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_166">166-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;might&nbsp;already&nbsp;solve&nbsp;the&nbsp;problem.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_166">166+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;Using&nbsp;``chmod&nbsp;a+x&nbsp;your_script.py``&nbsp;may&nbsp;solve&nbsp;this&nbsp;problem.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_167">167-</td><td nowrap="nowrap"><span  
class="diff_sub">*&nbsp;The&nbsp;line&nbsp;endings&nbsp;must&nbsp;be&nbsp;of&nbsp;Unix-type.&nbsp;&nbsp;This&nbsp;is&nbsp;important&nbsp;because&nbsp;the&nbsp;web</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_167">167+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_168">168+</td><td nowrap="nowrap"><span  
class="diff_add">*&nbsp;On&nbsp;a&nbsp;Unix-like&nbsp;system,&nbsp;The&nbsp;line&nbsp;endings&nbsp;in&nbsp;the&nbsp;program&nbsp;file&nbsp;must&nbsp;be&nbsp;Unix</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_169">169+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;style&nbsp;line&nbsp;endings.&nbsp;&nbsp;This&nbsp;is&nbsp;important&nbsp;because&nbsp;the&nbsp;web&nbsp;server&nbsp;checks&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_168">168-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;server&nbsp;checks&nbsp;the</span>&nbsp;first&nbsp;line&nbsp;of&nbsp;the&nbsp;script&nbsp;(called&nbsp;shebang)&nbsp;and&nbsp;tries&nbsp;to&nbsp;run</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_170">170+</td><td  
nowrap="nowrap">&nbsp;&nbsp;first&nbsp;line&nbsp;of&nbsp;the&nbsp;script&nbsp;(called&nbsp;shebang)&nbsp;and&nbsp;tries&nbsp;to&nbsp;run<span  
class="diff_add">&nbsp;the&nbsp;program</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_169">169-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;the&nbsp;program</span>&nbsp;specified&nbsp;there.&nbsp;&nbsp;It&nbsp;gets&nbsp;easily&nbsp;confused&nbsp;by&nbsp;Windows&nbsp;line&nbsp;endings</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_171">171+</td><td  
nowrap="nowrap">&nbsp;&nbsp;specified&nbsp;there.&nbsp;&nbsp;It&nbsp;gets&nbsp;easily&nbsp;confused&nbsp;by&nbsp;Windows&nbsp;line&nbsp;endings<span  
class="diff_add">&nbsp;(Carriage</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_170">170-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;(Carriage</span>&nbsp;Return&nbsp;&amp;&nbsp;Line&nbsp;Feed,&nbsp;also&nbsp;called&nbsp;CRLF),&nbsp;so&nbsp;you&nbsp;have&nbsp;to&nbsp;convert&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_172">172+</td><td  
nowrap="nowrap">&nbsp;&nbsp;Return&nbsp;&amp;&nbsp;Line&nbsp;Feed,&nbsp;also&nbsp;called&nbsp;CRLF),&nbsp;so&nbsp;you&nbsp;have&nbsp;to&nbsp;convert&nbsp;the<span  
class="diff_add">&nbsp;file&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_171">171-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;file&nbsp;to</span>&nbsp;Unix&nbsp;line&nbsp;endings&nbsp;(only&nbsp;Line&nbsp;Feed,&nbsp;LF).&nbsp;&nbsp;This&nbsp;can&nbsp;be&nbsp;done</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_173">173+</td><td  
nowrap="nowrap">&nbsp;&nbsp;Unix&nbsp;line&nbsp;endings&nbsp;(only&nbsp;Line&nbsp;Feed,&nbsp;LF).&nbsp;&nbsp;This&nbsp;can&nbsp;be&nbsp;done<span  
class="diff_add">&nbsp;automatically&nbsp;by</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_172">172-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;automatically&nbsp;by</span>&nbsp;uploading&nbsp;the&nbsp;file&nbsp;via&nbsp;FTP&nbsp;in&nbsp;text&nbsp;mode&nbsp;instead&nbsp;of&nbsp;binary</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_174">174+</td><td  
nowrap="nowrap">&nbsp;&nbsp;uploading&nbsp;the&nbsp;file&nbsp;via&nbsp;FTP&nbsp;in&nbsp;text&nbsp;mode&nbsp;instead&nbsp;of&nbsp;binary<span  
class="diff_add">&nbsp;mode,&nbsp;but&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_173">173-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;mode,&nbsp;but&nbsp;the</span>&nbsp;preferred&nbsp;way&nbsp;is&nbsp;just&nbsp;telling&nbsp;your&nbsp;editor&nbsp;to&nbsp;save&nbsp;the&nbsp;files&nbsp;with</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_175">175+</td><td  
nowrap="nowrap">&nbsp;&nbsp;preferred&nbsp;way&nbsp;is&nbsp;just&nbsp;telling&nbsp;your&nbsp;editor&nbsp;to&nbsp;save&nbsp;the&nbsp;files&nbsp;with<span  
class="diff_add">&nbsp;Unix&nbsp;line</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_174">174-</td><td nowrap="nowrap">&nbsp;<span  
class="diff_sub">&nbsp;Unix&nbsp;line</span>&nbsp;endings.&nbsp;&nbsp;Most<span  
class="diff_sub">&nbsp;proper</span>&nbsp;editors&nbsp;support&nbsp;this.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_176">176+</td><td  
nowrap="nowrap">&nbsp;&nbsp;endings.&nbsp;&nbsp;Most&nbsp;editors&nbsp;support&nbsp;this.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_177">177+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_175">175-</td><td  
nowrap="nowrap">*&nbsp;Your&nbsp;web&nbsp;server&nbsp;must&nbsp;be&nbsp;able&nbsp;to&nbsp;read&nbsp;the&nbsp;file,&nbsp;you&nbsp;need&nbsp;to&nbsp;make&nbsp;sure&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_178">178+</td><td  
nowrap="nowrap">*&nbsp;Your&nbsp;web&nbsp;server&nbsp;must&nbsp;be&nbsp;able&nbsp;to&nbsp;read&nbsp;the&nbsp;file,&nbsp;<span  
class="diff_add">and&nbsp;</span>you&nbsp;need&nbsp;to&nbsp;make&nbsp;sure&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_176">176-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;permissions&nbsp;are&nbsp;fine.&nbsp;&nbsp;Often&nbsp;the&nbsp;server&nbsp;runs&nbsp;as&nbsp;user&nbsp;and&nbsp;group&nbsp;``www-data``,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_179">179+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;permissions&nbsp;are&nbsp;correct.&nbsp;&nbsp;On&nbsp;unix-like&nbsp;systems,&nbsp;the&nbsp;server&nbsp;often&nbsp;runs&nbsp;as&nbsp;user</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_177">177-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;so&nbsp;it&nbsp;might&nbsp;be&nbsp;worth&nbsp;a&nbsp;try&nbsp;to&nbsp;change&nbsp;the&nbsp;file&nbsp;ownership&nbsp;or&nbsp;making&nbsp;the&nbsp;file</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_180">180+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;and&nbsp;group&nbsp;``www-data``,&nbsp;so&nbsp;it&nbsp;might&nbsp;be&nbsp;worth&nbsp;a&nbsp;try&nbsp;to&nbsp;change&nbsp;the&nbsp;file</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_178">178-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;world&nbsp;readable&nbsp;by&nbsp;using&nbsp;``chmod&nbsp;a+r&nbsp;your_script.py``.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_181">181+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;ownership,&nbsp;or&nbsp;making&nbsp;the&nbsp;file&nbsp;world&nbsp;readable&nbsp;by&nbsp;using&nbsp;``chmod&nbsp;a+r</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_182">182+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;your_script.py``.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_183">183+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_179">179-</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;webserver&nbsp;must&nbsp;<span  
class="diff_sub">be&nbsp;able&nbsp;to&nbsp;</span>know&nbsp;that&nbsp;the&nbsp;file&nbsp;you're&nbsp;trying&nbsp;to&nbsp;access&nbsp;is&nbsp;a</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_184">184+</td><td nowrap="nowrap">*&nbsp;The&nbsp;web<span  
class="diff_add">&nbsp;</span>server&nbsp;must&nbsp;know&nbsp;that&nbsp;the&nbsp;file&nbsp;you're&nbsp;trying&nbsp;to&nbsp;access&nbsp;is&nbsp;a<span  
class="diff_add">&nbsp;CGI&nbsp;script.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_180">180-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;CGI&nbsp;script.&nbsp;&nbsp;Check&nbsp;the&nbsp;configuration&nbsp;of&nbsp;your&nbsp;web&nbsp;server,&nbsp;maybe&nbsp;there&nbsp;is&nbsp;some</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_185">185+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;Check&nbsp;the&nbsp;configuration&nbsp;of&nbsp;your&nbsp;web&nbsp;server,&nbsp;as&nbsp;it&nbsp;may&nbsp;be&nbsp;configured</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_181">181-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;mistake.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_186">186+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;to&nbsp;expect&nbsp;a&nbsp;specific&nbsp;file&nbsp;extension&nbsp;for&nbsp;CGI&nbsp;scripts.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_182">182-</td><td nowrap="nowrap"><span  
class="diff_sub">*&nbsp;The&nbsp;path&nbsp;to&nbsp;the&nbsp;interpreter&nbsp;in&nbsp;the&nbsp;shebang&nbsp;(``#!/usr/bin/env&nbsp;python``)&nbsp;must&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_187">187+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_183">183-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;currect.&nbsp;&nbsp;This&nbsp;line&nbsp;calls&nbsp;``/usr/bin/env``&nbsp;to&nbsp;find&nbsp;Python,&nbsp;but&nbsp;it'll&nbsp;fail&nbsp;if</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_188">188+</td><td nowrap="nowrap"><span  
class="diff_add">*&nbsp;On&nbsp;Unix-like&nbsp;systems,&nbsp;the&nbsp;path&nbsp;to&nbsp;the&nbsp;interpreter&nbsp;in&nbsp;the&nbsp;shebang</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_184">184-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;there&nbsp;is&nbsp;no&nbsp;``/usr/bin/env``.&nbsp;&nbsp;If&nbsp;you&nbsp;know&nbsp;where&nbsp;your&nbsp;Python&nbsp;is&nbsp;installed,&nbsp;you</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_189">189+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;(``#!/usr/bin/env&nbsp;python``)&nbsp;must&nbsp;be&nbsp;correct.&nbsp;&nbsp;This&nbsp;line&nbsp;calls</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__25"></td><td  
class="diff_header" id="from55_185">185-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;can&nbsp;also&nbsp;use&nbsp;that&nbsp;path.&nbsp;&nbsp;The&nbsp;commands&nbsp;``whereis&nbsp;python``&nbsp;and&nbsp;``type&nbsp;-p</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__25"></td><td  
class="diff_header" id="to55_190">190+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;``/usr/bin/env``&nbsp;to&nbsp;find&nbsp;Python,&nbsp;but&nbsp;it&nbsp;will&nbsp;fail&nbsp;if&nbsp;there&nbsp;is&nbsp;no</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_186">186-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;python``&nbsp;might&nbsp;also&nbsp;help&nbsp;to&nbsp;find&nbsp;where&nbsp;it&nbsp;is&nbsp;installed.&nbsp;&nbsp;Once&nbsp;this&nbsp;is&nbsp;known,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_191">191+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;``/usr/bin/env``,&nbsp;or&nbsp;if&nbsp;Python&nbsp;is&nbsp;not&nbsp;in&nbsp;the&nbsp;web&nbsp;server's&nbsp;path.&nbsp;&nbsp;If&nbsp;you&nbsp;know</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_187">187-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;the&nbsp;shebang&nbsp;line&nbsp;can&nbsp;be&nbsp;changed&nbsp;accordingly:&nbsp;``#!/usr/bin/python``.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_192">192+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;where&nbsp;your&nbsp;Python&nbsp;is&nbsp;installed,&nbsp;you&nbsp;can&nbsp;also&nbsp;use&nbsp;that&nbsp;full&nbsp;path.&nbsp;&nbsp;The</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_193">193+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;commands&nbsp;``whereis&nbsp;python``&nbsp;and&nbsp;``type&nbsp;-p&nbsp;python``&nbsp;could&nbsp;help&nbsp;you&nbsp;find</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_194">194+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;where&nbsp;it&nbsp;is&nbsp;installed.&nbsp;&nbsp;Once&nbsp;you&nbsp;know&nbsp;the&nbsp;path,&nbsp;you&nbsp;can&nbsp;change&nbsp;the&nbsp;shebang</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_195">195+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;accordingly:&nbsp;``#!/usr/bin/python``.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_196">196+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_188">188</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;file&nbsp;must&nbsp;not&nbsp;contain&nbsp;a&nbsp;BOM&nbsp;(Byte&nbsp;Order&nbsp;Mark).&nbsp;The&nbsp;BOM&nbsp;is&nbsp;meant&nbsp;for</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__26">n</a></td><td  
class="diff_header" id="from55_189">189-</td><td  
nowrap="nowrap">&nbsp;&nbsp;determining&nbsp;the&nbsp;byte&nbsp;order&nbsp;of&nbsp;UTF-16&nbsp;encodings,&nbsp;but&nbsp;some&nbsp;editors<span  
class="diff_sub">&nbsp;write&nbsp;this</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__26">n</a></td><td  
class="diff_header" id="to55_198">198+</td><td  
nowrap="nowrap">&nbsp;&nbsp;determining&nbsp;the&nbsp;byte&nbsp;order&nbsp;of&nbsp;UTF-16<span  
class="diff_add">&nbsp;and&nbsp;UTF-32</span>&nbsp;encodings,&nbsp;but&nbsp;some&nbsp;editors</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_190">190-</td><td  
nowrap="nowrap">&nbsp;&nbsp;also&nbsp;into&nbsp;UTF-8&nbsp;files.&nbsp;&nbsp;The&nbsp;BOM&nbsp;interferes&nbsp;with&nbsp;the&nbsp;shebang&nbsp;line,<span  
class="diff_sub">&nbsp;so&nbsp;be&nbsp;sure</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_199">199+</td><td nowrap="nowrap">&nbsp;<span  
class="diff_add">&nbsp;write&nbsp;this</span>&nbsp;also&nbsp;into&nbsp;UTF-8&nbsp;files.&nbsp;&nbsp;The&nbsp;BOM&nbsp;interferes&nbsp;with&nbsp;the&nbsp;shebang&nbsp;line,</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_191">191-</td><td  
nowrap="nowrap">&nbsp;&nbsp;to&nbsp;tell&nbsp;your&nbsp;editor&nbsp;not&nbsp;to&nbsp;write&nbsp;the&nbsp;BOM.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_200">200+</td><td nowrap="nowrap">&nbsp;<span  
class="diff_add">&nbsp;so&nbsp;be&nbsp;sure</span>&nbsp;to&nbsp;tell&nbsp;your&nbsp;editor&nbsp;not&nbsp;to&nbsp;write&nbsp;the&nbsp;BOM.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_192">192-</td><td nowrap="nowrap"><span  
class="diff_sub">*&nbsp;:ref:`mod-python`&nbsp;might&nbsp;be&nbsp;making&nbsp;problems.&nbsp;&nbsp;mod_python&nbsp;is&nbsp;able&nbsp;to&nbsp;handle&nbsp;CGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_201">201+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_193">193-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;scripts&nbsp;by&nbsp;itself,&nbsp;but&nbsp;it&nbsp;can&nbsp;also&nbsp;be&nbsp;a&nbsp;source&nbsp;for&nbsp;problems.&nbsp;&nbsp;Be&nbsp;sure&nbsp;you</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_202">202+</td><td nowrap="nowrap"><span  
class="diff_add">*&nbsp;If&nbsp;the&nbsp;web&nbsp;server&nbsp;is&nbsp;using&nbsp;:ref:`mod-python`,&nbsp;``mod_python``&nbsp;may&nbsp;be&nbsp;having</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_194">194-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;disable&nbsp;it.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_203">203+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;problems.&nbsp;&nbsp;``mod_python``&nbsp;is&nbsp;able&nbsp;to&nbsp;handle&nbsp;CGI&nbsp;scripts&nbsp;by&nbsp;itself,&nbsp;but&nbsp;it&nbsp;can</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_204">204+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;also&nbsp;be&nbsp;a&nbsp;source&nbsp;of&nbsp;issues.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__26"></td><td  
class="diff_header" id="from55_195">195</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_196">196</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_197">197</td><td  
nowrap="nowrap">..&nbsp;_mod-python:</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_198">198</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_199">199</td><td  
nowrap="nowrap">mod_python</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_200">200</td><td  
nowrap="nowrap">----------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_201">201</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_202">202</td><td  
nowrap="nowrap">People&nbsp;coming&nbsp;from&nbsp;PHP&nbsp;often&nbsp;find&nbsp;it&nbsp;hard&nbsp;to&nbsp;grasp&nbsp;how&nbsp;to&nbsp;use&nbsp;Python&nbsp;in&nbsp;the&nbsp;web.</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__27">n</a></td><td  
class="diff_header" id="from55_203">203-</td><td  
nowrap="nowrap">Their&nbsp;first&nbsp;thought&nbsp;is&nbsp;mostly&nbsp;`mod_python&nbsp;&lt;http://www.modpython.org/&gt;`_<span  
class="diff_chg">&nbsp;because</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__27">n</a></td><td  
class="diff_header" id="to55_213">213+</td><td  
nowrap="nowrap">Their&nbsp;first&nbsp;thought&nbsp;is&nbsp;mostly&nbsp;`mod_python&nbsp;&lt;http://www.modpython.org/&gt;`_<span  
class="diff_chg">\&nbsp;,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_204">204-</td><td  
nowrap="nowrap">they&nbsp;think&nbsp;that&nbsp;this&nbsp;is&nbsp;the&nbsp;equivalent&nbsp;to&nbsp;``mod_php``.&nbsp;&nbsp;Actually<span  
class="diff_chg">&nbsp;i</span>t<span  
class="diff_chg">&nbsp;is&nbsp;not</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_214">214+</td><td nowrap="nowrap"><span  
class="diff_add">because&nbsp;</span>they&nbsp;think&nbsp;that&nbsp;this&nbsp;is&nbsp;the&nbsp;equivalent&nbsp;to&nbsp;``mod_php``.&nbsp;&nbsp;Actually<span  
class="diff_chg">,&nbsp;</span>t<span class="diff_chg">here</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_205">205-</td><td nowrap="nowrap"><span  
class="diff_sub">really.&nbsp;&nbsp;It&nbsp;does&nbsp;embed&nbsp;the&nbsp;interpreter&nbsp;into&nbsp;the&nbsp;Apache&nbsp;process,&nbsp;thus&nbsp;speeding&nbsp;up</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_215">215+</td><td nowrap="nowrap"><span  
class="diff_add">are&nbsp;many&nbsp;differences.&nbsp;&nbsp;What&nbsp;``mod_python``&nbsp;does&nbsp;is&nbsp;embed&nbsp;the&nbsp;interpreter&nbsp;into</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_206">206-</td><td nowrap="nowrap"><span  
class="diff_sub">requests&nbsp;by&nbsp;not&nbsp;having&nbsp;to&nbsp;start&nbsp;a&nbsp;Python&nbsp;interpreter&nbsp;every&nbsp;request.&nbsp;&nbsp;On&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_216">216+</td><td nowrap="nowrap"><span  
class="diff_add">the&nbsp;Apache&nbsp;process,&nbsp;thus&nbsp;speeding&nbsp;up&nbsp;requests&nbsp;by&nbsp;not&nbsp;having&nbsp;to&nbsp;start&nbsp;a&nbsp;Python</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__27"></td><td  
class="diff_header" id="from55_207">207-</td><td nowrap="nowrap"><span  
class="diff_sub">other&nbsp;hand,&nbsp;it&nbsp;is&nbsp;by&nbsp;far&nbsp;not&nbsp;"Python&nbsp;intermixed&nbsp;with&nbsp;HTML"&nbsp;as&nbsp;PHP&nbsp;often&nbsp;does.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__27"></td><td  
class="diff_header" id="to55_217">217+</td><td nowrap="nowrap"><span  
class="diff_add">interpreter&nbsp;for&nbsp;each&nbsp;request.&nbsp;&nbsp;On&nbsp;the&nbsp;other&nbsp;hand,&nbsp;it&nbsp;is&nbsp;not&nbsp;"Python&nbsp;intermixed</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_218">218+</td><td nowrap="nowrap"><span  
class="diff_add">with&nbsp;HTML"&nbsp;in&nbsp;the&nbsp;way&nbsp;that&nbsp;PHP&nbsp;is&nbsp;often&nbsp;intermixed&nbsp;with&nbsp;HTML.&nbsp;The&nbsp;Python</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_208">208-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;Python&nbsp;</span>equivalent&nbsp;of&nbsp;that&nbsp;is&nbsp;a&nbsp;template&nbsp;engine.&nbsp;&nbsp;mod_python&nbsp;itself&nbsp;is&nbsp;much</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_219">219+</td><td  
nowrap="nowrap">equivalent&nbsp;of&nbsp;that&nbsp;is&nbsp;a&nbsp;template&nbsp;engine.&nbsp;&nbsp;<span  
class="diff_add">``</span>mod_python<span  
class="diff_add">``</span>&nbsp;itself&nbsp;is&nbsp;much<span  
class="diff_add">&nbsp;more</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_209">209-</td><td nowrap="nowrap"><span  
class="diff_sub">more&nbsp;</span>powerful&nbsp;and&nbsp;<span  
class="diff_chg">g</span>i<span  
class="diff_chg">v</span>es&nbsp;more&nbsp;access&nbsp;to&nbsp;Apache&nbsp;internals.&nbsp;&nbsp;It&nbsp;can&nbsp;emulate&nbsp;CGI,<span  
class="diff_sub">&nbsp;it</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_220">220+</td><td nowrap="nowrap">powerful&nbsp;and&nbsp;<span  
class="diff_chg">prov</span>i<span  
class="diff_chg">d</span>es&nbsp;more&nbsp;access&nbsp;to&nbsp;Apache&nbsp;internals.&nbsp;&nbsp;It&nbsp;can&nbsp;emulate&nbsp;CGI,</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_210">210-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;</span>work&nbsp;a<span  
class="diff_sub">n&nbsp;a</span>&nbsp;"Python&nbsp;Server&nbsp;Pages"&nbsp;mode&nbsp;similar&nbsp;to&nbsp;JSP&nbsp;which&nbsp;is&nbsp;"HTML</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_221">221+</td><td nowrap="nowrap">work&nbsp;<span  
class="diff_add">in&nbsp;</span>a&nbsp;"Python&nbsp;Server&nbsp;Pages"&nbsp;mode&nbsp;<span  
class="diff_add">(</span>similar&nbsp;to&nbsp;JSP<span  
class="diff_add">)</span>&nbsp;which&nbsp;is&nbsp;"HTML</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_211">211-</td><td nowrap="nowrap">interm<span  
class="diff_chg">a</span>ngled&nbsp;with&nbsp;Python"&nbsp;and&nbsp;it&nbsp;has&nbsp;a&nbsp;"Publisher"&nbsp;which&nbsp;des<span  
class="diff_sub">t</span>ignates&nbsp;one&nbsp;file<span  
class="diff_sub">&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_222">222+</td><td nowrap="nowrap">interm<span  
class="diff_chg">i</span>ngled&nbsp;with&nbsp;Python"<span  
class="diff_add">,</span>&nbsp;and&nbsp;it&nbsp;has&nbsp;a&nbsp;"Publisher"&nbsp;which&nbsp;designates&nbsp;one&nbsp;file</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_212">212-</td><td  
nowrap="nowrap">accept&nbsp;all&nbsp;requests&nbsp;and&nbsp;decide&nbsp;<span  
class="diff_sub">on&nbsp;</span>what&nbsp;to&nbsp;do&nbsp;the<span  
class="diff_chg">n</span>.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_223">223+</td><td nowrap="nowrap"><span  
class="diff_add">to&nbsp;</span>accept&nbsp;all&nbsp;requests&nbsp;and&nbsp;decide&nbsp;what&nbsp;to&nbsp;do<span  
class="diff_add">&nbsp;with</span>&nbsp;the<span  
class="diff_chg">m</span>.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_213">213</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__28">n</a></td><td  
class="diff_header" id="from55_214">214-</td><td nowrap="nowrap"><span  
class="diff_chg">But&nbsp;</span>mod_python&nbsp;ha<span  
class="diff_chg">s</span>&nbsp;some&nbsp;problems.&nbsp;&nbsp;Unlike&nbsp;the&nbsp;PHP&nbsp;interpreter&nbsp;the&nbsp;Python</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__28">n</a></td><td  
class="diff_header" id="to55_225">225+</td><td nowrap="nowrap"><span  
class="diff_chg">``</span>mod_python<span  
class="diff_add">``&nbsp;does</span>&nbsp;ha<span  
class="diff_chg">ve</span>&nbsp;some&nbsp;problems.&nbsp;&nbsp;Unlike&nbsp;the&nbsp;PHP&nbsp;interpreter<span  
class="diff_add">,</span>&nbsp;the&nbsp;Python</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_215">215-</td><td  
nowrap="nowrap">interpreter&nbsp;uses&nbsp;caching&nbsp;when&nbsp;executing&nbsp;files,&nbsp;so<span  
class="diff_sub">&nbsp;when</span>&nbsp;chang<span  
class="diff_chg">ing</span>&nbsp;a&nbsp;file&nbsp;<span  
class="diff_sub">the&nbsp;</span>w<span class="diff_chg">ho</span>l<span  
class="diff_chg">e</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_226">226+</td><td  
nowrap="nowrap">interpreter&nbsp;uses&nbsp;caching&nbsp;when&nbsp;executing&nbsp;files,&nbsp;so&nbsp;chang<span  
class="diff_chg">es&nbsp;to</span>&nbsp;a&nbsp;file&nbsp;w<span  
class="diff_chg">i</span>l<span class="diff_chg">l</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_216">216-</td><td nowrap="nowrap">web&nbsp;server&nbsp;<span  
class="diff_sub">needs&nbsp;</span>to&nbsp;be&nbsp;re<span  
class="diff_sub">-</span>started<span  
class="diff_sub">&nbsp;to&nbsp;update</span>.&nbsp;&nbsp;Another&nbsp;problem&nbsp;is<span  
class="diff_sub">t</span>&nbsp;the&nbsp;basic</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_227">227+</td><td nowrap="nowrap"><span  
class="diff_add">require&nbsp;the&nbsp;</span>web&nbsp;server&nbsp;to&nbsp;be&nbsp;restarted.&nbsp;&nbsp;Another&nbsp;problem&nbsp;is&nbsp;the&nbsp;basic<span  
class="diff_add">&nbsp;concept</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_217">217-</td><td nowrap="nowrap"><span  
class="diff_sub">concept&nbsp;</span>--&nbsp;Apache&nbsp;starts&nbsp;<span  
class="diff_sub">some&nbsp;</span>child&nbsp;processes&nbsp;to&nbsp;handle&nbsp;the&nbsp;requests&nbsp;and</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_228">228+</td><td  
nowrap="nowrap">--&nbsp;Apache&nbsp;starts&nbsp;child&nbsp;processes&nbsp;to&nbsp;handle&nbsp;the&nbsp;requests<span  
class="diff_add">,</span>&nbsp;and<span  
class="diff_add">&nbsp;unfortunately</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__28"></td><td  
class="diff_header" id="from55_218">218-</td><td nowrap="nowrap"><span  
class="diff_sub">unfortunately&nbsp;</span>every&nbsp;child&nbsp;process&nbsp;needs&nbsp;to&nbsp;load&nbsp;the&nbsp;whole&nbsp;Python&nbsp;interpreter</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__28"></td><td  
class="diff_header" id="to55_229">229+</td><td  
nowrap="nowrap">every&nbsp;child&nbsp;process&nbsp;needs&nbsp;to&nbsp;load&nbsp;the&nbsp;whole&nbsp;Python&nbsp;interpreter<span  
class="diff_add">&nbsp;even&nbsp;if&nbsp;it&nbsp;does</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_219">219-</td><td nowrap="nowrap"><span  
class="diff_sub">even&nbsp;if&nbsp;it&nbsp;does&nbsp;</span>not&nbsp;use&nbsp;it.&nbsp;&nbsp;This&nbsp;makes&nbsp;the&nbsp;whole&nbsp;web&nbsp;server&nbsp;slower.&nbsp;&nbsp;Another</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_230">230+</td><td  
nowrap="nowrap">not&nbsp;use&nbsp;it.&nbsp;&nbsp;This&nbsp;makes&nbsp;the&nbsp;whole&nbsp;web&nbsp;server&nbsp;slower.&nbsp;&nbsp;Another<span  
class="diff_add">&nbsp;problem&nbsp;is&nbsp;that,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_220">220-</td><td nowrap="nowrap"><span  
class="diff_sub">problem&nbsp;is&nbsp;that&nbsp;as&nbsp;mod_python&nbsp;is&nbsp;linked&nbsp;against&nbsp;a&nbsp;specific&nbsp;version&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_231">231+</td><td nowrap="nowrap"><span  
class="diff_add">because&nbsp;``mod_python``&nbsp;is&nbsp;linked&nbsp;against&nbsp;a&nbsp;specific&nbsp;version&nbsp;of&nbsp;``libpython``,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_221">221-</td><td nowrap="nowrap"><span  
class="diff_sub">``libpython``,&nbsp;</span>it&nbsp;is&nbsp;not&nbsp;possible&nbsp;to&nbsp;switch&nbsp;from&nbsp;an&nbsp;older&nbsp;version&nbsp;to&nbsp;a&nbsp;newer</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_232">232+</td><td  
nowrap="nowrap">it&nbsp;is&nbsp;not&nbsp;possible&nbsp;to&nbsp;switch&nbsp;from&nbsp;an&nbsp;older&nbsp;version&nbsp;to&nbsp;a&nbsp;newer<span  
class="diff_add">&nbsp;(e.g.&nbsp;2.4&nbsp;to&nbsp;2.5)</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_222">222-</td><td nowrap="nowrap"><span  
class="diff_sub">(e.g.&nbsp;2.4&nbsp;to&nbsp;2.5)&nbsp;</span>without&nbsp;recompiling&nbsp;mod_python.&nbsp;&nbsp;mod_python&nbsp;is&nbsp;also&nbsp;bound&nbsp;to</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_233">233+</td><td  
nowrap="nowrap">without&nbsp;recompiling&nbsp;<span  
class="diff_add">``</span>mod_python<span  
class="diff_add">``</span>.&nbsp;&nbsp;<span  
class="diff_add">``</span>mod_python<span  
class="diff_add">``</span>&nbsp;is&nbsp;also&nbsp;bound&nbsp;to<span  
class="diff_add">&nbsp;the&nbsp;Apache</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_223">223-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;Apache&nbsp;</span>web&nbsp;server,&nbsp;so&nbsp;programs&nbsp;written&nbsp;for&nbsp;mod_python&nbsp;cannot&nbsp;easily&nbsp;run&nbsp;on</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_234">234+</td><td  
nowrap="nowrap">web&nbsp;server,&nbsp;so&nbsp;programs&nbsp;written&nbsp;for&nbsp;<span  
class="diff_add">``</span>mod_python<span  
class="diff_add">``</span>&nbsp;cannot&nbsp;easily&nbsp;run&nbsp;on<span  
class="diff_add">&nbsp;other</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_224">224-</td><td nowrap="nowrap"><span  
class="diff_sub">other&nbsp;</span>web&nbsp;servers.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_235">235+</td><td nowrap="nowrap">web&nbsp;servers.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_225">225</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__29">n</a></td><td  
class="diff_header" id="from55_226">226-</td><td  
nowrap="nowrap">These&nbsp;are&nbsp;the&nbsp;reasons&nbsp;why&nbsp;mod_python&nbsp;should&nbsp;be&nbsp;avoided&nbsp;when&nbsp;writing&nbsp;new</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__29">n</a></td><td  
class="diff_header" id="to55_237">237+</td><td  
nowrap="nowrap">These&nbsp;are&nbsp;the&nbsp;reasons&nbsp;why&nbsp;<span  
class="diff_add">``</span>mod_python<span  
class="diff_add">``</span>&nbsp;should&nbsp;be&nbsp;avoided&nbsp;when&nbsp;writing&nbsp;new</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_227">227-</td><td  
nowrap="nowrap">programs.&nbsp;&nbsp;In&nbsp;some&nbsp;circumstances&nbsp;it&nbsp;might&nbsp;be&nbsp;<span  
class="diff_sub">still&nbsp;</span>a&nbsp;good&nbsp;idea&nbsp;to&nbsp;use<span  
class="diff_sub">&nbsp;mod_python</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_238">238+</td><td  
nowrap="nowrap">programs.&nbsp;&nbsp;In&nbsp;some&nbsp;circumstances&nbsp;it<span  
class="diff_add">&nbsp;still</span>&nbsp;might&nbsp;be&nbsp;a&nbsp;good&nbsp;idea&nbsp;to&nbsp;use</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_228">228-</td><td  
nowrap="nowrap">for&nbsp;deployment,&nbsp;but&nbsp;WSGI&nbsp;makes&nbsp;it&nbsp;possible&nbsp;to&nbsp;run&nbsp;WSGI&nbsp;programs<span  
class="diff_sub">&nbsp;under&nbsp;mod_python</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_239">239+</td><td nowrap="nowrap"><span  
class="diff_add">``mod_python``&nbsp;</span>for&nbsp;deployment,&nbsp;but&nbsp;WSGI&nbsp;makes&nbsp;it&nbsp;possible&nbsp;to&nbsp;run&nbsp;WSGI&nbsp;programs</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__29"></td><td  
class="diff_header" id="from55_229">229-</td><td nowrap="nowrap"><span  
class="diff_sub">as&nbsp;well.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__29"></td><td  
class="diff_header" id="to55_240">240+</td><td nowrap="nowrap"><span  
class="diff_add">under&nbsp;``mod_python``&nbsp;as&nbsp;well.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_230">230</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_231">231</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_232">232</td><td  
nowrap="nowrap">FastCGI&nbsp;and&nbsp;SCGI</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_233">233</td><td  
nowrap="nowrap">----------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_234">234</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_235">235</td><td  
nowrap="nowrap">FastCGI&nbsp;and&nbsp;SCGI&nbsp;try&nbsp;to&nbsp;solve&nbsp;the&nbsp;performance&nbsp;problem&nbsp;of&nbsp;CGI&nbsp;in&nbsp;another&nbsp;way.</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__30"></td><td  
class="diff_header" id="from55_236">236</td><td  
nowrap="nowrap">Instead&nbsp;of&nbsp;embedding&nbsp;the&nbsp;interpreter&nbsp;into&nbsp;the&nbsp;web&nbsp;server,&nbsp;they&nbsp;create</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__30">n</a></td><td  
class="diff_header" id="from55_237">237-</td><td nowrap="nowrap"><span  
class="diff_sub">long-running&nbsp;processes&nbsp;which&nbsp;run&nbsp;in&nbsp;the&nbsp;background.&nbsp;There&nbsp;still&nbsp;is&nbsp;some&nbsp;module</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__30">n</a></td><td  
class="diff_header" id="to55_248">248+</td><td nowrap="nowrap"><span  
class="diff_add">long-running&nbsp;background&nbsp;processes.&nbsp;There&nbsp;is&nbsp;still&nbsp;a&nbsp;module&nbsp;in&nbsp;the&nbsp;web&nbsp;server</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__31"></td><td  
class="diff_header" id="from55_238">238-</td><td nowrap="nowrap"><span  
class="diff_sub">in&nbsp;the&nbsp;web&nbsp;server&nbsp;</span>which&nbsp;makes&nbsp;it&nbsp;possible&nbsp;for&nbsp;the&nbsp;web&nbsp;server&nbsp;to&nbsp;"speak"&nbsp;with&nbsp;the</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__31"></td><td  
class="diff_header" id="to55_249">249+</td><td  
nowrap="nowrap">which&nbsp;makes&nbsp;it&nbsp;possible&nbsp;for&nbsp;the&nbsp;web&nbsp;server&nbsp;to&nbsp;"speak"&nbsp;with&nbsp;the<span  
class="diff_add">&nbsp;background</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_239">239-</td><td nowrap="nowrap"><span  
class="diff_sub">background&nbsp;process.&nbsp;&nbsp;As&nbsp;the&nbsp;background&nbsp;process&nbsp;is&nbsp;independent&nbsp;from&nbsp;the&nbsp;server,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_250">250+</td><td nowrap="nowrap"><span  
class="diff_add">process.&nbsp;&nbsp;As&nbsp;the&nbsp;background&nbsp;process&nbsp;is&nbsp;independent&nbsp;of&nbsp;the&nbsp;server,&nbsp;it&nbsp;can&nbsp;be</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_240">240-</td><td nowrap="nowrap"><span  
class="diff_sub">it&nbsp;can&nbsp;be&nbsp;written&nbsp;in&nbsp;any&nbsp;language&nbsp;of&nbsp;course&nbsp;also&nbsp;in&nbsp;Python.&nbsp;&nbsp;The&nbsp;language&nbsp;just</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_251">251+</td><td nowrap="nowrap"><span  
class="diff_add">written&nbsp;in&nbsp;any&nbsp;language,&nbsp;including&nbsp;Python.&nbsp;&nbsp;The&nbsp;language&nbsp;just&nbsp;needs&nbsp;to&nbsp;have&nbsp;a</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__32"></td><td  
class="diff_header" id="from55_241">241-</td><td nowrap="nowrap"><span  
class="diff_sub">needs&nbsp;to&nbsp;have&nbsp;a&nbsp;</span>library&nbsp;which&nbsp;handles&nbsp;the&nbsp;communication&nbsp;with&nbsp;the&nbsp;web<span  
class="diff_sub">&nbsp;</span>server.</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__32"></td><td  
class="diff_header" id="to55_252">252+</td><td  
nowrap="nowrap">library&nbsp;which&nbsp;handles&nbsp;the&nbsp;communication&nbsp;with&nbsp;the&nbsp;webserver.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_242">242</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_243">243</td><td  
nowrap="nowrap">The&nbsp;difference&nbsp;between&nbsp;FastCGI&nbsp;and&nbsp;SCGI&nbsp;is&nbsp;very&nbsp;small,&nbsp;as&nbsp;SCGI&nbsp;is&nbsp;essentially</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__31">n</a></td><td  
class="diff_header" id="from55_244">244-</td><td  
nowrap="nowrap">just&nbsp;a&nbsp;"simpler&nbsp;FastCGI".&nbsp;&nbsp;<span  
class="diff_chg">But&nbsp;a</span>s&nbsp;the&nbsp;web&nbsp;server&nbsp;support&nbsp;for&nbsp;SCGI&nbsp;is&nbsp;limited</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__31">n</a></td><td  
class="diff_header" id="to55_255">255+</td><td  
nowrap="nowrap">just&nbsp;a&nbsp;"simpler&nbsp;FastCGI".&nbsp;&nbsp;<span  
class="diff_chg">A</span>s&nbsp;the&nbsp;web&nbsp;server&nbsp;support&nbsp;for&nbsp;SCGI&nbsp;is&nbsp;limited<span  
class="diff_add">,</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_245">245</td><td  
nowrap="nowrap">most&nbsp;people&nbsp;use&nbsp;FastCGI&nbsp;instead,&nbsp;which&nbsp;works&nbsp;the&nbsp;same&nbsp;way.&nbsp;&nbsp;Almost&nbsp;everything</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__32">n</a></td><td  
class="diff_header" id="from55_246">246-</td><td  
nowrap="nowrap">that&nbsp;applies&nbsp;to&nbsp;SCGI&nbsp;also&nbsp;applies&nbsp;to&nbsp;FastCGI&nbsp;as&nbsp;well,&nbsp;so&nbsp;we'll&nbsp;only&nbsp;<span  
class="diff_chg">w</span>r<span  
class="diff_sub">ite&nbsp;about</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__32">n</a></td><td  
class="diff_header" id="to55_257">257+</td><td  
nowrap="nowrap">that&nbsp;applies&nbsp;to&nbsp;SCGI&nbsp;also&nbsp;applies&nbsp;to&nbsp;FastCGI&nbsp;as&nbsp;well,&nbsp;so&nbsp;we'll&nbsp;only&nbsp;<span  
class="diff_chg">cove</span>r</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_247">247</td><td  
nowrap="nowrap">the&nbsp;latter.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_248">248</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__33">n</a></td><td class="diff_header"  
id="from55_249">249-</td><td  
nowrap="nowrap">These&nbsp;days,&nbsp;FastCGI&nbsp;is&nbsp;never&nbsp;used&nbsp;directly.&nbsp;&nbsp;Just&nbsp;like&nbsp;``mod_python``&nbsp;it&nbsp;is&nbsp;only</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__33">n</a></td><td  
class="diff_header" id="to55_260">260+</td><td  
nowrap="nowrap">These&nbsp;days,&nbsp;FastCGI&nbsp;is&nbsp;never&nbsp;used&nbsp;directly.&nbsp;&nbsp;Just&nbsp;like&nbsp;``mod_python``<span  
class="diff_add">,</span>&nbsp;it&nbsp;is&nbsp;only</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_250">250</td><td  
nowrap="nowrap">used&nbsp;for&nbsp;the&nbsp;deployment&nbsp;of&nbsp;WSGI&nbsp;applications.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_251">251</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_252">252</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_253">253</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_254">254</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`FastCGI,&nbsp;SCGI,&nbsp;and&nbsp;Apache:&nbsp;Background&nbsp;and&nbsp;Future</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__33"></td><td  
class="diff_header" id="from55_255">255</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http://www.vmunix.com/mark/blog/archives/2006/01/02/fastcgi-scgi-and-apache-background-and-future/&gt;`_</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_256">256</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;is&nbsp;a&nbsp;discussion&nbsp;on&nbsp;why&nbsp;the&nbsp;concept&nbsp;of&nbsp;FastCGI&nbsp;and&nbsp;SCGI&nbsp;is&nbsp;better&nbsp;that&nbsp;that</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__34"></td><td  
class="diff_header" id="from55_257">257</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;of&nbsp;mod_python.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_258">258</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__35"></td><td class="diff_header"  
id="from55_259">259</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_260">260</td><td  
nowrap="nowrap">Setting&nbsp;up&nbsp;FastCGI</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_261">261</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__36"></td><td class="diff_header"  
id="from55_262">262</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__34">n</a></td><td  
class="diff_header" id="from55_263">263-</td><td nowrap="nowrap"><span  
class="diff_sub">Depending&nbsp;on&nbsp;the&nbsp;web&nbsp;server&nbsp;you&nbsp;need&nbsp;to&nbsp;have&nbsp;a&nbsp;special&nbsp;module.</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__34">n</a></td><td  
class="diff_header" id="to55_274">274+</td><td nowrap="nowrap"><span  
class="diff_add">Each&nbsp;web&nbsp;server&nbsp;requires&nbsp;a&nbsp;specific&nbsp;module.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__37"></td><td  
class="diff_header" id="from55_264">264</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__35">n</a></td><td class="diff_header"  
id="from55_265">265-</td><td  
nowrap="nowrap">*&nbsp;Apache&nbsp;has&nbsp;both&nbsp;`mod_fastcgi&nbsp;&lt;http://www.fastcgi.com/&gt;`_&nbsp;and&nbsp;`mod_fcgid</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__35">n</a></td><td  
class="diff_header" id="to55_276">276+</td><td  
nowrap="nowrap">*&nbsp;Apache&nbsp;has&nbsp;both&nbsp;`mod_fastcgi&nbsp;&lt;http://www.fastcgi.com/<span  
class="diff_add">drupal/</span>&gt;`_&nbsp;and&nbsp;`mod_fcgid</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_266">266</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://fastcgi.coremail.cn/&gt;`_.&nbsp;&nbsp;``mod_fastcgi``&nbsp;is&nbsp;the&nbsp;original&nbsp;one,&nbsp;but&nbsp;it</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__36">n</a></td><td  
class="diff_header" id="from55_267">267-</td><td  
nowrap="nowrap">&nbsp;&nbsp;has&nbsp;some&nbsp;licensing&nbsp;issues<span  
class="diff_chg">&nbsp;t</span>h<span  
class="diff_chg">at'</span>s&nbsp;why&nbsp;it&nbsp;is&nbsp;sometimes&nbsp;considered&nbsp;non-free.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__36">n</a></td><td  
class="diff_header" id="to55_278">278+</td><td  
nowrap="nowrap">&nbsp;&nbsp;has&nbsp;some&nbsp;licensing&nbsp;issues<span  
class="diff_chg">,&nbsp;w</span>h<span  
class="diff_chg">ich&nbsp;i</span>s&nbsp;why&nbsp;it&nbsp;is&nbsp;sometimes&nbsp;considered&nbsp;non-free.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_268">268-</td><td  
nowrap="nowrap">&nbsp;&nbsp;``mod_fcgid``&nbsp;is&nbsp;a&nbsp;smaller,&nbsp;compatible&nbsp;alternative.&nbsp;One&nbsp;of&nbsp;these&nbsp;modules&nbsp;needs</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_279">279+</td><td  
nowrap="nowrap">&nbsp;&nbsp;``mod_fcgid``&nbsp;is&nbsp;a&nbsp;smaller,&nbsp;compatible&nbsp;alternative.&nbsp;<span  
class="diff_add">&nbsp;</span>One&nbsp;of&nbsp;these&nbsp;modules&nbsp;needs</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_269">269</td><td  
nowrap="nowrap">&nbsp;&nbsp;to&nbsp;be&nbsp;loaded&nbsp;by&nbsp;Apache.</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__37">n</a></td><td  
class="diff_header" id="to55_281">281+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_270">270</td><td  
nowrap="nowrap">*&nbsp;lighttpd&nbsp;ships&nbsp;its&nbsp;own&nbsp;`FastCGI&nbsp;module</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__38">n</a></td><td  
class="diff_header" id="from55_271">271-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://<span  
class="diff_sub">t</span>r<span  
class="diff_chg">ac</span>.lighttpd.net/<span  
class="diff_sub">trac/</span>wiki/Docs<span  
class="diff_chg">%3A</span>ModFastCGI&gt;`_&nbsp;as&nbsp;well&nbsp;as&nbsp;an<span  
class="diff_sub">&nbsp;`SCGI</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__38">n</a></td><td  
class="diff_header" id="to55_283">283+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://r<span  
class="diff_chg">edmine</span>.lighttpd.net/wiki/<span  
class="diff_add">lighttpd/</span>Docs<span  
class="diff_chg">:</span>ModFastCGI&gt;`_&nbsp;as&nbsp;well&nbsp;as&nbsp;an</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_272">272-</td><td  
nowrap="nowrap">&nbsp;&nbsp;module&nbsp;&lt;http://<span  
class="diff_sub">t</span>r<span  
class="diff_chg">ac</span>.lighttpd.net/<span  
class="diff_sub">trac/</span>wiki/Docs<span  
class="diff_chg">%3A</span>ModSCGI&gt;`_.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_284">284+</td><td nowrap="nowrap">&nbsp;<span  
class="diff_add">&nbsp;`SCGI</span>&nbsp;module&nbsp;&lt;http://r<span  
class="diff_chg">edmine</span>.lighttpd.net/wiki/<span  
class="diff_add">lighttpd/</span>Docs<span  
class="diff_chg">:</span>ModSCGI&gt;`_.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_273">273-</td><td nowrap="nowrap"><span  
class="diff_sub">*&nbsp;nginx&nbsp;also&nbsp;supports&nbsp;`FastCGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_285">285+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_286">286+</td><td nowrap="nowrap"><span  
class="diff_add">*&nbsp;`nginx&nbsp;&lt;http://nginx.org/&gt;`_&nbsp;also&nbsp;supports&nbsp;`FastCGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_274">274-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://wiki.<span  
class="diff_sub">codemo</span>ng<span class="diff_chg">e</span>r<span  
class="diff_chg">s.com</span>/NginxSimplePythonFCGI&gt;`_.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_287">287+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&lt;http://wiki.ng<span  
class="diff_chg">inx.o</span>r<span  
class="diff_chg">g</span>/NginxSimplePythonFCGI&gt;`_.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_275">275</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_276">276</td><td  
nowrap="nowrap">Once&nbsp;you&nbsp;have&nbsp;installed&nbsp;and&nbsp;configured&nbsp;the&nbsp;module,&nbsp;you&nbsp;can&nbsp;test&nbsp;it&nbsp;with&nbsp;the</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_277">277</td><td  
nowrap="nowrap">following&nbsp;WSGI-application::</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_278">278</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_279">279</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#!/usr/bin/env&nbsp;python</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_280">280</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;-*-&nbsp;coding:&nbsp;UTF-8&nbsp;-*-</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_281">281</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_282">282</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;from&nbsp;cgi&nbsp;import&nbsp;escape</td></tr>         
</tbody>
+        <tbody>
+            <tr><td class="diff_next" id="difflib_chg_to55__38"></td><td  
class="diff_header" id="from55_296">296</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_297">297</td><td  
nowrap="nowrap">This&nbsp;is&nbsp;a&nbsp;simple&nbsp;WSGI&nbsp;application,&nbsp;but&nbsp;you&nbsp;need&nbsp;to&nbsp;install&nbsp;`flup</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_298">298</td><td  
nowrap="nowrap">&lt;http://pypi.python.org/pypi/flup/1.0&gt;`_&nbsp;first,&nbsp;as&nbsp;flup&nbsp;handles&nbsp;the&nbsp;low&nbsp;level</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_299">299</td><td  
nowrap="nowrap">FastCGI&nbsp;access.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_300">300</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_301">301</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_302">302</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_303">303</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;There&nbsp;is&nbsp;some&nbsp;documentation&nbsp;on&nbsp;`setting&nbsp;up&nbsp;Django&nbsp;with&nbsp;FastCGI</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__39">n</a></td><td  
class="diff_header" id="from55_304">304-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&lt;http://www.djangoproject.com/documentation/fastcgi/&gt;`_,&nbsp;most&nbsp;of&nbsp;which&nbsp;can&nbsp;be</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__39">n</a></td><td  
class="diff_header" id="to55_317">317+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&lt;http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/&gt;`_,&nbsp;most&nbsp;of</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__39"></td><td  
class="diff_header" id="from55_305">305-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;reused&nbsp;for&nbsp;other&nbsp;WSGI-compliant&nbsp;frameworks&nbsp;and&nbsp;libraries.<span  
class="diff_sub">&nbsp;&nbsp;Only&nbsp;the</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__39"></td><td  
class="diff_header" id="to55_318">318+</td><td  
nowrap="nowrap">&nbsp;&nbsp;<span  
class="diff_add">&nbsp;which&nbsp;can&nbsp;be</span>&nbsp;reused&nbsp;for&nbsp;other&nbsp;WSGI-compliant&nbsp;frameworks&nbsp;and&nbsp;libraries.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_306">306-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;``manage.py``&nbsp;part&nbsp;has&nbsp;to&nbsp;be&nbsp;changed,&nbsp;the&nbsp;example&nbsp;used&nbsp;here&nbsp;can&nbsp;be<span  
class="diff_sub">&nbsp;used</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_319">319+</td><td nowrap="nowrap">&nbsp;&nbsp;<span  
class="diff_add">&nbsp;Only&nbsp;the</span>&nbsp;``manage.py``&nbsp;part&nbsp;has&nbsp;to&nbsp;be&nbsp;changed,&nbsp;the&nbsp;example&nbsp;used&nbsp;here&nbsp;can&nbsp;be</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_307">307-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;instead.&nbsp;Django&nbsp;does&nbsp;more&nbsp;or&nbsp;less&nbsp;the&nbsp;exact&nbsp;same&nbsp;thing.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_320">320+</td><td nowrap="nowrap">&nbsp;&nbsp;<span  
class="diff_add">&nbsp;used</span>&nbsp;instead.&nbsp;<span  
class="diff_add">&nbsp;</span>Django&nbsp;does&nbsp;more&nbsp;or&nbsp;less&nbsp;the&nbsp;exact&nbsp;same&nbsp;thing.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_308">308</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_309">309</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_310">310</td><td  
nowrap="nowrap">mod_wsgi</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_311">311</td><td  
nowrap="nowrap">--------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_312">312</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__40">n</a></td><td class="diff_header"  
id="from55_313">313-</td><td  
nowrap="nowrap">`mod_wsgi&nbsp;&lt;http://<span  
class="diff_chg">www</span>.modwsgi<span  
class="diff_sub">.org</span>/&gt;`_&nbsp;is&nbsp;an&nbsp;attempt&nbsp;to&nbsp;get&nbsp;rid&nbsp;of&nbsp;the<span  
class="diff_sub">&nbsp;low&nbsp;level</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__40">n</a></td><td  
class="diff_header" id="to55_326">326+</td><td  
nowrap="nowrap">`mod_wsgi&nbsp;&lt;http://<span  
class="diff_chg">code</span>.<span  
class="diff_add">google.com/p/</span>modwsgi/&gt;`_&nbsp;is&nbsp;an&nbsp;attempt&nbsp;to&nbsp;get&nbsp;rid&nbsp;of&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_314">314-</td><td nowrap="nowrap"><span  
class="diff_sub">gateways.&nbsp;&nbsp;As&nbsp;FastCGI,&nbsp;SCGI,&nbsp;mod_python&nbsp;are&nbsp;mostly&nbsp;used&nbsp;to&nbsp;deploy&nbsp;WSGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_327">327+</td><td nowrap="nowrap"><span  
class="diff_add">low&nbsp;level&nbsp;gateways.&nbsp;&nbsp;Given&nbsp;that&nbsp;FastCGI,&nbsp;SCGI,&nbsp;and&nbsp;mod_python&nbsp;are&nbsp;mostly&nbsp;used&nbsp;to</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__40"></td><td  
class="diff_header" id="from55_315">315-</td><td  
nowrap="nowrap">applications<span  
class="diff_sub">&nbsp;anyway</span>,&nbsp;mod_wsgi&nbsp;was&nbsp;started&nbsp;to&nbsp;directly&nbsp;embed&nbsp;WSGI&nbsp;aplications</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__40"></td><td  
class="diff_header" id="to55_328">328+</td><td nowrap="nowrap"><span  
class="diff_add">deploy&nbsp;WSGI&nbsp;</span>applications,&nbsp;mod_wsgi&nbsp;was&nbsp;started&nbsp;to&nbsp;directly&nbsp;embed&nbsp;WSGI&nbsp;a<span  
class="diff_add">p</span>plications</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_316">316-</td><td nowrap="nowrap"><span  
class="diff_sub">into&nbsp;the&nbsp;Apache&nbsp;web&nbsp;server.&nbsp;&nbsp;The&nbsp;benefit&nbsp;from&nbsp;this&nbsp;approach&nbsp;is&nbsp;that&nbsp;WSGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_329">329+</td><td nowrap="nowrap"><span  
class="diff_add">into&nbsp;the&nbsp;Apache&nbsp;web&nbsp;server.&nbsp;mod_wsgi&nbsp;is&nbsp;specifically&nbsp;designed&nbsp;to&nbsp;host&nbsp;WSGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_317">317-</td><td nowrap="nowrap"><span  
class="diff_sub">applications&nbsp;can&nbsp;be&nbsp;deployed&nbsp;much&nbsp;easier&nbsp;as&nbsp;is&nbsp;is&nbsp;specially&nbsp;designed&nbsp;to&nbsp;host</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_330">330+</td><td nowrap="nowrap"><span  
class="diff_add">applications.&nbsp;&nbsp;It&nbsp;makes&nbsp;the&nbsp;deployment&nbsp;of&nbsp;WSGI&nbsp;applications&nbsp;much&nbsp;easier&nbsp;than</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_318">318-</td><td nowrap="nowrap"><span  
class="diff_sub">WSGI&nbsp;applications&nbsp;--&nbsp;unlike&nbsp;the&nbsp;other&nbsp;low&nbsp;level&nbsp;methods&nbsp;which&nbsp;have&nbsp;glue&nbsp;code&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_331">331+</td><td nowrap="nowrap"><span  
class="diff_add">deployment&nbsp;using&nbsp;other&nbsp;low&nbsp;level&nbsp;methods,&nbsp;which&nbsp;need&nbsp;glue&nbsp;code.&nbsp;&nbsp;The&nbsp;downside</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_319">319-</td><td nowrap="nowrap"><span  
class="diff_sub">host&nbsp;WSGI&nbsp;applications&nbsp;(like&nbsp;flup&nbsp;which&nbsp;was&nbsp;mentioned&nbsp;before).&nbsp;&nbsp;The&nbsp;downside&nbsp;is</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_320">320-</td><td  
nowrap="nowrap">that&nbsp;mod_wsgi&nbsp;is&nbsp;limited&nbsp;to&nbsp;the&nbsp;Apache&nbsp;web&nbsp;server<span  
class="diff_chg">,</span>&nbsp;other&nbsp;servers&nbsp;would&nbsp;need</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_332">332+</td><td nowrap="nowrap"><span  
class="diff_add">is&nbsp;</span>that&nbsp;mod_wsgi&nbsp;is&nbsp;limited&nbsp;to&nbsp;the&nbsp;Apache&nbsp;web&nbsp;server<span  
class="diff_chg">;</span>&nbsp;other&nbsp;servers&nbsp;would&nbsp;need</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_321">321</td><td  
nowrap="nowrap">their&nbsp;own&nbsp;implementations&nbsp;of&nbsp;mod_wsgi.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_322">322</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__41">n</a></td><td  
class="diff_header" id="from55_323">323-</td><td nowrap="nowrap"><span  
class="diff_chg">It</span>&nbsp;supports&nbsp;two&nbsp;modes:<span  
class="diff_sub">&nbsp;the</span>&nbsp;embedded&nbsp;mode&nbsp;in&nbsp;which&nbsp;it&nbsp;integrates&nbsp;with&nbsp;the<span  
class="diff_sub">&nbsp;Apache</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__41">n</a></td><td  
class="diff_header" id="to55_335">335+</td><td nowrap="nowrap"><span  
class="diff_chg">mod_wsgi</span>&nbsp;supports&nbsp;two&nbsp;modes:&nbsp;embedded&nbsp;mode<span  
class="diff_add">,</span>&nbsp;in&nbsp;which&nbsp;it&nbsp;integrates&nbsp;with&nbsp;the</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_324">324-</td><td nowrap="nowrap">process&nbsp;and<span  
class="diff_sub">&nbsp;the</span>&nbsp;daemon&nbsp;mode&nbsp;which&nbsp;is&nbsp;more&nbsp;FastCGI-like.&nbsp;&nbsp;<span  
class="diff_chg">Co</span>n<span  
class="diff_chg">trary&nbsp;to</span>&nbsp;FastCGI,</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_336">336+</td><td nowrap="nowrap"><span  
class="diff_add">Apache&nbsp;</span>process<span  
class="diff_add">,</span>&nbsp;and&nbsp;daemon&nbsp;mode<span  
class="diff_add">,</span>&nbsp;which&nbsp;is&nbsp;more&nbsp;FastCGI-like.&nbsp;&nbsp;<span  
class="diff_chg">U</span>n<span  
class="diff_chg">like</span>&nbsp;FastCGI,</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_325">325-</td><td  
nowrap="nowrap">mod_wsgi&nbsp;handles&nbsp;the&nbsp;worker-processes&nbsp;by&nbsp;itself&nbsp;which&nbsp;makes&nbsp;administration</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_337">337+</td><td  
nowrap="nowrap">mod_wsgi&nbsp;handles&nbsp;the&nbsp;worker-processes&nbsp;by&nbsp;itself<span  
class="diff_add">,</span>&nbsp;which&nbsp;makes&nbsp;administration</td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__41"></td><td  
class="diff_header" id="from55_326">326</td><td  
nowrap="nowrap">easier.</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_327">327</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_328">328</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__42"></td><td class="diff_header"  
id="from55_329">329</td><td  
nowrap="nowrap">..&nbsp;_WSGI:</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_330">330</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_331">331</td><td  
nowrap="nowrap">Step&nbsp;back:&nbsp;WSGI</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_332">332</td><td  
nowrap="nowrap">===============</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_333">333</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__42">n</a></td><td class="diff_header"  
id="from55_334">334-</td><td nowrap="nowrap">WSGI&nbsp;<span  
class="diff_chg">w</span>as&nbsp;already&nbsp;mentioned&nbsp;several&nbsp;times&nbsp;so&nbsp;it&nbsp;has&nbsp;to&nbsp;be&nbsp;something<span  
class="diff_sub">&nbsp;important.</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__42">n</a></td><td  
class="diff_header" id="to55_346">346+</td><td  
nowrap="nowrap">WSGI&nbsp;<span  
class="diff_chg">h</span>as&nbsp;already<span  
class="diff_add">&nbsp;been</span>&nbsp;mentioned&nbsp;several&nbsp;times<span  
class="diff_add">,</span>&nbsp;so&nbsp;it&nbsp;has&nbsp;to&nbsp;be&nbsp;something</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__43"></td><td  
class="diff_header" id="from55_335">335-</td><td  
nowrap="nowrap">In&nbsp;fact&nbsp;it&nbsp;really&nbsp;is,&nbsp;<span  
class="diff_chg">so</span>&nbsp;now&nbsp;it<span  
class="diff_chg">'</span>s&nbsp;time&nbsp;to&nbsp;explain.</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__43"></td><td  
class="diff_header" id="to55_347">347+</td><td nowrap="nowrap"><span  
class="diff_add">important.&nbsp;&nbsp;</span>In&nbsp;fact&nbsp;it&nbsp;really&nbsp;is,&nbsp;<span  
class="diff_chg">and</span>&nbsp;now&nbsp;it<span  
class="diff_chg">&nbsp;i</span>s&nbsp;time&nbsp;to&nbsp;explain<span  
class="diff_add">&nbsp;it</span>.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_336">336</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__43">n</a></td><td  
class="diff_header" id="from55_337">337-</td><td  
nowrap="nowrap">The&nbsp;*Web&nbsp;Server&nbsp;Gateway&nbsp;Interface*,&nbsp;<span  
class="diff_sub">:pep:`333`</span>&nbsp;or&nbsp;WSGI&nbsp;for&nbsp;short&nbsp;is&nbsp;<span  
class="diff_chg">curr</span>en<span class="diff_chg">tly</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__43">n</a></td><td  
class="diff_header" id="to55_349">349+</td><td  
nowrap="nowrap">The&nbsp;*Web&nbsp;Server&nbsp;Gateway&nbsp;Interface*,&nbsp;&nbsp;or&nbsp;WSGI&nbsp;for&nbsp;short<span  
class="diff_add">,</span>&nbsp;is&nbsp;<span  
class="diff_chg">d</span>e<span class="diff_add">fi</span>n<span  
class="diff_chg">ed&nbsp;in</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_338">338-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;best&nbsp;possible&nbsp;way&nbsp;to&nbsp;Python&nbsp;web&nbsp;programming.&nbsp;&nbsp;While&nbsp;it&nbsp;is&nbsp;great&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_350">350+</td><td nowrap="nowrap"><span  
class="diff_add">:pep:`333`&nbsp;and&nbsp;is&nbsp;currently&nbsp;the&nbsp;best&nbsp;way&nbsp;to&nbsp;do&nbsp;Python&nbsp;web&nbsp;programming.&nbsp;&nbsp;While</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_339">339-</td><td nowrap="nowrap"><span  
class="diff_sub">programmers&nbsp;writing&nbsp;frameworks,&nbsp;the&nbsp;normal&nbsp;person&nbsp;does&nbsp;not&nbsp;need&nbsp;to&nbsp;get&nbsp;in&nbsp;direct</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_351">351+</td><td nowrap="nowrap"><span  
class="diff_add">it&nbsp;is&nbsp;great&nbsp;for&nbsp;programmers&nbsp;writing&nbsp;frameworks,&nbsp;a&nbsp;normal&nbsp;web&nbsp;developer&nbsp;does&nbsp;not</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_340">340-</td><td nowrap="nowrap"><span  
class="diff_sub">contact&nbsp;with&nbsp;it.&nbsp;&nbsp;But&nbsp;when&nbsp;choosing&nbsp;a&nbsp;framework&nbsp;for&nbsp;web&nbsp;development&nbsp;it&nbsp;is&nbsp;a&nbsp;good</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_352">352+</td><td nowrap="nowrap"><span  
class="diff_add">need&nbsp;to&nbsp;get&nbsp;in&nbsp;direct&nbsp;contact&nbsp;with&nbsp;it.&nbsp;&nbsp;When&nbsp;choosing&nbsp;a&nbsp;framework&nbsp;for&nbsp;web</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_341">341-</td><td nowrap="nowrap"><span  
class="diff_sub">idea&nbsp;to&nbsp;take&nbsp;one&nbsp;which&nbsp;supports&nbsp;WSGI.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_353">353+</td><td nowrap="nowrap"><span  
class="diff_add">development&nbsp;it&nbsp;is&nbsp;a&nbsp;good&nbsp;idea&nbsp;to&nbsp;choose&nbsp;one&nbsp;which&nbsp;supports&nbsp;WSGI.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_342">342</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__44">n</a></td><td  
class="diff_header" id="from55_343">343-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;big&nbsp;profit&nbsp;from&nbsp;WSGI&nbsp;is&nbsp;the&nbsp;unification.&nbsp;&nbsp;When&nbsp;your&nbsp;program&nbsp;is&nbsp;compatible</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__44">n</a></td><td  
class="diff_header" id="to55_355">355+</td><td nowrap="nowrap"><span  
class="diff_add">The&nbsp;big&nbsp;benefit&nbsp;of&nbsp;WSGI&nbsp;is&nbsp;the&nbsp;unification&nbsp;of&nbsp;the&nbsp;application&nbsp;programming</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_344">344-</td><td nowrap="nowrap"><span  
class="diff_sub">with&nbsp;WSGI&nbsp;--&nbsp;that&nbsp;means&nbsp;that&nbsp;your&nbsp;framework&nbsp;has&nbsp;support&nbsp;for&nbsp;WSGI,&nbsp;your&nbsp;program</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_356">356+</td><td nowrap="nowrap"><span  
class="diff_add">interface.&nbsp;&nbsp;When&nbsp;your&nbsp;program&nbsp;is&nbsp;compatible&nbsp;with&nbsp;WSGI&nbsp;--&nbsp;which&nbsp;at&nbsp;the&nbsp;outer</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__44"></td><td  
class="diff_header" id="to55_357">357+</td><td nowrap="nowrap"><span  
class="diff_add">level&nbsp;means&nbsp;that&nbsp;the&nbsp;framework&nbsp;you&nbsp;are&nbsp;using&nbsp;has&nbsp;support&nbsp;for&nbsp;WSGI&nbsp;--&nbsp;your</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_345">345-</td><td  
nowrap="nowrap">can&nbsp;be&nbsp;deployed&nbsp;<span  
class="diff_chg">o</span>n<span  
class="diff_sub">&nbsp;ever</span>y&nbsp;web&nbsp;server&nbsp;interface&nbsp;for&nbsp;which&nbsp;there&nbsp;are&nbsp;WSGI<span  
class="diff_sub">&nbsp;wrappers.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_358">358+</td><td nowrap="nowrap"><span  
class="diff_add">program&nbsp;</span>can&nbsp;be&nbsp;deployed&nbsp;<span  
class="diff_chg">via&nbsp;a</span>ny&nbsp;web&nbsp;server&nbsp;interface&nbsp;for&nbsp;which&nbsp;there&nbsp;are&nbsp;WSGI</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_346">346-</td><td nowrap="nowrap"><span  
class="diff_sub">So&nbsp;you&nbsp;do&nbsp;not&nbsp;need&nbsp;to&nbsp;care&nbsp;about&nbsp;whether&nbsp;the&nbsp;user&nbsp;uses&nbsp;mod_python&nbsp;or&nbsp;FastCGI&nbsp;--</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_359">359+</td><td nowrap="nowrap"><span  
class="diff_add">wrappers.&nbsp;&nbsp;You&nbsp;do&nbsp;not&nbsp;need&nbsp;to&nbsp;care&nbsp;about&nbsp;whether&nbsp;the&nbsp;application&nbsp;user&nbsp;uses</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_347">347-</td><td nowrap="nowrap"><span  
class="diff_sub">with&nbsp;WSGI&nbsp;it&nbsp;just&nbsp;works&nbsp;on&nbsp;any&nbsp;gateway&nbsp;interface.&nbsp;&nbsp;The&nbsp;Python&nbsp;standard&nbsp;library</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_360">360+</td><td nowrap="nowrap"><span  
class="diff_add">mod_python&nbsp;or&nbsp;FastCGI&nbsp;or&nbsp;mod_wsgi&nbsp;--&nbsp;with&nbsp;WSGI&nbsp;your&nbsp;application&nbsp;will&nbsp;work&nbsp;on</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_348">348-</td><td nowrap="nowrap"><span  
class="diff_sub">contains&nbsp;its&nbsp;own&nbsp;WSGI&nbsp;server&nbsp;:mod:`wsgiref`,&nbsp;which&nbsp;is&nbsp;a&nbsp;small&nbsp;web&nbsp;server&nbsp;that</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_361">361+</td><td nowrap="nowrap"><span  
class="diff_add">any&nbsp;gateway&nbsp;interface.&nbsp;&nbsp;The&nbsp;Python&nbsp;standard&nbsp;library&nbsp;contains&nbsp;its&nbsp;own&nbsp;WSGI</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_349">349-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;be&nbsp;used&nbsp;for&nbsp;testing.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_362">362+</td><td nowrap="nowrap"><span  
class="diff_add">server,&nbsp;:mod:`wsgiref`,&nbsp;which&nbsp;is&nbsp;a&nbsp;small&nbsp;web&nbsp;server&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_363">363+</td><td nowrap="nowrap"><span  
class="diff_add">testing.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_350">350</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__45">n</a></td><td  
class="diff_header" id="from55_351">351-</td><td  
nowrap="nowrap">A&nbsp;really&nbsp;great&nbsp;WSGI&nbsp;feature&nbsp;<span  
class="diff_chg">are&nbsp;the</span>&nbsp;middleware<span  
class="diff_sub">s</span>.&nbsp;&nbsp;Middlewares&nbsp;a<span  
class="diff_sub">re</span>&nbsp;layer<span  
class="diff_sub">s</span>&nbsp;around</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__45">n</a></td><td  
class="diff_header" id="to55_365">365+</td><td  
nowrap="nowrap">A&nbsp;really&nbsp;great&nbsp;WSGI&nbsp;feature&nbsp;<span  
class="diff_chg">is</span>&nbsp;middleware.&nbsp;&nbsp;Middleware<span  
class="diff_add">&nbsp;i</span>s&nbsp;a&nbsp;layer&nbsp;around<span  
class="diff_add">&nbsp;your</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_352">352-</td><td nowrap="nowrap"><span  
class="diff_sub">your&nbsp;</span>program&nbsp;which&nbsp;can&nbsp;add&nbsp;various&nbsp;functionality&nbsp;to&nbsp;it.&nbsp;&nbsp;There&nbsp;is&nbsp;a&nbsp;<span  
class="diff_sub">`num</span>b<span  
class="diff_chg">er</span>&nbsp;of</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_366">366+</td><td  
nowrap="nowrap">program&nbsp;which&nbsp;can&nbsp;add&nbsp;various&nbsp;functionality&nbsp;to&nbsp;it.&nbsp;&nbsp;There&nbsp;is&nbsp;<span  
class="diff_add">quite&nbsp;</span>a&nbsp;b<span  
class="diff_chg">it</span>&nbsp;of</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_353">353-</td><td nowrap="nowrap">middleware<span  
class="diff_sub">s</span>&nbsp;&lt;http://wsgi.org/wsgi/Middleware_and_Utilities&gt;`_&nbsp;already<span  
class="diff_sub">&nbsp;available.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_367">367+</td><td nowrap="nowrap"><span  
class="diff_add">`</span>middleware&nbsp;&lt;http://wsgi.org/wsgi/Middleware_and_Utilities&gt;`_&nbsp;already</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_354">354-</td><td  
nowrap="nowrap">For&nbsp;example,&nbsp;instead&nbsp;of&nbsp;writing&nbsp;your&nbsp;own&nbsp;session&nbsp;management&nbsp;(<span  
class="diff_chg">to&nbsp;identify&nbsp;a&nbsp;user</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_368">368+</td><td nowrap="nowrap"><span  
class="diff_add">available.&nbsp;&nbsp;</span>For&nbsp;example,&nbsp;instead&nbsp;of&nbsp;writing&nbsp;your&nbsp;own&nbsp;session&nbsp;management&nbsp;(<span  
class="diff_chg">HTTP</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__45"></td><td  
class="diff_header" id="from55_355">355-</td><td nowrap="nowrap"><span  
class="diff_sub">in&nbsp;subsequent&nbsp;requests,&nbsp;as&nbsp;HTTP&nbsp;does&nbsp;not&nbsp;maintain&nbsp;state,&nbsp;so&nbsp;it&nbsp;does&nbsp;now&nbsp;know</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__45"></td><td  
class="diff_header" id="to55_369">369+</td><td nowrap="nowrap"><span  
class="diff_add">is&nbsp;a&nbsp;stateless&nbsp;protocol,&nbsp;so&nbsp;to&nbsp;associate&nbsp;multiple&nbsp;HTTP&nbsp;requests&nbsp;with&nbsp;a&nbsp;single</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_356">356-</td><td nowrap="nowrap"><span  
class="diff_sub">that&nbsp;the&nbsp;requests&nbsp;belong&nbsp;to&nbsp;the&nbsp;same&nbsp;user)&nbsp;you&nbsp;can&nbsp;just&nbsp;take&nbsp;one&nbsp;middleware,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_370">370+</td><td nowrap="nowrap"><span  
class="diff_add">user&nbsp;your&nbsp;application&nbsp;must&nbsp;create&nbsp;and&nbsp;manage&nbsp;such&nbsp;state&nbsp;via&nbsp;a&nbsp;session),&nbsp;you&nbsp;can</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_357">357-</td><td nowrap="nowrap"><span  
class="diff_sub">plug&nbsp;it&nbsp;in&nbsp;and&nbsp;you&nbsp;can&nbsp;rely&nbsp;an&nbsp;already&nbsp;existing&nbsp;functionality.&nbsp;&nbsp;The&nbsp;same&nbsp;thing</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_371">371+</td><td nowrap="nowrap"><span  
class="diff_add">just&nbsp;download&nbsp;middleware&nbsp;which&nbsp;does&nbsp;that,&nbsp;plug&nbsp;it&nbsp;in,&nbsp;and&nbsp;get&nbsp;on&nbsp;with&nbsp;coding</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_358">358-</td><td nowrap="nowrap"><span  
class="diff_sub">is&nbsp;compression&nbsp;--&nbsp;say&nbsp;you&nbsp;want&nbsp;to&nbsp;compress&nbsp;your&nbsp;HTML&nbsp;using&nbsp;gzip,&nbsp;to&nbsp;save&nbsp;your</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_372">372+</td><td nowrap="nowrap"><span  
class="diff_add">the&nbsp;unique&nbsp;parts&nbsp;of&nbsp;your&nbsp;application.&nbsp;&nbsp;The&nbsp;same&nbsp;thing&nbsp;with&nbsp;compression&nbsp;--&nbsp;there</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_359">359-</td><td nowrap="nowrap"><span  
class="diff_sub">server's&nbsp;bandwidth.&nbsp;&nbsp;So&nbsp;you&nbsp;only&nbsp;need&nbsp;to&nbsp;plug-in&nbsp;a&nbsp;middleware&nbsp;and&nbsp;you're&nbsp;done.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_373">373+</td><td nowrap="nowrap"><span  
class="diff_add">is&nbsp;existing&nbsp;middleware&nbsp;which&nbsp;handles&nbsp;compressing&nbsp;your&nbsp;HTML&nbsp;using&nbsp;gzip&nbsp;to&nbsp;save</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_360">360-</td><td nowrap="nowrap"><span  
class="diff_sub">Authentication&nbsp;is&nbsp;also&nbsp;a&nbsp;problem&nbsp;easily&nbsp;solved&nbsp;using&nbsp;a&nbsp;middleware.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_374">374+</td><td nowrap="nowrap"><span  
class="diff_add">on&nbsp;your&nbsp;server's&nbsp;bandwidth.&nbsp;&nbsp;Authentication&nbsp;is&nbsp;another&nbsp;a&nbsp;problem&nbsp;easily&nbsp;solved</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_375">375+</td><td nowrap="nowrap"><span  
class="diff_add">using&nbsp;existing&nbsp;middleware.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_361">361</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__46">n</a></td><td  
class="diff_header" id="from55_362">362-</td><td nowrap="nowrap"><span  
class="diff_chg">So,&nbsp;generally&nbsp;--&nbsp;a</span>lthough&nbsp;WSGI&nbsp;may&nbsp;seem&nbsp;complex,&nbsp;the&nbsp;initial&nbsp;phase&nbsp;of&nbsp;learning</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__46">n</a></td><td  
class="diff_header" id="to55_377">377+</td><td nowrap="nowrap"><span  
class="diff_chg">A</span>lthough&nbsp;WSGI&nbsp;may&nbsp;seem&nbsp;complex,&nbsp;the&nbsp;initial&nbsp;phase&nbsp;of&nbsp;learning<span  
class="diff_add">&nbsp;can&nbsp;be&nbsp;very</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__46"></td><td  
class="diff_header" id="from55_363">363-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;be&nbsp;very&nbsp;rewarding&nbsp;as&nbsp;WSGI&nbsp;does&nbsp;already&nbsp;have&nbsp;solutions&nbsp;to&nbsp;many&nbsp;problems&nbsp;that</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__46"></td><td  
class="diff_header" id="to55_378">378+</td><td nowrap="nowrap"><span  
class="diff_add">rewarding&nbsp;because&nbsp;WSGI&nbsp;and&nbsp;the&nbsp;associated&nbsp;middleware&nbsp;already&nbsp;have&nbsp;solutions&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_364">364-</td><td nowrap="nowrap"><span  
class="diff_sub">might&nbsp;arise&nbsp;while&nbsp;writing&nbsp;web&nbsp;sites.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_379">379+</td><td nowrap="nowrap"><span  
class="diff_add">many&nbsp;problems&nbsp;that&nbsp;might&nbsp;arise&nbsp;while&nbsp;developing&nbsp;web&nbsp;sites.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_365">365</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__47"></td><td class="diff_header"  
id="from55_366">366</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_367">367</td><td  
nowrap="nowrap">WSGI&nbsp;Servers</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_368">368</td><td  
nowrap="nowrap">------------</td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__48"></td><td class="diff_header"  
id="from55_369">369</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_370">370</td><td  
nowrap="nowrap">The&nbsp;code&nbsp;that&nbsp;is&nbsp;used&nbsp;to&nbsp;connect&nbsp;to&nbsp;various&nbsp;low&nbsp;level&nbsp;gateways&nbsp;like&nbsp;CGI&nbsp;or</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__47">n</a></td><td  
class="diff_header" id="from55_371">371-</td><td  
nowrap="nowrap">mod_python&nbsp;is&nbsp;called&nbsp;*WSGI&nbsp;server*.&nbsp;&nbsp;One&nbsp;of&nbsp;these&nbsp;servers&nbsp;is&nbsp;``flup``&nbsp;which<span  
class="diff_sub">&nbsp;was</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__47">n</a></td><td  
class="diff_header" id="to55_386">386+</td><td  
nowrap="nowrap">mod_python&nbsp;is&nbsp;called&nbsp;<span  
class="diff_add">a&nbsp;</span>*WSGI&nbsp;server*.&nbsp;&nbsp;One&nbsp;of&nbsp;these&nbsp;servers&nbsp;is&nbsp;``flup``<span  
class="diff_add">,</span>&nbsp;which</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_372">372-</td><td nowrap="nowrap"><span  
class="diff_sub">already&nbsp;mentioned&nbsp;and&nbsp;supports&nbsp;FastCGI,&nbsp;SCGI&nbsp;as&nbsp;well&nbsp;as&nbsp;`AJP</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_387">387+</td><td nowrap="nowrap"><span  
class="diff_add">supports&nbsp;FastCGI&nbsp;and&nbsp;SCGI,&nbsp;as&nbsp;well&nbsp;as&nbsp;`AJP</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_373">373</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/Apache_JServ_Protocol&gt;`_.&nbsp;&nbsp;Some&nbsp;of&nbsp;these&nbsp;servers</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__48">n</a></td><td  
class="diff_header" id="from55_374">374-</td><td  
nowrap="nowrap">are&nbsp;written&nbsp;in&nbsp;Python&nbsp;as&nbsp;``flup``&nbsp;is,&nbsp;but&nbsp;there&nbsp;also&nbsp;exist&nbsp;others&nbsp;which&nbsp;are</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__48">n</a></td><td  
class="diff_header" id="to55_389">389+</td><td  
nowrap="nowrap">are&nbsp;written&nbsp;in&nbsp;Python<span  
class="diff_add">,</span>&nbsp;as&nbsp;``flup``&nbsp;is,&nbsp;but&nbsp;there&nbsp;also&nbsp;exist&nbsp;others&nbsp;which&nbsp;are</td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__49"></td><td  
class="diff_header" id="from55_375">375</td><td  
nowrap="nowrap">written&nbsp;in&nbsp;C&nbsp;and&nbsp;can&nbsp;be&nbsp;used&nbsp;as&nbsp;drop-in&nbsp;replacements.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_376">376</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__50"><a  
href="#difflib_chg_to55__49">n</a></td><td class="diff_header"  
id="from55_377">377-</td><td nowrap="nowrap">There&nbsp;are&nbsp;<span  
class="diff_chg">quite&nbsp;</span>a<span  
class="diff_chg">&nbsp;lot&nbsp;of</span>&nbsp;servers&nbsp;already&nbsp;available,&nbsp;so&nbsp;a&nbsp;Python&nbsp;web&nbsp;application</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__50"><a  
href="#difflib_chg_to55__49">n</a></td><td class="diff_header"  
id="to55_392">392+</td><td nowrap="nowrap">There&nbsp;are&nbsp;<span  
class="diff_chg">m</span>a<span  
class="diff_chg">ny</span>&nbsp;servers&nbsp;already&nbsp;available,&nbsp;so&nbsp;a&nbsp;Python&nbsp;web&nbsp;application</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_378">378-</td><td  
nowrap="nowrap">can&nbsp;be&nbsp;deployed&nbsp;nearly&nbsp;<span  
class="diff_chg">ever</span>ywhere.&nbsp;&nbsp;This&nbsp;is&nbsp;one&nbsp;big&nbsp;advantage&nbsp;that&nbsp;Python&nbsp;has</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_393">393+</td><td  
nowrap="nowrap">can&nbsp;be&nbsp;deployed&nbsp;nearly&nbsp;<span  
class="diff_chg">an</span>ywhere.&nbsp;&nbsp;This&nbsp;is&nbsp;one&nbsp;big&nbsp;advantage&nbsp;that&nbsp;Python&nbsp;has</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_379">379-</td><td  
nowrap="nowrap">compared&nbsp;with&nbsp;other&nbsp;web&nbsp;techni<span  
class="diff_sub">qu</span>es.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_394">394+</td><td  
nowrap="nowrap">compared&nbsp;with&nbsp;other&nbsp;web&nbsp;techn<span  
class="diff_add">olog</span>ies.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_380">380</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_381">381</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_382">382</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__50">n</a></td><td class="diff_header"  
id="from55_383">383-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;A&nbsp;good&nbsp;overview&nbsp;of<span  
class="diff_sub">&nbsp;all</span>&nbsp;WSGI-related&nbsp;code&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;the&nbsp;`WSGI&nbsp;wiki</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__50">n</a></td><td  
class="diff_header" id="to55_398">398+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;A&nbsp;good&nbsp;overview&nbsp;of&nbsp;WSGI-related&nbsp;code&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;the&nbsp;`WSGI&nbsp;wiki</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_384">384</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wsgi.org/wsgi&gt;`_,&nbsp;which&nbsp;contains&nbsp;an&nbsp;extensive&nbsp;list&nbsp;of&nbsp;`WSGI&nbsp;servers</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__51">n</a></td><td  
class="diff_header" id="from55_385">385-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wsgi.org/wsgi/Servers&gt;`_<span  
class="diff_sub">,</span>&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;by&nbsp;*<span  
class="diff_chg">ever</span>y*&nbsp;application</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__51">n</a></td><td  
class="diff_header" id="to55_400">400+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wsgi.org/wsgi/Servers&gt;`_&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;by&nbsp;*<span  
class="diff_chg">an</span>y*&nbsp;application</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_386">386</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;supporting&nbsp;WSGI.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_387">387</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_388">388</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;You&nbsp;might&nbsp;be&nbsp;interested&nbsp;in&nbsp;some&nbsp;WSGI-supporting&nbsp;modules&nbsp;already&nbsp;contained&nbsp;in</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__51"></td><td  
class="diff_header" id="from55_389">389</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;the&nbsp;standard&nbsp;library,&nbsp;namely:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_390">390</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_391">391</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;:mod:`wsgiref`&nbsp;--&nbsp;some&nbsp;tiny&nbsp;utilities&nbsp;and&nbsp;servers&nbsp;for&nbsp;WSGI</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_392">392</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__52"></td><td class="diff_header"  
id="from55_393">393</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_394">394</td><td  
nowrap="nowrap">Case&nbsp;study:&nbsp;MoinMoin</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_395">395</td><td  
nowrap="nowrap">--------------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_396">396</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__52">n</a></td><td class="diff_header"  
id="from55_397">397-</td><td  
nowrap="nowrap">What&nbsp;does&nbsp;WSGI&nbsp;give&nbsp;the&nbsp;web&nbsp;application&nbsp;developer?&nbsp;&nbsp;Let's&nbsp;take&nbsp;a&nbsp;look&nbsp;<span  
class="diff_chg">on&nbsp;one</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__52">n</a></td><td  
class="diff_header" id="to55_412">412+</td><td  
nowrap="nowrap">What&nbsp;does&nbsp;WSGI&nbsp;give&nbsp;the&nbsp;web&nbsp;application&nbsp;developer?&nbsp;&nbsp;Let's&nbsp;take&nbsp;a&nbsp;look&nbsp;<span  
class="diff_chg">at</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_398">398-</td><td nowrap="nowrap"><span  
class="diff_sub">long&nbsp;existing&nbsp;web&nbsp;application&nbsp;written&nbsp;in&nbsp;Python&nbsp;without&nbsp;using&nbsp;WSGI.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_413">413+</td><td nowrap="nowrap"><span  
class="diff_add">an&nbsp;application&nbsp;that's&nbsp;been&nbsp;around&nbsp;for&nbsp;a&nbsp;while,&nbsp;which&nbsp;was&nbsp;written&nbsp;in</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_414">414+</td><td nowrap="nowrap"><span  
class="diff_add">Python&nbsp;without&nbsp;using&nbsp;WSGI.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__53"></td><td  
class="diff_header" id="from55_399">399</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__53">n</a></td><td class="diff_header"  
id="from55_400">400-</td><td  
nowrap="nowrap">One&nbsp;of&nbsp;the&nbsp;most&nbsp;widely&nbsp;used&nbsp;wiki&nbsp;software&nbsp;is&nbsp;`MoinMoin<span  
class="diff_sub">&nbsp;&lt;http://moinmo.in/&gt;`_.</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__53">n</a></td><td  
class="diff_header" id="to55_416">416+</td><td  
nowrap="nowrap">One&nbsp;of&nbsp;the&nbsp;most&nbsp;widely&nbsp;used&nbsp;wiki&nbsp;software&nbsp;<span  
class="diff_add">packages&nbsp;</span>is&nbsp;`MoinMoin</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_401">401-</td><td nowrap="nowrap"><span  
class="diff_sub">It&nbsp;was&nbsp;created&nbsp;in&nbsp;2000,&nbsp;so&nbsp;it&nbsp;predates&nbsp;WSGI&nbsp;by&nbsp;about&nbsp;three&nbsp;years.&nbsp;&nbsp;While&nbsp;it&nbsp;now</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_417">417+</td><td nowrap="nowrap"><span  
class="diff_add">&lt;http://moinmo.in/&gt;`_.&nbsp;&nbsp;It&nbsp;was&nbsp;created&nbsp;in&nbsp;2000,&nbsp;so&nbsp;it&nbsp;predates&nbsp;WSGI&nbsp;by&nbsp;about</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_402">402-</td><td nowrap="nowrap"><span  
class="diff_sub">includes&nbsp;support&nbsp;for&nbsp;WSGI,&nbsp;older&nbsp;versions&nbsp;needed&nbsp;separate&nbsp;code&nbsp;to&nbsp;run&nbsp;on&nbsp;CGI,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_418">418+</td><td nowrap="nowrap"><span  
class="diff_add">three&nbsp;years.&nbsp;&nbsp;Older&nbsp;versions&nbsp;needed&nbsp;separate&nbsp;code&nbsp;to&nbsp;run&nbsp;on&nbsp;CGI,&nbsp;mod_python,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_403">403-</td><td nowrap="nowrap"><span  
class="diff_sub">mod_python,&nbsp;FastCGI&nbsp;and&nbsp;standalone.&nbsp;&nbsp;Now,&nbsp;this&nbsp;all&nbsp;is&nbsp;possible&nbsp;by&nbsp;using&nbsp;WSGI&nbsp;and</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_419">419+</td><td nowrap="nowrap"><span  
class="diff_add">FastCGI&nbsp;and&nbsp;standalone.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__54"></td><td  
class="diff_header" id="from55_404">404-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;already-written&nbsp;gateways.&nbsp;&nbsp;For&nbsp;running&nbsp;with&nbsp;on&nbsp;FastCGI&nbsp;``flup``&nbsp;can&nbsp;be&nbsp;used,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_405">405-</td><td nowrap="nowrap"><span  
class="diff_sub">for&nbsp;running&nbsp;a&nbsp;standalone&nbsp;server&nbsp;:mod:`wsgiref`&nbsp;is&nbsp;the&nbsp;way&nbsp;to&nbsp;go.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_406">406</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__54">n</a></td><td  
class="diff_header" id="to55_421">421+</td><td nowrap="nowrap"><span  
class="diff_add">It&nbsp;now&nbsp;includes&nbsp;support&nbsp;for&nbsp;WSGI.&nbsp;&nbsp;Using&nbsp;WSGI,&nbsp;it&nbsp;is&nbsp;possible&nbsp;to&nbsp;deploy</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__55"></td><td  
class="diff_header" id="to55_422">422+</td><td nowrap="nowrap"><span  
class="diff_add">MoinMoin&nbsp;on&nbsp;any&nbsp;WSGI&nbsp;compliant&nbsp;server,&nbsp;with&nbsp;no&nbsp;additional&nbsp;glue&nbsp;code.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_423">423+</td><td nowrap="nowrap"><span  
class="diff_add">Unlike&nbsp;the&nbsp;pre-WSGI&nbsp;versions,&nbsp;this&nbsp;could&nbsp;include&nbsp;WSGI&nbsp;servers&nbsp;that&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_424">424+</td><td nowrap="nowrap"><span  
class="diff_add">authors&nbsp;of&nbsp;MoinMoin&nbsp;know&nbsp;nothing&nbsp;about.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_407">407</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__55">n</a></td><td  
class="diff_header" id="to55_426">426+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_408">408-</td><td nowrap="nowrap">Model-<span  
class="diff_chg">v</span>iew-<span  
class="diff_chg">c</span>ontroller</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_427">427+</td><td nowrap="nowrap">Model-<span  
class="diff_chg">V</span>iew-<span  
class="diff_chg">C</span>ontroller</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_409">409</td><td  
nowrap="nowrap">=====================</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_410">410</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__56">n</a></td><td class="diff_header"  
id="from55_411">411-</td><td  
nowrap="nowrap">The&nbsp;term&nbsp;*MVC*&nbsp;is&nbsp;often&nbsp;<span  
class="diff_sub">h</span>e<span  
class="diff_chg">a</span>rd&nbsp;in&nbsp;statements&nbsp;<span  
class="diff_chg">like</span>&nbsp;"framework&nbsp;*foo*<span  
class="diff_sub">&nbsp;supports&nbsp;MVC".</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__56">n</a></td><td  
class="diff_header" id="to55_430">430+</td><td  
nowrap="nowrap">The&nbsp;term&nbsp;*MVC*&nbsp;is&nbsp;often&nbsp;e<span  
class="diff_chg">ncounte</span>r<span  
class="diff_add">e</span>d&nbsp;in&nbsp;statements&nbsp;<span  
class="diff_chg">such&nbsp;as</span>&nbsp;"framework&nbsp;*foo*</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_412">412-</td><td nowrap="nowrap"><span  
class="diff_sub">While&nbsp;MVC&nbsp;is&nbsp;not&nbsp;really&nbsp;something&nbsp;technical&nbsp;but&nbsp;rather&nbsp;organisational,&nbsp;many&nbsp;web</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_431">431+</td><td nowrap="nowrap"><span  
class="diff_add">supports&nbsp;MVC".&nbsp;&nbsp;MVC&nbsp;is&nbsp;more&nbsp;about&nbsp;the&nbsp;overall&nbsp;organization&nbsp;of&nbsp;code,&nbsp;rather&nbsp;than</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_413">413-</td><td nowrap="nowrap"><span  
class="diff_sub">frameworks&nbsp;use&nbsp;this&nbsp;model&nbsp;to&nbsp;help&nbsp;the&nbsp;developer&nbsp;to&nbsp;bring&nbsp;structure&nbsp;into&nbsp;his</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_432">432+</td><td nowrap="nowrap"><span  
class="diff_add">any&nbsp;particular&nbsp;API.&nbsp;&nbsp;Many&nbsp;web&nbsp;frameworks&nbsp;use&nbsp;this&nbsp;model&nbsp;to&nbsp;help&nbsp;the&nbsp;developer</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__56"></td><td  
class="diff_header" id="from55_414">414-</td><td nowrap="nowrap"><span  
class="diff_sub">program.&nbsp;&nbsp;Bigger&nbsp;web&nbsp;applications&nbsp;can&nbsp;have&nbsp;lots&nbsp;of&nbsp;code&nbsp;so&nbsp;it&nbsp;is&nbsp;a&nbsp;good&nbsp;idea&nbsp;to</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__56"></td><td  
class="diff_header" id="to55_433">433+</td><td nowrap="nowrap"><span  
class="diff_add">bring&nbsp;structure&nbsp;to&nbsp;their&nbsp;program.&nbsp;&nbsp;Bigger&nbsp;web&nbsp;applications&nbsp;can&nbsp;have&nbsp;lots&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_415">415-</td><td nowrap="nowrap"><span  
class="diff_sub">have&nbsp;structure&nbsp;in&nbsp;the&nbsp;program&nbsp;right&nbsp;from&nbsp;the&nbsp;beginnings.&nbsp;&nbsp;That&nbsp;way,&nbsp;even&nbsp;users</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_434">434+</td><td nowrap="nowrap"><span  
class="diff_add">code,&nbsp;so&nbsp;it&nbsp;is&nbsp;a&nbsp;good&nbsp;idea&nbsp;to&nbsp;have&nbsp;an&nbsp;effective&nbsp;structure&nbsp;right&nbsp;from&nbsp;the&nbsp;beginning.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_416">416-</td><td nowrap="nowrap"><span  
class="diff_sub">of&nbsp;other&nbsp;frameworks&nbsp;(or&nbsp;even&nbsp;languages,&nbsp;as&nbsp;MVC&nbsp;is&nbsp;nothing&nbsp;Python-specific)&nbsp;can</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_435">435+</td><td nowrap="nowrap"><span  
class="diff_add">That&nbsp;way,&nbsp;even&nbsp;users&nbsp;of&nbsp;other&nbsp;frameworks&nbsp;(or&nbsp;even&nbsp;other&nbsp;languages,&nbsp;since&nbsp;MVC&nbsp;is</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_417">417-</td><td nowrap="nowrap"><span  
class="diff_sub">understand&nbsp;the&nbsp;existing&nbsp;code&nbsp;easier,&nbsp;as&nbsp;they&nbsp;are&nbsp;already&nbsp;familiar&nbsp;with&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_436">436+</td><td nowrap="nowrap"><span  
class="diff_add">not&nbsp;Python-specific)&nbsp;can&nbsp;easily&nbsp;understand&nbsp;the&nbsp;code,&nbsp;given&nbsp;that&nbsp;they&nbsp;are</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_418">418-</td><td nowrap="nowrap"><span  
class="diff_sub">structure.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_437">437+</td><td nowrap="nowrap"><span  
class="diff_add">already&nbsp;familiar&nbsp;with&nbsp;the&nbsp;MVC&nbsp;structure.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__57"></td><td  
class="diff_header" id="from55_419">419</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_420">420</td><td  
nowrap="nowrap">MVC&nbsp;stands&nbsp;for&nbsp;three&nbsp;components:</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_421">421</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__58"><a  
href="#difflib_chg_to55__57">n</a></td><td class="diff_header"  
id="from55_422">422-</td><td nowrap="nowrap"><span  
class="diff_sub">*&nbsp;The&nbsp;*model*.&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;data&nbsp;that&nbsp;is&nbsp;meant&nbsp;to&nbsp;modify.&nbsp;&nbsp;In&nbsp;Python&nbsp;frameworks</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__58"><a  
href="#difflib_chg_to55__57">n</a></td><td class="diff_header"  
id="to55_441">441+</td><td nowrap="nowrap"><span  
class="diff_add">*&nbsp;The&nbsp;*model*.&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;data&nbsp;that&nbsp;will&nbsp;be&nbsp;displayed&nbsp;and&nbsp;modified.&nbsp;&nbsp;In</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_423">423-</td><td  
nowrap="nowrap">&nbsp;&nbsp;this&nbsp;component&nbsp;is&nbsp;often&nbsp;represented&nbsp;by&nbsp;the&nbsp;classes&nbsp;used&nbsp;by<span  
class="diff_sub">&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_442">442+</td><td nowrap="nowrap">&nbsp;<span  
class="diff_add">&nbsp;Python&nbsp;frameworks,</span>&nbsp;this&nbsp;component&nbsp;is&nbsp;often&nbsp;represented&nbsp;by&nbsp;the&nbsp;classes&nbsp;used&nbsp;by</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_424">424-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;object-relational&nbsp;mapper.&nbsp;&nbsp;So,&nbsp;all&nbsp;declarations&nbsp;go&nbsp;here.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_443">443+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;an&nbsp;object-relational&nbsp;mapper.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_444">444+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_425">425</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;*view*.&nbsp;&nbsp;This&nbsp;component's&nbsp;job&nbsp;is&nbsp;to&nbsp;display&nbsp;the&nbsp;data&nbsp;of&nbsp;the&nbsp;model&nbsp;to&nbsp;the</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__58">n</a></td><td  
class="diff_header" id="from55_426">426-</td><td  
nowrap="nowrap">&nbsp;&nbsp;user.&nbsp;&nbsp;Typically&nbsp;this&nbsp;component&nbsp;is&nbsp;<span  
class="diff_chg">r</span>e<span  
class="diff_chg">pres</span>ented&nbsp;<span  
class="diff_chg">by&nbsp;the</span>&nbsp;templates.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__58">n</a></td><td  
class="diff_header" id="to55_446">446+</td><td  
nowrap="nowrap">&nbsp;&nbsp;user.&nbsp;&nbsp;Typically&nbsp;this&nbsp;component&nbsp;is&nbsp;<span  
class="diff_chg">impl</span>e<span  
class="diff_chg">m</span>ented&nbsp;<span  
class="diff_chg">via</span>&nbsp;templates.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_447">447+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_427">427</td><td  
nowrap="nowrap">*&nbsp;The&nbsp;*controller*.&nbsp;&nbsp;This&nbsp;is&nbsp;the&nbsp;layer&nbsp;between&nbsp;the&nbsp;user&nbsp;and&nbsp;the&nbsp;model.&nbsp;&nbsp;The</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__59">n</a></td><td  
class="diff_header" id="from55_428">428-</td><td  
nowrap="nowrap">&nbsp;&nbsp;controller&nbsp;reacts&nbsp;o<span  
class="diff_sub">n</span>&nbsp;user&nbsp;actions&nbsp;(like&nbsp;opening&nbsp;some&nbsp;specific&nbsp;URL)<span  
class="diff_chg">&nbsp;and</span>&nbsp;tells</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__59">n</a></td><td  
class="diff_header" id="to55_449">449+</td><td  
nowrap="nowrap">&nbsp;&nbsp;controller&nbsp;reacts&nbsp;<span  
class="diff_add">t</span>o&nbsp;user&nbsp;actions&nbsp;(like&nbsp;opening&nbsp;some&nbsp;specific&nbsp;URL)<span  
class="diff_chg">,</span>&nbsp;tells</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_429">429-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;the&nbsp;model&nbsp;to&nbsp;modify&nbsp;the&nbsp;data&nbsp;if&nbsp;neccessary.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_450">450+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;the&nbsp;model&nbsp;to&nbsp;modify&nbsp;the&nbsp;data&nbsp;if&nbsp;necessary,&nbsp;and&nbsp;tells&nbsp;the&nbsp;view&nbsp;code&nbsp;what&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_451">451+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;display,</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__59"></td><td  
class="diff_header" id="from55_430">430</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_431">431</td><td  
nowrap="nowrap">While&nbsp;one&nbsp;might&nbsp;think&nbsp;that&nbsp;MVC&nbsp;is&nbsp;a&nbsp;complex&nbsp;design&nbsp;pattern,&nbsp;in&nbsp;fact&nbsp;it&nbsp;is&nbsp;not.</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__60"></td><td  
class="diff_header" id="from55_432">432</td><td  
nowrap="nowrap">It&nbsp;is&nbsp;used&nbsp;in&nbsp;Python&nbsp;because&nbsp;it&nbsp;has&nbsp;turned&nbsp;out&nbsp;to&nbsp;be&nbsp;useful&nbsp;for&nbsp;creating&nbsp;clean,</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_433">433</td><td  
nowrap="nowrap">maintainable&nbsp;web&nbsp;sites.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_434">434</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_435">435</td><td  
nowrap="nowrap">..&nbsp;note::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_436">436</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_437">437</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;While&nbsp;not&nbsp;all&nbsp;Python&nbsp;frameworks&nbsp;explicitly&nbsp;support&nbsp;MVC,&nbsp;it&nbsp;is&nbsp;often&nbsp;trivial</td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__61"><a  
href="#difflib_chg_to55__60">n</a></td><td class="diff_header"  
id="from55_438">438-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;to&nbsp;create&nbsp;a&nbsp;web&nbsp;site&nbsp;which&nbsp;uses&nbsp;the&nbsp;MVC&nbsp;pattern&nbsp;by&nbsp;sep<span  
class="diff_chg">e</span>rating&nbsp;the&nbsp;data&nbsp;logic</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__61"><a  
href="#difflib_chg_to55__60">n</a></td><td class="diff_header"  
id="to55_460">460+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;to&nbsp;create&nbsp;a&nbsp;web&nbsp;site&nbsp;which&nbsp;uses&nbsp;the&nbsp;MVC&nbsp;pattern&nbsp;by&nbsp;sep<span  
class="diff_chg">a</span>rating&nbsp;the&nbsp;data&nbsp;logic</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_439">439</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;(the&nbsp;model)&nbsp;from&nbsp;the&nbsp;user&nbsp;interaction&nbsp;logic&nbsp;(the&nbsp;controller)&nbsp;and&nbsp;the</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__61">n</a></td><td  
class="diff_header" id="from55_440">440-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;templates&nbsp;(the&nbsp;view).&nbsp;&nbsp;That's&nbsp;why&nbsp;it&nbsp;is&nbsp;important&nbsp;not&nbsp;to&nbsp;write&nbsp;unne<span  
class="diff_sub">c</span>cessary</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__61">n</a></td><td  
class="diff_header" id="to55_462">462+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;templates&nbsp;(the&nbsp;view).&nbsp;&nbsp;That's&nbsp;why&nbsp;it&nbsp;is&nbsp;important&nbsp;not&nbsp;to&nbsp;write&nbsp;unnecessary</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_441">441-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Python&nbsp;code&nbsp;in&nbsp;the&nbsp;templates&nbsp;--&nbsp;it&nbsp;<span  
class="diff_chg">i</span>s&nbsp;against&nbsp;MVC&nbsp;and&nbsp;creates<span  
class="diff_sub">&nbsp;more&nbsp;chaos.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_463">463+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Python&nbsp;code&nbsp;in&nbsp;the&nbsp;templates&nbsp;--&nbsp;it&nbsp;<span  
class="diff_chg">work</span>s&nbsp;against&nbsp;<span  
class="diff_add">the&nbsp;</span>MVC&nbsp;<span  
class="diff_add">model&nbsp;</span>and&nbsp;creates</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_464">464+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;chaos&nbsp;in&nbsp;the&nbsp;code&nbsp;base,&nbsp;making&nbsp;it&nbsp;harder&nbsp;to&nbsp;understand&nbsp;and&nbsp;modify.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__62"></td><td  
class="diff_header" id="from55_442">442</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_443">443</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_444">444</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"  
id="difflib_chg_to55__63"><a href="#difflib_chg_to55__62">n</a></td><td  
class="diff_header" id="from55_445">445-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;The&nbsp;<span  
class="diff_chg">e</span>nglish&nbsp;Wikipedia&nbsp;has&nbsp;an&nbsp;article&nbsp;about&nbsp;the&nbsp;`Model-View-Controller&nbsp;pattern</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__63"><a  
href="#difflib_chg_to55__62">n</a></td><td class="diff_header"  
id="to55_468">468+</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;The&nbsp;<span  
class="diff_chg">E</span>nglish&nbsp;Wikipedia&nbsp;has&nbsp;an&nbsp;article&nbsp;about&nbsp;the&nbsp;`Model-View-Controller&nbsp;pattern</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_446">446-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://en.wikipedia.org/wiki/Model-view-controller&gt;`_<span  
class="diff_chg">,&nbsp;which</span>&nbsp;includes&nbsp;a&nbsp;long</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_469">469+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://en.wikipedia.org/wiki/Model-view-controller&gt;`_<span  
class="diff_chg">.&nbsp;&nbsp;It</span>&nbsp;includes&nbsp;a&nbsp;long</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_447">447-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;list&nbsp;of&nbsp;web&nbsp;frameworks&nbsp;for&nbsp;<span  
class="diff_chg">d</span>i<span  
class="diff_chg">fferent</span>&nbsp;programming&nbsp;languages.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_470">470+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;list&nbsp;of&nbsp;web&nbsp;frameworks&nbsp;for&nbsp;<span  
class="diff_chg">var</span>i<span  
class="diff_chg">ous</span>&nbsp;programming&nbsp;languages.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_448">448</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_449">449</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__63">n</a></td><td class="diff_header"  
id="from55_450">450-</td><td  
nowrap="nowrap">Ingredients&nbsp;for&nbsp;<span  
class="diff_chg">w</span>eb<span  
class="diff_sub">&nbsp;</span>sites</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__63">n</a></td><td  
class="diff_header" id="to55_473">473+</td><td  
nowrap="nowrap">Ingredients&nbsp;for&nbsp;<span  
class="diff_chg">W</span>ebsites</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_451">451-</td><td nowrap="nowrap">========================<span  
class="diff_sub">=</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_474">474+</td><td  
nowrap="nowrap">========================</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_452">452</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__64">n</a></td><td  
class="diff_header" id="from55_453">453-</td><td nowrap="nowrap">Web<span  
class="diff_sub">&nbsp;</span>sites&nbsp;are&nbsp;complex&nbsp;constructs,&nbsp;so&nbsp;tools&nbsp;<span  
class="diff_chg">w</span>e<span  
class="diff_chg">r</span>e&nbsp;created&nbsp;to&nbsp;help&nbsp;<span  
class="diff_sub">the&nbsp;</span>web<span  
class="diff_sub">&nbsp;site</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__64">n</a></td><td  
class="diff_header" id="to55_476">476+</td><td  
nowrap="nowrap">Websites&nbsp;are&nbsp;complex&nbsp;constructs,&nbsp;so&nbsp;tools&nbsp;<span  
class="diff_chg">hav</span>e<span class="diff_chg">&nbsp;b</span>e<span  
class="diff_add">en</span>&nbsp;created&nbsp;to&nbsp;help&nbsp;web</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_454">454-</td><td nowrap="nowrap"><span  
class="diff_sub">developer&nbsp;to&nbsp;make&nbsp;his&nbsp;work&nbsp;maintainable.&nbsp;&nbsp;None&nbsp;of&nbsp;these&nbsp;tools&nbsp;are&nbsp;in&nbsp;any&nbsp;way</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_477">477+</td><td nowrap="nowrap"><span  
class="diff_add">developers&nbsp;make&nbsp;their&nbsp;code&nbsp;easier&nbsp;to&nbsp;write&nbsp;and&nbsp;more&nbsp;maintainable.&nbsp;&nbsp;Tools&nbsp;like</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__64"></td><td  
class="diff_header" id="from55_455">455-</td><td nowrap="nowrap"><span  
class="diff_sub">Python&nbsp;specific,&nbsp;they&nbsp;also&nbsp;exist&nbsp;for&nbsp;other&nbsp;programming&nbsp;languages&nbsp;as&nbsp;well.&nbsp;&nbsp;Of</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__64"></td><td  
class="diff_header" id="to55_478">478+</td><td nowrap="nowrap"><span  
class="diff_add">these&nbsp;exist&nbsp;for&nbsp;all&nbsp;web&nbsp;frameworks&nbsp;in&nbsp;all&nbsp;languages.&nbsp;&nbsp;Developers&nbsp;are&nbsp;not&nbsp;forced</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_456">456-</td><td nowrap="nowrap"><span  
class="diff_sub">course,&nbsp;developers&nbsp;are&nbsp;not&nbsp;forced&nbsp;to&nbsp;use&nbsp;these&nbsp;tools&nbsp;and&nbsp;often&nbsp;there&nbsp;is&nbsp;no</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_479">479+</td><td nowrap="nowrap"><span  
class="diff_add">to&nbsp;use&nbsp;these&nbsp;tools,&nbsp;and&nbsp;often&nbsp;there&nbsp;is&nbsp;no&nbsp;"best"&nbsp;tool.&nbsp;&nbsp;It&nbsp;is&nbsp;worth&nbsp;learning</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_457">457-</td><td nowrap="nowrap"><span  
class="diff_sub">"best"&nbsp;tool,&nbsp;but&nbsp;it&nbsp;is&nbsp;worth&nbsp;informing&nbsp;yourself&nbsp;before&nbsp;choosing&nbsp;something</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_480">480+</td><td nowrap="nowrap"><span  
class="diff_add">about&nbsp;the&nbsp;available&nbsp;tools&nbsp;because&nbsp;they&nbsp;can&nbsp;greatly&nbsp;simplify&nbsp;the&nbsp;process&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_458">458-</td><td nowrap="nowrap"><span  
class="diff_sub">because&nbsp;of&nbsp;the&nbsp;big&nbsp;number&nbsp;of&nbsp;helpers&nbsp;that&nbsp;the&nbsp;developer&nbsp;can&nbsp;use.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_481">481+</td><td nowrap="nowrap"><span  
class="diff_add">developing&nbsp;a&nbsp;web&nbsp;site.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_459">459</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_460">460</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_461">461</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_462">462</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"  
id="difflib_chg_to55__65"><a href="#difflib_chg_to55__65">n</a></td><td  
class="diff_header" id="from55_463">463-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;People&nbsp;have&nbsp;written&nbsp;far&nbsp;more&nbsp;components&nbsp;that&nbsp;can&nbsp;be&nbsp;combined&nbsp;than&nbsp;these</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__65"><a  
href="#difflib_chg_to55__65">n</a></td><td class="diff_header"  
id="to55_486">486+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;far&nbsp;more&nbsp;components&nbsp;than&nbsp;can&nbsp;be&nbsp;presented&nbsp;here.&nbsp;&nbsp;The&nbsp;Python&nbsp;wiki</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_464">464-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;presented&nbsp;here.&nbsp;&nbsp;The&nbsp;Python&nbsp;wiki&nbsp;has&nbsp;a&nbsp;page&nbsp;about&nbsp;these&nbsp;components,&nbsp;called</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_487">487+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;has&nbsp;a&nbsp;page&nbsp;about&nbsp;these&nbsp;components,&nbsp;called</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_465">465</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;`Web&nbsp;Components&nbsp;&lt;http://wiki.python.org/moin/WebComponents&gt;`_.</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__66"></td><td  
class="diff_header" id="from55_466">466</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_467">467</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_468">468</td><td  
nowrap="nowrap">Templates</td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__67"></td><td class="diff_header"  
id="from55_469">469</td><td nowrap="nowrap">---------</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_470">470</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__68"><a  
href="#difflib_chg_to55__66">n</a></td><td class="diff_header"  
id="from55_471">471-</td><td  
nowrap="nowrap">Mixing&nbsp;of&nbsp;HTML&nbsp;and&nbsp;Python&nbsp;code&nbsp;is&nbsp;possible&nbsp;w<span  
class="diff_sub">ith&nbsp;some</span>&nbsp;libraries.&nbsp;&nbsp;While</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__68"><a  
href="#difflib_chg_to55__66">n</a></td><td class="diff_header"  
id="to55_494">494+</td><td  
nowrap="nowrap">Mixing&nbsp;of&nbsp;HTML&nbsp;and&nbsp;Python&nbsp;code&nbsp;is<span  
class="diff_add">&nbsp;made</span>&nbsp;possible&nbsp;<span  
class="diff_add">by&nbsp;a&nbsp;fe</span>w&nbsp;libraries.&nbsp;&nbsp;While</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_472">472</td><td  
nowrap="nowrap">convenient&nbsp;at&nbsp;first,&nbsp;it&nbsp;leads&nbsp;to&nbsp;horribly&nbsp;unmaintainable&nbsp;code.&nbsp;&nbsp;That's&nbsp;why</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_473">473</td><td  
nowrap="nowrap">templates&nbsp;exist.&nbsp;&nbsp;Templates&nbsp;are,&nbsp;in&nbsp;the&nbsp;simplest&nbsp;case,&nbsp;just&nbsp;HTML&nbsp;files&nbsp;with</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__67">n</a></td><td  
class="diff_header" id="from55_474">474-</td><td  
nowrap="nowrap">placeholders.&nbsp;&nbsp;The&nbsp;HTML&nbsp;is&nbsp;sent&nbsp;to&nbsp;the&nbsp;user's&nbsp;browser&nbsp;after&nbsp;filling&nbsp;<span  
class="diff_chg">out</span>&nbsp;the</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__67">n</a></td><td  
class="diff_header" id="to55_497">497+</td><td  
nowrap="nowrap">placeholders.&nbsp;&nbsp;The&nbsp;HTML&nbsp;is&nbsp;sent&nbsp;to&nbsp;the&nbsp;user's&nbsp;browser&nbsp;after&nbsp;filling&nbsp;<span  
class="diff_chg">in</span>&nbsp;the</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_475">475</td><td  
nowrap="nowrap">placeholders.</td></tr>            <tr><td  
class="diff_next" id="difflib_chg_to55__69"></td><td class="diff_header"  
id="from55_476">476</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__68">n</a></td><td  
class="diff_header" id="from55_477">477-</td><td  
nowrap="nowrap">Python&nbsp;already&nbsp;includes&nbsp;su<span  
class="diff_chg">ch</span>&nbsp;simple&nbsp;templates::</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__68">n</a></td><td  
class="diff_header" id="to55_500">500+</td><td  
nowrap="nowrap">Python&nbsp;already&nbsp;includes&nbsp;<span  
class="diff_add">two&nbsp;way</span>s<span  
class="diff_add">&nbsp;to&nbsp;b</span>u<span  
class="diff_chg">ild</span>&nbsp;simple&nbsp;templates::</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_478">478</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__69">n</a></td><td  
class="diff_header" id="from55_479">479-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;a&nbsp;simple&nbsp;template</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_480">480-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;template&nbsp;=&nbsp;"&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello&nbsp;%s!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_502">502+</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;<span  
class="diff_add">&nbsp;&gt;&gt;&gt;</span>&nbsp;template&nbsp;=&nbsp;"&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello&nbsp;%s!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;"</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__70"></td><td  
class="diff_header" id="from55_481">481-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;print&nbsp;template&nbsp;%&nbsp;"Reader"</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__70"></td><td  
class="diff_header" id="to55_503">503+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;<span  
class="diff_add">&nbsp;&gt;&gt;&gt;</span>&nbsp;print&nbsp;template&nbsp;%&nbsp;"Reader"</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_504">504+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello&nbsp;Reader!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_482">482</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__70">n</a></td><td  
class="diff_header" id="from55_483">483-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;Python&nbsp;standard&nbsp;library&nbsp;also&nbsp;includes&nbsp;some&nbsp;more&nbsp;advanced&nbsp;templates&nbsp;usable</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__70">n</a></td><td  
class="diff_header" id="to55_506">506+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;from&nbsp;string&nbsp;import&nbsp;Template</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_484">484-</td><td nowrap="nowrap"><span  
class="diff_sub">through&nbsp;:class:`string.Template`,&nbsp;but&nbsp;in&nbsp;HTML&nbsp;templates&nbsp;it&nbsp;is&nbsp;needed&nbsp;to&nbsp;use</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_507">507+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;template&nbsp;=&nbsp;Template("&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello&nbsp;${name}&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;")</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_485">485-</td><td nowrap="nowrap"><span  
class="diff_sub">conditional&nbsp;and&nbsp;looping&nbsp;contructs&nbsp;like&nbsp;Python's&nbsp;*for*&nbsp;and&nbsp;*if*.&nbsp;&nbsp;So,&nbsp;some</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_508">508+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&gt;&gt;&gt;&nbsp;print&nbsp;template.substitute(dict(name='Dinsdale'))</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_486">486-</td><td nowrap="nowrap"><span  
class="diff_sub">*template&nbsp;engine*&nbsp;is&nbsp;needed.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_509">509+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&lt;html&gt;&lt;body&gt;&lt;h1&gt;Hello&nbsp;Dinsdale!&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_487">487</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__71">n</a></td><td  
class="diff_header" id="from55_488">488-</td><td nowrap="nowrap"><span  
class="diff_sub">Now,&nbsp;Python&nbsp;has&nbsp;a&nbsp;lot&nbsp;of&nbsp;template&nbsp;engines&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;with&nbsp;or&nbsp;without&nbsp;a</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__71">n</a></td><td  
class="diff_header" id="to55_511">511+</td><td nowrap="nowrap"><span  
class="diff_add">To&nbsp;generate&nbsp;complex&nbsp;HTML&nbsp;based&nbsp;on&nbsp;non-trivial&nbsp;model&nbsp;data,&nbsp;conditional</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_512">512+</td><td nowrap="nowrap"><span  
class="diff_add">and&nbsp;looping&nbsp;constructs&nbsp;like&nbsp;Python's&nbsp;*for*&nbsp;and&nbsp;*if*&nbsp;are&nbsp;generally&nbsp;needed.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_513">513+</td><td nowrap="nowrap"><span  
class="diff_add">*Template&nbsp;engines*&nbsp;support&nbsp;templates&nbsp;of&nbsp;this&nbsp;complexity.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__71"></td><td  
class="diff_header" id="to55_514">514+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_515">515+</td><td nowrap="nowrap"><span  
class="diff_add">There&nbsp;are&nbsp;a&nbsp;lot&nbsp;of&nbsp;template&nbsp;engines&nbsp;available&nbsp;for&nbsp;Python&nbsp;which&nbsp;can&nbsp;be&nbsp;used&nbsp;with</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_489">489-</td><td  
nowrap="nowrap">`framework`_.&nbsp;&nbsp;Some&nbsp;of&nbsp;these&nbsp;<span  
class="diff_chg">ar</span>e<span class="diff_chg">&nbsp;us</span>in<span  
class="diff_chg">g</span>&nbsp;a&nbsp;plain-text&nbsp;programming<span  
class="diff_sub">&nbsp;language&nbsp;which</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_516">516+</td><td nowrap="nowrap"><span  
class="diff_add">or&nbsp;without&nbsp;a&nbsp;</span>`framework`_.&nbsp;&nbsp;Some&nbsp;of&nbsp;these&nbsp;<span  
class="diff_chg">d</span>e<span class="diff_chg">f</span>in<span  
class="diff_chg">e</span>&nbsp;a&nbsp;plain-text&nbsp;programming</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_490">490-</td><td nowrap="nowrap"><span  
class="diff_sub">is&nbsp;very&nbsp;easy&nbsp;to&nbsp;learn&nbsp;as&nbsp;it&nbsp;is&nbsp;quite&nbsp;limited&nbsp;while&nbsp;others&nbsp;use&nbsp;XML&nbsp;so&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_517">517+</td><td nowrap="nowrap"><span  
class="diff_add">language&nbsp;which&nbsp;is&nbsp;easy&nbsp;to&nbsp;learn,&nbsp;partly&nbsp;because&nbsp;it&nbsp;is&nbsp;limited&nbsp;in&nbsp;scope.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__72"></td><td  
class="diff_header" id="from55_491">491-</td><td nowrap="nowrap"><span  
class="diff_sub">template&nbsp;output&nbsp;is&nbsp;always&nbsp;guaranteed&nbsp;to&nbsp;be&nbsp;valid&nbsp;XML.&nbsp;&nbsp;Some&nbsp;`frameworks`_&nbsp;ship</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__72"></td><td  
class="diff_header" id="to55_518">518+</td><td nowrap="nowrap"><span  
class="diff_add">Others&nbsp;use&nbsp;XML,&nbsp;and&nbsp;the&nbsp;template&nbsp;output&nbsp;is&nbsp;guaranteed&nbsp;to&nbsp;be&nbsp;always&nbsp;be&nbsp;valid</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_492">492-</td><td nowrap="nowrap"><span  
class="diff_sub">their&nbsp;own&nbsp;template&nbsp;engine&nbsp;or&nbsp;recommend&nbsp;one&nbsp;particular.&nbsp;&nbsp;If&nbsp;one&nbsp;is&nbsp;not&nbsp;yet&nbsp;sure,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_519">519+</td><td nowrap="nowrap"><span  
class="diff_add">XML.&nbsp;&nbsp;There&nbsp;are&nbsp;many&nbsp;other&nbsp;variations.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_493">493-</td><td nowrap="nowrap"><span  
class="diff_sub">using&nbsp;these&nbsp;is&nbsp;a&nbsp;good&nbsp;idea.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_494">494</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__72">n</a></td><td  
class="diff_header" id="from55_495">495-</td><td nowrap="nowrap"><span  
class="diff_sub">..&nbsp;note::</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__72">n</a></td><td  
class="diff_header" id="to55_521">521+</td><td nowrap="nowrap"><span  
class="diff_add">Some&nbsp;`frameworks`_&nbsp;ship&nbsp;their&nbsp;own&nbsp;template&nbsp;engine&nbsp;or&nbsp;recommend&nbsp;one&nbsp;in</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_522">522+</td><td nowrap="nowrap"><span  
class="diff_add">particular.&nbsp;&nbsp;In&nbsp;the&nbsp;absence&nbsp;of&nbsp;a&nbsp;reason&nbsp;to&nbsp;use&nbsp;a&nbsp;different&nbsp;template&nbsp;engine,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_523">523+</td><td nowrap="nowrap"><span  
class="diff_add">using&nbsp;the&nbsp;one&nbsp;provided&nbsp;by&nbsp;or&nbsp;recommended&nbsp;by&nbsp;the&nbsp;framework&nbsp;is&nbsp;a&nbsp;good&nbsp;idea.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_496">496</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__73">n</a></td><td  
class="diff_header" id="from55_497">497-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;While&nbsp;Python&nbsp;has&nbsp;quite&nbsp;a&nbsp;lot&nbsp;of&nbsp;different&nbsp;template&nbsp;engines&nbsp;it&nbsp;usually&nbsp;does</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__73"></td><td  
class="diff_header" id="from55_498">498-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;not&nbsp;make&nbsp;sense&nbsp;to&nbsp;use&nbsp;a&nbsp;homebrewed&nbsp;template&nbsp;system.&nbsp;&nbsp;The&nbsp;time&nbsp;needed&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_499">499-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;evaluate&nbsp;all&nbsp;templating&nbsp;systems&nbsp;is&nbsp;not&nbsp;really&nbsp;worth&nbsp;it,&nbsp;better&nbsp;invest&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_500">500-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;time&nbsp;in&nbsp;looking&nbsp;through&nbsp;the&nbsp;most&nbsp;popular&nbsp;ones.&nbsp;&nbsp;Some&nbsp;frameworks&nbsp;have&nbsp;their</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_501">501-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;own&nbsp;template&nbsp;engine&nbsp;or&nbsp;have&nbsp;a&nbsp;recommentation&nbsp;for&nbsp;one.&nbsp;&nbsp;It's&nbsp;wise&nbsp;to&nbsp;use</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_502">502-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;these.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_503">503-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__74"></td><td  
class="diff_header" id="from55_504">504-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;</span>Popular&nbsp;template&nbsp;engines&nbsp;include:</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__74"></td><td  
class="diff_header" id="to55_525">525+</td><td  
nowrap="nowrap">Popular&nbsp;template&nbsp;engines&nbsp;include:</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_505">505</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__74">n</a></td><td  
class="diff_header" id="from55_506">506-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;*&nbsp;Mako</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__74">n</a></td><td  
class="diff_header" id="to55_527">527+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;*&nbsp;`Mako&nbsp;&lt;http://www.makotemplates.org/&gt;`_</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__75"></td><td  
class="diff_header" id="from55_507">507-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;*&nbsp;Genshi</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__75"></td><td  
class="diff_header" id="to55_528">528+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;*&nbsp;`Genshi&nbsp;&lt;http://genshi.edgewall.org/&gt;`_</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_508">508-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;*&nbsp;Jinja</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_529">529+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;*&nbsp;`Jinja&nbsp;&lt;http://jinja.pocoo.org/2/&gt;`_</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_509">509</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_510">510</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_511">511</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__75">n</a></td><td class="diff_header"  
id="from55_512">512-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;Lots&nbsp;of&nbsp;different&nbsp;template&nbsp;engines&nbsp;divide&nbsp;the&nbsp;attention&nbsp;between&nbsp;themselves</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__75">n</a></td><td  
class="diff_header" id="to55_533">533+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;There&nbsp;are&nbsp;many&nbsp;template&nbsp;engines&nbsp;competing&nbsp;for&nbsp;attention,&nbsp;becuase&nbsp;it&nbsp;is</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_513">513-</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">b</span>e<span class="diff_sub">cause&nbsp;i</span>t<span  
class="diff_chg">'s</span>&nbsp;easy&nbsp;to&nbsp;create&nbsp;them&nbsp;in&nbsp;Python.&nbsp;&nbsp;The&nbsp;page&nbsp;`Templating</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_534">534+</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;<span  
class="diff_chg">pr</span>et<span  
class="diff_chg">ty</span>&nbsp;easy&nbsp;to&nbsp;create&nbsp;them&nbsp;in&nbsp;Python.&nbsp;&nbsp;The&nbsp;page&nbsp;`Templating</td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__76"></td><td  
class="diff_header" id="from55_514">514</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/Templating&gt;`_&nbsp;in&nbsp;the&nbsp;wiki&nbsp;lists&nbsp;a&nbsp;big,</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__76">n</a></td><td  
class="diff_header" id="from55_515">515-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;ever-growing&nbsp;number&nbsp;of&nbsp;these.</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__76">n</a></td><td  
class="diff_header" id="to55_536">536+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;ever-growing&nbsp;number&nbsp;of&nbsp;these.&nbsp;&nbsp;The&nbsp;three&nbsp;listed&nbsp;above&nbsp;are&nbsp;considered&nbsp;"second</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_537">537+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;generation"&nbsp;template&nbsp;engines&nbsp;and&nbsp;are&nbsp;a&nbsp;good&nbsp;place&nbsp;to&nbsp;start.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_516">516</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_517">517</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"  
id="difflib_chg_to55__77"></td><td class="diff_header"  
id="from55_518">518</td><td  
nowrap="nowrap">Data&nbsp;persistence</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_519">519</td><td  
nowrap="nowrap">----------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_520">520</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__77">n</a></td><td class="diff_header"  
id="from55_521">521-</td><td  
nowrap="nowrap">*Data&nbsp;persistence*,&nbsp;while&nbsp;sounding&nbsp;very&nbsp;complicated&nbsp;is&nbsp;just&nbsp;about&nbsp;storing&nbsp;data.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__77">n</a></td><td  
class="diff_header" id="to55_543">543+</td><td  
nowrap="nowrap">*Data&nbsp;persistence*,&nbsp;while&nbsp;sounding&nbsp;very&nbsp;complicated<span  
class="diff_add">,</span>&nbsp;is&nbsp;just&nbsp;about&nbsp;storing&nbsp;data.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_522">522-</td><td  
nowrap="nowrap">This&nbsp;data&nbsp;might&nbsp;be&nbsp;the&nbsp;text&nbsp;of&nbsp;blog&nbsp;entries,&nbsp;the&nbsp;postings&nbsp;o<span  
class="diff_chg">f</span>&nbsp;a&nbsp;bulletin&nbsp;board&nbsp;or</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_544">544+</td><td  
nowrap="nowrap">This&nbsp;data&nbsp;might&nbsp;be&nbsp;the&nbsp;text&nbsp;of&nbsp;blog&nbsp;entries,&nbsp;the&nbsp;postings&nbsp;o<span  
class="diff_chg">n</span>&nbsp;a&nbsp;bulletin&nbsp;board&nbsp;or</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_523">523-</td><td  
nowrap="nowrap">the&nbsp;text&nbsp;of&nbsp;a&nbsp;wiki&nbsp;page.&nbsp;&nbsp;<span  
class="diff_chg">As&nbsp;always,&nbsp;t</span>here&nbsp;are&nbsp;different&nbsp;ways&nbsp;to&nbsp;store</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_545">545+</td><td  
nowrap="nowrap">the&nbsp;text&nbsp;of&nbsp;a&nbsp;wiki&nbsp;page.&nbsp;&nbsp;<span  
class="diff_chg">T</span>here&nbsp;are<span  
class="diff_add">,&nbsp;of&nbsp;course,&nbsp;a&nbsp;number&nbsp;of</span>&nbsp;different&nbsp;ways&nbsp;to&nbsp;store</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_524">524-</td><td nowrap="nowrap">information<span  
class="diff_sub">s</span>&nbsp;on&nbsp;a&nbsp;web&nbsp;server.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_546">546+</td><td  
nowrap="nowrap">information&nbsp;on&nbsp;a&nbsp;web&nbsp;server.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_525">525</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__78">n</a></td><td  
class="diff_header" id="from55_526">526-</td><td  
nowrap="nowrap">Often&nbsp;relational&nbsp;database&nbsp;engines&nbsp;like&nbsp;`MySQL&nbsp;&lt;http://www.mysql.com/&gt;`_&nbsp;or</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__78">n</a></td><td  
class="diff_header" id="to55_548">548+</td><td nowrap="nowrap">Often<span  
class="diff_add">,</span>&nbsp;relational&nbsp;database&nbsp;engines&nbsp;like&nbsp;`MySQL&nbsp;&lt;http://www.mysql.com/&gt;`_&nbsp;or</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_527">527-</td><td nowrap="nowrap">`PostgreSQL&nbsp;&lt;<span  
class="diff_sub">http://</span>http://www.postgresql.org/&gt;`_&nbsp;are&nbsp;used&nbsp;<span  
class="diff_chg">d</span>ue&nbsp;<span  
class="diff_sub">t</span>o&nbsp;their&nbsp;good</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_549">549+</td><td  
nowrap="nowrap">`PostgreSQL&nbsp;&lt;http://www.postgresql.org/&gt;`_&nbsp;are&nbsp;used&nbsp;<span  
class="diff_chg">beca</span>u<span class="diff_add">s</span>e&nbsp;o<span  
class="diff_add">f</span>&nbsp;their&nbsp;good</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_528">528-</td><td  
nowrap="nowrap">performance&nbsp;handling&nbsp;very&nbsp;large&nbsp;databases&nbsp;consisting&nbsp;of<span  
class="diff_sub">&nbsp;up&nbsp;to</span>&nbsp;millions&nbsp;of</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_550">550+</td><td nowrap="nowrap">performance&nbsp;<span  
class="diff_add">when&nbsp;</span>handling&nbsp;very&nbsp;large&nbsp;databases&nbsp;consisting&nbsp;of&nbsp;millions&nbsp;of</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_551">551+</td><td nowrap="nowrap"><span  
class="diff_add">entries.&nbsp;&nbsp;There&nbsp;is&nbsp;also&nbsp;a&nbsp;small&nbsp;database&nbsp;engine&nbsp;called&nbsp;`SQLite</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_552">552+</td><td nowrap="nowrap"><span  
class="diff_add">&lt;http://www.sqlite.org/&gt;`_,&nbsp;which&nbsp;is&nbsp;bundled&nbsp;with&nbsp;Python&nbsp;in&nbsp;the&nbsp;:mod:`sqlite3`</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_553">553+</td><td nowrap="nowrap"><span  
class="diff_add">module,&nbsp;and&nbsp;which&nbsp;uses&nbsp;only&nbsp;one&nbsp;file.&nbsp;&nbsp;It&nbsp;has&nbsp;no&nbsp;other&nbsp;dependencies.&nbsp;&nbsp;For</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_554">554+</td><td nowrap="nowrap"><span  
class="diff_add">smaller&nbsp;sites&nbsp;SQLite&nbsp;is&nbsp;just&nbsp;enough.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_555">555+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_529">529-</td><td nowrap="nowrap">ent<span  
class="diff_chg">ri</span>es<span  
class="diff_sub">.&nbsp;&nbsp;These</span>&nbsp;are&nbsp;*queried*&nbsp;using&nbsp;a&nbsp;language&nbsp;called&nbsp;`SQL</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_556">556+</td><td nowrap="nowrap"><span  
class="diff_add">R</span>e<span class="diff_add">latio</span>n<span  
class="diff_add">al&nbsp;da</span>t<span  
class="diff_chg">abas</span>es&nbsp;are&nbsp;*queried*&nbsp;using&nbsp;a&nbsp;language&nbsp;called&nbsp;`SQL</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__78"></td><td  
class="diff_header" id="from55_530">530-</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/SQL&gt;`_.&nbsp;&nbsp;Python&nbsp;programmers&nbsp;in&nbsp;general&nbsp;do&nbsp;not<span  
class="diff_sub">&nbsp;like</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__78"></td><td  
class="diff_header" id="to55_557">557+</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/SQL&gt;`_.&nbsp;&nbsp;Python&nbsp;programmers&nbsp;in&nbsp;general&nbsp;do&nbsp;not</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_531">531-</td><td  
nowrap="nowrap">SQL&nbsp;too&nbsp;much,&nbsp;they&nbsp;prefer&nbsp;to&nbsp;work&nbsp;with&nbsp;objects.&nbsp;&nbsp;It&nbsp;is&nbsp;possible&nbsp;to&nbsp;save<span  
class="diff_sub">&nbsp;Python</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_558">558+</td><td nowrap="nowrap"><span  
class="diff_add">like&nbsp;</span>SQL&nbsp;too&nbsp;much,&nbsp;<span  
class="diff_add">as&nbsp;</span>they&nbsp;prefer&nbsp;to&nbsp;work&nbsp;with&nbsp;objects.&nbsp;&nbsp;It&nbsp;is&nbsp;possible&nbsp;to&nbsp;save</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_532">532-</td><td  
nowrap="nowrap">objects&nbsp;into&nbsp;a&nbsp;database&nbsp;using&nbsp;a&nbsp;technology&nbsp;called&nbsp;`ORM</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_559">559+</td><td nowrap="nowrap"><span  
class="diff_add">Python&nbsp;</span>objects&nbsp;into&nbsp;a&nbsp;database&nbsp;using&nbsp;a&nbsp;technology&nbsp;called&nbsp;`ORM</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_533">533-</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/Object-relational_mapping&gt;`_<span  
class="diff_chg">.&nbsp;&nbsp;</span>OR<span  
class="diff_chg">M&nbsp;trans</span>lat<span  
class="diff_chg">es&nbsp;</span>al<span class="diff_sub">l</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_560">560+</td><td  
nowrap="nowrap">&lt;http://en.wikipedia.org/wiki/Object-relational_mapping&gt;`_<span  
class="diff_chg">&nbsp;(</span>O<span  
class="diff_add">bject&nbsp;</span>R<span class="diff_chg">e</span>lat<span  
class="diff_chg">ion</span>al</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_534">534-</td><td nowrap="nowrap"><span  
class="diff_sub">object-oriented&nbsp;access&nbsp;into&nbsp;SQL&nbsp;code&nbsp;under&nbsp;the&nbsp;hood,&nbsp;the&nbsp;user&nbsp;does&nbsp;not&nbsp;need&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_561">561+</td><td nowrap="nowrap"><span  
class="diff_add">Mapping).&nbsp;&nbsp;ORM&nbsp;translates&nbsp;all&nbsp;object-oriented&nbsp;access&nbsp;into&nbsp;SQL&nbsp;code&nbsp;under&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_535">535-</td><td nowrap="nowrap"><span  
class="diff_sub">think&nbsp;about&nbsp;it.&nbsp;&nbsp;Most&nbsp;`frameworks`_&nbsp;use&nbsp;ORMs&nbsp;and&nbsp;it&nbsp;works&nbsp;quite&nbsp;well.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_562">562+</td><td nowrap="nowrap"><span  
class="diff_add">hood,&nbsp;so&nbsp;the&nbsp;developer&nbsp;does&nbsp;not&nbsp;need&nbsp;to&nbsp;think&nbsp;about&nbsp;it.&nbsp;&nbsp;Most&nbsp;`frameworks`_&nbsp;use</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_563">563+</td><td nowrap="nowrap"><span  
class="diff_add">ORMs,&nbsp;and&nbsp;it&nbsp;works&nbsp;quite&nbsp;well.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_536">536</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__79">n</a></td><td  
class="diff_header" id="from55_537">537-</td><td nowrap="nowrap"><span  
class="diff_sub">A&nbsp;second&nbsp;possibility&nbsp;is&nbsp;using&nbsp;files&nbsp;that&nbsp;are&nbsp;saved&nbsp;on&nbsp;the&nbsp;hard&nbsp;disk&nbsp;(sometimes</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__79">n</a></td><td  
class="diff_header" id="to55_565">565+</td><td nowrap="nowrap"><span  
class="diff_add">A&nbsp;second&nbsp;possibility&nbsp;is&nbsp;storing&nbsp;data&nbsp;in&nbsp;normal,&nbsp;plain&nbsp;text&nbsp;files&nbsp;(some</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__79"></td><td  
class="diff_header" id="from55_538">538-</td><td nowrap="nowrap"><span  
class="diff_sub">called&nbsp;flatfiles).&nbsp;&nbsp;This&nbsp;is&nbsp;very&nbsp;easy,&nbsp;but&nbsp;is&nbsp;not&nbsp;too&nbsp;fast.&nbsp;&nbsp;There&nbsp;is&nbsp;even&nbsp;a</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__79"></td><td  
class="diff_header" id="to55_566">566+</td><td nowrap="nowrap"><span  
class="diff_add">times&nbsp;called&nbsp;"flat&nbsp;files").&nbsp;&nbsp;This&nbsp;is&nbsp;very&nbsp;easy&nbsp;for&nbsp;simple&nbsp;sites,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_539">539-</td><td nowrap="nowrap"><span  
class="diff_sub">small&nbsp;database&nbsp;engine&nbsp;called&nbsp;`SQLite&nbsp;&lt;http://www.sqlite.org/&gt;`_&nbsp;which&nbsp;is&nbsp;bundled</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_567">567+</td><td nowrap="nowrap"><span  
class="diff_add">but&nbsp;can&nbsp;be&nbsp;difficult&nbsp;to&nbsp;get&nbsp;right&nbsp;if&nbsp;the&nbsp;web&nbsp;site&nbsp;is&nbsp;performing&nbsp;many</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_540">540-</td><td nowrap="nowrap"><span  
class="diff_sub">with&nbsp;Python&nbsp;in&nbsp;the&nbsp;:mod:`sqlite`&nbsp;module&nbsp;and&nbsp;uses&nbsp;only&nbsp;one&nbsp;file.&nbsp;&nbsp;This&nbsp;database</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_568">568+</td><td nowrap="nowrap"><span  
class="diff_add">updates&nbsp;to&nbsp;the&nbsp;stored&nbsp;data.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_541">541-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;be&nbsp;used&nbsp;to&nbsp;store&nbsp;objects&nbsp;via&nbsp;an&nbsp;ORM&nbsp;and&nbsp;has&nbsp;no&nbsp;other&nbsp;dependencies.&nbsp;&nbsp;For</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_542">542-</td><td nowrap="nowrap"><span  
class="diff_sub">smaller&nbsp;sites&nbsp;SQLite&nbsp;is&nbsp;just&nbsp;enough.&nbsp;&nbsp;But&nbsp;it&nbsp;is&nbsp;not&nbsp;the&nbsp;only&nbsp;way&nbsp;in&nbsp;which&nbsp;data</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_543">543-</td><td nowrap="nowrap"><span  
class="diff_sub">can&nbsp;be&nbsp;saved&nbsp;into&nbsp;the&nbsp;file&nbsp;systems.&nbsp;&nbsp;Sometimes&nbsp;normal,&nbsp;plain&nbsp;text&nbsp;files&nbsp;are</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_544">544-</td><td nowrap="nowrap"><span  
class="diff_sub">enough.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_545">545</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__80"><a  
href="#difflib_chg_to55__80">n</a></td><td class="diff_header"  
id="from55_546">546-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;third&nbsp;and&nbsp;least&nbsp;used&nbsp;possibility&nbsp;are&nbsp;so-called&nbsp;object&nbsp;oriented&nbsp;databases.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__80"><a  
href="#difflib_chg_to55__80">n</a></td><td class="diff_header"  
id="to55_570">570+</td><td nowrap="nowrap"><span  
class="diff_add">A&nbsp;third&nbsp;possibility&nbsp;are&nbsp;object&nbsp;oriented&nbsp;databases&nbsp;(also&nbsp;called&nbsp;"object</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_547">547-</td><td nowrap="nowrap"><span  
class="diff_sub">These&nbsp;databases&nbsp;store&nbsp;the&nbsp;*actual&nbsp;objects*&nbsp;instead&nbsp;of&nbsp;the&nbsp;relations&nbsp;that</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_571">571+</td><td nowrap="nowrap"><span  
class="diff_add">databases").&nbsp;&nbsp;These&nbsp;databases&nbsp;store&nbsp;the&nbsp;object&nbsp;data&nbsp;in&nbsp;a&nbsp;form&nbsp;that&nbsp;closely</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_548">548-</td><td nowrap="nowrap"><span  
class="diff_sub">OR-mapping&nbsp;creates&nbsp;between&nbsp;rows&nbsp;in&nbsp;a&nbsp;database.&nbsp;&nbsp;This&nbsp;has&nbsp;the&nbsp;advantage&nbsp;that</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_572">572+</td><td nowrap="nowrap"><span  
class="diff_add">parallels&nbsp;the&nbsp;way&nbsp;the&nbsp;objects&nbsp;are&nbsp;structured&nbsp;in&nbsp;memory&nbsp;during&nbsp;program</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_573">573+</td><td nowrap="nowrap"><span  
class="diff_add">execution.&nbsp;&nbsp;(By&nbsp;contrast,&nbsp;ORMs&nbsp;store&nbsp;the&nbsp;object&nbsp;data&nbsp;as&nbsp;rows&nbsp;of&nbsp;data&nbsp;in&nbsp;tables</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_574">574+</td><td nowrap="nowrap"><span  
class="diff_add">and&nbsp;relations&nbsp;between&nbsp;those&nbsp;rows.)&nbsp;&nbsp;Storing&nbsp;the&nbsp;objects&nbsp;directly&nbsp;has&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_549">549-</td><td  
nowrap="nowrap">nearly&nbsp;all&nbsp;objects&nbsp;can&nbsp;be&nbsp;save<span  
class="diff_chg">n</span>&nbsp;in&nbsp;a&nbsp;straightforward&nbsp;way,&nbsp;unlike<span  
class="diff_sub">&nbsp;in&nbsp;relational</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_575">575+</td><td nowrap="nowrap"><span  
class="diff_add">advantage&nbsp;that&nbsp;</span>nearly&nbsp;all&nbsp;objects&nbsp;can&nbsp;be&nbsp;save<span  
class="diff_chg">d</span>&nbsp;in&nbsp;a&nbsp;straightforward&nbsp;way,&nbsp;unlike</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_550">550-</td><td  
nowrap="nowrap">databases&nbsp;where&nbsp;some&nbsp;objects&nbsp;are&nbsp;very&nbsp;hard&nbsp;to&nbsp;represent<span  
class="diff_sub">&nbsp;with&nbsp;ORMs</span>.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_576">576+</td><td nowrap="nowrap"><span  
class="diff_add">in&nbsp;relational&nbsp;</span>databases&nbsp;where&nbsp;some&nbsp;objects&nbsp;are&nbsp;very&nbsp;hard&nbsp;to&nbsp;represent.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_551">551</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__81"><a  
href="#difflib_chg_to55__81">n</a></td><td class="diff_header"  
id="from55_552">552-</td><td  
nowrap="nowrap">`Frameworks`_&nbsp;often&nbsp;give<span  
class="diff_sub">&nbsp;the&nbsp;users</span>&nbsp;hints&nbsp;on&nbsp;which&nbsp;method&nbsp;to&nbsp;choose<span  
class="diff_chg">,&nbsp;i</span>t&nbsp;is</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__81"><a  
href="#difflib_chg_to55__81">n</a></td><td class="diff_header"  
id="to55_578">578+</td><td  
nowrap="nowrap">`Frameworks`_&nbsp;often&nbsp;give&nbsp;hints&nbsp;on&nbsp;which<span  
class="diff_add">&nbsp;data&nbsp;storage</span>&nbsp;method&nbsp;to&nbsp;choose<span  
class="diff_chg">.&nbsp;&nbsp;I</span>t&nbsp;is</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_553">553-</td><td nowrap="nowrap"><span  
class="diff_sub">usually&nbsp;a&nbsp;good&nbsp;idea&nbsp;to&nbsp;stick&nbsp;to&nbsp;these&nbsp;unless&nbsp;there&nbsp;are&nbsp;some&nbsp;special&nbsp;requirements</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_579">579+</td><td nowrap="nowrap"><span  
class="diff_add">usually&nbsp;a&nbsp;good&nbsp;idea&nbsp;to&nbsp;stick&nbsp;to&nbsp;the&nbsp;data&nbsp;store&nbsp;recommended&nbsp;by&nbsp;the&nbsp;framework</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_554">554-</td><td nowrap="nowrap"><span  
class="diff_sub">which&nbsp;require&nbsp;to&nbsp;use&nbsp;the&nbsp;one&nbsp;method&nbsp;and&nbsp;not&nbsp;the&nbsp;other.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_580">580+</td><td nowrap="nowrap"><span  
class="diff_add">unless&nbsp;the&nbsp;application&nbsp;has&nbsp;special&nbsp;requirements&nbsp;better&nbsp;satisfied&nbsp;by&nbsp;an</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_581">581+</td><td nowrap="nowrap"><span  
class="diff_add">alternate&nbsp;storage&nbsp;mechanism.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__82"></td><td  
class="diff_header" id="from55_555">555</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_556">556</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_557">557</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_558">558</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`Persistence&nbsp;Tools&nbsp;&lt;http://wiki.python.org/moin/PersistenceTools&gt;`_&nbsp;lists</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__82">n</a></td><td  
class="diff_header" id="from55_559">559-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;possibilities&nbsp;on&nbsp;how&nbsp;to&nbsp;save&nbsp;data&nbsp;in&nbsp;the&nbsp;file&nbsp;system<span  
class="diff_chg">,&nbsp;s</span>ome&nbsp;of&nbsp;these<span  
class="diff_sub">&nbsp;modules</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__82">n</a></td><td  
class="diff_header" id="to55_586">586+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;possibilities&nbsp;on&nbsp;how&nbsp;to&nbsp;save&nbsp;data&nbsp;in&nbsp;the&nbsp;file&nbsp;system<span  
class="diff_chg">.&nbsp;&nbsp;S</span>ome&nbsp;of&nbsp;these</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_560">560-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;are&nbsp;part&nbsp;of&nbsp;the&nbsp;standard&nbsp;library</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_587">587+</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_add">&nbsp;modules</span>&nbsp;are&nbsp;part&nbsp;of&nbsp;the&nbsp;standard&nbsp;library</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_588">588+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__83"></td><td  
class="diff_header" id="from55_561">561</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`Database&nbsp;Programming&nbsp;&lt;http://wiki.python.org/moin/DatabaseProgramming&gt;`_</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__83">n</a></td><td  
class="diff_header" id="from55_562">562-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helps&nbsp;<span  
class="diff_chg">on</span>&nbsp;choosing&nbsp;a&nbsp;method&nbsp;o<span  
class="diff_chg">n&nbsp;how&nbsp;to</span>&nbsp;sav<span  
class="diff_chg">e&nbsp;the</span>&nbsp;data</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__83">n</a></td><td  
class="diff_header" id="to55_590">590+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;helps&nbsp;<span  
class="diff_chg">with</span>&nbsp;choosing&nbsp;a&nbsp;method&nbsp;<span  
class="diff_add">f</span>o<span class="diff_chg">r</span>&nbsp;sav<span  
class="diff_chg">ing</span>&nbsp;data</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_591">591+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_563">563-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`SQLAlchemy&nbsp;&lt;http://www.sqlalchemy.org/&gt;`_,&nbsp;the&nbsp;most&nbsp;powerful&nbsp;OR-Mapper<span  
class="diff_sub">&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_592">592+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`SQLAlchemy&nbsp;&lt;http://www.sqlalchemy.org/&gt;`_,&nbsp;the&nbsp;most&nbsp;powerful&nbsp;OR-Mapper</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_564">564-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Python&nbsp;and&nbsp;`Elixir&nbsp;&lt;http://elixir.ematia.de/&gt;`_&nbsp;which&nbsp;makes<span  
class="diff_sub">&nbsp;it&nbsp;easier&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_593">593+</td><td nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;<span  
class="diff_add">&nbsp;for</span>&nbsp;Python<span  
class="diff_add">,</span>&nbsp;and&nbsp;`Elixir&nbsp;&lt;http://elixir.ematia.de/&gt;`_<span  
class="diff_add">,</span>&nbsp;which&nbsp;makes</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_565">565-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;use</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_594">594+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQLAlchemy&nbsp;easier&nbsp;to&nbsp;use</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_595">595+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_566">566</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`SQLObject&nbsp;&lt;http://www.sqlobject.org/&gt;`_,&nbsp;another&nbsp;popular&nbsp;OR-Mapper</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__84">n</a></td><td  
class="diff_header" id="to55_597">597+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_567">567</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;*&nbsp;`ZODB&nbsp;&lt;https://launchpad.net/zodb&gt;`_&nbsp;and&nbsp;`Durus</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_568">568</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;http://www.mems-exchange.org/software/durus/&gt;`_,&nbsp;two&nbsp;object&nbsp;oriented</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__84"></td><td  
class="diff_header" id="from55_569">569</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_570">570</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_571">571</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_572">572</td><td  
nowrap="nowrap">..&nbsp;_framework:</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_573">573</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_574">574</td><td  
nowrap="nowrap">Frameworks</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_575">575</td><td  
nowrap="nowrap">==========</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_576">576</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__85">n</a></td><td class="diff_header"  
id="from55_577">577-</td><td nowrap="nowrap"><span  
class="diff_sub">As&nbsp;web&nbsp;sites&nbsp;can&nbsp;easily&nbsp;become&nbsp;quite&nbsp;large,&nbsp;there&nbsp;are&nbsp;so-called&nbsp;frameworks&nbsp;which</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__85">n</a></td><td  
class="diff_header" id="to55_608">608+</td><td nowrap="nowrap"><span  
class="diff_add">The&nbsp;process&nbsp;of&nbsp;creating&nbsp;code&nbsp;to&nbsp;run&nbsp;web&nbsp;sites&nbsp;involves&nbsp;writing&nbsp;code&nbsp;to&nbsp;provide</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__85"></td><td  
class="diff_header" id="from55_578">578-</td><td nowrap="nowrap"><span  
class="diff_sub">were&nbsp;created&nbsp;to&nbsp;help&nbsp;the&nbsp;developer&nbsp;with&nbsp;making&nbsp;these&nbsp;sites.&nbsp;&nbsp;Although&nbsp;the&nbsp;most</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__85"></td><td  
class="diff_header" id="to55_609">609+</td><td nowrap="nowrap"><span  
class="diff_add">various&nbsp;services.&nbsp;&nbsp;The&nbsp;code&nbsp;to&nbsp;provide&nbsp;a&nbsp;particular&nbsp;service&nbsp;often&nbsp;works&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_579">579-</td><td nowrap="nowrap"><span  
class="diff_sub">well-known&nbsp;framework&nbsp;is&nbsp;Ruby&nbsp;on&nbsp;Rails,&nbsp;Python&nbsp;does&nbsp;also&nbsp;have&nbsp;its&nbsp;own&nbsp;frameworks</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_610">610+</td><td nowrap="nowrap"><span  
class="diff_add">same&nbsp;way&nbsp;regardless&nbsp;of&nbsp;the&nbsp;complexity&nbsp;or&nbsp;purpose&nbsp;of&nbsp;the&nbsp;web&nbsp;site&nbsp;in&nbsp;question.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_580">580-</td><td nowrap="nowrap"><span  
class="diff_sub">which&nbsp;are&nbsp;partly&nbsp;inspired&nbsp;by&nbsp;Rails&nbsp;or&nbsp;which&nbsp;were&nbsp;existing&nbsp;a&nbsp;long&nbsp;time&nbsp;before</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_611">611+</td><td nowrap="nowrap"><span  
class="diff_add">Abstracting&nbsp;these&nbsp;common&nbsp;solutions&nbsp;into&nbsp;reusable&nbsp;code&nbsp;produces&nbsp;what&nbsp;are&nbsp;called</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_581">581-</td><td nowrap="nowrap"><span  
class="diff_sub">Rails.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_612">612+</td><td nowrap="nowrap"><span  
class="diff_add">"frameworks"&nbsp;for&nbsp;web&nbsp;development.&nbsp;&nbsp;Perhaps&nbsp;the&nbsp;most&nbsp;well-known&nbsp;framework&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_613">613+</td><td nowrap="nowrap"><span  
class="diff_add">web&nbsp;development&nbsp;is&nbsp;Ruby&nbsp;on&nbsp;Rails,&nbsp;but&nbsp;Python&nbsp;has&nbsp;its&nbsp;own&nbsp;frameworks.&nbsp;&nbsp;Some&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_614">614+</td><td nowrap="nowrap"><span  
class="diff_add">these&nbsp;were&nbsp;partly&nbsp;inspired&nbsp;by&nbsp;Rails,&nbsp;or&nbsp;borrowed&nbsp;ideas&nbsp;from&nbsp;Rails,&nbsp;but&nbsp;many</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_615">615+</td><td nowrap="nowrap"><span  
class="diff_add">existed&nbsp;a&nbsp;long&nbsp;time&nbsp;before&nbsp;Rails.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_582">582</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__86">n</a></td><td  
class="diff_header" id="from55_583">583-</td><td nowrap="nowrap"><span  
class="diff_sub">Two&nbsp;possible&nbsp;approaches&nbsp;to&nbsp;web&nbsp;frameworks&nbsp;exist:&nbsp;the&nbsp;minimalistic&nbsp;approach&nbsp;and</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__86">n</a></td><td  
class="diff_header" id="to55_617">617+</td><td nowrap="nowrap"><span  
class="diff_add">Originally&nbsp;Python&nbsp;web&nbsp;frameworks&nbsp;tended&nbsp;to&nbsp;incorporate&nbsp;all&nbsp;of&nbsp;the&nbsp;services</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_584">584-</td><td nowrap="nowrap"><span  
class="diff_sub">the&nbsp;all-inclusive&nbsp;approach&nbsp;(somtimes&nbsp;called&nbsp;*full-stack*).&nbsp;Frameworks&nbsp;which&nbsp;are</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_618">618+</td><td nowrap="nowrap"><span  
class="diff_add">needed&nbsp;to&nbsp;develop&nbsp;web&nbsp;sites&nbsp;as&nbsp;a&nbsp;giant,&nbsp;integrated&nbsp;set&nbsp;of&nbsp;tools.&nbsp;&nbsp;No&nbsp;two&nbsp;web</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_585">585-</td><td nowrap="nowrap"><span  
class="diff_sub">all-inclusive&nbsp;give&nbsp;you&nbsp;everything&nbsp;you&nbsp;need&nbsp;to&nbsp;start&nbsp;working,&nbsp;like&nbsp;a&nbsp;template</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_619">619+</td><td nowrap="nowrap"><span  
class="diff_add">frameworks&nbsp;were&nbsp;interoperable:&nbsp;&nbsp;a&nbsp;program&nbsp;developed&nbsp;for&nbsp;one&nbsp;could&nbsp;not&nbsp;be</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__86"></td><td  
class="diff_header" id="from55_586">586-</td><td nowrap="nowrap"><span  
class="diff_sub">engine,&nbsp;some&nbsp;way&nbsp;to&nbsp;save&nbsp;and&nbsp;access&nbsp;data&nbsp;in&nbsp;databases&nbsp;and&nbsp;many&nbsp;features&nbsp;more.</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__86"></td><td  
class="diff_header" id="to55_620">620+</td><td nowrap="nowrap"><span  
class="diff_add">deployed&nbsp;on&nbsp;a&nbsp;different&nbsp;one&nbsp;without&nbsp;considerable&nbsp;re-engineering&nbsp;work.&nbsp;&nbsp;This&nbsp;led</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_587">587-</td><td nowrap="nowrap"><span  
class="diff_sub">Most&nbsp;users&nbsp;are&nbsp;best&nbsp;off&nbsp;using&nbsp;these&nbsp;as&nbsp;they&nbsp;are&nbsp;widely&nbsp;used&nbsp;by&nbsp;lots&nbsp;of&nbsp;other</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_621">621+</td><td nowrap="nowrap"><span  
class="diff_add">to&nbsp;the&nbsp;development&nbsp;of&nbsp;"minimalist"&nbsp;web&nbsp;frameworks&nbsp;that&nbsp;provided&nbsp;just&nbsp;the&nbsp;tools</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_588">588-</td><td nowrap="nowrap"><span  
class="diff_sub">users&nbsp;and&nbsp;well&nbsp;documented&nbsp;in&nbsp;form&nbsp;of&nbsp;books&nbsp;and&nbsp;tutorials.&nbsp;&nbsp;Other&nbsp;web&nbsp;frameworks</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_622">622+</td><td nowrap="nowrap"><span  
class="diff_add">to&nbsp;communicate&nbsp;between&nbsp;the&nbsp;Python&nbsp;code&nbsp;and&nbsp;the&nbsp;http&nbsp;protocol,&nbsp;with&nbsp;all&nbsp;other</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_589">589-</td><td nowrap="nowrap"><span  
class="diff_sub">go&nbsp;the&nbsp;minimalistic&nbsp;approach&nbsp;trying&nbsp;to&nbsp;be&nbsp;as&nbsp;flexible&nbsp;as&nbsp;possible&nbsp;leaving&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_623">623+</td><td nowrap="nowrap"><span  
class="diff_add">services&nbsp;to&nbsp;be&nbsp;added&nbsp;on&nbsp;top&nbsp;via&nbsp;separate&nbsp;components.&nbsp;&nbsp;Some&nbsp;ad&nbsp;hoc&nbsp;standards</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_590">590-</td><td nowrap="nowrap"><span  
class="diff_sub">user&nbsp;the&nbsp;freedom&nbsp;to&nbsp;choose&nbsp;what's&nbsp;best&nbsp;for&nbsp;him.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_624">624+</td><td nowrap="nowrap"><span  
class="diff_add">were&nbsp;developed&nbsp;that&nbsp;allowed&nbsp;for&nbsp;limited&nbsp;interoperability&nbsp;between&nbsp;frameworks,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_625">625+</td><td nowrap="nowrap"><span  
class="diff_add">such&nbsp;as&nbsp;a&nbsp;standard&nbsp;that&nbsp;allowed&nbsp;different&nbsp;template&nbsp;engines&nbsp;to&nbsp;be&nbsp;used</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_626">626+</td><td nowrap="nowrap"><span  
class="diff_add">interchangeably.</span></td></tr>
+            <tr><td class="diff_next" id="difflib_chg_to55__87"></td><td  
class="diff_header" id="from55_591">591</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__87">n</a></td><td class="diff_header"  
id="from55_592">592-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;majority&nbsp;of&nbsp;users&nbsp;is&nbsp;best&nbsp;off&nbsp;with&nbsp;all-inclusive&nbsp;framewors.&nbsp;&nbsp;They&nbsp;bring</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__87">n</a></td><td  
class="diff_header" id="to55_628">628+</td><td nowrap="nowrap"><span  
class="diff_add">Since&nbsp;the&nbsp;advent&nbsp;of&nbsp;WSGI,&nbsp;the&nbsp;Python&nbsp;web&nbsp;framework&nbsp;world&nbsp;has&nbsp;been&nbsp;evolving</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_593">593-</td><td nowrap="nowrap"><span  
class="diff_sub">everything&nbsp;along&nbsp;so&nbsp;a&nbsp;user&nbsp;can&nbsp;just&nbsp;jump&nbsp;in&nbsp;and&nbsp;start&nbsp;to&nbsp;code.&nbsp;&nbsp;While&nbsp;they&nbsp;do</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_629">629+</td><td nowrap="nowrap"><span  
class="diff_add">toward&nbsp;interoperability&nbsp;based&nbsp;on&nbsp;the&nbsp;WSGI&nbsp;standard.&nbsp;&nbsp;Now&nbsp;many&nbsp;web&nbsp;frameworks,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_594">594-</td><td nowrap="nowrap"><span  
class="diff_sub">have&nbsp;some&nbsp;limitations&nbsp;they&nbsp;can&nbsp;fullfill&nbsp;80%&nbsp;of&nbsp;what&nbsp;one&nbsp;will&nbsp;ever&nbsp;want&nbsp;to</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_630">630+</td><td nowrap="nowrap"><span  
class="diff_add">whether&nbsp;"full&nbsp;stack"&nbsp;(providing&nbsp;all&nbsp;the&nbsp;tools&nbsp;one&nbsp;needs&nbsp;to&nbsp;deploy&nbsp;the&nbsp;most</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_595">595-</td><td nowrap="nowrap"><span  
class="diff_sub">perfectly.&nbsp;&nbsp;They&nbsp;consist&nbsp;of&nbsp;various&nbsp;components&nbsp;which&nbsp;are&nbsp;designed&nbsp;to&nbsp;work</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_631">631+</td><td nowrap="nowrap"><span  
class="diff_add">complex&nbsp;web&nbsp;sites)&nbsp;or&nbsp;minimalist,&nbsp;or&nbsp;anything&nbsp;in&nbsp;between,&nbsp;are&nbsp;built&nbsp;from</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_596">596-</td><td nowrap="nowrap"><span  
class="diff_sub">together&nbsp;as&nbsp;good&nbsp;as&nbsp;possible.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_632">632+</td><td nowrap="nowrap"><span  
class="diff_add">collections&nbsp;of&nbsp;reusable&nbsp;components&nbsp;that&nbsp;can&nbsp;be&nbsp;used&nbsp;with&nbsp;more&nbsp;than&nbsp;one</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_633">633+</td><td nowrap="nowrap"><span  
class="diff_add">framework.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_597">597</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__88">n</a></td><td  
class="diff_header" id="from55_598">598-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;multitude&nbsp;of&nbsp;web&nbsp;frameworks&nbsp;written&nbsp;in&nbsp;Python&nbsp;demonstrates&nbsp;that&nbsp;it&nbsp;is&nbsp;really</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__88">n</a></td><td  
class="diff_header" id="to55_635">635+</td><td nowrap="nowrap"><span  
class="diff_add">The&nbsp;majority&nbsp;of&nbsp;users&nbsp;will&nbsp;probably&nbsp;want&nbsp;to&nbsp;select&nbsp;a&nbsp;"full&nbsp;stack"&nbsp;framework</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_599">599-</td><td nowrap="nowrap"><span  
class="diff_sub">easy&nbsp;to&nbsp;write&nbsp;one.&nbsp;&nbsp;One&nbsp;of&nbsp;the&nbsp;most&nbsp;well-known&nbsp;web&nbsp;applications&nbsp;written&nbsp;in</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_636">636+</td><td nowrap="nowrap"><span  
class="diff_add">that&nbsp;has&nbsp;an&nbsp;active&nbsp;community.&nbsp;&nbsp;These&nbsp;frameworks&nbsp;tend&nbsp;to&nbsp;be&nbsp;well&nbsp;documented,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_600">600-</td><td nowrap="nowrap"><span  
class="diff_sub">Python&nbsp;is&nbsp;`Zope&nbsp;&lt;http://www.zope.org/&gt;`_&nbsp;which&nbsp;can&nbsp;be&nbsp;regarded&nbsp;as&nbsp;some&nbsp;kind&nbsp;of</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_637">637+</td><td nowrap="nowrap"><span  
class="diff_add">and&nbsp;provide&nbsp;the&nbsp;easiest&nbsp;path&nbsp;to&nbsp;producing&nbsp;a&nbsp;fully&nbsp;functional&nbsp;web&nbsp;site&nbsp;in</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__88"></td><td  
class="diff_header" id="from55_601">601-</td><td nowrap="nowrap"><span  
class="diff_sub">big&nbsp;framework.&nbsp;&nbsp;But&nbsp;Zope&nbsp;was&nbsp;not&nbsp;the&nbsp;only&nbsp;framework,&nbsp;there&nbsp;were&nbsp;some&nbsp;others</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__88"></td><td  
class="diff_header" id="to55_638">638+</td><td nowrap="nowrap"><span  
class="diff_add">minimal&nbsp;time.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_602">602-</td><td nowrap="nowrap"><span  
class="diff_sub">which&nbsp;are&nbsp;by&nbsp;now&nbsp;nearly&nbsp;forgotten.&nbsp;&nbsp;These&nbsp;do&nbsp;not&nbsp;need&nbsp;to&nbsp;be&nbsp;mentioned&nbsp;anymore,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_603">603-</td><td nowrap="nowrap"><span  
class="diff_sub">because&nbsp;most&nbsp;people&nbsp;that&nbsp;used&nbsp;them&nbsp;moved&nbsp;on&nbsp;to&nbsp;newer&nbsp;ones.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_604">604</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_605">605</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_606">606</td><td  
nowrap="nowrap">Some&nbsp;notable&nbsp;frameworks</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_607">607</td><td  
nowrap="nowrap">-----------------------</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_608">608</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__89">n</a></td><td class="diff_header"  
id="from55_609">609-</td><td nowrap="nowrap"><span  
class="diff_sub">There&nbsp;is&nbsp;an&nbsp;incredible&nbsp;number&nbsp;of&nbsp;frameworks,&nbsp;so&nbsp;there&nbsp;is&nbsp;no&nbsp;way&nbsp;to&nbsp;describe&nbsp;them</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__89">n</a></td><td  
class="diff_header" id="to55_644">644+</td><td nowrap="nowrap"><span  
class="diff_add">There&nbsp;are&nbsp;an&nbsp;incredible&nbsp;number&nbsp;of&nbsp;frameworks,&nbsp;so&nbsp;they&nbsp;cannot&nbsp;all&nbsp;be&nbsp;covered</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_610">610-</td><td nowrap="nowrap"><span  
class="diff_sub">all.&nbsp;&nbsp;It&nbsp;is&nbsp;not&nbsp;even&nbsp;neccessary,&nbsp;as&nbsp;most&nbsp;of&nbsp;these&nbsp;frameworks&nbsp;are&nbsp;nothing&nbsp;special</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_645">645+</td><td nowrap="nowrap"><span  
class="diff_add">here.&nbsp;&nbsp;Instead&nbsp;we&nbsp;will&nbsp;briefly&nbsp;touch&nbsp;on&nbsp;some&nbsp;of&nbsp;the&nbsp;most&nbsp;popular.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_611">611-</td><td nowrap="nowrap"><span  
class="diff_sub">and&nbsp;everything&nbsp;that&nbsp;can&nbsp;be&nbsp;done&nbsp;with&nbsp;these&nbsp;can&nbsp;also&nbsp;be&nbsp;done&nbsp;with&nbsp;one&nbsp;of&nbsp;the</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__89"></td><td  
class="diff_header" id="from55_612">612-</td><td nowrap="nowrap"><span  
class="diff_sub">popular&nbsp;ones.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_613">613</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_614">614</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_615">615</td><td  
nowrap="nowrap">Django</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_616">616</td><td  
nowrap="nowrap">^^^^^^</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_617">617</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_618">618</td><td  
nowrap="nowrap">`Django&nbsp;&lt;http://www.djangoproject.com/&gt;`_&nbsp;is&nbsp;a&nbsp;framework&nbsp;consisting&nbsp;of&nbsp;several</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_619">619</td><td  
nowrap="nowrap">tightly&nbsp;coupled&nbsp;elements&nbsp;which&nbsp;were&nbsp;written&nbsp;from&nbsp;scratch&nbsp;and&nbsp;work&nbsp;together&nbsp;very</td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__90"><a  
href="#difflib_chg_to55__90">n</a></td><td class="diff_header"  
id="from55_620">620-</td><td  
nowrap="nowrap">well.&nbsp;&nbsp;It&nbsp;includes&nbsp;an&nbsp;ORM&nbsp;which&nbsp;is&nbsp;quite&nbsp;powerful&nbsp;while&nbsp;being&nbsp;simple&nbsp;to&nbsp;use<span  
class="diff_chg">&nbsp;and</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__90"><a  
href="#difflib_chg_to55__90">n</a></td><td class="diff_header"  
id="to55_653">653+</td><td  
nowrap="nowrap">well.&nbsp;&nbsp;It&nbsp;includes&nbsp;an&nbsp;ORM&nbsp;which&nbsp;is&nbsp;quite&nbsp;powerful&nbsp;while&nbsp;being&nbsp;simple&nbsp;to&nbsp;use<span  
class="diff_chg">,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_621">621-</td><td  
nowrap="nowrap">has&nbsp;a&nbsp;great&nbsp;online&nbsp;administration&nbsp;interface&nbsp;which&nbsp;makes&nbsp;it&nbsp;possible&nbsp;to&nbsp;edit<span  
class="diff_sub">&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_654">654+</td><td nowrap="nowrap"><span  
class="diff_add">and&nbsp;</span>has&nbsp;a&nbsp;great&nbsp;online&nbsp;administration&nbsp;interface&nbsp;which&nbsp;makes&nbsp;it&nbsp;possible&nbsp;to&nbsp;edit</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_622">622-</td><td  
nowrap="nowrap">data&nbsp;in&nbsp;the&nbsp;database&nbsp;with&nbsp;a&nbsp;browser.&nbsp;&nbsp;The&nbsp;template&nbsp;engine&nbsp;is&nbsp;text-based&nbsp;and<span  
class="diff_sub">&nbsp;is</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_655">655+</td><td nowrap="nowrap"><span  
class="diff_add">the&nbsp;</span>data&nbsp;in&nbsp;the&nbsp;database&nbsp;with&nbsp;a&nbsp;browser.&nbsp;&nbsp;The&nbsp;template&nbsp;engine&nbsp;is&nbsp;text-based&nbsp;and</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__91"></td><td  
class="diff_header" id="from55_623">623-</td><td  
nowrap="nowrap">designed&nbsp;to&nbsp;be&nbsp;usable&nbsp;for&nbsp;page&nbsp;designers&nbsp;who&nbsp;cannot&nbsp;write&nbsp;Python.&nbsp;&nbsp;It<span  
class="diff_sub">&nbsp;supports</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__91"></td><td  
class="diff_header" id="to55_656">656+</td><td nowrap="nowrap"><span  
class="diff_add">is&nbsp;</span>designed&nbsp;to&nbsp;be&nbsp;usable&nbsp;for&nbsp;page&nbsp;designers&nbsp;who&nbsp;cannot&nbsp;write&nbsp;Python.&nbsp;&nbsp;It</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_624">624-</td><td nowrap="nowrap">so<span  
class="diff_chg">-called</span>&nbsp;template&nbsp;inheritance&nbsp;and&nbsp;filters&nbsp;(which&nbsp;work&nbsp;like&nbsp;Unix&nbsp;pipes).&nbsp;&nbsp;Django</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_657">657+</td><td nowrap="nowrap">s<span  
class="diff_add">upp</span>o<span  
class="diff_chg">rts</span>&nbsp;template&nbsp;inheritance&nbsp;and&nbsp;filters&nbsp;(which&nbsp;work&nbsp;like&nbsp;Unix&nbsp;pipes).&nbsp;&nbsp;Django</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_625">625-</td><td  
nowrap="nowrap">has&nbsp;many&nbsp;handy&nbsp;features&nbsp;bundled,&nbsp;<span  
class="diff_chg">like</span>&nbsp;creation&nbsp;of&nbsp;RSS&nbsp;feeds&nbsp;or&nbsp;generic&nbsp;views</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_658">658+</td><td  
nowrap="nowrap">has&nbsp;many&nbsp;handy&nbsp;features&nbsp;bundled,&nbsp;<span  
class="diff_chg">such&nbsp;as</span>&nbsp;creation&nbsp;of&nbsp;RSS&nbsp;feeds&nbsp;or&nbsp;generic&nbsp;views<span  
class="diff_add">,</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_626">626-</td><td  
nowrap="nowrap">which&nbsp;make&nbsp;it&nbsp;possible&nbsp;to&nbsp;<span  
class="diff_chg">w</span>r<span  
class="diff_chg">i</span>te&nbsp;web&nbsp;sites&nbsp;<span  
class="diff_sub">ne</span>a<span class="diff_sub">r</span>l<span  
class="diff_chg">y</span>&nbsp;without&nbsp;any&nbsp;Python&nbsp;code.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_659">659+</td><td  
nowrap="nowrap">which&nbsp;make&nbsp;it&nbsp;possible&nbsp;to&nbsp;<span  
class="diff_chg">c</span>r<span  
class="diff_chg">ea</span>te&nbsp;web&nbsp;sites&nbsp;al<span  
class="diff_chg">most</span>&nbsp;without&nbsp;<span  
class="diff_add">writing&nbsp;</span>any&nbsp;Python&nbsp;code.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_627">627</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__91">n</a></td><td  
class="diff_header" id="from55_628">628-</td><td  
nowrap="nowrap">It&nbsp;has&nbsp;a&nbsp;big,&nbsp;international&nbsp;community&nbsp;which&nbsp;ha<span  
class="diff_chg">s</span>&nbsp;created&nbsp;many<span  
class="diff_sub">&nbsp;sites&nbsp;using&nbsp;Django.</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__91">n</a></td><td  
class="diff_header" id="to55_661">661+</td><td  
nowrap="nowrap">It&nbsp;has&nbsp;a&nbsp;big,&nbsp;international&nbsp;community<span  
class="diff_add">,&nbsp;the&nbsp;members&nbsp;of</span>&nbsp;which&nbsp;ha<span  
class="diff_chg">ve</span>&nbsp;created&nbsp;many</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__92"></td><td  
class="diff_header" id="from55_629">629-</td><td  
nowrap="nowrap">There&nbsp;are&nbsp;also&nbsp;<span  
class="diff_sub">quite&nbsp;</span>a&nbsp;lot&nbsp;of&nbsp;add-on&nbsp;projects&nbsp;which&nbsp;extend&nbsp;Django's&nbsp;normal</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__92"></td><td  
class="diff_header" id="to55_662">662+</td><td nowrap="nowrap"><span  
class="diff_add">web&nbsp;sites.&nbsp;&nbsp;</span>There&nbsp;are&nbsp;also&nbsp;a&nbsp;lot&nbsp;of&nbsp;add-on&nbsp;projects&nbsp;which&nbsp;extend&nbsp;Django's&nbsp;normal</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_630">630</td><td  
nowrap="nowrap">functionality.&nbsp;&nbsp;This&nbsp;is&nbsp;partly&nbsp;due&nbsp;to&nbsp;Django's&nbsp;well&nbsp;written&nbsp;`online</td></tr><tr><td  
class="diff_next" id="difflib_chg_to55__93"><a  
href="#difflib_chg_to55__92">n</a></td><td class="diff_header"  
id="from55_631">631-</td><td  
nowrap="nowrap">documentation&nbsp;&lt;http://doc.djangoproject.com/&gt;`_&nbsp;and&nbsp;the&nbsp;`Django&nbsp;book</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__93"><a  
href="#difflib_chg_to55__92">n</a></td><td class="diff_header"  
id="to55_664">664+</td><td  
nowrap="nowrap">documentation&nbsp;&lt;http://doc<span  
class="diff_add">s</span>.djangoproject.com/&gt;`_&nbsp;and&nbsp;the&nbsp;`Django&nbsp;book</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_632">632</td><td  
nowrap="nowrap">&lt;http://www.djangobook.com/&gt;`_.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_633">633</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_634">634</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_635">635</td><td  
nowrap="nowrap">..&nbsp;note::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_636">636</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"  
id="difflib_chg_to55__94"><a href="#difflib_chg_to55__93">n</a></td><td  
class="diff_header" id="from55_637">637-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Although&nbsp;Django&nbsp;is&nbsp;an&nbsp;MVC-style&nbsp;framework,&nbsp;it&nbsp;<span  
class="diff_chg">c</span>a<span  
class="diff_chg">ll</span>s&nbsp;the&nbsp;<span  
class="diff_chg">co</span>m<span class="diff_sub">pon</span>ents</td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__94"><a  
href="#difflib_chg_to55__93">n</a></td><td class="diff_header"  
id="to55_670">670+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Although&nbsp;Django&nbsp;is&nbsp;an&nbsp;MVC-style&nbsp;framework,&nbsp;it&nbsp;<span  
class="diff_chg">n</span>a<span  
class="diff_chg">me</span>s&nbsp;the&nbsp;<span  
class="diff_chg">ele</span>ments</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_638">638</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;differently,&nbsp;which&nbsp;is&nbsp;described&nbsp;in&nbsp;the&nbsp;`Django&nbsp;FAQ</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__94">n</a></td><td  
class="diff_header" id="from55_639">639-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://<span  
class="diff_chg">www</span>.djangoproject.com/<span  
class="diff_sub">docum</span>en<span  
class="diff_chg">tation</span>/faq/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names&gt;`_.</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__94">n</a></td><td  
class="diff_header" id="to55_672">672+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://<span  
class="diff_chg">docs</span>.djangoproject.com/en<span  
class="diff_chg">/dev</span>/faq<span  
class="diff_add">/general</span>/#django-appears-to-be-a-mvc-framework-but-you-call-the-controller-the-view-and-the-view-the-template-how-come-you-don-t-use-the-standard-names&gt;`_.</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_640">640</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_641">641</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_642">642</td><td  
nowrap="nowrap">TurboGears</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_643">643</td><td  
nowrap="nowrap">^^^^^^^^^^</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_644">644</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__95">n</a></td><td class="diff_header"  
id="from55_645">645-</td><td nowrap="nowrap"><span  
class="diff_chg">The&nbsp;</span>other&nbsp;popular&nbsp;web&nbsp;framework&nbsp;<span  
class="diff_chg">in</span>&nbsp;Python&nbsp;is&nbsp;`TurboGears</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__95">n</a></td><td  
class="diff_header" id="to55_678">678+</td><td nowrap="nowrap"><span  
class="diff_chg">An</span>other&nbsp;popular&nbsp;web&nbsp;framework&nbsp;<span  
class="diff_chg">for</span>&nbsp;Python&nbsp;is&nbsp;`TurboGears</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_646">646-</td><td  
nowrap="nowrap">&lt;http://www.turbogears.org/&gt;`_.&nbsp;&nbsp;<span  
class="diff_chg">It</span>&nbsp;takes&nbsp;the&nbsp;approach&nbsp;of&nbsp;using&nbsp;already<span  
class="diff_sub">&nbsp;existing</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_679">679+</td><td  
nowrap="nowrap">&lt;http://www.turbogears.org/&gt;`_.&nbsp;&nbsp;<span  
class="diff_chg">TurboGears</span>&nbsp;takes&nbsp;the&nbsp;approach&nbsp;of&nbsp;using&nbsp;already</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_647">647-</td><td  
nowrap="nowrap">components&nbsp;and&nbsp;combining&nbsp;them&nbsp;with&nbsp;glue&nbsp;code&nbsp;to&nbsp;create&nbsp;a&nbsp;seamless<span  
class="diff_sub">&nbsp;experience.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_680">680+</td><td nowrap="nowrap"><span  
class="diff_add">existing&nbsp;</span>components&nbsp;and&nbsp;combining&nbsp;them&nbsp;with&nbsp;glue&nbsp;code&nbsp;to&nbsp;create&nbsp;a&nbsp;seamless</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_648">648-</td><td nowrap="nowrap"><span  
class="diff_sub">TurboGears&nbsp;gives&nbsp;the&nbsp;user&nbsp;more&nbsp;flexibility&nbsp;on&nbsp;which&nbsp;components&nbsp;to&nbsp;choose,&nbsp;the</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_681">681+</td><td nowrap="nowrap"><span  
class="diff_add">experience.&nbsp;&nbsp;TurboGears&nbsp;gives&nbsp;the&nbsp;user&nbsp;flexibility&nbsp;in&nbsp;choosing&nbsp;components.&nbsp;For</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_649">649-</td><td nowrap="nowrap"><span  
class="diff_sub">ORM&nbsp;can&nbsp;be&nbsp;switched&nbsp;between&nbsp;some&nbsp;easy&nbsp;to&nbsp;use&nbsp;but&nbsp;limited&nbsp;and&nbsp;complex&nbsp;but&nbsp;very</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_682">682+</td><td nowrap="nowrap"><span  
class="diff_add">example&nbsp;the&nbsp;ORM&nbsp;and&nbsp;template&nbsp;engine&nbsp;can&nbsp;be&nbsp;changed&nbsp;to&nbsp;use&nbsp;packages&nbsp;different</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_650">650-</td><td nowrap="nowrap"><span  
class="diff_sub">powerful.&nbsp;&nbsp;Same&nbsp;goes&nbsp;for&nbsp;the&nbsp;template&nbsp;engine.&nbsp;&nbsp;One&nbsp;strong&nbsp;point&nbsp;about&nbsp;TurboGears</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_683">683+</td><td nowrap="nowrap"><span  
class="diff_add">from&nbsp;those&nbsp;used&nbsp;by&nbsp;default.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_651">651-</td><td nowrap="nowrap"><span  
class="diff_sub">is&nbsp;that&nbsp;the&nbsp;components&nbsp;that&nbsp;it&nbsp;consists&nbsp;of&nbsp;can&nbsp;be&nbsp;used&nbsp;easily&nbsp;in&nbsp;other&nbsp;projects</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__95"></td><td  
class="diff_header" id="from55_652">652-</td><td nowrap="nowrap"><span  
class="diff_sub">without&nbsp;depending&nbsp;on&nbsp;TurboGears,&nbsp;for&nbsp;example&nbsp;the&nbsp;underlying&nbsp;web&nbsp;server&nbsp;CherryPy.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_653">653</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_654">654</td><td  
nowrap="nowrap">The&nbsp;documentation&nbsp;can&nbsp;be&nbsp;found&nbsp;in&nbsp;the&nbsp;`TurboGears&nbsp;wiki</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_655">655</td><td  
nowrap="nowrap">&lt;http://docs.turbogears.org/&gt;`_,&nbsp;where&nbsp;links&nbsp;to&nbsp;screencasts&nbsp;can&nbsp;be&nbsp;found.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_656">656</td><td  
nowrap="nowrap">TurboGears&nbsp;has&nbsp;also&nbsp;an&nbsp;active&nbsp;user&nbsp;community&nbsp;which&nbsp;can&nbsp;respond&nbsp;to&nbsp;most&nbsp;related</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_657">657</td><td  
nowrap="nowrap">questions.&nbsp;&nbsp;There&nbsp;is&nbsp;also&nbsp;a&nbsp;`TurboGears&nbsp;book&nbsp;&lt;http://turbogearsbook.com/&gt;`_</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_658">658</td><td  
nowrap="nowrap">published,&nbsp;which&nbsp;is&nbsp;a&nbsp;good&nbsp;starting&nbsp;point.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_659">659</td><td nowrap="nowrap"></td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__96">n</a></td><td  
class="diff_header" id="from55_660">660-</td><td nowrap="nowrap"><span  
class="diff_sub">The&nbsp;plan&nbsp;for&nbsp;the&nbsp;next&nbsp;major&nbsp;version&nbsp;of&nbsp;TurboGears,&nbsp;version&nbsp;2.0&nbsp;is&nbsp;to&nbsp;switch&nbsp;to&nbsp;a</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__96">n</a></td><td  
class="diff_header" id="to55_691">691+</td><td nowrap="nowrap"><span  
class="diff_add">The&nbsp;newest&nbsp;version&nbsp;of&nbsp;TurboGears,&nbsp;version&nbsp;2.0,&nbsp;moves&nbsp;even&nbsp;further&nbsp;in&nbsp;direction</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_661">661-</td><td nowrap="nowrap"><span  
class="diff_sub">more&nbsp;flexible&nbsp;base&nbsp;provided&nbsp;by&nbsp;another&nbsp;very&nbsp;flexible&nbsp;web&nbsp;framework&nbsp;called</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_692">692+</td><td nowrap="nowrap"><span  
class="diff_add">of&nbsp;WSGI&nbsp;support&nbsp;and&nbsp;a&nbsp;component-based&nbsp;architecture.&nbsp;&nbsp;TurboGears&nbsp;2&nbsp;is&nbsp;based&nbsp;on</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_693">693+</td><td nowrap="nowrap"><span  
class="diff_add">the&nbsp;WSGI&nbsp;stack&nbsp;of&nbsp;another&nbsp;popular&nbsp;component-based&nbsp;web&nbsp;framework,&nbsp;`Pylons</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_662">662-</td><td nowrap="nowrap"><span  
class="diff_sub">`Pylons&nbsp;</span>&lt;http://pylonshq.com/&gt;`_.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_694">694+</td><td  
nowrap="nowrap">&lt;http://pylonshq.com/&gt;`_.</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_695">695+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_696">696+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_697">697+</td><td nowrap="nowrap"><span  
class="diff_add">Zope</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_698">698+</td><td nowrap="nowrap"><span  
class="diff_add">^^^^</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_699">699+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_700">700+</td><td nowrap="nowrap"><span  
class="diff_add">The&nbsp;Zope&nbsp;framework&nbsp;is&nbsp;one&nbsp;of&nbsp;the&nbsp;"old&nbsp;original"&nbsp;frameworks.&nbsp;&nbsp;Its&nbsp;current</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_701">701+</td><td nowrap="nowrap"><span  
class="diff_add">incarnation&nbsp;in&nbsp;Zope2&nbsp;is&nbsp;a&nbsp;tightly&nbsp;integrated&nbsp;full-stack&nbsp;framework.&nbsp;&nbsp;One&nbsp;of&nbsp;its</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_702">702+</td><td nowrap="nowrap"><span  
class="diff_add">most&nbsp;interesting&nbsp;feature&nbsp;is&nbsp;its&nbsp;tight&nbsp;integration&nbsp;with&nbsp;a&nbsp;powerful&nbsp;object</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_703">703+</td><td nowrap="nowrap"><span  
class="diff_add">database&nbsp;called&nbsp;the&nbsp;`ZODB&nbsp;&lt;https://launchpad.net/zodb&gt;`_&nbsp;(Zope&nbsp;Object&nbsp;Database).</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_704">704+</td><td nowrap="nowrap"><span  
class="diff_add">Because&nbsp;of&nbsp;its&nbsp;highly&nbsp;integrated&nbsp;nature,&nbsp;Zope&nbsp;wound&nbsp;up&nbsp;in&nbsp;a&nbsp;somewhat&nbsp;isolated</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_705">705+</td><td nowrap="nowrap"><span  
class="diff_add">ecosystem:&nbsp;&nbsp;code&nbsp;written&nbsp;for&nbsp;Zope&nbsp;wasn't&nbsp;very&nbsp;usable&nbsp;outside&nbsp;of&nbsp;Zope,&nbsp;and</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_706">706+</td><td nowrap="nowrap"><span  
class="diff_add">vice-versa.&nbsp;&nbsp;To&nbsp;solve&nbsp;this&nbsp;problem&nbsp;the&nbsp;Zope&nbsp;3&nbsp;effort&nbsp;was&nbsp;started.&nbsp;&nbsp;Zope&nbsp;3</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_707">707+</td><td nowrap="nowrap"><span  
class="diff_add">re-engineers&nbsp;Zope&nbsp;as&nbsp;a&nbsp;set&nbsp;of&nbsp;more&nbsp;cleanly&nbsp;isolated&nbsp;components.&nbsp;&nbsp;This&nbsp;effort</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_708">708+</td><td nowrap="nowrap"><span  
class="diff_add">was&nbsp;started&nbsp;before&nbsp;the&nbsp;advent&nbsp;of&nbsp;the&nbsp;WSGI&nbsp;standard,&nbsp;but&nbsp;there&nbsp;is&nbsp;WSGI&nbsp;support</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_709">709+</td><td nowrap="nowrap"><span  
class="diff_add">for&nbsp;Zope&nbsp;3&nbsp;from&nbsp;the&nbsp;`Repoze&nbsp;&lt;http://repoze.org/&gt;`_&nbsp;project.&nbsp;&nbsp;Zope&nbsp;components</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_710">710+</td><td nowrap="nowrap"><span  
class="diff_add">have&nbsp;many&nbsp;years&nbsp;of&nbsp;production&nbsp;use&nbsp;behind&nbsp;them,&nbsp;and&nbsp;the&nbsp;Zope&nbsp;3&nbsp;project&nbsp;gives</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_711">711+</td><td nowrap="nowrap"><span  
class="diff_add">access&nbsp;to&nbsp;these&nbsp;components&nbsp;to&nbsp;the&nbsp;wider&nbsp;Python&nbsp;community.&nbsp;&nbsp;There&nbsp;is&nbsp;even&nbsp;a</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_712">712+</td><td nowrap="nowrap"><span  
class="diff_add">separate&nbsp;framework&nbsp;based&nbsp;on&nbsp;the&nbsp;Zope&nbsp;components:&nbsp;`Grok</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_713">713+</td><td nowrap="nowrap"><span  
class="diff_add">&lt;http://grok.zope.org/&gt;`_.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_714">714+</td><td nowrap="nowrap"><span  
class="diff_add">&nbsp;</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__96"></td><td  
class="diff_header" id="to55_715">715+</td><td nowrap="nowrap"><span  
class="diff_add">Zope&nbsp;is&nbsp;also&nbsp;the&nbsp;infrastructure&nbsp;used&nbsp;by&nbsp;the&nbsp;`Plone&nbsp;&lt;http://plone.org/&gt;`_&nbsp;content</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_716">716+</td><td nowrap="nowrap"><span  
class="diff_add">management&nbsp;system,&nbsp;one&nbsp;of&nbsp;the&nbsp;most&nbsp;powerful&nbsp;and&nbsp;popular&nbsp;content&nbsp;management</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_717">717+</td><td nowrap="nowrap"><span  
class="diff_add">systems&nbsp;available.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_663">663</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_664">664</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_665">665</td><td  
nowrap="nowrap">Other&nbsp;notable&nbsp;frameworks</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_666">666</td><td  
nowrap="nowrap">^^^^^^^^^^^^^^^^^^^^^^^^</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_667">667</td><td  
nowrap="nowrap"></td></tr><tr><td class="diff_next"><a  
href="#difflib_chg_to55__97">n</a></td><td class="diff_header"  
id="from55_668">668-</td><td nowrap="nowrap"><span  
class="diff_chg">These&nbsp;two&nbsp;are&nbsp;o</span>f&nbsp;course&nbsp;not&nbsp;the&nbsp;only&nbsp;frameworks&nbsp;that&nbsp;are&nbsp;available<span  
class="diff_chg">,&nbsp;t</span>here&nbsp;are</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__97">n</a></td><td  
class="diff_header" id="to55_723">723+</td><td nowrap="nowrap"><span  
class="diff_chg">O</span>f&nbsp;course&nbsp;<span  
class="diff_add">these&nbsp;are&nbsp;</span>not&nbsp;the&nbsp;only&nbsp;frameworks&nbsp;that&nbsp;are&nbsp;available<span  
class="diff_chg">.&nbsp;&nbsp;T</span>here&nbsp;are</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_669">669-</td><td nowrap="nowrap"><span  
class="diff_sub">also&nbsp;some&nbsp;less-popular&nbsp;frameworks&nbsp;worth&nbsp;mentioning.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_724">724+</td><td nowrap="nowrap"><span  
class="diff_add">many&nbsp;other&nbsp;frameworks&nbsp;worth&nbsp;mentioning.</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_670">670-</td><td nowrap="nowrap"><span  
class="diff_sub">&nbsp;</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_671">671-</td><td nowrap="nowrap"><span  
class="diff_sub">One&nbsp;of&nbsp;these&nbsp;is&nbsp;the&nbsp;already&nbsp;mentioned&nbsp;Zope,&nbsp;which&nbsp;has&nbsp;been&nbsp;around&nbsp;for&nbsp;quite&nbsp;a</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__97"></td><td  
class="diff_header" id="from55_672">672-</td><td nowrap="nowrap"><span  
class="diff_sub">long&nbsp;time.&nbsp;&nbsp;With&nbsp;Zope&nbsp;2.x&nbsp;having&nbsp;been&nbsp;known&nbsp;as&nbsp;rather&nbsp;un-pythonic,&nbsp;the&nbsp;newer</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_673">673-</td><td nowrap="nowrap"><span  
class="diff_sub">Zope&nbsp;3.x&nbsp;tries&nbsp;to&nbsp;change&nbsp;that&nbsp;and&nbsp;therefore&nbsp;gets&nbsp;more&nbsp;acceptance&nbsp;from&nbsp;Python</span></td></tr>
+<tr><td class="diff_next" id="difflib_chg_to55__98"></td><td  
class="diff_header" id="from55_674">674-</td><td nowrap="nowrap"><span  
class="diff_sub">programmers.&nbsp;&nbsp;These&nbsp;efforts&nbsp;already&nbsp;showed&nbsp;results,&nbsp;there&nbsp;is&nbsp;a&nbsp;project&nbsp;which</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_675">675-</td><td nowrap="nowrap"><span  
class="diff_sub">connects&nbsp;Zope&nbsp;with&nbsp;WSGI&nbsp;called&nbsp;`Repoze&nbsp;&lt;http://repoze.org/&gt;`_&nbsp;and&nbsp;another</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_676">676-</td><td nowrap="nowrap"><span  
class="diff_sub">project&nbsp;called&nbsp;`Grok&nbsp;&lt;http://grok.zope.org/&gt;`_&nbsp;which&nbsp;makes&nbsp;it&nbsp;possible&nbsp;for</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_677">677-</td><td nowrap="nowrap"><span  
class="diff_sub">"normal"&nbsp;Python&nbsp;programmers&nbsp;use&nbsp;the&nbsp;very&nbsp;mature&nbsp;Zope&nbsp;components.</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_678">678</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_679">679</td><td  
nowrap="nowrap">Another&nbsp;framework&nbsp;that's&nbsp;already&nbsp;been&nbsp;mentioned&nbsp;is&nbsp;`Pylons`_.&nbsp;&nbsp;Pylons&nbsp;is&nbsp;much</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__98">n</a></td><td  
class="diff_header" id="from55_680">680-</td><td  
nowrap="nowrap">like&nbsp;TurboGears&nbsp;with&nbsp;a<span  
class="diff_chg">b</span>&nbsp;even&nbsp;stronger&nbsp;emphasis&nbsp;on&nbsp;flexibility,&nbsp;which&nbsp;<span  
class="diff_chg">i</span>s<span  
class="diff_sub">&nbsp;bought</span></td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__98">n</a></td><td  
class="diff_header" id="to55_727">727+</td><td  
nowrap="nowrap">like&nbsp;TurboGears<span  
class="diff_add">,&nbsp;but</span>&nbsp;with&nbsp;a<span  
class="diff_chg">n</span>&nbsp;even&nbsp;stronger&nbsp;emphasis&nbsp;on&nbsp;flexibility,&nbsp;which&nbsp;<span  
class="diff_chg">come</span>s</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_681">681</td><td  
nowrap="nowrap">at&nbsp;the&nbsp;cost&nbsp;of&nbsp;being&nbsp;more&nbsp;difficult&nbsp;to&nbsp;use.&nbsp;&nbsp;Nearly&nbsp;every&nbsp;component&nbsp;can&nbsp;be</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__99">n</a></td><td  
class="diff_header" id="from55_682">682-</td><td  
nowrap="nowrap">exchanged,&nbsp;which&nbsp;makes&nbsp;it&nbsp;ne<span  
class="diff_sub">c</span>cessary&nbsp;to&nbsp;use&nbsp;the&nbsp;documentation&nbsp;of&nbsp;every&nbsp;single</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__99">n</a></td><td  
class="diff_header" id="to55_729">729+</td><td  
nowrap="nowrap">exchanged,&nbsp;which&nbsp;makes&nbsp;it&nbsp;necessary&nbsp;to&nbsp;use&nbsp;the&nbsp;documentation&nbsp;of&nbsp;every&nbsp;single</td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_683">683-</td><td nowrap="nowrap"><span  
class="diff_sub">component,&nbsp;because&nbsp;there&nbsp;are&nbsp;so&nbsp;many&nbsp;Pylons&nbsp;combinations&nbsp;possible&nbsp;that&nbsp;can</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="to55_730">730+</td><td nowrap="nowrap"><span  
class="diff_add">component,&nbsp;of&nbsp;which&nbsp;there&nbsp;are&nbsp;many.&nbsp;&nbsp;Pylons&nbsp;builds&nbsp;upon&nbsp;`Paste</span></td></tr>
+<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_684">684-</td><td nowrap="nowrap"><span  
class="diff_sub">satisfy&nbsp;every&nbsp;requirement.&nbsp;&nbsp;Pylons&nbsp;builds&nbsp;upon&nbsp;`Paste</span></td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_685">685</td><td  
nowrap="nowrap">&lt;http://pythonpaste.org/&gt;`_,&nbsp;an&nbsp;extensive&nbsp;set&nbsp;of&nbsp;tools&nbsp;which&nbsp;are&nbsp;handy&nbsp;for&nbsp;WSGI.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_686">686</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_687">687</td><td  
nowrap="nowrap">And&nbsp;that's&nbsp;still&nbsp;not&nbsp;everything.&nbsp;&nbsp;The&nbsp;most&nbsp;up-to-date&nbsp;information&nbsp;can&nbsp;always&nbsp;be</td></tr>             
<tr><td class="diff_next" id="difflib_chg_to55__99"></td><td  
class="diff_header" id="from55_688">688</td><td  
nowrap="nowrap">found&nbsp;in&nbsp;the&nbsp;Python&nbsp;wiki.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_689">689</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_690">690</td><td  
nowrap="nowrap">..&nbsp;seealso::</td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_691">691</td><td  
nowrap="nowrap"></td></tr>            <tr><td class="diff_next"></td><td  
class="diff_header" id="from55_692">692</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;The&nbsp;Python&nbsp;wiki&nbsp;contains&nbsp;an&nbsp;extensive&nbsp;list&nbsp;of&nbsp;`web&nbsp;frameworks</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_693">693</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/WebFrameworks&gt;`_.</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_694">694</td><td nowrap="nowrap"></td></tr>            <tr><td  
class="diff_next"></td><td class="diff_header" id="from55_695">695</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Most&nbsp;frameworks&nbsp;also&nbsp;have&nbsp;their&nbsp;own&nbsp;mailing&nbsp;lists&nbsp;and&nbsp;IRC&nbsp;channels,&nbsp;look&nbsp;out</td></tr><tr><td  
class="diff_next"><a href="#difflib_chg_to55__top">t</a></td><td  
class="diff_header" id="from55_696">696-</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;for&nbsp;these&nbsp;on&nbsp;the&nbsp;projects'&nbsp;websites.&nbsp;&nbsp;There&nbsp;is&nbsp;also&nbsp;a&nbsp;general&nbsp;"Python&nbsp;in&nbsp;the</td></tr>
+<tr><td class="diff_next"><a href="#difflib_chg_to55__top">t</a></td><td  
class="diff_header" id="to55_742">742+</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;for&nbsp;these&nbsp;on&nbsp;the&nbsp;projects'&nbsp;web<span  
class="diff_add">&nbsp;</span>sites.&nbsp;&nbsp;There&nbsp;is&nbsp;also&nbsp;a&nbsp;general&nbsp;"Python&nbsp;in&nbsp;the</td></tr>
+            <tr><td class="diff_next"></td><td class="diff_header"  
id="from55_697">697</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;Web"&nbsp;IRC&nbsp;channel&nbsp;on&nbsp;freenode&nbsp;called&nbsp;`#python.web</td></tr>             
<tr><td class="diff_next"></td><td class="diff_header"  
id="from55_698">698</td><td  
nowrap="nowrap">&nbsp;&nbsp;&nbsp;&lt;http://wiki.python.org/moin/PoundPythonWeb&gt;`_.</td></tr>         
</tbody>
+        </table>
+    <table class="diff" summary="Legends">
+        <tr> <th colspan="2"> Legends </th> </tr>
+        <tr> <td> <table border="" summary="Colors">
+                      <tr><th> Colors </th> </tr>
+                      <tr><td class="diff_add">&nbsp;Added&nbsp;</td></tr>
+                      <tr><td class="diff_chg">Changed</td> </tr>
+                      <tr><td class="diff_sub">Deleted</td> </tr>
+                  </table></td>
+             <td> <table border="" summary="Links">
+                      <tr><th colspan="2"> Links </th> </tr>
+                      <tr><td>(f)irst change</td> </tr>
+                      <tr><td>(n)ext change</td> </tr>
+                      <tr><td>(t)op</td> </tr>
+                  </table></td> </tr>
+    </table>
+</body>
+
+</html>




Pythonjp-checkins メーリングリストの案内
Zurück zum Archiv-Index