Commit 423fb776 authored by Christian Kastner's avatar Christian Kastner

Imported Upstream version 20110218

parents
<!DOCTYPE html>
<meta charset=utf-8>
<title>About the book - Dive Into Python 3</title>
<link rel=stylesheet href=dip3.css>
<style>
h1:before{content:''}
#belong{margin:0 auto;width:558px;height:738px;background:#fff url(i/openclipart.org_media_files_Selanit_8331.png) no-repeat;border:1px solid white}
#belong div{margin:375px 30px 0 40px}
div p{font-size:small}
abbr{font-variant:none;text-transform:none;letter-spacing:0}
</style>
<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>
<link rel=stylesheet media=print href=print.css>
<meta name=viewport content='initial-scale=1.0'>
<form action=http://www.google.com/cse><div><input type=hidden name=cx value=014021643941856155761:l5eihuescdw><input type=hidden name=ie value=UTF-8><input type=search name=q size=25 placeholder="powered by Google&trade;">&nbsp;<input type=submit name=sa value=Search></div></form>
<p>You are here: <a href=index.html>Home</a> <span class=u>&#8227;</span> <a href=table-of-contents.html>Dive Into Python 3</a> <span class=u>&#8227;</span>
<h1>About The Book</h1>
<div id=belong>
<div>
<p><cite>Dive Into Python 3</cite> comprises original prose and graphics licensed under the <a href=http://creativecommons.org/licenses/by-sa/3.0/ rel=license title='Creative Commons Attribution-ShareAlike 3.0 Unported'>CC-BY-SA-3.0</a> license. Illustrations from the <a href=http://openclipart.org/>Open Clip Art Library</a> are public domain.
<p>The <a href=case-study-porting-chardet-to-python-3.html><code>chardet</code> library</a> is licensed under the <abbr title="GNU Lesser General Public License">LGPL</abbr> 2.1 or later. The <a href=advanced-iterators.html>alphametics solver</a> is a port of <a href=http://code.activestate.com/recipes/576615/>Raymond Hettinger&#8217;s version</a>, released under the <abbr>MIT</abbr> license. Several chapters contain code from the Python standard library, released under the <abbr title="Python Software Foundation">PSF</abbr> License 2.0. All other original code is licensed under the MIT license.
<p>The online edition uses <a href=http://jquery.com>jQuery</a>, released under the <abbr>MIT</abbr> and <abbr title="GNU General Public License">GPL</abbr> licenses. <span style="color:red">C</span><span style="color:aqua">o</span><span style="color:plum">l</span><span style="color:gold">o</span><span style="color:blue">r</span> syntax highlighting is provided by <a href=http://code.google.com/p/google-code-prettify/>prettify.js</a>, other parsing code is adapted from <a href=http://code.google.com/p/javascript-search-term-highlighter/>highlighter.js</a>; both are released under the Apache License 2.0.
<p>Corrections and feedback to <a href=mailto:mark@diveintomark.org>mark@diveintomark.org</a>
</div>
</div>
<p class=c>&copy; 2001&ndash;10 <a href=colophon.html>Mark Pilgrim</a>
<!--[if IE]><script src=j/html5.js></script><![endif]-->
This diff is collapsed.
<!DOCTYPE html>
<meta charset=utf-8>
<meta name=robots content="noindex, nofollow">
<title>This page intentionally left blank - Dive Into Python 3</title>
<link rel=stylesheet href=dip3.css>
<style>
p{text-align:center;margin-top:10em}
</style>
<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>
<link rel=stylesheet media=print href=print.css>
<meta name=viewport content='initial-scale=1.0'>
<p>This page intentionally left blank.
This diff is collapsed.
<!DOCTYPE html>
<meta charset=utf-8>
<meta name=robots content=noindex>
<title>Colophon - Dive Into Python 3</title>
<link rel=stylesheet href=dip3.css>
<style>
h1:before,h2:before{content:''}
.ss{float:right;margin:0 0 1.75em 1.75em}
</style>
<link rel=stylesheet media='only screen and (max-device-width: 480px)' href=mobile.css>
<link rel=stylesheet media=print href=print.css>
<meta name=viewport content='initial-scale=1.0'>
<form action=http://www.google.com/cse><div><input type=hidden name=cx value=014021643941856155761:l5eihuescdw><input type=hidden name=ie value=UTF-8>&nbsp;<input type=search name=q size=25 placeholder="powered by Google&trade;">&nbsp;<input type=submit name=sa value=Search></div></form>
<p>You are here: <a href=index.html>Home</a> <span class=u>&#8227;</span> <a href=table-of-contents.html>Dive Into Python 3</a> <span class=u>&#8227;</span>
<h1>Colophon</h1>
<blockquote class=q>
<p><span class=u>&#x275D;</span> <i lang=fr>Je n&#8217;ai fait celle-ci plus longue que parce que je n&#8217;ai pas eu le loisir de la faire plus courte.</i><br>(I would have written a shorter letter, but I did not have the time.) <span class=u>&#x275E;</span><br>&mdash; <a href=http://en.wikiquote.org/wiki/Blaise_Pascal>Blaise Pascal</a>
</blockquote>
<p id=toc>&nbsp;
<h2 id=divingin>Diving In</h2>
<p class=f>This book, like all books, was a labor of love. Oh sure, I got paid the medium-sized bucks for it, but nobody writes technical books for the money. And since this book is available on the web as well as on paper, I spent a lot of time fiddling with webby stuff when I should have been writing.
<p class='ss nm'><img src=i/openclipart.org_media_files_johnny_automatic_5261.png width=314 height=273 alt='[typewriter]'>
<p>The online edition loads as efficiently as possible. Efficiency never happens by accident; I spent many hours making it so. Perhaps too many hours. Yes, almost certainly too many hours. Never underestimate the depths to which a procrastinating writer will sink.
<p>I won&#8217;t bore you with all the details. Wait, yes&nbsp;&mdash;&nbsp;I will bore you with all the details. But here&#8217;s the short version.
<ol>
<li>HTML is minimized, then served <a href=http://httpd.apache.org/docs/trunk/mod/mod_deflate.html>compressed</a>.
<li>Scripts and stylesheets are minimized by <a href=http://developer.yahoo.com/yui/compressor/>YUI Compressor</a> (and also served compressed).
<li>Scripts are combined to reduce HTTP requests.
<li>Stylesheets are combined and inlined to reduce HTTP requests.
<li>Unused CSS selectors and properties are <a href=http://hg.diveintopython3.org/file/default/util/lesscss.py>removed on a page-by-page basis</a> with a little help from <a href=http://pyquery.org/>pyquery</a>.
<li>HTTP caching and other server-side options are optimized based on advice from <a href=http://developer.yahoo.com/yslow/>YSlow</a> and <a href=http://code.google.com/speed/page-speed/>Page Speed</a>.
<li>Pages use <a href=http://www.alanwood.net/unicode/unicode_samples.html>Unicode characters</a> in place of images wherever possible.
<li>Images are optimized with <a href=http://optipng.sourceforge.net/>OptiPNG</a>.
<li>The entire book was <a href=http://diveintomark.org/archives/2009/03/27/dive-into-history-2009-edition>lovingly hand-authored in HTML 5</a> to avoid markup cruft.
</ol>
<p class=a>&#x2042;
<h2 id=typography>Typography</h2>
<p>vertical rhythm, best available ampersand, curly quotes/apostrophes, other stuff from webtypography.net
<p class=a>&#x2042;
<h2 id=graphics>Graphics</h2>
<p>Unicode, callouts, font-family issues on Windows
<p class=a>&#x2042;
<h2 id=performance>Performance</h2>
<p>"Dive Into History 2009 edition", minimizing CSS + JS + HTML, inline CSS, optimizing images
<p class=a>&#x2042;
<h2 id=fun>Fun stuff</h2>
<p>Quotes, constrained writing(?), PapayaWhip
<p class=a>&#x2042;
<h2 id=furtherreading>Further Reading</h2>
<ul>
<li><a href=http://webtypography.net/toc/>The Elements of Typographic Style Applied to the Web</a>
<li><a href=http://www.alistapart.com/articles/settingtypeontheweb>Setting Type on the Web to a Baseline Grid</a>
<li><a href=http://24ways.org/2006/compose-to-a-vertical-rhythm>Compose to a Vertical Rhythm</a>
<li><a href=http://simplebits.com/notebook/2008/08/14/ampersands.html>Use the Best Available Ampersand</a>
<li><a href=http://alanwood.net/unicode/>Unicode Support in HTML, Fonts, and Web Browsers</a>
<li><a href=http://developer.yahoo.com/yslow/>YSlow</a> for <a href=http://getfirebug.com/>Firebug</a>
<li><a href=http://developer.yahoo.com/performance/rules.html>Best Practices for Speeding Up Your Web Site</a>
<li><a href=http://stevesouders.com/hpws/rules.php>14 Rules for Faster-Loading Web Sites</a>
<li><a href=http://developer.yahoo.com/yui/compressor/>YUI Compressor</a>
<li><a href=http://code.google.com/speed/page-speed/>Google Page Speed</a>
<li><a href=http://code.google.com/speed/page-speed/docs/using.html>Using Google Page Speed</a>
<li><a href=http://optipng.sourceforge.net/>OptiPNG</a>
</ul>
<p class=c>&copy; 2001&ndash;10 <a href=about.html>Mark Pilgrim</a>
<script src=j/jquery.js></script>
<script src=j/dip3.js></script>
<!--[if IE]><script src=j/html5.js></script><![endif]-->
This diff is collapsed.
/*
"Dive Into Python 3" stylesheet
Copyright (c) 2009, Mark Pilgrim, All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Classname Legend
.w = "widgets" = wrapper block for hide/open/download links dynamically inserted into code listings
.b = "block" = internal block dynamically inserted into code listings
.d = "download" = download link for code listings
.p = "prompt" = command-line or interactive shell prompt within code listings
.q = "quote" = quote at beginning of each chapter
.f = "fancy" = first paragraph of each chapter (gets a fancy drop-cap)
.c = "centered" = centered footer text (also clears floats)
.a = "asterism" = section break
.v = "navigation" = prev/next navigation links (not breadcrumbs)
.u = "Unicode" = text contains Unicode characters (requires special font declaration to accommodate *cough* a certain browser)
.nm = "no mobile" = hide this section on mobile devices
.nd = "no decoration" = hide the widgets on this code block
.pp = "pretty print" = apply syntax highlighting to this code block
.pf = "padded frame" = black border with internal padding
.fr = "framed" = black border, no padding
.ss = "screenshot" = image, floated right, with margin
.hl = "header link" = auto-inserted pilcrow after h2 and h3 section headers
.note = "note/caution/important" = indented block for tips/gotchas/language comparisons
.baa = "best available ampersand" = wrapper block for ampersands
.ots = "on the side" = an aside that is set in normal type (as opposed to a big blue pullquote)
.xxxl = "ridiculously large" = text sized 1000% larger than normal type
Acknowledgements & Inspirations
"The Elements of Typographic Style Applied to the Web" ... http://webtypography.net/toc/
"Setting Type on the Web to a Baseline Grid" ............. http://www.alistapart.com/articles/settingtypeontheweb
"Compose to a Vertical Rhythm" ........................... http://24ways.org/2006/compose-to-a-vertical-rhythm
"Use the Best Available Ampersand" ....................... http://simplebits.com/notebook/2008/08/14/ampersands.html
"Unicode Support in HTML, Fonts, and Web Browsers" ....... http://alanwood.net/unicode/
"Punctuation" ............................................ http://en.wikipedia.org/wiki/Punctuation
"Google Code Prettify" ................................... http://code.google.com/p/google-code-prettify/
*/
/* typography */
body, .w a, .inherit {
font: medium/1.75 'Gill Sans', 'Gill Sans MT', Corbel, Helvetica, 'Nimbus Sans L', sans-serif;
word-spacing: 0.1em;
}
pre, kbd, samp, code, var, .b, pre span {
font: small/2.154 Consolas, 'Andale Mono', Monaco, 'Liberation Mono', 'Bitstream Vera Sans Mono', 'DejaVu Sans Mono', monospace;
word-spacing: 0;
}
.u {
font: medium/1.75 'Arial Unicode MS', FreeSerif, OpenSymbol, 'DejaVu Sans', sans-serif;
}
pre .u, td .u, pre .u span, .a, tr + tr th:first-child {
font: medium/1.75 'Arial Unicode MS', 'DejaVu Sans', FreeSerif, OpenSymbol, sans-serif;
color: #222;
}
.baa {
font: oblique 105% Constantia, Baskerville, Palatino, 'Palatino Linotype', 'URW Palladio L', serif;
}
abbr {
font-variant: small-caps;
text-transform: lowercase;
letter-spacing: 0.1em;
}
.q {
text-align: right;
font-style: oblique;
}
.q span {
font-size: large;
}
.note {
margin: 3.5em 4.94em;
}
.note span {
display: block;
float: left;
font-size: xx-large;
line-height: 0.875;
margin: 0 0.22em 0 -1.22em;
color: steelblue;
}
.c, w, .w a, .d {
line-height: 2.154;
}
.f:first-letter {
float: left;
color: lightsteelblue;
padding: 0.11em 4px 0 0;
font: normal 4em/0.68 serif;
text-shadow: steelblue 1px 1px 1px;
}
p, ul, ol {
margin: 1.75em 0;
font-size: medium;
}
/* basics */
html {
background: #fff;
color: #222;
}
body {
margin: 1.75em 28px;
}
.c, .a, .xxxl {
clear: both;
text-align: center;
}
.c {
margin: 2.154em 0;
}
.a {
font-size: xx-large;
line-height: .875;
color: #82b445;
}
form div, #level {
float: right;
}
.todo {
color: #ddd;
}
#level span {
color: #82b445;
}
.pf,.fr {
border: 1px solid;
}
.pf {
padding: 0 1.75em;
}
.xxxl {
font-size:1000%;
font-weight:bold;
line-height:1;
margin:0.7em 0;
}
.ss {
float: right;
margin: 0 0 1.75em 1.75em;
}
/* links */
a {
text-decoration: none;
border-bottom: 1px dotted;
}
a:hover {
border-bottom: 1px solid;
}
a:link, .w a {
color: steelblue;
}
a:visited {
color: #b44582;
}
.c a {
color: inherit;
}
a.hl:link, a.hl:visited {
color: #fff;
padding-left: 0.2em;
text-decoration: none;
border: 0;
}
a.hl:hover, h2[id]:hover a.hl, h3[id]:hover a.hl {
background: transparent;
color: gainsboro;
}
/* code blocks */
pre {
padding-left: 2.154em;
border-left: 1px solid #ddd;
}
.w {
float: left;
}
.c, .w, .w a, .d {
font-size: small;
}
.b, ol, p, blockquote, h1, h2, h3 {
clear: left;
}
pre a, .w a {
padding: 0.4375em 0;
}
.w a {
text-decoration: underline;
}
dfn {
font-style: inherit;
}
mark {
font-weight: bold;
display: inline-block;
width: 100%;
background: #ff8;
}
pre span, .p {
color: #667;
}
/* tables */
table {
width: 100%;
border-collapse: collapse;
}
th, td {
width: 45%;
padding: 0 0.5em;
border: 1px solid #bbb;
}
th {
text-align: left;
vertical-align: baseline;
}
td {
vertical-align: top;
}
th:first-child {
width: 10%;
text-align: center;
}
td pre {
padding: 0;
}
/* overrides */
li ol, .q, th, td, td pre {
margin: 0;
}
code, var, samp {
line-height: inherit !important;
}
pre a, td code a, .w a, pre a:hover, td a:link, td a:visited, td pre {
border: 0;
}
/* headers and pullquotes */
h1, h2, h3, aside {
font-family: "Book Antiqua", Palatino, Georgia, serif;
}
h1, h2, h3 {
font-variant: small-caps;
}
h1, h2 {
letter-spacing: -1px;
}
h1, h1 code {
font-size: xx-large;
line-height: 1.3125;
}
h2, h2 code {
font-size: x-large;
line-height: 1.167;
margin: 1.167em 0;
}
h3, h3 code {
font-size: large;
line-height: 1.556;
margin: 1.556em 0;
}
h1 {
border-bottom: 4px double;
width: 100%;
margin: 1.49em 0;
counter-reset: h2;
}
h1:before {
content: "Chapter " counter(h1) ". ";
}
h2:before {
counter-increment: h2;
content: counter(h1) "." counter(h2) ". ";
}
h2 {
counter-reset: h3;
}
#toc + h2:before {
content: "";
}
h3:before {
counter-increment: h3;
content: counter(h1) "." counter(h2) "." counter(h3) ". ";
}
#appa h1:before {
counter-increment: h1;
content: 'Appendix A. '
}
#appa h2:before {
counter-increment: h2;
content: 'A.' counter(h2) '. '
}
#appa h3:before {
counter-increment: h3;
content: 'A.' counter(h2) '.' counter(h3) '. '
}
#appb h1:before {
counter-increment: h1;
content: 'Appendix B. '
}
#appb h2:before {
counter-increment: h2;
content: 'B.' counter(h2) '. '
}
#appb h3:before {
counter-increment: h3;
content: 'B.' counter(h2) '.' counter(h3) '. '
}
#appc h1:before {
counter-increment: h1;
content: 'Appendix C. '
}
#appc h2:before {
counter-increment: h2;
content: 'C.' counter(h2) '. '
}
#appc h3:before {
counter-increment: h3;
content: 'C.' counter(h2) '.' counter(h3) '. '
}
#appd h1:before {
counter-increment: h1;
content: 'Appendix D. '
}
#appd h2:before {
counter-increment: h2;
content: 'D.' counter(h2) '. '
}
#appd h3:before {
counter-increment: h3;
content: 'D.' counter(h2) '.' counter(h3) '. '
}
aside {
display: block;
float: right;
font-style: oblique;
font-size: xx-large;
width: 25%;
margin: 1.75em 0 .75em 1.75em;
background: steelblue;
color: white;
padding: 1.75em;
border: 1px solid;
-moz-border-radius: 1em;
-webkit-border-radius: 1em;
border-radius: 1em;
}
aside.ots {
font-style: normal;
font-size: medium;
line-height: 1.75;
}
aside a {
color: #fff !important;
}
aside code {
font-size: inherit;
}
/* previous/next navigation links */
.v a {
text-decoration: none;
border: 0;
display: block;
}
.v a {
float: left;
}
.v a + a {
float: right;
}
.v span {
font-size: 1000%;
line-height: 1;
margin: 0;
text-shadow: gainsboro 3px 3px 3px;
}
/* syntax highlighting */
.str { color: #080; }
.kwd { color: #008; }
.com, .traceback { color: #800; }
.typ { color: #606; }
.lit { color: #066; }
.pun { color: #660; }
.pln { color: #000; }
.tag { color: #008; }
.atn { color: #606; }
.atv { color: #080; }
.dec { color: #606; }
'''Find solutions to alphametic equations.
>>> alphametics.solve('SEND + MORE == MONEY')
'9567 + 1085 == 10652'
'''
import re
import itertools
def solve(puzzle):
words = re.findall('[A-Z]+', puzzle.upper())
unique_characters = set(''.join(words))
assert len(unique_characters) <= 10, 'Too many letters'
first_letters = {word[0] for word in words}
n = len(first_letters)
sorted_characters = ''.join(first_letters) + \
''.join(unique_characters - first_letters)
characters = tuple(ord(c) for c in sorted_characters)
digits = tuple(ord(c) for c in '0123456789')
zero = digits[0]
for guess in itertools.permutations(digits, len(characters)):
if zero not in guess[:n]:
equation = puzzle.translate(dict(zip(characters, guess)))
if eval(equation):
return equation
if __name__ == '__main__':
import sys
for puzzle in sys.argv[1:]:
print(puzzle)
solution = solve(puzzle)
if solution:
print(solution)
# Copyright (c) 2009, Raymond Hettinger, All rights reserved.
# Ported to Python 3 and modified by Mark Pilgrim
# original: http://code.activestate.com/recipes/576615/
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
from alphametics import solve
import unittest
class KnownValues(unittest.TestCase):
def test_out(self):
'''TO + GO == OUT'''
self.assertEqual(solve('TO + GO == OUT'), '21 + 81 == 102')
def test_too(self):
'''I + DID == TOO'''
self.assertEqual(solve('I + DID == TOO'), '9 + 191 == 200')
def test_mom(self):
'''AS + A == MOM'''
self.assertEqual(solve('AS + A == MOM'), '92 + 9 == 101')
def test_best(self):
'''HES + THE == BEST'''
self.assertEqual(solve('HES + THE == BEST'), '426 + 842 == 1268')
def test_late(self):
'''NO + NO + TOO == LATE'''
self.assertEqual(solve('NO + NO + TOO == LATE'), '74 + 74 + 944 == 1092')
def test_onze(self):
'''UN + UN + NEUF == ONZE'''
self.assertEqual(solve('UN + UN + NEUF == ONZE'), '81 + 81 + 1987 == 2149')
def test_deux(self):
'''UN + DEUX + DEUX + DEUX + DEUX == NEUF'''
self.assertEqual(solve('UN + DEUX + DEUX + DEUX + DEUX == NEUF'), '25 + 1326 + 1326 + 1326 + 1326 == 5329')
if __name__ == '__main__':
unittest.main()
# Copyright (c) 2009, Mark Pilgrim, All rights reserved.
#
# Redistribution and use in source and binary forms, with or without modification,
# are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS'
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
{
"published": true,
"tags": [
"diveintopython",
"docbook",
"html"
],
"comments_link": null,
"id": 256,
"title": "Dive into history, 2009 edition"
}
\ No newline at end of file
{"published": true, "tags": ["diveintopython", "docbook", "html"], "comments_link": null, "id": 256, "title": "Dive into history, 2009 edition"}
\ No newline at end of file