small medium large xlarge

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

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

If you've found a new error, please submit it.

  • Typo
  • Tech. error
  • Suggestion
  • Maybe next edition
  • Not a problem
  • Reported in: B1.0 (14-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85395
PDF page: viii

wrote memorization -> rote memorization
--Erik

  • Reported in: B1.0 (22-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85439
PDF page: viii
Last sentence has an extra 'to' in it: "The following chapters will teach you how to effectively to build your web applications using this stack." ...more...
  • Reported in: B1.0 (13-Jun-19)
#85388
PDF page: 9
On the Chapter 1 page 9 the mentioned command will throw the following error: user=> (create-migration "guestbook") Execution error (IllegalArgume...more...
Scot Brown says: This can be fixed by running (start) before attempting to create your migration (see Page 6). This seems to be a common gotcha though, so we'll figure out how to prevent other readers from experiencing this as well. Any suggestions are welcome. Thanks!
  • Reported in: B1.0 (16-Jun-19)
#85410
PDF page: 9
Sorry, please ignore above reported error =) here is corrected post: user=> (create-migration "guestbook") Execution error (IllegalArgumentExceptio...more...
Scot Brown says: This can be fixed by running (start) before attempting to create your migration (see Page 6). This seems to be a common gotcha though, so we'll figure out how to prevent other readers from experiencing this as well. Any suggestions are welcome. Thanks!
  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85440
PDF page: 19
The original home.html does not contain these divs: <div class="columns is-centered"> <div class="column is-two-thirds"> and none of the text...more...
  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85442
PDF page: 20
The text says the HTML should contain: <textarea class="textarea" name="message"> {{message}} </textarea> But if you do that, ...more...
  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85443
PDF page: 31
Text says: :request-method—The HTTP request method, such as :get(), :head(), :options(), :put(), :post(), or :delete() The () should not be pre...more...
  • Reported in: B1.0 (23-Jun-19)
#85444
PDF page: 36
If the app is already up and running when you do this: We can now replace the ring.util.response reference with a reference to ring.util.httprespon...more...
Scot Brown says: Good catch. thanks. I've added a brief explanation of 'ns-unalias' in the next beta release, but I worry it might be a bit advanced. An alternate solution would be to place the changes to 'ring-app.core' before the application restart (i.e. next to the dependency inclusion). What do you think?
  • Reported in: B1.0 (15-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85406
PDF page: 37
:require should contain [muuntaja.middleware :refer [wrap-format]] not [muuntaja.middlware :refer [wrap-format] (The e in middleware is missin) (...more...
  • Reported in: B1.0 (22-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85436
PDF page: 37
In the handler function, it should be :body-params instead of :params, like so: {:result (-> request :body-params :id)} See Server Spec: github.co...more...
  • Reported in: B1.0 (22-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85437
PDF page: 37
The snippet does not work for me. 1. In the "require" there's a typo: "[muuntaja.middlware :refer [wrap-format]]", an "e" is missing in "middlewa...more...
  • Reported in: B1.0 (22-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85438
PDF page: 38
We're supposed to test the curl command _without_ the "Accept" header, so the command should be: $ curl -H "Content-Type: application/json" -X POST...more...
  • Reported in: B1.0 (23-Jun-19)
#85445
PDF page: 39
The constant switching back and forth of the handler between returning HTML (with your IP address) and the :id value in the various examples leading u...more...
  • Reported in: B1.0 (23-Jun-19)
#85450
PDF page: 40
To illustrate routes from which we can capture URI segments, we have this snippet: (def routes [["/" {:get response-handler :post res...more...
  • Reported in: B1.0 (15-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85407
PDF page: 41
(fn [{{:keys [id]} :path-params}] (response/ok (str "<p>the value is: " id "</p>")))}]]) should be (fn [{{:keys [value]} :path-params}] (res...more...
  • Reported in: B1.0 (23-Jun-19)
#85446
PDF page: 41
The text has us add /echo/:value but then says: The server will now handle the POST() method for the route: Which applies to the previous change...more...
  • Reported in: B1.0 (23-Jun-19)
#85447
PDF page: 46

empty? is already a built-in filter so this example could be better.--Sean Corfield

  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85448
PDF page: 46

"The handler accepts an addition parameter that holds the content of each block" -- should be "additional"--Sean Corfield

  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85451
PDF page: 46

"The handler accepts an addition parameter" should be "The handler accepts an additional parameter"--Corentin Henry

  • Reported in: B1.0 (23-Jun-19)
  • Fixed: 23-Jun-19, awaiting book release
#85449
PDF page: 47
This example: (fn [args context-map content] (.toUpperCase (get-in content [:uppercase :content]))) would be much clearer if it didn't use co...more...
  • Reported in: B1.0 (23-Jun-19)
#85452
PDF page: 57
The whole "Application Core" paragraph is not very clear. We just have big snippets of code without without much explanations. I had to experiment wit...more...
  • Reported in: B1.0 (23-Jun-19)
#85455
PDF page: 71
The introduction of ClojureScript doesn't say what version of which project to start with. It refers to the guestbook app that we worked on earlier, b...more...
  • Reported in: B1.0 (23-Jun-19)
#85441
PDF page: 72
The source code examples has a lot of versions of the different stages being explained in the book. But there is nothing in the book that synchronizes...more...
Scot Brown says: Thanks for the suggestion, we really appreciate it! The large number of examples are due to the fact that we clone each step from a single git repository. We'll try to minimize any jumping back and forth to keep a linear progression. Do you think it would be helpful to also add a CHANGELOG.md or READER-NOTES.md file that briefly describes each example directory?
  • Reported in: B1.0 (23-Jun-19)
#85456
PDF page: 72
The text says: "Next, let’s update our project.clj to add the plugin and provide a default configuration for it." and then shows a partial proje...more...
  • Reported in: B1.0 (23-Jun-19)
#85457
PDF page: 76

The text says:

"The > indicates that the p tag is nested inside the div tag."

But it's an h1 tag, not a p tag.--Sean Corfield

  • Reported in: B1.0 (20-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85427
PDF page: 78
After introducing message-form and home in the "Reimplementing the Form" section, there is no render statement left for the unitiated. Had to add (...more...
  • Reported in: B1.0 (23-Jun-19)
#85458
PDF page: 80
At this point, it matters a lot what state your server-side code is in! Looking at the example code in the previous ten pages, I figured that creating...more...
  • Reported in: B1.0 (20-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85428
PDF page: 82
After telling us to add an errors atom and using it in "send-message!" and "errors-component" it is not defined anywhere. I believe it needs to be ad...more...
  • Reported in: B1.0 (23-Jun-19)
#85459
PDF page: 82
string/join is introduced without any require to provide the alias. Presumably [clojure.string :as string] should be added to the :require clause in t...more...
  • Reported in: B1.0 (20-Jun-19)
  • Fixed: 22-Jun-19, awaiting book release
#85429
PDF page: 83
To add cljc support we are told to add "src/cljc" to the cljsbuild source-paths, but we also need to add it to the greater source-paths too. It could...more...
  • Reported in: B1.0 (23-Jun-19)
#85460
PDF page: 83
And there's the [clojure.string :as string] instruction, buried in a paragraph of text, on the next page after the code. For folks who get to the end ...more...
  • Reported in: B1.0 (23-Jun-19)
#85461
PDF page: 84
send-message! sprouts a third argument called messages at the end of page 84, without mention in the text, and without any corresponding changes to ho...more...
  • Reported in: B1.0 (23-Jun-19)
#85462
PDF page: 88
It seems that any existing messages in the DB at this point are going to appear differently to any new ones added through the UI: [TaggedValue: Loc...more...
  • Reported in: B1.0 (26-Jun-19)
#85481
PDF page: 91

References to code snippets in the re-frame section refer to ":messages/loading" not ":messages/loading?" as they should. --David Folkner

  • Reported in: B1.0 (23-Jun-19)
#85463
PDF page: 93
The text talks about removing messages as an argument from message-form and its call to send-message! -- it doesn't mention removing messages from the...more...
  • Reported in: B1.0 (24-Jun-19)
#85464
PDF page: 108
The pages up this point have shown how to test POST /api/message but I decided to also test GET /api/messages. At first, I thought I was getting th...more...
  • Reported in: B1.0 (24-Jun-19)
#85465
PDF page: 108
Re: local date/time and inst -- I confirmed this by editing guestbook.db.core and commenting out the extension of jdbc/IResultSetReadColumn so DB time...more...