small medium large xlarge

The latest version of the book is P1.0, released about 1 month 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: B6.0 (10-Nov-19)
#85990
PDF page: 6
On page 6, the path mentioned /lib/counter/core.ex. But, this is not the same on a windows machine. After running mix new counter, we have a /counter/...more...
  • Reported in: B6.0 (11-Nov-19)
#85993
PDF page: 7
In the Clock example, the print statement when running the program should start with: The clock is ticking with 0 The clock is ticking with 1... ...more...
  • Reported in: P1.0 (12-Jan-20)
#86253
PDF page: 28

The two function definitions at the top of the page seem to be invalid, as the function name is missing.--Kerry Buckley

  • Reported in: B7.0 (30-Nov-19)
#86088
PDF page: 90
Maybe it should be mentioned, that the downside of the stream method for random generators is, that without setting the test timeout explicitly or wi...more...
  • Reported in: B7.0 (17-Nov-19)
#86020
PDF page: 92
All the setup functions in chapter 5 merge in the values they set up in the context. This is not needed since ExUnit handles that for you. See: ex_un...more...
  • Reported in: B7.0 (17-Nov-19)
#86017
PDF page: 111
In the Math module, the quiz_fields function return a title that is an atom. This makes the QuizValidator.validate_title on page 115 (PDF) fail since ...more...
  • Reported in: P1.0 (29-Dec-19)
#86192
PDF page: 117
Int the Validator module, function "require" maybe missing the "d" letter because "require" is a macro in Elixir I suppose? When I type these in my e...more...
  • Reported in: P1.0 (01-Jan-20)
#86208
PDF page: 117
The check_field function returns a list of errors in all cases but one: defp check_field(:ok, _errors, _field_name), do: :ok This is a bug because l...more...
  • Reported in: B7.0 (17-Nov-19)
#86018
PDF page: 122
The QuizManager have API-functions for build_quiz, add_template and lookup_quiz_by_title yet only lookup_quiz_by_title is used in the Mastery module. ...more...
  • Reported in: B7.0 (17-Nov-19)
#86019
PDF page: 123
The QuizSession have API-functions for select_question and answer_question but they are not used by the Mastery module. Instead there are calls to Gen...more...
  • Reported in: B6.0 (04-Nov-19)
#85968
PDF page: 145
The description of restart option of child_spec is wrong, they are :permanent, :temporary and :transient, they got confused with the supervisor strate...more...
  • Reported in: B6.0 (04-Oct-19)
#85839
PDF page: 147
It seems like some code is missing. This section should probably suggest updating the following functions in the Mastery module to def select_ques...more...
  • Reported in: B7.0 (01-Dec-19)
#86096
PDF page: 148
The printed Mastery module code does not reflect the archived code. The API implementation for answer_question/2 and select_question/1 calls the G...more...
  • Reported in: P1.0 (16-Dec-19)
#86152
PDF page: 148
In "Touch Up the API Layer", the select_question and answer_question functions _do_ need to be modified. In both, the first argument to GenServer.call...more...
  • Reported in: B7.0 (25-Nov-19)
#86069
PDF page: 149
If the Math quiz title is an atom the QuizValidator will fail. If it is a String the output would be different. iex(4)> title = Math.quiz.title :s...more...
  • Reported in: B6.0 (11-Oct-19)
#85863
PDF page: 166

Missing implementation of add_template in proctor.ex--Jake Van Alstyne

  • Reported in: P1.0 (17-Dec-19)
#86154
PDF page: 166
The implementation of add_template used in start_quiz is missing from the book. def add_template(quiz, template_fields) do QuizManager.add_tem...more...
  • Reported in: B7.0 (01-Dec-19)
#86097
PDF page: 167
"We will need to revise the QuizManager to return the active sessions for a quiz and also adapt QuizSession to end the sessions for a given title as o...more...
  • Reported in: P1.0 (19-Dec-19)
#86160
PDF page: 176

With Elixir 1.9.4, use Mix.Config is deprecated in favor of import Config.--Andrew Kraut

  • Reported in: B6.0 (28-Oct-19)
#85941
PDF page: 181

Bullet list under the heading "Integrate MasteryPersistence Into Mastery" -

2nd bullet 3rd word: "perstence" instead of "persistence"--Greg Jastrab

  • Reported in: B7.0 (07-Dec-19)
#86120
PDF page: 182
The mastery_persistence dependency in mastery's mix.exs has incorrect path, it should be: {:mastery_persistence, path: "mastery_persistence"} --Jo...more...
  • Reported in: B7.0 (08-Dec-19)
#86133
PDF page: 189
_We’d just replace the SessionServer with a SessionChannel, and that Channel module would accept the exact same messages, though we might not choose t...more...
  • Reported in: B7.0 (08-Dec-19)
#86136
PDF page: 201
> Finally, we make sure the function in fact records responses with a simple > aggregate call to our Repo that counts distinct :id values. This is...more...
  • Reported in: P1.0 (05-Jan-20)
#86231
PDF page: 329
When writing test for MasteryPersistance it's needed to change the Sandbox mode to manual. Otherwise transaction will be committed and data leaked bet...more...