There's a fairly significant error in the Appendix that will (only) affect Windows users using PuTTY. This sentence is on page 292 is incorrect:

Because the instance you’re running on AWS is an Ubuntu server, Host Name is ubuntu.

That won't work. The host name should be something like ubuntu@54.152.9.184 but replace that IP address with the one shown in the IPv4 Public IP field on your Launch Instance screen.

That issue apart, thanks for an excellent book.
Just to mention that the solution provided by the author (run java -jar target/chapter2-ui-swarm.jar instead of mvn wildfly-swarm:run for the UI) also fixed the Forbidden issue for me on Windows 10.
return Function.indentity();

should be

return Function.identity();
The Ch7 branch on GitHub didn't work properly for me on Windows.

The problem was that the doc.dis values (see P193) returned by loc.geoNear were very small, so the distances rendered for each location on localhost:3000 were wrong.

The fix was simply to edit package.json to upgrade mongoose (from "mongoose": "~3.8.20" to "mongoose": "^4.1.3"), then run npm install.

After that the doc.dis values were much larger, and the distances rendered correctly. For example: dis: 1.7588308753474893e-8 with the old version of mongoose vs. dis: 0.11217999206053822 with the latest version of mongoose.)

(The only other change needed is to modify the location criteria in requestOptions.qs in app_server\controllers\locations.js to be meaningful for your mongodb location data.)
I have given up trying to get foreman to work on my Windows 7 machine against MEAP v12. However, I found three alternatives that do work:
#1 Using node-foreman (https://github.com/strongloop/node-foreman)
#2 Using forego (https://github.com/ddollar/forego). This is a go application, written by the person who created foreman.
#3 Using the new command "heroku local" (https://devcenter.heroku.com/articles/heroku-local)

Option #3 seems to be the best approach since it is (recently added) functionality provided by heroku. It uses forego behind the scenes, and is trivial to implement:
- Install the latest version of heroku toolbelt
- Just replace "foreman start" with "heroku local" from the command line.
- Go to localhost:5000 as before.

Although this approach works fine on Windows I have not verified it on Mac or Linux.

Note that heroku no longer supports foreman: "As an alternative to using Heroku Local, you can still use Foreman to run your app locally. It’s not officially supported but if you want to use it, you can get more information by visiting the Foreman GitHub repository.".

Also, this statement in Appendix B.4.2 (P413) is no longer true: "Heroku toolbelt contains the Heroku command line shell and a utility called Foreman.". It looks like heroku removed foreman from the toolbelt when they added the "local" functionality.

I realize that the book is 99% complete, but only minor changes are needed to replace the use of foreman with "heroku local".
Here are some comments on MEAP v12 up to the end of chapter 4, based on going through the process of building the app again after a year away from this book...

