We try to keep our books accurate, but sometimes mistakes creep in. This page lists the errors submitted by our astute readers. If you've found a new error, please submit it.

The latest version of the book is P2.0, released 10 months ago. If you've bought a PDF of the book and would like to upgrade it to this version (for free), visit your home page.

Key: Typo Tech. Error Suggestion Not a problem Next edition

By default this page displays the errata for the latest version of the book. If you have a previous version, select it here:  

(To find out what version you have, look at the copyright page, a few pages in from the front of the book. If it says (say) 'Second Printing', then here it'll be P2.0. If there are interim PDF releases in that printing, they'll be 2.1, 2.2, and so on.)

PDF Paper Description Found in Fixed in
7
#76814: I either had an error or nothing happened when I tried create a connection to project.clj the way it is explained in the book. I found a wo...more...
P1.0
22-May-14
9

#77239: "With the live mode disabled we can run commands using Alt-Enter."

Should be "CTRL/CMD-Enter"

--Apprentice Clojurer

P2.0
22-Aug-14
9
#77240: "This is what gets rendered in the browser when we navigate to http localhost 3000." But the server is not listening on port 3000; the defa...more...
P2.0
22-Aug-14
14
#77241: Adding the new POST-handling route to "defroutes home-routes" in guestbook.routes.home and then evaluating the defroutes form is not sufficien...more...
P2.0
22-Aug-14
15
#77242: "Adding the Data Model": Not sure whether needed but on should say to 1) save all files and 2) add forward declarations for functions "home" a...more...
P2.0
22-Aug-14
26
#77247: "A servlet receives requests and generates corresponding responses based on the HTTP protocol specification." More explicit: "Servlets ...more...
P2.0
23-Aug-14
26
#77787: When the compiler gets to 'error' in the following section of home.clj, it encounters an error: (defn home [] (layout/common [:h1 "...more...
P2.0
08-Nov-14
26
#77788: When the compiler gets to 'message' in the following section of home.clj, it encounters an error: (form-to [:post "/"] [:p "Name...more...
P2.0
08-Nov-14
32

#77245: In (POST "/" [name message] (save-message name message)) the "name" is boldfaced as if it were a clojure function. --Apprentice Clojurer

P2.0
23-Aug-14
32
#77248: We read: "This route extracts the :name and :message keys from the request params, then binds them to variables of the same name." This...more...
P2.0
23-Aug-14
33

#76995: hanlder--Vincenzo Piombo

P1.0
13-Jul-14
38

#76998: you have to
(use 'hiccup.element)
for "link-to" to work, better saying it.--Vincenzo Piombo

P1.0
13-Jul-14
40

#77971: The output of include-css function contains "/css/reset.css" although we passed "/css/mobile.css" on input.--Tomas Kral

P1.0
26-Dec-14
41
#76994: "For example, if we had routes /all-items and item/:id," should be "For example, if we had routes /foo and /bar/:id," ... using items woul...more...
P1.0
13-Jul-14
46
#77587: The call to (wrap-base-url) has vanished from the (def app ...) created automatically by Leiningen. I was a bit confused by this because there...more...
P1.0
09-Oct-14
46
#77249: "We’ll now update our route definitions to create the GET and POST /login routes for our application. We’ll also have to reference the noir.se...more...
P2.0
24-Aug-14
48
#77251: This is confusing: "Keep in mind that the session namespace must be accessed within the context of a request, meaning that it should not be...more...
P2.0
24-Aug-14
51
#77246: "The salt constitutes a randomly generated string that is concatenated with the hashed password." should be "The salt constitutes a rand...more...
P2.0
23-Aug-14
52

#77589: The handler/init function doesn't have the create-user-table function added, so if you blow away the db this app will now fail to work properly.--Stig Brautaset

P1.0
09-Oct-14
53
#77263: (GET "/get-message" [] (noir.response/json {:message "everything went better than expected!")) You are missing a closing } for the map. ...more...
P2.0
29-Aug-14
56
#77335: Following in nREPL, we are to create a liberator-service project, while ebook code examples throughout Chapter 3 show liberator-snippets/... p...more...
P2.0
16-Sep-14
56+
#78230: The code snippets are always listed as being in the directory "liberator-snippets/", while the text clearly states e.g. "Let's open the libera...more...
P2.0
05-Mar-15
65
#78231: Inside the :exists? decision, the line {::file (file (str (io/resource-path) "/home.html"))} is never explained, and neither is the fact that ...more...
P2.0
05-Mar-15
98
#77690: The ns declaration for routes/upload.clj includes the following line [picture-gallery.util :refer [galleries gallery-path]] however...more...
P1.0
25-Oct-14
98+
#78235: using hiccup.util/url-encode, as referred in the ns definition of picture-gallery.routes.upload, will not work for filenames with spaces. The ...more...
P2.0
10-Mar-15
103

#78051: The text says, "In our save-thumbnail function, we call resource-path to get ...", but the code uses gallery-path, not the resource-path. --Tomas Kral

P1.0
17-Jan-15
117
#76831: The line "$(element).parent().parent().remove();" should read "$(element).parent().remove();", otherwise *all* images are removed from the pag...more...
P1.0
01-Jun-14
135
#77726: The set-config! for the rotor config is a bit confusing. It's shown first in the file listing, with the timbre/set-config! prefix. Then it's s...more...
P1.0
29-Oct-14
138
#77738: "confuguration" is likely a typo :-) "This allows us to have less overhead per application and the ability to provide a common >>>confugura...more...
P2.0
30-Oct-14
192
#77201: In the example above the heading "Namespaces" the name of the function is missing: (defn [{:keys [id pass pass1] :as user}] ...) I gu...more...
P1.0
10-Aug-14
193

#77218: First paragraph in "Calling methods":
"we pass the object its first parameter" should say
"we pass the object as its first parameter"

P2.0
16-Aug-14
193

#76977: "Clojure provides a special form called defn"
defn is not special form but macro.--Shunsaku Matsutani

Dmitri Sotnikov says: In Clojure 1.6 it's neither, defn is simply defined using def now.
P1.0
09-Jul-14
197
#77217: The Python code is wrong: (1) The 'for' lines and the 'if' need to end with colons (2) The line "i = i*i" doesn't have any effect on l, beca...more...
Dmitri Sotnikov says: Fixed up the Python to compile, and while I realize that you could write Python in a functional style here I wanted to illustrate that the imperative style would be valid code.
P2.0
16-Aug-14
198 190

#76978: In "Structuring the Code", example Python code makes no sense.--Shunsaku Matsutani

P1.0
09-Jul-14