By Developers, For Developers

Historical errata for Practical Microservices

PDF PgPaper PgTypeDescriptionFixed onComments
117TYPO

Kindle edition, location 117 of 5116, minor typo:
“The get this working we need:” —>
“To get this working we need:”

2019-07-11Thank you!
13ERROR

exports.down = knex => knex.schema.dropTable(‘read_model_pages’) should be exports.down = knex => knex.schema.dropTable(‘videos’)

2019-07-11Thanks for catching this, Steven, and thanks for reading.
44TYPO

Listing numbers that referes to lines in code are wrong. All of them has ‘1’.

2019-07-11Hey Edgar, I'm having trouble finding the listing that you're referring to. The only listing on page 44 (at least in the pdf that I'm looking at) is for video-tutorials/src/message-store/write.js, and I'm not seeing the 1s that you describe. I know what causes that sort of thing to happen, but I don't see it in this listing. \n \nCan you let me know what the surrounding context is? \n \nThanks for reading!
33TYPO

Second paragraph starting with “Now,”, it’s written “Now, ff”. I believe it’s meant to be “Now, if”

2019-07-11
27TYPO

“Simply putting a database table behind an HTTP interface does produce a
service, micro or otherwise. So what does?”

I feel like the first “does” should be “does not”

2019-07-11Thanks for catching this, and thanks for reading
42SUGGEST

No explanation of the Write Flow

In the section “Mapping the Write Flow”, there’s a fairly complex diagram of the flow. Then, in the following paragraphs, there’s text describing what’s seen on the diagram, and nothing else.

No justification. No explanation. No rationale. What are we trying to achieve via this algorithm? Not only that — why are we doing it via this specific algorithm? Why pick these steps? What do versions represent? What do commit rows represent? Why use them?

As it is, the diagram and the (non)explanation below are borderline useless. Yes, I can read it easily. But I don’t understand how the big picture was built.

Is there literally any single person on the planet who would not be familiar with this subject and this algorithm, and would go “a-ha!” after just looking at the picture and reading the description?

Would they understand the algorithm deeply?

I don’t, after a couple of reads, but I would like to. And I’d like the book to help me out. (note: I’m a senior dev with >10 years of experience)

2019-08-01Bart, \n \nThanks for the submission. If it's leaving you confused, then I want to fix that. Can you help me in understanding where it breaks down? \n \nThe purpose of the commits is described in the previous paragraph, and versions are described under the heading "Fleshing Out Message Structure." Those in conjunction with the diagram, are they still lacking? \n \nSupporting OCC is what leads to the more involved write process, and the diagram and following paragraph are meant to be the bird's eye view of the process. I definitely see the value in some more language explaining that to support OCC, we have to serialize writes to the stream in question though. Would that help in understanding the why? Also, the rest of the chapter is meant to flesh out those details including the reasons behind them. Did the rest not help? If not, any other questions you have would be very helpful. \n \nThanks for reading!
28TYPO

“Subscribers similarly don’t who published the information they consume”.

should of course be:

“Subscribers similarly don’t know who published the information they consume”.

2019-07-31
32SUGGEST

In the discussion of steams and category streams, I’m struggling to understand how these map to Kafka or Rabbit MQ topics. Obviously we’re not going to configure Kafka with a topic per user. Hopefully this is answered in Chapter 3; if it is perhaps here on page 32 a comment about “we’ll discuss implementation in chapter 3”.

2019-07-31Restored text explaining why not Kafka. It talks about how topics and streams aren't the same thing.
20SUGGEST

First, I really like the book. I like that the idea that a monolith is a data model and not a deployment or code organization strategy (although I think those are still important to building micro-services). I LOVE the idea that micro-services can still be tightly-coupled and are essentially a “distributed monolith”.

However, I’m having difficultly with much of the deeper chapters.

The architectural diagram on page 20 is very interesting, and it informs the rest of the book. Unfortunately - and ironically - it seems that the “applications” is one large (some might say monolithic ) block of code, and this seems to be borne out throughout the book. Also, the book seems to give very little consideration on how micro-services are deployed (obviously chapter 15 isn’t written yet).

I get your knock on Docker (page 24) - but while simply using Docker does not imply I have micro-services, with micro-services I’m going to want Docker and Kubernetes (or Serverless - which isn’t addressed at all).

But the deeper into the book I get the more it seems… idealistic. Take chapter 8: Authenticating users. With a large collection of distributed micro-services deployed in Docker/Kubernetes how do I actually authenticate a user? Here I think you’ve tightly coupled the authentication to the ability to deliver a web page. In fact, everything this deep into the book seems tightly coupled: to the website, to each other, and to the database. Again and again the code just `require(‘./services/someService’)` - assuming all the code is deployed together.

It also seems that the message store is violating the don’t-share-the-database principal
(dzone.com/articles/shared-databases-in-microservices-is-a-poblem)
- I don’t really want every single micro-service across my Kubernetes cluster:
a. connecting to the same database and
b. being tightly coupled to the same schema.
This is a strong intrinsic dependency between every micro-service - and suddenly it feels a lot like a distributed monolith again. How is using the same underlying database any different if that database stores events or just does regular CRUD?

I guess in a book about micro-services I really don’t think you can completely ignore deployment and code organization strategy for most of the book. I think most of the industry is going to argue that part of a good micro-services architecture is addressing Conway’s law, simplifying and isolating component deployment, having independently saleable micro-services, and having a solid code organization strategy. It seems more like a book about CQRS and less a book about micro-services. And according to Martin Fowler: “CQRS should only be used on specific portions of a system (a BoundedContext in DDD lingo) and not the system as a whole.” (www.martinfowler.com/bliki/CQRS.html).

I’m sorry if I’m missing something obvious, please help!

Thanks,

Robert

2019-08-01
147TYPO

Seriously, no. Yes, this is getting repeated ad nauseam, I think that the ad must be an and

2019-07-31"ad nauseam" is the correct phrase. It's Latin.
115ERROR

So far you have only organized a monolithic app, this has anything to do with microservices.

2019-07-31I don't understand this submission. Perhaps because it's all in 1 code base? That's one of the points of the book, that having everything in 1 code base isn't the definition of monolith.
166ERROR

In the linked code media.pragprog.com/titles/egmicro/code/first-pass/src/env.js
dotenv.config({ path, silent: envFromRealEnvironment === ‘production’ })

The silent option no longer exists. The call now returns an object with an optional error property. (github.com/motdotla/dotenv#config)

2019-07-31Fixed and also updated the package for good measure.
4ERROR

the name of the module is: uuid-v4

in the book you spelled: uuid/v4

2019-07-31I believe the submitter is mistaken here. There is a uuid module and a uuid-v4 module. Within the former, which is what the project uses, there is a v4 folder, and that's what I'm pulling in. It's confusing having the modules with the 2 names like that.
91TYPO

In Ch. 6 - Turning Registration Requests into Commands, the code is as exactly as the same one above in the previous section. Also, when explaining the code, there are lots of 1s. I’m assuming the author is trying to explain different parts of code, but this whole section makes no sense.

2019-09-13Indeed! Thank you for catching this.
76ERROR

all information boxes througout the book are blank. I’m on the (quite old) Sony PRS-T1.

since I can’t upload attachments here, this data-url shows a screenshot:

data:image/webp;base64,UklGRl4JAABXRUJQVlA4IFIJAABQTwCdASqQAQcBP3G20WI0v7WwojN7E/AuCWVuzBQ//o5+xML4Sc+0AmQciWUAJ2MhCxKdgb/aaFeudmvxCRNvNXdsUO9nyHeYM+lIi5+rNalN+JgTXFogHOdLDNJc37TdAdAphMb/5jax6csiblZ2Bxy1ZeEZhHvxMCaMzU8klvDeu+AjPYAYbESZJMMRsb9A04rjU/AUDsGbV/H5U/8uY0NTPje1UHwbiTIIHAKVhTHT75Ixy+yT4m0/9sUppbpjKQo7wsySLDnaQlGUw7LDygj5URo83aVZdrmpbUwSnWwaGbRh8EVW3TlmeYToBVmsaYKQ9j3ncxWdpOoEgJgzJw2h5teaIacpq7wUxXLzdB0ROE1DUItzo1+hCIDsfs+/o7mAU2x2A1dCveHQ2J+2fFTtCAYrMRz3AW/lyJZmgD3r7UdU1is6DCoXSKq7Rr8iQFi/7ZWzABHxSzm3EE8ZKQeELBjOvBWU2/FV92y1pGVEtIWsARSc31UNqF5KipiloyqMuaY2f2354uUHlPF3Uwb93FfkcA1QLbNzsZGrekNATvINyCWI9TZnWo5lR1diciw3hBInNxmoKAZmxunFHlCrv1EjFCZeY2KsvgIg2+FPJiOPMVM/4FbcK3IMS8y+8WWATPwC3ytop8lJfynals/ybGoKmtRqep7aHYgVWxQqEmDZNA+Z0W0JzwTv3B09/FV25FSm3EDM+O1Zgxf6P2GFExFJo6hnb31K3pctkiuwgG3C6Sf4aL0UaKzXWnb3Snh4YlEvBaskcKNWGmQBzx9901RMauuYuuN07vXZWtdzC3lmQs0ogEUG6TPhKtRKU2spZj+NX8NtAfOQ2zq/q6kAAP7rN+14/4u7EcZMWK5WR1UuDv/f2tvLsRuh+a1ZtmCxi7s+t/mktpInJOproZ+ZoHljX43S0B2MCefwHDdQnBkKjpyC0IhGnpTdjPetA6IE8iGajb9RnnUqJrfhLUtjeI1X3xl01WTLu5qKvtqovcTGiEJc6MmDYmJm6RYnHtvYJ+rB+CJh5yaWnDLcWT+u0Vg4QwuJvxa62QYjlwdLsv//AXk+E3/ipvrYIVAztq7KLcC3DgnqW3iC3wwGc3XdzeEVwzupZC0wY9/rUv60Etk1HOs4uRwSkVjbAeOLCxCVBBTUOFdYJIMm38uLOk2mbjG2zj2t64VB6aDKhg47mT4/P4uVuBs0mU/EVs54ReZhlaLMUCUGtjDuhkwstZOOjtj9VbnDeULjBJ6vsodFCwckF4fqAkvIGgAz5Et4+BJhtnYHNkuDIDDnkaNbUQ+Vnk/RVRUrEcj1G/CUsS6xvkQGZ8SElt2e7ffMPGgv5z1J+Xq5MmVt8NtC/8RYAjFIbFHL7SMHiG8YX7kRbNDboNt84K4CqWEik+Oy26TsoM8oqt1/BkN+lWvqx7+w3v7cx4GewQ6iGTrjAjc8QqvOum75BfQ4Pcdpf8P2qRms6Nc7uqIuaaU6K0kRL0AJ5cj3M8W8SWcXkmj29MuAD+neDJZVm1soXrHhuiCz0yagxekEm6/UHcwYkgm3N3FGFwyJaoMjPEFxqOlhAb1ON+pKrKGDTUmxzwwswCeSBMwi0pO1nQhDf8ABJD13+iWTnfdjxaiHby91YbHQv9XZL9uCT7Ys20KiGGoAf1v6xJOUZP6tDpm+5o7MaPbWFxHVHk+Wh1vrvWuYTD9WR6dMRiwihsNIVeqhyaI17HUCnN8ArGQHP0uU6c7WIXI21nIrWKouxTiqYCYctDHn+t8XKYJ1NnupHzXphKpdBhw8bg+10SVZIkYq3RMqmkGulkqcjc8HBVyJVKJo0dBc2Iqqjh6cIA6GlPkSz+H06AhHHWGyNQQlF1VGEFDzbIqSyF97ZCAb6IhqAjeayX6jqnGa7RWtuOs3TLXgYBV2C3PzxM+9ICHR/8SPLDbQackIEYJO+RChOCMNvkUAro4D2YG5TEBLSNs373qPiMqJOktGwQeF4ZQvcjbMsNc8+joItgesNVdolg1jvmgk9KLzH59XOfBJ1Iui9LliQ0VI+qKnEg5902AUhsQe50IgmrW4/RqNBlklSbAoEomwsoHf1do4AXFeiLfSnnY6SY+whAsc0oaiKEX9hOpsUwLUOtw6UEYkO6yFdrqkfWJMrfx2bcV03YDmXDufoz0+Y5OcpTBa2YpHBMo8UqDCfagT07jXXlnsyTjjiTaZj3ixGpDx0ERKL8TfXYVuL0zHzJGjmGh3XRP3Wb8tYpNP9IXQHaVtwLYQdLA/SPWx4ejFAd19Lt75CQY2MYsEhW7gLfGpM4ax/MnfzaL7PFGWsN+vldhrQQywYMNb9AEAsomRTUxStwF2spgqUB7djBtz2F6kl+pakgrfqiA12rdAR9dPK8Z1mmgvTwFZwNrVkNUvFRj1P0sMOOfemLsyvsvPUvbUZskWqM4iZMe1oGgwp0rcBz9DALG3RqbQMPKrynJ7pJ2ClYT0ek3C9GoKwu9Su6+1/A6T9nGnnwOWi/+VrQZFhH3FjXkfYhuADpbauaBLqx2WWOtxRvoBd5X+Scvh4NbkMAyNAo1J4SnLnetC3ozaFgMHivAJlWwYWsGiwLO9D/YhaZTHsp108wHIXQjjWQr/7o0uqHBJanGbJepXGDatke4/4oDESq7ZGYniBJQX+8xNpZIDJsrxpRC1Sd/xkIGOjGP6E0Td7ZarfPCN3Ityld28XfmRxQzPFD/sAflFKAn78WcHEyyzrtaTv6Kh9mISwjCj+GqS4AfFvHt/PdOoYDzl7cshQ96u4bi8Wyhd/wm2WsvVcm0/9mMZSw4iJv9g+CiyoN488E4N7fgVU/EiXgMpLmWXxh6EjOlwtgQ0C7gRzBMjr0QC81FDyU6CTkAfmWusHDKt7thAUKKcQhvKm+rpkondiS96uiMXUdndhIsb+XquOxwXTwyWCAVgMc5JFKoKsPC9q9K9UjyilKsQEZVi5LP3UT6rs/AOq26p0TUFcs+cxUKQew9KeEmWDnfLySM/Huan31Ohr04ge7vXo8lKVZr53aMq/Or42Huj+iJS4cD8IfJklWbkDRcj0HuQUpVkYHMbMTVXWC1Lnrlpslv+WIEjcHJiEl1G9LoLT7VqySyj9+8Q7ye/2qz/fmxm7AAXrHZnkpwba62asAvwJd+WEWIC1So7AzpSvHELWi5XZJbIhAAA

2019-09-13
77ERROR

All diagrams are too wide. This (like information boxes) applies to all diagrams and graphics in the book, including the front cover.

Note that all books from pragprog have this issue. I reported it for the first book where this happened, but didn’t bother since until now.

Here is a data-url screenshot (hope it works):

data:image/webp;base64,UklGRlILAABXRUJQVlA4IEYLAACQYACdASqQAeEAP3GuzF60rb27pvQsY7AuCWduKPMo07A+NUFOLxGziXnnpQA3v+V/rfdC7dWKHra+H/5oMdbzVVdf/vqM/kBBGnmMpm9YKI8djRxEiyn7njYFZbHeTzSB23ItwZxmWdsn6iKYMZDG5IU2UcZhUDsQzzVy2viSv/mWnkY7ySfkibxNbme25IXOD8q0godc0M3lGso+x7eimPHX6GWK1orps4/5ycN9WUt+FYQYMa2ib5Gyn4DzV/uzn3h5Vpa0XzFW3SR2gITc+H5e5tgjUIeNjzHTYlc6Wmq1JrijQXTA+h7UFfZieTgVRRZrngjn96byPkETGv+qgnEeieJiq2WiD92dySn2mDoMsDfYYSbS8tgWldq90Zq1M69jxaiKitPevAn74aKzs6fZhpZdOAMr0HEChU8OQYYJw3wG0sapG//BTZLBH4nJU1QX6w+6UQW4xGUa0+bCB27E8AODdX7tnPYTVFoRdLyA4AAdQ2CdQxABnB0RaPfiJzDXUq4cDdkOkIw3wQ3fxcuu4zAN/PddqgZ77klkmgxZptKXndA5US/qzXNm3NHYtZEy19bO3Lv2iIBDf5kPRFcC3xcFnq/CIJqdkGSnKk9JEOQ1Yhrs6Xwh9tOOJx9/+pT60Wh2PL858o0X2Az3//3z6BqVPfaYcm60WYhIgLe7yDTMfV/vv6bW4EBvlyg9gyY7kQDwENMK+ACHNqN42QJpKlrBMnDB89Czb0ZO0EbI+h1N9HbmUlsBwYZearz9vJk6xeviWFm7GXMp7XPvxS4uUWOEF6QiFoolQ28yKh23TsQduGHOhfMdBX660GzJq23Tr31Em2pL11L9/dM4ioLGUWirGxM+Nc/PhFcbiIhrJ7iXY1MGPVDT5PA7rdDTstA+wzSi63oWNAkk/hOU8opTi+Y//o3dbGBqaTYHWylirlDv185FCD/LYW40OBBPQTzSwNuJXrUxwd5E6c//q3ZFKd7gBc0xtDzbHhJOMWt39W4WvIeSNhpepOD/norVU8gdP3GbBPv3j8AAP7q7Sinlv79/7+GMX9GRdAqSU3pNVKhj/sjSZO9hB/VkNCtGMlIqry5k4B7MTXIKGKvHfRb0l1UJDOCBlLgyPowUqdsbNmvEA3xgBSOmqZOlFuygRmg00oYfCXm3bmQg+mkZtc7f4Hm/00R19qbCyi/YPGz1Q/tosaCjCBnJu5mMXLuG6QNh6zRn6YbEe1gfaooqR0NqvLFCLPn7awvUzt5Uh6aaE3h/gwxUhJPvSJx/6+Puu3wt3albW9V/95KCqPm/Mpwq8TO2SAxsi8xNg1rfPrmqR3+uVIqT1Frcu/qNdxaX3joFmYwpy4dzOltBz+LkEfiDOx7+UCOr9Vg3nataSwtUjwIOhQAAB4hNMHe2G0fKpv1BimlraEPBzgY8R5T3WUz+Um4XtzaCU21+ENHyXgKUBbsFVyx2Loe/z07NIECZqBnu/FH0Du+skDUgD02hRe2I5VFJvlKtBGRgBxkK2xIfWouo0cpE9+GCvace6kIdxGiteakj8ohzxBO4wU9pWDLD3i5FeX2ASDqgKmaQtDtoZFcZ3qypYtKD4v4SY4zp9iDD2v/E1M6BA0IkNCYjkJYMrHj4vIRDDZWJoZmotMeFHRl6j/j/hICjDY0EFVKgNZEmyo5XktBPtLKGavO3ydKzS4CGH8TIwJYpbs3AyGxSwFg8Yyu0szMMpP7N3xH1Qyfs54bNah1Je0qEEN6Sd4uUhEM0ntV437g4i8H5aNpxqofu+/PtZn6Piv1fM2+lLOuJxCtWezxgCyIQBKF2VZ9K07ynSAaVp18pSXynOXGHu1oHfdXK9z7T8THvleVIve7hgaAXxptMYbT02VAGdGJyGhskgc1DSdpURkJNf5L162QWabgaU40YT4IYxTy0cySuVDBccE3VxzOi4v+oC3innfbmRmlUQgbQIfCvAMre69WibLz5Mb6WYJEmPHo3oesQzunVFPgHGO7mcekLVDTJZkOKv8cPkTz1w93D+sHBuXnISmIp/bzswDo3GhrJyutDkodEHG7x6Qos6TnX1gYYRbQdv2Ne88mGiBEDke3Crid4boW0CI/JxXBPyNeFseNt/GAJNZ+KE13mkA3PwuCYm36wWwWKvbcWe/Wv9KNglManDa21ZLPvTl7NJIvYmyCJVdSFRHw6BIeb2P6rA5EAp260qcmmT2yvdcoqPUBpUPLRVlZkrsbMV80EDEFy/46LIc2Jc8DpD78PJwlSuIFehrHGR7kDcWtc6IGU5oh3RFIAX7JGe5nYfysgd640sDWy8qlh+XO1hYenhT4OXxMS+r4/8/lAp3ep4YJaVTGPOtEid7ytvUHIZa+dCTkX6+dnEF8OCJuIKQyzne83wtBmWHmYKBKn5Xpp4ebfz5PyjvE32MpqA+Fx3039vufwHA1ohzdhUe/MaGiofKp+ZWfVFelRi2jVccW60nQ47324ItQYY+6o5+4nrgVieuy5M8o2WKn3glnBxr2iNoeZ3GgPA40Cdtp8Y/4jkPwObi4Td0/QjnEUBPLw9omsDTkFPPh9nwGmwVbJLu7fnfJ/F5fG3XD8Tsq8xXXzCtVXSamzOka8o0SRcohwbmXTrfod02QTS/eMsNVGKWCIFlhl/AqgQLuUkS5z7sH9Fhyb2PZ2aFIM818IFop9ZUUVM6CEROUquz8lDseL5HzUt1RfzFADg3Y168UKoRoBKhCih/lFdpcEsR0bS29CLNsz/kuXM/HmUB1f+vVm9eaLB+7CGxAYbp5QMaxEOh7ZY2bFXP7TzT2MLUIkFu8F5EKiYnlEWtQwnnsWkwgxEJTR5ovgVBs6l+nnocVv2ZI8ZsoiuAMAYAv/Rq2x3N4t8H2xR8Njxmdg4IAapS7/iioR4BcBnhA2YIO7GH88fsIddVQmsyZZJ/DtfHK9QvHxIW8zigrIGM/Wl7au1HHHcuoEd8dqgciu9sxYSVUgPA5wIgvtzkcHs8rR1LbuI/UPOJepvEwBYAkxDfkgFi9dbE+t4YZZCvpKA2dtiKaNJeQqlJRye7x5DobzFazPrjvm27ZScBYw7QFELFI8oatfFUpZ3ERksCBlr7v8ClhXPSjbrF1dGpnpX/5siq6h0VfrY1Ih5w2GcV6DwANJS9+VjHIhOie+w0DsilXZirAr2eqYPz1Yw0vDlh3fqBmhBJGcQ5h8tJNBJJdIhWA5x9Gxv/7MB2SNuF8wYUGjon8vwlF8Zzw7a0pL84ZiukNN4DVTJFZANhERA4471AIdDKkX0VRs6BhNdDDp0Fc2LbsuB+6JHU/92s5ChEfU5JYd2ceSejOJxHRu67dbN1nbtuTWGgZ1+iYC9QFNIzUfREhexQGFcSUO0MorN+TahJ/aIo5SPQRlgqVw+msfax25MH1VoURecLsrm4jDamS3idbKBxBApEvjXTBGy4uT9yM11Izf/7aoAFTWAXOiPzmQ2vXGmZfEpXq9WI76fLNZr/dkWpS+ooDluSl5BpfQ0fUVQTYfcRsWHg6NqCb/Mc4hMQHA5yOMM4KXL9bAl4pTcqbjLSQicUMYAHIUJR1IfQs3pTUhewW4F2tRWusGCOzKvf8Cp8On9H/CZ8kCsC4hTHjmsK854cW4OWhHkzk2Kq0gSEW2WfOP6X9uG9YwTiQe7uP3+8K6LYKNX3DaWs/+apldn787CwYZzGrODg45NSE7OeR/0IsIUuMfRhCWf3mSj2h3nfcyhnX8r3O3iLeD1yT5FG+W0f8bfO2Nm7O898g/EmA1fMlgxAyfvardiItnYEPOhLbaz6Ymk3nxx7ha5E3PO4chHQ0pEEFB/GHnTSrGaUHJjtLTs3/JYIAAA=

2019-09-13Unfortunately this is a compatibility issue. Our books are validated to the latest EPUB standards, so older technology may not support current content. You may want to try using a different reader, if that's available to you. \n
31TYPO

In the block of text about the different parts of the JSON object defining the PublishVideo message, the description of the id, type and metadata are all in new lines.

Only the part about the metadata is not in a new line.

This seems to result in a problem in the numbering as well.

1 id
2 type
3 metadata (should be in new line)

are all ok, but the last, the data point has also the third number instead of four.

This must be because of the numbering mistake for metadata which should be recognized as the third item in the list, but it is not and it stayed in the same line.

2019-11-26There was a missing period after the number 3, the rascal! That made it so the build didn't interpret that as the start of a new bullet. \n \nFixed!
31TYPO

The list entry for item 3. metadata has a typo in the formatting code (be it html, latex, markdown, or whatever).

2020-02-08Fixed in v6. Thanks!
44TYPO

The Eventide message store is Just PostgreSQL™.

I suspect the word ‘just’ need not be capitalized, unless this is a meme or marketing phrase that I’m unfamiliar with.

2020-02-08It was intentional. When describing technologies built on top of other technologies, it's common to see the latter described as "Just X" for whatever X was. The joke being that it's not literally *just* Postgres because Postgres obviously doesn't ship with a message store. But we didn't have to use anything that doesn't ship with Postgres.
52TYPO

The text ‘(<xref linkend=”header.projectingDataIntoUsefulShapes.
beholdingThePower”/ >).’ appears to be unfinished. It might be intended as a joke, but it looks more like a broken image tag.

2020-02-08Oh dear goodness. Thank you for the catch! This has been updated.
152SUGGEST

Title “Why Are We Only Simulating an Upload to S3?”

At first I took this to mean ‘Why are we only looking at Amazon’s offering and not Google’s or Microsoft’s". I think italicizing the word ’Simulating’ may help.

2020-02-08Thank you. I reworked the header's title to be clearer and to follow style guidelines.
2915ERROR

The code sample in “Connecting the Home Page Application” for the config.js is incorrect

code sample lists creating the database requiring the wrong file. it is also in the “first-pass” code samples.

It is currently listed as
const createDb = require(‘./db’)

and should be
const createDb = require(‘./knex-client’)

2020-02-08Indeed. Apologies for the oversight. This is corrected now.
40TYPO

The third list item is numbered 1, but it should probably be 3

14TYPO

homePageData is not referenced anywhere. I believe viewData is being referenced.

28ERROR

If we follow your directions on page 19 (pdf)/xviii (book) and type all of the commands ourselves, then the “npm run start-dev-server” command on page 28 (pdf)/10 (book) will fail to start for the following reasons:
1. The mount-routes.js file has not been created. It is implied on page 23(pdf)/page 5(book) to copy the mount-routes.js file from the code repository. That has the downside of creating the routes used by the first-pass before they are discussed on pages 17 and 19. Instead, perhaps have the user instead create an empty mountRoutes function in a mount-routes.js file with a note that the reader will be populating it shortly? Alternatively, don’t have the reader create the mount-routes entries in the index.js file until you are ready to start creating the routes.

2. The .env file isn’t explicitly created. On page 8, it is discussed but it doesn’t mention what values to put in there. Perhaps including a statement to grab a copy from the code/first-pass directory would make sense?

34TYPO

“Lines 1 and 2 pull in functions to create our database code and the home application you just wrote …”

The database creation code is then listed lower down on page 34(pdf)/16(book). This should be before the update to the config.js file.

39TYPO

The last word on the page is autonomouse, should be autonomous. Although the thought of an autonomous mouse is funny.

39TYPO

Chapter: “Hanging a Lantern”
Section: “What You’ve Done So Far”
Second paragraph, second sentence, last word of the page:

“autonomouse” should be “autonomous”

100TYPO

Extracting “Microservices”

2nd para “All of these pieces being in the green box represents that their running on the same server”. Should be “they are (or they’re) running on the same server”

39TYPO

Third sentence of first paragraph:
“We’ll add that to env.js and .env is just a moment.”
“is” should be “in”

61TYPO

2nd to last sentence on page 61: “change one wit” should be “change one bit”

74ERROR

Last line of read.js has unneeded " exports = " in it.

“module.exports= exports= createRead”

39TYPO

The last line of the last paragraph states:

“Messages are what make autonomous microservices possible, and autonomouse”

“autonomouse” should be spelled “autonomous,” though I like the idea of a little mouse mascot named Autonomouse.

111TYPO

AlreadyRegsiteredError should be AlreadyRegisteredError

Categories: