small medium large xlarge

The latest version of the book is B2.0, released about 1 month 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.

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: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81417
PDF page: 12
Multiple problems with agreement in the following sentence: "Processes all have mailboxes where they receives messages in a queue, then processes them...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81418
PDF page: 12
You begin a paragraph with these words: "We can think about state on two levels. On the application level, . . . " but you never (as far as I can see)...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81420
PDF page: 19
Beginning with the sentence "There are four functions we could use to do this" it seems clear that you're talking about the documentation for Elixir's...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81423
PDF page: 21
A footnote pointing to these functions could help to move the reader to actually read the docs. Context, this sentence: "The Agent module includes...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (25-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81471
PDF page: 21
"(...) that wraps the bare Agent.start_link/2 call." should be Agent.start_link/1 (based on the code below the text): def start_link() do Agen...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (28-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81484
PDF page: 21
On page 17 we define the ````'defmodule IslandsEngine.Coordinate' in the file 'lib/coordinate.ex'. On page 21 we add a 'start_link' function to that s...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81421
PDF page: 23

The third paragraph starts with "In in_island/1, we use", but perhaps it should say "in_island?/1".--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81422
PDF page: 23
In the first paragraph, the purpose is different from the last code sample in the previous page, but the difference is rather subtle. Perhaps it would...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81424
PDF page: 23
The description in the third paragraph seems to confuse the layers of responsibility in the implementation. Here's the wording: "we use the Coordinate...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (24-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81470
PDF page: 23
def in_island?(coordinate) do case island(coordinate)) do <- must be island(coordinate) :none -> false _ -> true end end I love your book-...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (11-Apr-17)
  • Fixed: 12-Apr-17, awaiting book release
#81387
Paper page: 23

The case statement in the definition for in_island? contains an extra close paren.--William Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (11-Apr-17)
  • Fixed: 12-Apr-17, awaiting book release
#81388
PDF page: 23
Half-way down the page, the code fragment at the wrapped end of the line is not formatted like the earlier code in the same statement. in_island: :...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81425
PDF page: 26
The first paragraph begins "At the moment, the coordinate reports that it isn’t in an island at all." This sentence seems unclear, because we have ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81426
PDF page: 28
The first paragraph is "Let’s just check to make sure that works." This might be an interesting place to talk about how to get the new code into ie...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81427
PDF page: 28
Last paragraph: "To make sure that the guard clause works, let’s try calling IslandsEngine. Island.replace_coordinates/2 with a single coordinate." ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81428
PDF page: 30
This section closes with "Now that we can model one-to-many relationships, let’s move on to something just a little more complex." This feels a lit...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (01-May-17)
  • Fixed: 19-May-17, awaiting book release
#81492
PDF page: 30
There may be missed "functional" opportunities with regard to the capture operator here. The '&(&1)' usage is discussed in a sidebar on p.39(47) even ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81429
PDF page: 31

Disagreement in number: "and a coordinate belong to"--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81430
PDF page: 32

Is it possible to use a Range in the definition of @numbers? What about when defining @letters?--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81431
PDF page: 32

"function to enumerate over" . maybe should be "function to iterate over"--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (21-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81462
PDF page: 32
On page 31/32 you start the Board module. However, you omit the 'end' of the module. This is on contrast to the IslandSet module that you start on pag...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (01-May-17)
  • Fixed: 19-May-17, awaiting book release
#81493
PDF page: 32
"This uses two “for” comprehensions." Wouldn't it be more accurate(?) to state: "This comprehension uses two generators." elixir-lang.org/get...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81432
PDF page: 34
I'm still sensing a little resistance to telling a coordinate which island it belongs to. I wonder if this was a premature optimization leading to dup...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (15-Apr-17)
  • Fixed: 15-Apr-17, awaiting book release
#81410
PDF page: 35

coord = get_coordinate(board, key))

exceeding closing parentheses --Patrick De Marta

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (21-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81458
PDF page: 35
in this bit of code; defp string_body(board) do Enum.reduce(keys(), "", fn key, acc -> coord = get_coordinate(board, key)) acc <...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (12-May-17)
  • Fixed: 19-May-17, awaiting book release
#81536
PDF page: 35

Extra closing parenthesis in:

coord = get_coordinate(board, key))--Jaime Iniesta

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81433
PDF page: 37

Consider expanding the first sentence of the last paragraph to read "We use an empty IslandSet struct as the initial accumulator."--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81434
PDF page: 37
Consider clarifying the second sentence of the last paragraph as follows: "This will be passed into each iteration as the set[typeset the word 'set' a...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81435
PDF page: 37
Consider adding "This won't compile yet because we haven't written the keys/0 function yet." at the end of the paragraph just above the definition of ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81436
PDF page: 38
Examples from iex in the middle of the page do not have color syntax highlighting, in contrast to the examples near the bottom of the page.--Daniel As...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81437
PDF page: 38

