small medium large xlarge

The latest version of the book is P1.0, released 8 months 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: B8.0 (15-Jan-18)
#82501
PDF page: xvii
On pages xvii and xviii, use of commas after chapter titles is inconsistent. For example: "In Chapter 2, Model Data and Behavior, on page 9, we’ll ...more...
  • Reported in: B8.0 (15-Jan-18)
#82502
PDF page: 1

There are only two clauses in "We’re about to go exploring, and it’s going to be a blast.",
so I don't think the comma is needed.--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82503
PDF page: 5
In "The players can move the islands around as much as they like until they say that they are set.", the multiple uses of "they" are distracting and a...more...
  • Reported in: B8.0 (15-Jan-18)
#82504
PDF page: 10

I'd change "It frees us to focus ..." to "This frees us to focus ..."--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82505
PDF page: 11

The reuse of the word "end" seems awkward here: "In the end, we end up ...".--Rich Morin

  • Reported in: P1.0 (25-Feb-18)
#82822
PDF page: 11
The output when running the command to create the new project is missing the file .formatter.exs that is created in latest versions of elixir. --Kos...more...
  • Reported in: B8.0 (15-Jan-18)
#82506
PDF page: 12

I'd explain the use of the term "engine".--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82507
PDF page: 13
The board images have poor contrast between blue and green (at least on my printer's output). Be sure that the published book does not have this probl...more...
  • Reported in: P1.0 (08-Feb-18)
#82758
PDF page: 14
Thank you for the book. I noticed that you are using the final placement of coordinate.ex here as a reference that includes model_data in the file pa...more...
  • Reported in: B8.0 (15-Jan-18)
#82509
PDF page: 14

I'd change "We should be careful ..." to "However, we should be careful ...".--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82510
PDF page: 15
I'd rewrite "Make sure that you define @enforce_keys before defstruct—otherwise it won’t have any effect, and you’ll get a warning saying that @enforc...more...
  • Reported in: P1.0 (29-Jan-18)
#82670
PDF page: 15

test

  • Reported in: P1.0 (29-Jan-18)
#82671
PDF page: 15

test

  • Reported in: B8.0 (15-Jan-18)
#82511
PDF page: 16
Page 14 says "The first thing we’ll need is a Coordinate module that aliases itself." Also, the code for the Coordinates and Guesses modules each incl...more...
  • Reported in: P1.0 (25-Feb-18)
#82823
PDF page: 16
The listing for the guesses.ex (when clicking on the link) has the following for alias: alias IslandsEngine.{Coordinate, Guesses} while the listin...more...
  • Reported in: B8.0 (15-Jan-18)
#82512
PDF page: 18
I'd change "Once that rebinding happens, the original value will fall out of scope and be garbage collected." to "Once that rebinding happens, the ori...more...
  • Reported in: B8.0 (15-Jan-18)
#82513
PDF page: 18

I'd change "Now let’s add coordinate2 to the :hits set as well:" to "Now let’s add coordinate2 to the :hits set, as well:".--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82514
PDF page: 18

I'd change "It kept the set unique." to "MapSet kept the set unique.".--Rich Morin

  • Reported in: B8.0 (15-Jan-18)
#82515
PDF page: 19

I'd change "Let’s create new Island module at ..." to "Let’s create a new Island module at ...".--Rich Morin

  • Reported in: P1.0 (17-Feb-18)
#82783
PDF page: 19
The first code snippet does not compile. It's missing an "alias __MODULE__". Either that expression should be added or "%IslandsEngine.Island{...}" sh...more...
  • Reported in: P1.0 (29-Mar-18)
#82951
PDF page: 47

"fine state machine" should probably be "finite state machine"--Dmitry Medvedev

  • Reported in: P1.0 (28-Mar-18)
#82949
PDF page: 72
After sending the message send(game, :first) iex reports this as an [error] not [warn] and also the word message is missing from 'received unexpect...more...
  • Reported in: P1.0 (08-Apr-18)
#82975
PDF page: 80
On the book the with keyword is in a different line than in the actual game.ex file. Similar to do and else clauses with the {:ok, rules} .. in a diff...more...
  • Reported in: P1.0 (14-Apr-18)
#83004
PDF page: 87
Last sentence of the page reads: We'll need to alias the Game and Rules modules ... Does the Rule module need to be aliased, as the following page...more...
  • Reported in: P1.0 (25-Mar-18)
#82938
PDF page: 87
Top of page, in the with statement, missing line (board is not defined) board <- player.board, full statement should be with {:ok, rules} <- ...more...
  • Reported in: P1.0 (25-Mar-18)
#82939
PDF page: 87

There is bug in my last bug report...

Please do not consider my last bug report. --hung fioramonti

  • Reported in: P1.0 (29-Jan-18)
#82680
PDF page: 92
when calling :sys.replace_state, the parameter for the anonymous function (data) does not correspond to anything in the function body suggest chang...more...
  • Reported in: B8.0 (22-Jan-18)
#82530
PDF page: 94
Rather than creating a new instance of Rules in IslandsEngine.Game.init/1 with %Rules{}: {:ok, %{player1: player1, player2: player2, rules: %Rules{...more...
  • Reported in: B8.0 (22-Jan-18)
#82529
PDF page: 101
GenServer callback for :position_island does not handle {:error, :overlapping_island} in the with clause. As the reply is simply an echo of the err...more...
  • Reported in: P1.0 (19-Apr-18)
#83022
PDF page: 103
** (EXIT from #PID<0.122.0>) evaluator process exited with reason: :kaboom should be: ** (EXIT from #PID<0.122.0>) shell process exited with rea...more...
  • Reported in: P1.0 (21-Apr-18)
#83030
PDF page: 108
The output in iex after running Game.child_spec("Kusama") (in Elixir 1.6.4) is as follows (no restart, shutdown, type information) %{id: IslandsE...more...
  • Reported in: P1.0 (13-Mar-18)
#82908
PDF page: 114
This is a really good book. The topics you covered are exactly what I was seeking. Very well done separation of concerns - a good example of how to st...more...
  • Reported in: P1.0 (24-Apr-18)
#83040
PDF page: 139

The line:

IslandsEngine.Worker.start_link(arg)

is missing from the book, but it is generated in the code (Elixir 1.6.4).

  • Reported in: P1.0 (23-Feb-18)
#82819
Paper page: 146
Adding a New Dependency.... "Only two steps are involved" The first is to add :islands_engine to the compile-time deps function. That is shown corr...more...
  • Reported in: P1.0 (27-Jul-18)
#83423
PDF page: 146
[Location 5855 in Kindle version; under "Adding a New Dependency"] I added '{​: islands_engine​, ​ path: ​ ​"​../islands_engine"​}' to 'deps/0'. Bu...more...
  • Reported in: P1.0 (18-Jul-18)
#83380
PDF page: 149

path `islands_interface/web/` should be `islands_interface_web/` in the file paths for templates, router.ex & controllers--Craig Patterson

  • Reported in: P1.0 (05-Jun-18)
#83231
PDF page: 159

defmodule IslandsInterface.UserSocket do

should be

defmodule IslandsInterfaceWeb.UserSocket do

--Kosmas Chatzimichalis

  • Reported in: P1.0 (02-Jun-18)
#83210
PDF page: 160

scope "/", IslandsInterface do

should be

scope "/", IslandsInterfaceWeb do
--Kosmas Chatzimichalis

  • Reported in: P1.0 (05-Jun-18)
#83232
PDF page: 160
iex> c "lib/islands_interface_web/channels/game_channel.ex" should be iex> c "lib/islands_interface_web/game_channel.ex" --Kosmas Chatzimichali...more...
  • Reported in: P1.0 (14-Feb-18)
#82778
PDF page: 160
Template file path is wrong. /islands_interface/web/templates/page/index.html.eex maybe this should /islands_interface/lib/islands_interface_...more...
  • Reported in: P1.0 (21-Mar-18)
#82937
Paper page: 160
Really learning a lot from this book - I highly recommend it. I don't know that this is an actual error or that my browser is not setup quite right...more...
  • Reported in: P1.0 (02-Jun-18)
#83211
PDF page: 162
[debug] Processing by IslandsInterface.PageController.test/2 should be [debug] Processing by IslandsInterfaceWeb.PageController.test/2 --Kosmas...more...
  • Reported in: P1.0 (05-Jun-18)
#83228
PDF page: 169

located at lib/islands_interface_web/islands_interface_web.ex

should be

lib/islands_interface_web.ex
--Kosmas Chatzimichalis

  • Reported in: P1.0 (05-Jun-18)
#83229
PDF page: 169

socket "/socket", IslandsInterface.UserSocket

should be

socket "/socket", IslandsInterfaceWeb.UserSocket--Kosmas Chatzimichalis

  • Reported in: P1.0 (05-Jun-18)
#83230
PDF page: 170

web/channels/user_socket.ex

should be

lib/islands_interface_web/channels/user_socket.ex
--Kosmas Chatzimichalis

  • Reported in: P1.0 (14-Feb-18)
#82779
PDF page: 171

Typo : JS command does not work
> new_game(game)

Ought to be :
> new_game(game_channel)

--Christophe GAREYTE

  • Reported in: P1.0 (31-Jan-18)
#82714
PDF page: 174
with Elixir 1.6, the call to String.to_existing_atom(island) where island = "atoll" fails as: [debug] INCOMING "position_island" on "game:moon" to ...more...
  • Reported in: P1.0 (27-Jul-18)
#83424
PDF page: 246
Figured it out. I created the islands_interface inside islands_engine's lib. I thought it was an umbrella project. I'd suggest tweaking the lang...more...