P70
you can see router.get('/', => you can see router.get('/'),

P71
The final paragraph of the sidebar belongs in the main text, not the sidebar.

P77
the default CLI for Windows users => the Command Prompt window for Windows users

P81
The message I got from heroku was slightly different:

Scaling web dynos... done, now running 1 => Scaling dynos... done, now running web at 1:Free.

P95
doctype 5 => doctype html

P96
Figure 4.7 and several other screen shots in chapter 4 show "Sign in" on the right of the nav bar, even though that functionality isn't implemented until chapter 11.

P97
Boostrap => Bootstrap

P103
Listing 4.7 ..../location-info.js => Listing 4.7 ..../location-info.jade

P104
The first three lines of listing 4.7 at the top of page 104 are invalid continuation lines. Maybe that is a publishing issue, but copying the text from that listing won't work. Also, some parameters supplied to staticmap are redundant. Using backslash for continuation when setting up the location map, this worked for me:

img.img-responsive.img-rounded(\
src="http://maps.googleapis.com/maps/api/staticmap?\
&size=400x350\
&sensor=false\
&markers=#{location.coords.lat},#{location.coords.lng}")

P105
we you took => we took

P106
Listing 4.8 ..../location-review.form.js => Listing 4.8 ..../location-review.form.jade

P108
Listing 4.9 has the same problem as listing 4.7: reformatting the code for publication has made it invalid.

P109
git add . => git add --ignore-removal .

It seems git will be changing its default behavior for "add" so it would be helpful to modify all references to "git add" for forward compatibility.

See http://stackoverflow.com/questions/23027678/warning-you-ran-git-add-with-neither-a-all-or-ignore-removal

P111
30.80going => going

P 111
the list.jade view => the locations-list.jade view

P113
with some additional security checks. => without some additional security checks.

P412
The URL in section B.1.1 for downloading Amelia does not exist.

P418
the file app_server/controllers. => the file app_server/controllers/locations.js.

P419
in app_server/controllers. => in app_server/controllers/others.js

P420
After copying the text in Listing C.1.5 into file others.js, and then starting the app I got "SyntaxError: Unexpected token ILLEGAL". The problem can be avoided by appending a backslash to all but the last of the lines of text defining 'content' to denote continuation lines.

P420
The section on the sign in page (C.1.4) doesn't really belong here since there is no mention of it until chapter 11.

Other issues:
• In the Welcome section at the start of the book there is no mention of chapter 11 or part 4 in the summary.
• The information about the branches in the readme.md file on github needs updating.

Mostly minor stuff, though I think it is definitely worth fixing the formatting problems in the file listings, and addressing the "git add" issue. And thanks for creating a great book - I have learned so much from it.
I am going through the instructions in this book a year later, having struggled with Foreman under Windows 7 in the past. I struggled again, following the instructions verbatim on a clean machine. I still could not get Foreman to work, even after taking three steps that had previously been pre-requisites to avoid known issues:
[1] Install heroku toolbelt to a directory name without spaces (e.g. C:\heroku).
[2] Revert to version 0.61 of Foreman. From bash shell: gem uninstall foreman then gem install foreman -v 0.61
[3] Run Foreman from the Windows Command prompt rather than the bash shell

This was the problem I had following the MEAP v12 instructions when using Foreman for the first time on page 78:
- Foreman started, and the page rendered on localhost:5000, but the stylesheets were not loaded.
- Debugging in chrome showed ERR_CONNECTION_REFUSED when trying to access those files.
- After rendering the page foreman logged these error messages in the Command Prompt window: "exited with code 5" and "sending SIGKILL to all processes".

After googling it seems that others share my problem, but a workaround exists. Instead of using heroku toolbelt's foreman, install node-foreman with npm as documented in this StackOverflow thread: http://stackoverflow.com/questions/24310998/foreman-from-the-heroku-toolbelt-exits-with-error-write-einval-every-time

After doing that I started foreman using nf start instead of foreman start and my problems vanished.

This is a terrific book, but it is marred by inadequate instructions on how to get things working on Windows.I urge the author to follow the book's instructions in MEAP v12 on a Windows machine. If everything works then the problem clearly lies with me or my machine, but if not I suggest changing the instructions for Windows to use the npm version of foreman instead of the heroku toolbelt version.

And thanks again for a really great book.
P32 npm install express –save => npm install express --save (needs double hyphen)

P33 You state that the code listed at the top of the page is the same as that in chapter 2, but it isn't.

P33 "through one you write function" => "through one function you write"

P38 "and say "Hello, World!"." => Not so, since the code doesn't have the text "Hello, World!".

P40 "Note that this won't work if you add a slash" => Not so; it worked fine for me when I just added a slash to the URL (though adding text after the slash does cause problems).

P47 The code in listing 3.24 doesn't work. Change "content" to "body" in three places.

P55 The bulleted items "4." and "5." should not be bullet points.

P61 "If everything in were synchronous" => "If everything was synchronous"

And a couple of general points:
- There is no mention of your github source until Chapter 8. It would be better to reference it at the start of the book.
- The source code download link on Manning's web site still has obsolete code.
Your web site needs fixing.

The forum is here => https://forums.manning.com/forums/express-js-in-action

But links to that forum are unsuccessfully trying to go here => https://forums.manning.com/forums/express-in-action
Does that explain why the link to the forum no longer works?

https://forums.manning.com/forums/express-in-action
A few brief comments for the new Appendix A in MEAP v10:
- "In this appendix, I'll give you..." => "In this appendix I'll give you..."
- "This list won't be thorough and is by no means exhaustive..." => "This list won't be thorough..." (DRY)
- "the Mogo database" => "the MongoDB database"
- The link for node-canvas does not work; there is some junk at the end of the URL.
- The DailyJS web site is no longer being updated so you may want to consider removing that link.
Your rewrite of Chapter 2 looks pretty good! A few comments for some minor issues:

Figure 2.4:
Update the screen shot from Hello Dracula to Hello World.

Page 24:
...and then install Express and save it to your package.json:
...and then install Express from the directory you just created:

Page 25:
At the top of the page insert "Run this app and visit http: //localhost:3000".

Listing 2.12:
Some code is missing. Add the variable declarations at the top of the code, and the call to listen() at the end, as shown in listing 2.11. Then it works fine.

Listing 2.13: This ran fine, but FYI it generated a couple of warnings to the console:
morgan deprecated undefined format: specify a format Listing2x13.js:7:9
morgan deprecated default format: use combined format Listing2x13.js:7:9


Listing 2.14:
I didn't really understand what to expect when I ran this. I tried adding a "public" folder with some images, but got the message "Looks like you didn't find a static file.". Also, the text states that "Hello, World!" may be displayed even though that message is not in listing 2.14. And the phrase "express.static will send it off" didn't gel with me. Some clarification in the accompanying text would be helpful.

Section 2.4:
Your example app worked fine, and really helped to tie everything together: it wasn't trivial, but wasn't too complex either, and most importantly it just worked - nothing to correct or debug. Nice job.

Also, as a general comment, it would be helpful to mention the github link to your examples within the text of the book, and also in Manning's "source code" link which is still providing a zip of the old examples.
Some thoughts:
- There is no information on how to download Express, install Express, and create a simple program! It's just bewildering that you have provided details on encryption, routing and testing, but nothing on how to create a "Hello world!" example. I guess that will eventually be in Chapter 2, but there is no chapter 2 at the moment. As things stand the book is close to useless for someone who does not know anything about Express.
- Many of the code listings are poorly formatted. For example, listings 4.4, 4.5, 4.6, 4.7, 4.9, 4.10, 4.11, 4.13, 4.24.
- You dwell on stuff that doesn't matter. For example, when discussing zip codes you state: "ZIP codes are five digits long (technically nine, sort of)". Well yes, but for a foreign reader who knows nothing about US zip codes this comment is unhelpful and confusing. Anyway, who cares? Just state US zip codes are five digits; that is all that is necessary. There are other examples of this unnecessary chatty digression on irrelevant minutae throughout the book.
- You have cleaned up the book with respect to some potentially offensive/inappropriate terms, but I urge you to remove all references to "Turd" and "barack_obama". You may think using "Turd" is amusing, but others may find it coarse and offensive. You may think Barack Obama is a great guy, but I am certain that some in your worldwide audience will have a different view. Use neutral terms in all your examples. Words and concepts that may offend or irritate are counterproductive, disrespectful to your readers, and convey an unprofessional tone.

I am really trying to like your book. Your down-to-earth enthusiasm is really refreshing, and it shines through on every page, but I see some major issues with the book as it stands.
I wrote to Manning about this and they have issued an update. That new version is still shown as version 1, and "Your Bookshelf" does not show that there has been a recent update, but download again anyway.

Search your MEAP for "Listing 2.4" to determine whether you need to download the update.

If the formatting is messed up then downloading the MEAP again should fix it.
I agree, and even worse is using "Turd" on page 93, which is just unprofessional in a technical book.

I appreciate that the author is trying to be chatty and informal, and demystify things, and that is commendable. But the tone of the book is just sophomoric in some places, as though the target audience is teenage boys rather than adult professionals who are interested in learning new technology.

Maybe I'm a being a sourpuss, but I find comments like this (p.54) embarrassing to read:
I think we can agree that "Space-age Computer Talky-talky Language" is a better name than "Transmission Control Protocol over the Internet Protocol".

Sometimes oversimplifying distracts rather than aids understanding.

All that said, I like the technical content - it's just the tone of the book that bothers me.
Yes, using a:not([href^='http://']) as the selector on the lab page selected all links except the externals. Thanks.

(The book covers the :not filter in section 2.5.5 but I hadn't made it that far.)
Some initial comments on the first couple of chapters after a few hours:
- Section 1.3 mentions the "deprecated" module, but I don't see that on GitHub.
- I know you don't seek comments on typos, but there are a lot of places where it looks like a word processor has mangled the text during the correction process. For example, in section 1.3.1: "In fact, while is easy to think that we’ll need all of jQuery in a lot of websites, is really hard that we’ll use all of its functions in the same website.".
- Since this is the third edition, I really think you need to quickly set up new examples for the chapters that are available, which would presumably only take a few minutes. Sending us to the old examples from the second edition which use an older version of jQuery is not good.
- You should make it very clear that the examples in chapter 2 will not work unless deployed on a server! Readers have no way of knowing that, and the book does not mention it. I only found out because readers of the first two editions of this book also faced the same issue, and posted the problem to Manning forums.
- If possible, avoid splitting code samples across pages, as done on the bottom of page 26 and the top of page 27.
- In 2.4 your example to select "all the links but the externals" (p.33) does not work correctly since it lists all the links. I think this is because the expression a[href!='http://'] is selecting all links that are not exactly 'http://', right? However, when I change the expression to a[href^!='http://'] the Selectors Lab Page appears unable to process that selector. So what is the appropriate selector to obtain "all the links but the externals"?

Despite all that I think the book is great so far.
The code for locations-list.jade in listing 4.5.2 works, but there is a warning in the terminal window when the home page is rendered in the browser:
Warning: missing space before text for line 25 of jade file "c:loc8rapp_serverviewslocations-list.jade"

Putting "| " (vertical bar plus space) before the non-breaking space character on the line which is three lines from the end of the file gets rid of that warning.
Well I finally got things working, but I think the instructions in chapter 5 need to be clarified for those of us using Windows.

The application needs to be able to access the environment variables NODE_ENV and MONGOLAB_URI, but merely having them set within heroku (using heroku config:set) is insufficient. There are several ways to resolve this on Windows:

[1] When testing with nodemon you can prepend the environment variable settings when calling nodemon, as shown at the bottom of page 166 (v6):
$ NODE_ENV=production nodemon app.js
However, that example is guaranteed to fail, because MONGOLAB_URI is not specified. The example should be something like:
$ NODE_ENV=production MONGOLAB_URI=mongodb://user:pwd@ds099999.mongolab.com:99999/loc8r nodemon app.js

[2] When testing with foreman you can set up your environment variables in a file named Loc8r/.env. This can done using heroku:pull, which will automatically write the heroku config settings to .env.

See https://devcenter.heroku.com/articles/config-vars#using-foreman-and-heroku-config

However, that .env file should not be pushed to heroku.

[3] The best solution is to use Windows Control Panel to explicitly create the environment variables, since this approach works with both nodemon and foreman, and there is no risk of the settings getting pushed to heroku. A minor drawback is that you need to open a new terminal after modifying the environment variables, though in practice you only need to toogle NODE_ENV between 'production' and any other value.
On Windows 7 I can't get the Heroku config variables to be recognized within db.js after making the changes detailed in section 5.5.3 (v6 pdf).

If I make this change to db.js:

if (process.env.NODE_ENV === 'production') {
dbURI = process.env.MONGOLAB_URI; // Page 167 in v6 pdf
}

then I get Mongoose connection error: Error: failed to connect to [undefined:27017] from mongoose.connect().

However, everything else is OK since directly assigning the URL string to variable dbURI works fine:

dbURI = 'mongodb://myuser:mypassword@ds011111.mongolab.com:11111/loc8r';

I know that I have the config variables set up within heroku:
$ heroku config
=== gentle-escarpment-2785 Config Vars
MONGOLAB_URI: mongodb://myuser:mypassword@ds011111.mongolab.com:11111/loc8r
NODE_ENV: production


Also, $ NODE_ENV=production nodemon app.js works fine, so the problem seems to be accessing the Heroku configuration values, and process.env.MONGOLAB_URI is shown as 'undefined' if I log it within db.js.

Stackoverflow documents this issue (http://stackoverflow.com/questions/19570064/process-env-does-not-contain-config-variables-on-heroku) but their solution (heroku labs:enable user-env-compile -a myapp) did not work for me since "labs" is not a valid heroku option.

heroku --version shows heroku/toolbelt/3.8.3 (i386-mingw32) ruby/1.9.3

Has anyone else got all the changes in section 5.5.3 working under Windows?
Here are a few issues with V6:

Section 2.6.1:
My personal preference is natively development in OSX
My personal preference is native development in OSX

Section 3.2.3
$ express --sessions -- css less --hogan
$ express --sessions --css less --hogan

Section 3.3.4
In this file paste the contents of /routes/index.js
In this file cut and paste the contents of /routes/index.js

Listing 3.5.2
doctype 5
doctype html

Section 3.5.2
Scaling web dynos... done, now running 1
Scaling dynos... done, now running web at 1:1x.

All minor stuff, and I think the book is coming along really well.
A few more issues with the v6 PDF. Most are trivial, but some are code related:

In the .jade files, rather than using...
script(src='//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js')
...why not simply use...
script(src='//ajax.googleapis.com/ajax/libs/jquery/latest/jquery.min.js')

In all the .jade files, replace doctype 5 by doctype html

Section 3.6, p.83
by the MVC components...
by placing the MVC components...

Section 4.5.2, p.119
When can use
We can use

Section 5.4.1, p.157
it automatically connected
it automatically connects

Section 5.5.1, p.163
$ heroku config | grep MONGOLAB_URI works, but $ heroku config:get MONGOLAB_URI seems clearer to me.

Section 5.5.3, page 168
$ git add . is in the wrong font.

Section C.1.1, p.180
.panel-body.review-container
.row
each review in location.reviews #E

needs to be changed to:

.panel-body.review-container
each review in location.reviews #E
.row

Section C.1.3, p.182
Listing C.1.6 The location-review-form.jade template in app_server/views
Listing C.1.6 The generic-text.jade template in app_server/views
I had several problems similar to Rebecca's when installing Heroku Toolbelt. The author may want to consider updating section "B 4.2 Install Heroku toolbelt" with additional instructions along the following lines for Windows users:
1. Install Heroku Toolbelt to a folder without spaces in its name, and do not select the default installation folder which is Csmilierogram Files (x86).
2. Heroku Toolbelt installs a utility named Foreman. Unfortunately the latest version (0.67) has a bug which prevents it working properly under Windows. To resolve this issue regress to an earlier version of Foreman as follows:
- Open a terminal window using Git Bash. Do not use Command Prompt.
- Remove the installed version of Foreman: $ gem uninstall foreman
- Install version 0.61 of Foreman: $ gem install foreman -v 0.61
3. Installing Heroku Toolbelt also installed Ruby under your installation folder. Add its bin folder (e.g. C:Heroku uby-1.9.2in) to your PATH environment variable.

Everything was fine for me after doing these additional steps on Windows 7.
$ express -version should be $ express --version with a double hyphen.

Great book so far.
The bulleted item git diff master^ master at the bottom of page 24 is shown twice. Should one of them be git diff master^..master?

And what exactly does that dot-dot syntax mean? It appears to be interchangeable with a space character.
I think Vania is referring to this text, which confused me as well:

Does git add need run more than once?
Unlike some other version control systems git add may need to
be run more than once for any particular file.
It is not saying just for
Git to add this file to the repository but to add the current contents
of the file to the index staging area to build the next commit.

Under what circumstances is the condition "may need to be run more than once" relevant?
User error! When I use Git Bash (msysGit distribution) everything is fine - see below.

You might want to make it clear to git newbies like me to be sure to use Git Bash rather than the Windows Command Prompt. And thanks for the instant response.


$ git add GitInPractice.asciidoc
JohnDoe@JOHNDOE-PC ~/GitInPracticeRedux (master)
$ git commit --message 'Add opening joke. Funny?'
[master 1722d1e] Add opening joke. Funny?
1 file changed, 3 insertions(+), 1 deletion(-)
JohnDoe@JOHNDOE-PC ~/GitInPracticeRedux (master)
$
Run git commit --message 'Initial commit of book.'

=> This does not work from a Windows Command Prompt. Double quotes must be used instead of single quotes. I have pasted my output below in bold font.

Is there a better way for me to run the git commands from a Windows environment so that the examples in the book work?


C:UsersJohnDoeGitInPracticeRedux>git commit --message 'Initial commit of book.'
error: pathspec 'commit' did not match any file(s) known to git.
error: pathspec 'of' did not match any file(s) known to git.
error: pathspec 'book.'' did not match any file(s) known to git.

C:UsersJohnDoeGitInPracticeRedux>git commit --message "Initial commit of book."
[master (root-commit) 350a089] Initial commit of book.
1 file changed, 1 insertion(+)
create mode 100644 GitInPractice.asciidoc

C:UsersJohnDoeGitInPracticeRedux>
"Can you confirm the exact output you see on Windows?"
=> I have cut and pasted exactly what I get:

C:UsersJohnDoeGitInPracticeRedux>git add GitInPractice.asciidoc

C:UsersJohnDoeGitInPracticeRedux>git status
On branch master

Initial commit

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file: GitInPractice.asciidoc

To be clear:
- I am doing this under Windows 7.
- "git --version" shows: "git version 1.9.0.msysgit.0".
- I am issuing my git commands directly from the Command Prompt window. Should I be using some kind of shell instead?
"Should I be using some kind of shell instead?"

=> A newbie user error on my part.

Once I issued my git commands using Git Bash rather than the Windows Command Prompt window (which works, but imperfectly) everything was fine. Case closed.
"default branch output (1)"
=> Should be "(1) default branch output", and also corresponding changes for "first commit (2)" and "new file in index (3)".

"(which unfortunately, like the run commands, is also always prefixed with a #)"
=> I don't see any '#' characters when I do this in Windows. Is this a Windows vs. Linux issue?

"Does git add need run more than once?"
=> "Does git add need to be run more than once?"
Ah, my mistake - I had (unwisely) skipped the Welcome section.

Those GitHub links are working fine. Thanks.
Chapter 1 of the the book states "In this book we’ll be covering version 1.11 of jQuery UI" but I can't find any information on accessing version 1.11 - not even as a beta release. The instructions in the book in section 1.4.2 show how to download it, but the latest release available is 1.10.3.

Can you please advise how to access jQuery UI 1.11? If it is not yet available, what is the planned release date?

Thanks.
The first example (listing 1.2 on page 12) does not work because these links in the html file do not exist:
http://code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css
http://code.jquery.com/ui/1.11.0/jquery-ui.js

The example works after changing the version from "1.11.0" to "1.10.2" in those two links.
As many others have pointed out, the sample code in Listing 1.10 (the Hello World example) still does not work. In an earlier thread users posted fixes that solve the problems, but even after those fixes are in place there are still a couple of cosmetic issues:
- Focus is not set on the <input> field containing "World" when the page is loaded.
- The text "World" is not selected.

Ideally, when the page is opened, focus would be set on the <input> field, and its default content ("World") would be selected, so the user would not have to clear the field before entering their own value.

Adding autofocus="autofocus" for the <input> field resolves both issues in Opera. However, in IE, Firefox and Chrome even though the field gets focus the existing content of the field is still not selected. Also, IE places the cursor to the left of the text, but Chrome and Firefox place the cursor to the right of the text. Obviously we want consistent behavior in all browsers.

Can these issues be resolved with AngularJS, or do we have to write JavaScript to address them?
I eventually managed to select the text of the input field when the page is loaded (listing 1.10), but it's not trivial. I had to create two AngularJS directives: one to set focus on the input field, and another to select the text in the field with focus.

<input type="text" ng-model="person" set-focus select-on-focus>

The JavaScript code is listed below.

<script>
var app = angular.module('helloApp', []);

app.controller('HelloCtrl', function ($scope) {
$scope.greeting = 'Hello';
$scope.person = 'World';
});

app.directive('selectOnFocus', function () {
return {
restrict: 'A',
link: function (scope, element) {
element.on('focus', function () {
this.select();
});
}
};
});

app.directive('setFocus', function($timeout) {
return {
restrict: 'A',
link: function(scope, element) {
$timeout(function(){
element[0].focus();
}, 0);
}
};
});
</script>
The book referenced in the previous post discusses 'controllerAs':

With AngularJS 1.2 onwards, there is a new syntax, the controllerAs syntax, which allows us to define the variables on the controller instance using the this keyword, and refer to them through the controller from the HTML.

The advantage of this over the earlier syntax is that it makes it explicit in the HTML which variable or function is provided by which controller and which instance of the controller. So with a complicated, nested UI, you don’t need to play a game of “Where’s Waldo?” to find your variables in your code base. It becomes immediately obvious since the controller instance is present in the HTML.


That book also states that using 'controllerAs' is a best practice:

Prefer to use the newer syntax when working with controllers, of defining variables and functions on the controller’s this. That is, use the controllerAs syntax and avoid using the $scope syntax whenever possible. The newer syntax is more concise and easier to understand.

This MEAP badly needs an update to reflect functionality in the current version of AngularJS, and to address issues that have been reported in this forum.
Thanks for your helpful response and clarifications. With hindsight I guess I should have done my own research on the status of Hibernate 5 rather than relying on Manning's estimated release date of the book.

But based on your comments, perhaps the book's description from Manning could be modified to stress that although the book covers Hibernate 5, it is primarily about using JPA 2.1 with Hibernate. Therefore any version of Hibernate compatible with JPA 2.1 (i.e. Release 4.3 or later) should work fine.

That would make the unknown release date of Hibernate 5 (possibly 2016?!) much less of an issue.
Well the authors obviously don't want to answer this thread, which I find disappointing. I raised the same issue directly with Manning and they would not respond either.

I am happy to be corrected on any errors on my part, but this is the situation as I understand it on the publication of this book:
- The book is about Java persistence with Hibernate 5.
- I see no release date for Hibernate 5, and in an earlier thread the author acknowledged that Hibernate 5 may not even be released in 2014.
- The status of the book is somewhat misleading (17 of 19 chapters available) since the code examples rely on Hibernate 5 which is not available.
- Therefore, even the instructions and code for a trivial "Hello World" example in chapter 1 cannot be provided.
- Manning continue to publish an estimated release date of March 2014, when there is a real possibility that the book won't be published before next year. Manning should update that estimated release date.

I like Manning books, and I buy MEAP books. I'm sure that this one may be a great book eventually, but it is just too bleeding edge to be useful at the moment IMO.

Manning gave me a refund.
In sections 1.3.2 through 1.3.5 which detail the "Hello World" example, each section simply states "TODO ... Requires Hibernate 5". Fair enough.

However:
- I can't find any planned release date for Hibernate 5 anywhere, presumably because there isn't one yet.
- In the "Hibernate 5 - When" thread just below, it was posted that Hibernate 5 will be released in "2014 or 2015".

Yet Manning is still providing an estimated release date of March 2014 for the physical book. That seems pretty unlikely, given that the book will still need to be updated in many places once Hibernate 5 is released.

I appreciate that the release date of Hibernate 5 is completely beyond the control of Manning, but it doesn't seem unreasonable to expect them to provide good faith updates for the release date of this book. My apologies if I am misunderstanding the situation, but as things stand this book might not even be published until 2015, right?