Change "Our new keys/1 function fixes" to "Our new keys/0 function fixes"--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (01-May-17)
  • Fixed: 19-May-17, awaiting book release
#81494
PDF page: 38
The "nil" atoms should be ":none" in : iex> island_set = %IslandSet{} %IslandsEngine.IslandSet{atoll: nil, dot: nil, l_shape: nil, s_shape: nil, ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81438
PDF page: 39

It would be nice if the output of the last iex command on the previous page could be kept together with the command, widows/orphans--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81439
PDF page: 39
In the call-out "A New Construct", would it be accurate and useful to add a final sentence as follows? "Similarly, &(&1.in_island) is equivalent to th...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81441
PDF page: 40
By the start of the section on page 40 I'm feeling the lack of any code to enforce valid shapes on the coordinates added to an Island. You're probably...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81442
PDF page: 41
There's a disconnect between the last paragraph on p40 and the diagram at the top of p41. You've just listed three keys for the struct—:name, :board, ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81443
PDF page: 41
Throughout the chapter, whenever you create a to_string function and it displays the :none atom, I find myself wishing there could be an atom like :no...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (28-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81483
Paper page: 41
def start_link(name \\ :none) do {:ok, board} = Board.start_link {:ok, island_set} = IslandSet.start_link Agent.start_link(fn -> ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81495
PDF page: 41
"Notice that we did not set a value for the :name key in the start_link/0 function." (Probably left over from a previous edit?) 1. The arity is 's...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (16-Apr-17)
  • Fixed: 16-Apr-17, awaiting book release
#81415
PDF page: 42
Paper page: 34
three methods are presented: def coordinate_hit?(board, key) do get_coordinate(board, key) |> Coordinate.hit? end def set_coordinate_in_i...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81444
PDF page: 42
The word "initialize" in this sentence, "Once we have that, we can initialize the struct and see what we get", seems to be at odds with the following ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (12-Apr-17)
  • Fixed: 12-Apr-17, awaiting book release
#81392
PDF page: 43

contains extra close paren in line:
coord = get_coordinate(board, key))--Ruslan Kenzhebekov

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81446
PDF page: 44
In the diagrams on page 44, would be accurate and/or useful to show only a single circle for Coord, with both Board and Island pointing to the same ci...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81447
PDF page: 45
In the code examples, the use of a1 might be unfortunate because in some typefaces, the 1 and the closing square brace look too similar. Instead of "I...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (18-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81445
PDF page: 46
For those of us who are trying to imagine reimplementing our business systems using the approaches and techniques in this book, the biggest question w...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (21-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81467
PDF page: 46
Throughout this chapter, the dimensions of the board require the reader to scroll back after displaying the current board. You also avoid displaying t...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81496
PDF page: 49

"given a list other users an individual follows"

should probably be

"given a list _of_ other users an individual follows"
--Peer Reynders

  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81497
PDF page: 52
"We’ll see them in much more detail when we talk about Supervisors in the __(as yet) unwritten chapter.design_for_recovery__, and" Presumably this ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81476
PDF page: 56
Formatting: the error message about "unexpected message" will naturally be wrapped by iex at the right margin. There's no reason to avoid wrapping it ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81498
PDF page: 56
"iex> send(game, :first)" I understand why 'send' is used in this context. That being said I was under the impression that using raw concurrency pr...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81477
PDF page: 57
It would be good to manage widows and orphans so that you don't get a single line of code appearing on the page previous or subsequent to the other pa...more...
Lance Halvorsen says: That will happen at a later stage in the process. Thanks!
  • Reported in: B2.0 (02-May-17)
#81499
PDF page: 58
"_from is the PID of the calling process," 1. Actually 'from() :: {pid, tag :: term}' - Tuple describing the client of a call request. hexdocs.pm/...more...
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81478
PDF page: 62

Formatting missing from last code sample on the page (IO.puts IslandsEngine...)--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81500
PDF page: 64
"iex> IO.puts IslandsEngine.Player.to_string(state.player2) %Player{:name => none," the current version of 'name_to_string' actually prints ":non...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81475
PDF page: 65
Right below the code for gen_server/lib/game.ex def set_island_coordinate(pid, player, island, coordinates) [..] end" it reads: "Sin...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81479
PDF page: 65
On page 65 you talk about adding Coordinate to the aliases we're already using. However, the next line does not match any alias statement already in g...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81501
PDF page: 65
"Since we’re using the Coordinate module, let’s add that to the aliases we’re already using. alias IslandsEngine.{Coordinate, Island, IslandSet}" ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (11-Apr-17)
  • Fixed: 12-Apr-17, awaiting book release
#81389
PDF page: 65
At the bottom of page 65 it probably meant to have an image. It has this line instead <imagedata fileref=”images/gen_server/set_island_coords_path.pd...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (26-Apr-17)
  • Fixed: 19-May-17, awaiting book release
#81480
PDF page: 69

Formatting missing from first line of second code sample, right after the words "Ok, let's see what player1's state looks like now."--Daniel Ashton

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
  • Fixed: 19-May-17, awaiting book release
#81502
PDF page: 70

"Let’s go back to Game.get_opponent/2."

In the current implementation it's simply 'Game.opponent/2', not 'Game.get_opponent/2'.
--Peer Reynders

Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (02-May-17)
#81503
PDF page: 70
The multi-clause nature of 'opponent/2' could potentially be more strikingly emphasized by using the short form function definition syntax, i.e. ...more...
  • Reported in: B2.0 (02-May-17)
#81504
PDF page: 72
The pipeline in 'handle_call({:guess, player, coordinate}, _from, state)' could be made more "conformant" with the style guide github.com/christopher...more...
  • Reported in: B2.0 (02-May-17)
#81505
PDF page: 75
"def win?(opponent) do" in (player.ex) Naming the argument supplied to 'Player.win?/1' 'opponent' in 'Game.win_check' makes sense; however the name...more...
  • Reported in: B2.0 (02-May-17)
#81506
PDF page: 76
"iex> GenServer.start_link(Game, {:ok, "Frank"}, name: :islands_game)" It could beneficial to briefly mention in a footnote that there is some "key...more...
  • Reported in: B2.0 (11-Apr-17)
  • Fixed: 12-Apr-17, awaiting book release
#81390
PDF page: 77

Is the empty space from the middle of page 77 intended? --voger

Lance Halvorsen says: Thanks, that was not intentional. I'll check into how that happened.
  • Reported in: B2.0 (02-May-17)
#81507
PDF page: 79
Why use/prefer def stop(pid) do GenServer.cast(pid, :stop) end def handle_cast(:stop, state) do {:stop, :normal, state} end ### ov...more...
  • Reported in: B2.0 (22-May-17)
#81568
PDF page: 82
The handle_call/3 previously included opponent = opponent(state, player) opponent_board = Player.get_board(opponent) Player.guess_coordinate(opp...more...
  • Reported in: B2.0 (13-Apr-17)
  • Fixed: 14-Apr-17, awaiting book release
#81403
PDF page: 84
I think "We’re at the beginning of a sea change in web development." was meant to be "We’re at the beginning of a sea of change in web development." ...more...
Lance Halvorsen says: Thanks so much for you kind words about the book! Very glad you're enjoying it. <3 <3 <3 Thanks for this report as well. I do think the original is correct, though.
  • Reported in: B2.0 (18-May-17)
  • Fixed: 20-May-17, awaiting book release
#81544
PDF page: 91
After "The first one we need to tackle is callback_mode/0", the code shown for "gen_statem/lib/rules.ex" shows a whole lot of new functions that have ...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (12-Apr-17)
  • Fixed: 13-Apr-17, awaiting book release
#81396
PDF page: 93
On page 93, when trying to run: iex> {:ok, pid} = Rules.start_link() I'm receiving the following... 14:06:03.181 [error] ** State machine #PI...more...
Lance Halvorsen says: Apologies! There's a typo in the code file for Rules.ex. If you change the start_link function to look like the following, you should be good to go: def start_link do :gen_statem.start_link(__MODULE__, :ok, []) end
  • Reported in: B2.0 (03-May-17)
#81511
PDF page: 94
extra parenthesis “agent/lib/board.ex ​  ​def​ to_string(board) ​do​ ​  ​"​​%{"​ <> string_body(board) <> ​"​​}"​ ​  ​end​ ​  ​  ​defp​ st...more...
  • Reported in: B2.0 (14-Apr-17)
  • Fixed: 16-Apr-17, awaiting book release
#81406
PDF page: 115
Hi Lance, First of all, thanks for taking the time to write this book. It's been a great read so far! I think that some code went missing in the...more...
Lance Halvorsen says: Thanks so much for the kind words. So glad you're enjoying the book! Thanks for this report as well. :)
  • Reported in: B2.0 (14-Apr-17)
  • Fixed: 16-Apr-17, awaiting book release
#81407
PDF page: 116
Also on page 116 defp guess_reply({:error, :action_out_of_sequence}, _opponent_board, _coordinate) do {:error, :action_out_of_sequence} end m...more...
Lance Halvorsen says: Thanks again!
  • Reported in: B2.0 (18-Apr-17)
#81448
PDF page: 117
The included source /gen_statem/lib/game.ex for this chapter does not include def call_demo(game) do GenServer.call(game, :demo) end ...more...
  • Reported in: B2.0 (19-Apr-17)
#81449
PDF page: 117
For the command: "iex> Game.guess_coordinate(game, :player1, :a1)" I was receiving the error: ** (EXIT from #PID<0.112.0>) an exception was raised:...more...
  • Reported in: B2.0 (22-May-17)
#81566
PDF page: 117
At this point there was some bug I could not easily trace so I downloaded the source code following the links from the beginning of the book. But it d...more...
  • Reported in: B2.0 (19-Apr-17)
#81450
PDF page: 118
Using Erlang/OTP 19, Elixir 1.4.2: Towards the bottom of the page, when player1 guesses out of turn, I get a "bad return from state function" error...more...
  • Reported in: B2.0 (20-Apr-17)
#81455
PDF page: 118
I figured out how to solve my state machine woes. I am not entirely sure of all the possible valid returns from :gen_statem, so I had to experiment q...more...
  • Reported in: B2.0 (27-Apr-17)
#81481
Paper page: 123

join(game)

should be

join(game_channel)

as the game object is not defined at this point.--Jan Hendrik Rust

  • Reported in: B2.0 (28-Apr-17)
#81485
Paper page: 127
In the second paragraph after the first definition of the Bicycle class, first sentence, you have the word "out" when you wanted "our" before the word...more...
  • Reported in: B2.0 (28-Apr-17)
#81482
Paper page: 133
game.on("player_added", response => { console.log("Player Added", response) }) should be game_channel.on("player_added", response => { consol...more...
  • Reported in: B2.0 (04-May-17)
#81513
PDF page: 133
Presumably it should be defmodule IslandsEngine.Application do rather than defmodule IslandsEngine do i.e. the code belongs in island...more...
  • Reported in: B2.0 (04-May-17)
#81514
PDF page: 135
Both iex> Application.start(:islands_engine) and iex> :application.start(:islands_engine)` are used and both work - but it does leave m...more...
  • Reported in: B2.0 (04-May-17)
#81515
PDF page: 137
At the point of $ mix phoenix.new islands_interface --no-ecto It wasn't clear to me where in relation to the islands_engine directory w...more...
  • Reported in: B2.0 (16-Apr-17)
  • Fixed: 16-Apr-17, awaiting book release
#81413
PDF page: 148
Paper page: 144
Hello, I'm reading the part for calling IslandsEngine from the Phoenix controller : def test(conn, %{"name" => name}) do {:ok, _pid} = Islands...more...
Lance Halvorsen says: Thanks for reporting this. Yes, I got a little out of sync with the beta releases. This will be the correct code when the supervisor chapter is released.
  • Reported in: B2.0 (05-May-17)
#81519
PDF page: 157
iex> JOIN game:moon to IslandsInterface.GameChannel Transport: Phoenix.Transports.WebSocket Parameters: %{"screen_name" => "moon"} [info] Replied...more...
  • Reported in: B2.0 (05-May-17)
#81520
PDF page: 161

Returned Greeting: World!}

the closing brace is extraneous, should simply be:

Returned Greeting: World!

--Peer Reynders

  • Reported in: B2.0 (05-May-17)
#81521
PDF page: 167
{:reply, {:error, %{reason: inspect(reasonn}}, socket} typo "reasonn}}" should be {:reply, {:error, %{reason: inspect(reason)}}, socket}--Peer R...more...
  • Reported in: B2.0 (08-May-17)
#81525
PDF page: 169
For the JavaScript function set_island_coordinates, the params variable needs to be declared ("var"). Here's the corrected function in its entirety...more...
  • Reported in: B2.0 (05-May-17)
#81522
PDF page: 171
iex> fsm = Game.call_demo(game).fsm I had to use this instead iex> fsm = IslandsEngine.Game.call_demo({:global,"game:moon"}).fsm - there is n...more...
  • Reported in: B2.0 (15-Apr-17)
  • Fixed: 16-Apr-17, awaiting book release
#81409
PDF page: 177
The wrong file name is given when adding IslandsInterface.Presence to the supervised children. Correct file name: Phoenix 1.2: /lib/islands_interf...more...
Lance Halvorsen says: Thanks!
  • Reported in: B2.0 (05-May-17)
#81523
PDF page: 180
The "if" in "authorized?" is redundant defp authorized?(socket, screen_name) do number_of_players(socket) < 2 && !existing_player?(socket.screen...more...