Dive Into Python Python for experienced programmers |

## Appendix E. Revision history

26 April 2002 (4.0-2)

- Fixed typo in Example 2.16.
- Fixed typo in Example 1.6.
- Fixed Windows help file (missing table of contents due to base stylesheet changes).

19 April 2002 (4.0)

- Expanded Everything is an object to include more about import search paths.
- Fixed typo in Example 1.16. Thanks to Brian for the correction.
- Rewrote the tip on truth values in Lists 101, now that Python has a separate boolean datatype.
- Fixed typo in Importing modules using from module import when comparing syntax to Java. Thanks to Rick for the correction.
- Added note in UserDict: a wrapper class about derived classes always overriding ancestor classes.
- Fixed typo in Example 3.19. Thanks to Kevin for the correction.
- Added note in Handling exceptions that you can define and raise your own exceptions. Thanks to Rony for the suggestion.
- Fixed typo in Example 4.16. Thanks for Rick for the correction.
- Added note in Example 4.17 about what the return codes mean. Thanks to Howard for the suggestion.
- Added `str` function when creating `StringIO` instance in Example 5.30. Thanks to Ganesan for the idea.
- Added link in Introducing romantest.py to explanation of why test cases belong in a separate file.
- Changed Finding the path to use `os.path.dirname` instead of `os.path.split`. Thanks to Marc for the idea.
- Added code samples (`piglatin.py`, `parsephone.py`, and `plural.py`) for the upcoming regular expressions chapter.
- Updated and expanded list of Python distributions on home page.

1 January 2002 (3.9)

- Added Unicode.
- Added Searching for elements.
- Added Accessing element attributes.
- Added Abstracting input sources.
- Added Standard input, output, and error.
- Added simple counter `for` loop examples (good usage and bad usage) in for loops. Thanks to Kevin for the idea.
- Fixed typo in Example 1.33 (two elements of `params.values()` were reversed).
- Fixed mistake in type, str, dir, and other built-in functions with regards to the name of the `__builtin__` module. Thanks to Denis for the correction.
- Added additional example in Finding the path to show how to run unit tests in the current working directory, instead of the directory where `regression.py` is located.
- Modified explanation of how to derive a negative list index from a positive list index in Example 1.16. Thanks to Renauld for the suggestion.
- Updated links on home page for downloading latest version of Python.
- Added link on home page to Bruce Eckel's preliminary draft of Thinking in Python, a marvelous (and advanced) book on design patterns and how to implement them in Python.

18 November 2001 (3.8)

- Added Finding the path.
- Added Filtering lists revisited.
- Added Mapping lists revisited.
- Added Data-centric programming.
- Expanded sample output in Diving in.
- Finished Parsing XML.

30 September 2001 (3.7)

- Added Packages.
- Added Parsing XML.
- Cleaned up introductory paragraph in Diving in. Thanks to Matt for this suggestion.
- Added Java tip in Importing modules using from module import. Thanks to Ori for this suggestion.
- Fixed mistake in Putting it all together where I implied that you could not use `is None` to compare to a null value in Python. In fact, you can, and it's faster than `== None`. Thanks to Ori pointing this out.
- Clarified in Lists 101 where I said that `li = li + other` was equivalent to `li.extend(other)`. The result is the same, but `extend` is faster because it doesn't create a new list. Thanks to Denis pointing this out.
- Fixed mistake in Lists 101 where I said that `li += other` was equivalent to `li = li + other`. In fact, it's equivalent to `li.extend(other)`, since it doesn't create a new list. Thanks to Denis pointing this out.
- Fixed typographical laziness in Getting To Know Python; when I was writing it, I had not yet standardized on putting string literals in single quotes within the text. They were set off by typography, but this is lost in some renditions of the book (like plain text), making it difficult to read. Thanks to Denis for this suggestion.
- Fixed mistake in Declaring functions where I said that statically typed languages always use explicit variable + datatype declarations to enforce static typing. Most do, but there are some statically typed languages where the compiler figures out what type the variable is based on usage within the code. Thanks to Tony for pointing this out.
- Added link to Spanish translation.

6 September 2001 (3.6.4)

