Susan Harkins (264) [Avatar] Offline
#1
Please post errors in the published version of Akka in Action here. We'll publish a comprehensive list for everyone's convenience. Thank you!

Susan Harkins
Errata Editor
Dimitar Kostov (7) [Avatar] Offline
#2
Is there such thing as "published version of Akka in Action" ?
Susan Harkins (264) [Avatar] Offline
#3
Due for release any day. Did I misunderstand the question?

Susan H.
Dimitar Kostov (7) [Avatar] Offline
#4
Nope, I just think it would be long time before we'll need that topic
303763 (7) [Avatar] Offline
#5
eBook pages 10 and 12: Sections 1.4.2 and 1.4.3 have the same title, Traditional scaling and interactive use: polling.
Graeme Ludwig (6) [Avatar] Offline
#6
In section 3.2.2, SendingActor example, the text says:

"Since the SortEvents message contains a random vector of events, we can’t use an expectMsg(msg); we can’t formulate an exact match for it. In this case we use expectMsgPF, which takes a partial function just like the receive of the actor."

This seems incorrect to me. Whilst using expectMsgPF() is fine, especially when constructing more involved tests, the example given:

expectMsgPF() {
case SortedEvents(events) =>
events.size must be(size)
unsorted.sortBy(_.id) must be(events)
}

could be replaced with:

expectMsg(SortedEvents(unsorted.sortBy(_.id)))
13411 (1) [Avatar] Offline
#7
In section 2.2.1 - Structure of the App - it mentions "The app consists of two actor classes in total."

In the figure 2.1, there are three actors referred to - RestApi, BoxOffice and TicketSeller - or am I missing something?
AllanJacobs (47) [Avatar] Offline
#8
In Section 3.3 (page 63): "You’ve already seen an example of two-way messages in the multithreaded test for the SendingActor style actor, where we used a GetState message that contained an ActorRef ."

The test that used GetState was for the SilentActor type.
AllanJacobs (47) [Avatar] Offline
#9
Listing 5.9 and the accompanying text have a problem. The text says that a Future[Nothing] is returned when an exception is thrown with no more information than an address. In "about this book", "Scala is used in all examples, and all code is tested with Scala 2.11.8."

$ scala
Welcome to Scala 2.11.8 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121).
Type in expressions for evaluation. Or try :help.

scala> :paste
// Entering paste mode (ctrl-D to finish)

import scala.concurrent._
import ExecutionContext.Implicits.global
val futureFail = Future { throw new Exception("error!")}
futureFail.foreach(value => println(value))

// Exiting paste mode, now interpreting.

import scala.concurrent._
import ExecutionContext.Implicits.global
futureFail: scala.concurrent.Future[Nothing] = Failure(java.lang.Exception: error!)
401650 (1) [Avatar] Offline
#10
Page 131:
The frontend needs the new the backend configuration to be able to connect to the remote BoxOffice. ?
The frontend needs the new backend configuration to be able to connect to the remote BoxOffice.

Page 139:
In case you just read over the previous paragraph and though “meh,” read that paragraph again. ?
In case you just read over the previous paragraph and thought “meh,” read that paragraph again.

Page 179:
ActorRef where messages are to be ?
ActorRef where messages are to be sent

Page 186:
the flexibility to processes messages differently ?
the flexibility to process messages differently

Page 194:
The next line in the configuration defines the logic which that has to be used, in this case, the balancing pool actor. ?
The next line in the configuration defines the logic which has to be used, in this case, the balancing pool actor.

Page 199:
Not a typo but the router creating itself in `preStart()` seems off:
system.actorOf(Props( new GetLicenseCreator(2)),"Creator")


Page 206:
Using virtual nodes is done to get a bigger change to equally spread all the messages over the routees. ?
Using virtual nodes is done to get a bigger chance to equally spread all the messages over the routees.

Page 219:
val DeliverOrder = TestProbe()
?
val deliverOrder = TestProbe()


Page 224:
To support the implementation of an custom EventBus, ?
To support the implementation of a custom EventBus,

Page 227 and onward:
Switching between guarantee/guaranty, and guarantees/guaranties, respectively

Pages 264, 266, 269, 270
Only on 270 a newline is added to the XML string in the code examples:
xml.toString().replace("\n", "") 
?
xml.toString().replace("\n", "") + "\n"


Page 313:
if(sources.size ==0)
?
if(sources.size == 0)
or
if(sources.size.isEmpty)


Page 342:
In listing 14.14 shouldn't it be
useRole = Some("worker")
?

Page 409:
The number workers ?
The number of workers

General notes:

* Change passive voice to active where possible. It makes a sentence clearer when the reader knows who the actor is (pun intended).

* The phrase "is left as an exercise for the reader", which you use quite often (six times in chapter 13 alone), has a condescending undertone for many (cf. https://academia.stackexchange.com/questions/20084/is-using-the-phrase-is-left-as-an-exercise-for-the-reader-considered-good). Perhaps you want to consider a different expression or link to resources that provide further explanation.

423996 (1) [Avatar] Offline
#11
in the pdf version on page 74:

case class SortEvents(unsorted: Vector[Event])
- "The SortedEvent message is sent to the SendingActor."

case class SortedEvents(sorted: Vector[Event])
- "The SortedEvent message is sent to the receiver after the SendingActor has sorted it."


so the problem is that the wrong class name was mentioned in each explanation to the source code