- Added code in `BaseHTMLProcessor` to handle non-HTML entity references, and added a note about it in Introducing BaseHTMLProcessor.py.
- Modified Example 4.11 to include `htmlentitydefs` in the output.

4 September 2001 (3.6.3)

- Fixed typo in Diving in.
- Added link to Korean translation.

31 August 2001 (3.6.2)

- Fixed typo in Testing for sanity (the last requirement was listed twice).

31 August 2001 (3.6)

- Finished HTML Processing with Putting it all together and Summary.
- Added Postscript.
- Started XML Processing with Diving in.
- Started Data-Centric Programming with Diving in.
- Fixed long-standing bug in colorizing script that improperly colorized the examples in HTML Processing.
- Added link to French translation. They did the right thing and translated the source XML, so they can re-use all my build scripts and make their work available in six different formats.
- Upgraded to version 1.43 of the DocBook XSL stylesheets.
- Upgraded to version 6.43 of the SAXON XSLT processor from Michael Kay.
- Massive stylesheet changes, moving away from a table-based layout and towards more appropriate use of cascading style sheets. Unfortunately, CSS has as many compatibility problems as anything else, so there are still some tables used in the header and footer. The resulting HTML version looks worse in Netscape 4, but better in modern browsers, including Netscape 6, Mozilla, Internet Explorer 5, Opera 5, Konqueror, and iCab. And it's still completely readable in Lynx. I love Lynx. It was my first web browser. You never forget your first.
- Moved to Ant to have better control over the build process, which is especially important now that I'm juggling six output formats and two languages.
- Consolidated the available downloadable archives; previously, I had different files for each platform, because the .zip files that Python's `zipfile` module creates are non-standard and can't be opened by Aladdin Expander on Mac OS. But the .zip files that Ant creates are completely standard and cross-platform. Go Ant!
- Now hosting the complete XML source, XSL stylesheets, and associated scripts and libraries on SourceForge. There's also CVS access for the really adventurous.
- Re-licensed the example code under the new-and-improved GPL-compatible Python 2.1.1 license. Thanks, Guido; people really do care, and it really does matter.

26 June 2001 (3.5)

- Added explanation of strong/weak/static/dynamic datatypes in Declaring functions.
- Added case-sensitivity example in Dictionaries 101.
- Use `os.path.normcase` in An Object-Oriented Framework to compensate for inferior operating systems whose files aren't case-sensitive.
- Fixed indentation problems in code samples in PDF version.

31 May 2001 (3.4)

- Added roman.py, stage 5.
- Added Handling bugs.
- Added Handling changing requirements.
- Added Refactoring.
- Added Summary.
- Fixed yet another stylesheet bug that was dropping nested `</span>` tags.

24 May 2001 (3.3)

- Added Diving in.
- Added Introducing romantest.py.
- Added Testing for success.
- Added Testing for failure.
- Added Testing for sanity.
- Added roman.py, stage 1.
- Added roman.py, stage 2.
- Added roman.py, stage 3.
- Added roman.py, stage 4.
- Tweaked stylesheets in an endless quest for complete Netscape/Mozilla compatibility.

3 May 2001 (3.2)

- Added Introducing dialect.py.
- Added Regular expressions 101.
- Fixed bug in `handle_decl` method that would produce incorrect declarations (adding a space where it couldn't be).
- Fixed bug in CSS (introduced in 2.9) where body background color was missing.

18 Apr 2001 (3.1)

- Added code in `BaseHTMLProcessor.py` to handle declarations, now that Python 2.1 supports them.
- Added note about nested scopes in locals and globals.
- Fixed obscure bug in Example 4.1 where attribute values with character entities would not be properly escaped.
- Now recommending (but not requiring) Python 2.1, due to its support of declarations in `sgmllib.py`.
- Updated download links on the home page to point to Python 2.1, where available.
- Moved to versioned filenames, to help people who redistribute the book.

16 Apr 2001 (3.0)

- Fixed minor bug in code listing in HTML Processing.
- Added link to Chinese translation on home page.

13 Apr 2001 (2.9)

- Added locals and globals.
- Added Dictionary-based string formatting.
- Tightened code in HTML Processing, specifically `ChefDialectizer`, to use fewer and simpler regular expressions.
- Fixed a stylesheet bug that was inserting blank pages between chapters in the PDF version.
- Fixed a script bug that was stripping the `DOCTYPE` from the home page.
- Added link to Python Cookbook, and added a few links to individual recipes in Further reading.
- Switched to Google for searching on `http://diveintopython.org/`.
- Upgraded to version 1.36 of the DocBook XSL stylesheets, which was much more difficult than it sounds. There may still be lingering bugs.

26 Mar 2001 (2.8)

- Added Extracting data from HTML documents.
- Added Introducing BaseHTMLProcessor.py.
- Added Quoting attribute values.
- Tightened up code in The Power Of Introspection, using the built-in function `callable` instead of manually checking types.
- Moved Importing modules using from module import from The Power Of Introspection to An Object-Oriented Framework.
- Fixed typo in code example in Diving in (added colon).
- Added several additional downloadable example scripts.
- Added Windows Help output format.

16 Mar 2001 (2.7)

- Added Introducing sgmllib.py.
- Tightened up code in HTML Processing.
- Changed code in Getting To Know Python to use `items` method instead of `keys`.
- Moved Assigning multiple values at once section to Getting To Know Python.
- Edited note about `join` string method, and provided a link to the new entry in The Whole Python FAQ that explains why `join` is a string method instead of a list method.
- Rewrote The peculiar nature of and and or to emphasize the fundamental nature of `and` and `or` and de-emphasize the `and-or` trick.
- Reorganized language comparisons into `note`s.

28 Feb 2001 (2.6)

- The PDF and Word versions now have colorized examples, an improved table of contents, and properly indented `tip`s and `note`s.
- The Word version is now in native Word format, compatible with Word 97.
- The PDF and text versions now have fewer problems with improperly converted special characters (like trademark symbols and curly quotes).
- Added link to download Word version for UNIX, in case some twisted soul wants to import it into StarOffice or something.
- Fixed several `note`s which were missing titles.
- Fixed stylesheets to work around bug in Internet Explorer 5 for Mac OS which caused colorized words in the examples to be displayed in the wrong font. (Hello?!? Microsoft? Which part of `<pre>` don't you understand?)
- Fixed archive corruption in Mac OS downloads.
- In first section of each chapter, added link to download examples. (My access logs show that people skim or skip the two pages where they could have downloaded them (the home page and Preface), then scramble to find a download link once they actually start reading.)
- Tightened the home page and Preface even more, in the hopes that someday someone will read them.
- Soon I hope to get back to actually writing this book instead of debugging it.

23 Feb 2001 (2.5)

- Added More on modules.
- Added The os module.
- Moved Example 3.36 from Assigning multiple values at once to The os module.
- Added Putting it all together.
- Added Summary.
- Added Diving in.
- Fixed program listing in Example 3.29 which was missing a colon.

12 Feb 2001 (2.4.1)

- Changed newsgroup links to use “news:” protocol, now that `deja.com` is defunct.
- Added file sizes to download links.

12 Feb 2001 (2.4)

- Added “further reading” links in most sections, and collated them in Further reading.
- Added URLs in parentheses next to external links in text version.

9 Feb 2001 (2.3)

- Rewrote some of the code in An Object-Oriented Framework to use class attributes and a better example of multi-variable assignment.
- Reorganized An Object-Oriented Framework to put the class sections first.
- Added Class attributes.
- Added Handling exceptions.
- Added File objects.
- Merged the “review” section in An Object-Oriented Framework into Diving in.
- Colorized all program listings and examples.
- Fixed important error in Declaring functions: functions that do not explicitly return a value return `None`, so you can assign the return value of such a function to a variable without raising an exception.
- Added minor clarifications to Documenting functions, Everything is an object, and Defining variables.

2 Feb 2001 (2.2)

- Edited Getting object references with getattr.
- Added titles to `xref` tags, so they can have their cute little tooltips too.
- Changed the look of the revision history page.
- Fixed problem I introduced yesterday in my HTML post-processing script that was causing invalid HTML character references and breaking some browsers.
- Upgraded to version 1.29 of the DocBook XSL stylesheets.

1 Feb 2001 (2.1)

- Rewrote the example code of The Power Of Introspection to use `getattr` instead of `exec` and `eval`, and rewrote explanatory text to match.
- Added example of list operators in Lists 101.
- Added links to relevant sections in the summary lists at the end of each chapter (Summary and Summary).

31 Jan 2001 (2.0)

- Split Special class methods into three sections, UserDict: a wrapper class, Special class methods, and Advanced special class methods.
- Changed notes on garbage collection to point out that Python 2.0 and later can handle circular references without additional coding.
- Fixed UNIX downloads to include all relevant files.

15 Jan 2001 (1.9)

- Removed introduction to Getting To Know Python.
- Removed introduction to The Power Of Introspection.
- Removed introduction to An Object-Oriented Framework.
- Edited text ruthlessly. I tend to ramble.

12 Jan 2001 (1.8)

- Added more examples to Assigning multiple values at once.
- Added Defining classes.
- Added Instantiating classes.
- Added Special class methods.
- More minor stylesheet tweaks, including adding titles to `link` tags, which, if your browser is cool enough, will display a description of the link target in a cute little tooltip.

3 Jan 2001 (1.71)

- Made several modifications to stylesheets to improve browser compatibility.

2 Jan 2001 (1.7)

- Added introduction to Getting To Know Python.
- Added introduction to The Power Of Introspection.
- Added review section to An Object-Oriented Framework [later removed]
- Added Private functions.
- Added for loops.
- Added Assigning multiple values at once.
- Wrote scripts to convert book to new output formats: one single HTML file, PDF, Microsoft Word 97, and plain text.
- Registered the `diveintopython.org` domain and moved the book there, along with links to download the book in all available output formats for offline reading.
- Modified the XSL stylesheets to change the header and footer navigation that displays on each page. The top of each page is branded with the domain name and book version, followed by a breadcrumb trail to jump back to the chapter table of contents, the main table of contents, or the site home page.

11 Dec 2000 (1.6)

- Added Putting it all together.
- Finished The Power Of Introspection with Summary.
- Started An Object-Oriented Framework with Diving in.

22 Nov 2000 (1.5)

- Added The peculiar nature of and and or.
- Added Using lambda functions.
- Added appendix that lists section abstracts.
- Added appendix that lists tips.
- Added appendix that lists examples.
- Added appendix that lists revision history.
- Expanded example of mapping lists in Mapping lists.
- Encapsulated several more common phrases into entities.
- Upgraded to version 1.25 of the DocBook XSL stylesheets.

14 Nov 2000 (1.4)

- Added Filtering lists.
- Added `dir` documentation to type, str, dir, and other built-in functions.
- Added `in` example in Tuples 101.
- Added additional note about `if` `__name__` trick under MacPython.
- Switched to the SAXON XSLT processor from Michael Kay.
- Upgraded to version 1.24 of the DocBook XSL stylesheets.
- Added db-html processing instructions with explicit filenames of each chapter and section, to allow deep links to content even if I add or re-arrange sections later.
- Made several common phrases into entities for easier reuse.
- Changed several `literal` tags to `constant`.

9 Nov 2000 (1.3)

- Added section on dynamic code execution.
- Added links to relevant section/example wherever I refer to previously covered concepts.
- Expanded introduction of chapter 2 to explain what the function actually does.
- Explicitly placed example code under the GNU General Public License and added appendix to display license. [Note 8/16/2001: code has been re-licensed under GPL-compatible Python license]
- Changed links to licenses to use `xref` tags, now that I know how to use them.

6 Nov 2000 (1.2)

- Added first four sections of chapter 2.
- Tightened up preface even more, and added link to Mac OS version of Python.
- Filled out examples in "Mapping lists" and "Joining strings" to show logical progression.
- Added output in chapter 1 summary.

31 Oct 2000 (1.1)

- Finished chapter 1 with sections on mapping and joining, and a chapter summary.
- Toned down the preface, added links to introductions for non-programmers.
- Fixed several typos.

30 Oct 2000 (1.0)

- Initial publication