Giter VIP home page Giter VIP logo

book-node-mongodb-backbone's Introduction

Building Node Applications with MongoDB and Backbone

alt text

This is the example source code accompanying O'Reilly's "Building Node Applications with MongoDB and Backbone" by Mike Wilson.

Versions

This is a living repository which is periodically updated when Node.js or any of the dependent libraries change. If you're trying to match the code to the text, follow these tags to the repository version frozen at each publication:

First Edition (December 2012)
Tag: Edition1-Dec2012

Requirements

In order to compile the examples found here, your system needs to have the following prerequisites:

node.js
Current version is 0.10.16 (http://www.nodejs.org)
MongoDB
MongoDB available from mongodb.or/ and Node driver from https://npmjs.org/package/mongodb
Backbone.js
Available from Backbonejs.org. This book uses version 1.0.0.
Underscore.js
jQuery
jQuery is used by Backbone to support events and templating. Version used in the book is 1.9.1.
Require.js
Require is used to control asset loading for the large number of script files used in the project. Version used in the book is 2.1.5.

The code in this repository is kept up to date with errata corrections. If you're looking for an exact copy of the code from the first edition of the book, you can review the tag at https://github.com/Swiftam/book-node-mongodb-backbone/tree/Edition1-Dec2012.

book-node-mongodb-backbone's People

Contributors

mehdiraash avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

book-node-mongodb-backbone's Issues

Debugging Account.js

Hi

This style of coding tends to make it difficult to debug. Any typos in the code related to objects will probably result in an infinite loop of Type errors with no clear stack trace. Any alternatives to the model or any way to get a better stack trace?

TypeError: Cannot call method 'toString' of undefined at ServerResponse.writeHead (http.js:1076:45) at ServerResponse.res.writeHead (C:\v3\node_modules\express\node_modules\connect\lib\patch.js:75:22) at ServerResponse._implicitHeader (http.js:1027:8) at ServerResponse.module.exports.res.write (C:\v3\node_modules\express\node_modules\connect\lib\middleware\compress.js:79:34) at ServerResponse.module.exports.res.end (C:\v3\node_modules\express\node_modules\connect\lib\middleware\compress.js:86:23) at next (C:\v3\node_modules\express\node_modules\connect\lib\proto.js:158:13) at pass (C:\v3\node_modules\express\lib\router\index.js:107:24) at nextRoute (C:\v3\node_modules\express\lib\router\index.js:100:7) at callbacks (C:\v3\node_modules\express\lib\router\index.js:164:11) at callbacks (C:\v3\node_modules\express\lib\router\index.js:167:9)

Chapter 7, File app.js

I couldn't get the jade view, resetPassword, to recognize the "locals" object, accountId....a few hours later....much pain and agony...i got it working by making the following change to line 154 of app.js:
res.render('resetPassword.jade', {accountId:accountId});
...removed "{locals:

renderCollection inside of contacts.js

When does it ever get called? My contacts list never shows anything, so I followed all of the code for doing the status list to see why that one was working but not contacts list. It looks like you did all of the status list updating inside of the render function in the profile view. I am pretty sure my renderCollection function for the chat view isn't working for the same reason as it isn't working in the contacts view. It appears that renderCollection never gets called anywhere throughout the whole repository... is that something the browser is supposed to do automatically?

Questions about Chapter 6 putting it together

Can you explain more about how the client views and the application views work? That is, when you are a user and you access the application, what happens when you choose a client view? What happens when you choose a server view? How does the application manage the navigation between them, the requests and responses (via req and res), and the session data, etc.? This part is extremely confusing for those new to node and this discussion would be extremely helpful. I think you have the bits and pieces in various places in the book, but having it together would be great as a way to provide the "big picture view" of how this all works.

One thing in particular that I think is very confusing, because Node is the server and the application, when you request a view from public (a client view), the application serves it up based on a path (I presume). What happens when you respond with a 200? Does the browser load a new page showing the 200 response? Or does it leave the user on the client view page?

Why did we not have to specify where the views are for the application like we did in the previous chapters, with:
app.set('views', __dirname + '/views');

Could you explain more about how the module.exports works?
Is module a built-in keyword? It would appear that when you "require" the Account module, what's returned is the function in module.exports, which you then immediately apply to get an object, the one that's returned at the bottom of this function. But it's unclear how we know to use "module.exports"? Is this a node thing? a requirejs thing? an express thing? something else entirely?

In the configure function in app.js, I feel like I've missed quite a few huge things. How do we know we need the bodyParser to parse the forms? Why do we need the cookieParser and how do we know we need that? Is it related to sessions? How do we know how to set up the session? How do we know we need a memory store? What other kinds of stores are there? What are the tradeoffs? How do we know what url to use when connecting to mongodb? Why connect to mongodb here? Does this connection stay alive for the entire application? Is it a separate connection for each user that accesses app.js? How do we know what order to do all this stuff in?

There is so much about Node that is a complete mystery. People just seem to "know" what modules they need, what pieces to install, which pieces work with other pieces, etc. And yet I have not found anywhere an explanation for any of this stuff. It's like each book says to do it just a bit differently without explaining why, or how one learns the nuances of the decisions one needs to make for an application.

And most importantly, at the end of Chapter 6, can I run this application and see my work at this point? If so, how? Which page do I access to get to the "top level"? How do I debug if I have errors? This would be incredibly useful information. As it is, I feel like I've been following along and am left hanging...

Thank you! I know this is a lot of questions, so I appreciate any response and help.

Contact list doesnt work

Hi Mike,

i got your book yesterday and today tried to get the full apllication working (chpt. 10) to get a little preview, unfortunately the contact list is not working as expected. The data is passed correctly from the browser, but there is a problem:

Uncaught TypeError: Cannot read property 'first' of undefined
(anonymous function)
b.template underscore.js:30
SocialNetView.extend.render contact.js:53
(anonymous function) contacts.js:17
b.each.b.forEach underscore.js:11
r.(anonymous function) backbone.js:25
SocialNetView.extend.renderCollection contacts.js:16
g.Events.trigger backbone.js:9
f.extend.reset backbone.js:22
a.success backbone.js:23
o jquery.js:2
p.fireWith jquery.js:2
w jquery.js:4
d jquery.js:4

I set this up on a windows machine, but as the problem occurs in the browser, i guess it is os independent

First i tried to track it down by myself but the minified versions without source maps make it hard and i am new to backbone.

cheers

Can't get the Socket.io example in Chapter 2 to work :(

I have the exact same code as the book in my app for the Socket.io example on Chapter 2 (ex. 2-7 page 30 PDF), but despite that, the chat example is not working as expected. I type something on the chat window but the div#chat element is not being updated (and the random 3 Stooges catchphrases don't appear either). I am however getting these debug messages:

   debug - websocket writing 5:::{"name":"chat","args":[{"title":"Stooge","contents":"Soitenly!"}]}
   debug - websocket writing 5:::{"name":"chat","args":[{"title":"Stooge","contents":"Poifect!"}]}
   debug - websocket writing 5:::{"name":"chat","args":[{"title":"You","contents":"Hello!"}]}
   debug - emitting heartbeat for client YMl_B_G52t8Mym7m-qSa
   debug - websocket writing 2::
   debug - set heartbeat timeout for client YMl_B_G52t8Mym7m-qSa
   debug - got heartbeat packet
   debug - cleared heartbeat timeout for client YMl_B_G52t8Mym7m-qSa
   debug - set heartbeat interval for client YMl_B_G52t8Mym7m-qSa
   debug - websocket writing 5:::{"name":"chat","args":[{"title":"Stooge","contents":"Spread out!"}]}

Any idea on why it's now working for me? (I'm a total n00b regarding Node)

Thanks!

TypeError: object is not a function

I'm trying to run book's sample app, but receiving the following error:

pcassiano@...:~/socialnet$ sudo node app.js

/home/pcassiano/socialnet/app.js:60
require('./routes/' + routeName)(app, models);
^
TypeError: object is not a function
at /home/pcassiano/socialnet/app.js:60:35
at Array.forEach (native)
at Object. (/home/pcassiano/socialnet/app.js:57:26)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

i'm running the latest code from the book's repo.

what should i do in order to run this sample app properly?

thanks in advance.

TypeError: $.post(...).error is not a function [Learn More]

After login and get this error in the webconsole

TypeError: $.post(...).error is not a function
[Learn More]
login

http://localhost:3000/js/views/login.js:13:8
login self-hosted:953:17 dispatch
http://localhost:3000/js/libs/jquery.js:2:41720
add/y.handle
http://localhost:3000/js/libs/jquery.js:2:39774


define(['SocialNetView', 'text!templates/login.html'], function(SocialNetView, loginTemplate) {
var loginView = SocialNetView.extend({
requireLogin: false,
el: $('#content'),
events: {
"submit form": "login"
},
initialize: function(options) {
this.socketEvents = options.socketEvents;
},
login: function() {
var socketEvents = this.socketEvents;
$.post('/login',------------------------------------------+++++++++ not function-----------
this.$('form').serialize(), function(data) {
socketEvents.trigger('app:loggedin', data);
window.location.hash = 'index';
}).error(function(){
$("#error").text('Unable to login.');
$("#error").slideDown();
});
return false;
},
render: function() {
this.$el.html(loginTemplate);
$("#error").hide();
$("input[name=email]").focus();
}
});
return loginView;
});

RequireJS throws errors and rendering of index.jade stops - Typos in views

The RequireJS dependencies in two views have typos:

define(['SocialNetView', 'text!templates/profile.html',
        'text!templates/status.html', 'models/Status',
        'views/Status'],

in /public/js/views/profile.js for [ch07, ch08, ch09, ch10] should be:

define(['SocialNetView', 'text!templates/profile.html',
        'text!templates/status.html', 'models/Status',
        'views/status'],

and

define(['SocialNetView', 'models/Contact', 'views/Contact', 'text!templates/addcontact.html'],

in /public/js/views/addcontact.js for [ch08, ch09, ch10] should be:

define(['SocialNetView', 'models/Contact', 'views/contact', 'text!templates/addcontact.html'],

Issue: RequireJS throws errors and rendering of index.jade stops

Missing SocialNetView create explanation

I am reading the book and I stopped in chapter six to try to compile the app just follow the b ook and there weren't any explanation of how to create the SocialNetView.

Empty/Blank Index Page

hi mike,

i’m reading ‘Building Node Applications with MongoDB and Backbone’ book and following along the sample project.

After read each chapter i overwrite my local project files, updating from the ‘book-node-mongodb-backbone ‘ archive (downloaded from github). But this stop to work from chapter 6 to chapter 8 (that i’m reading now).

what’s happen? After ‘paste’ chapter 6-8 files into my local project directory structure and start the server, i cannot see the index page (although mongodb and node are running properly, without erros on console).

what should i do? can you forward your reply to my e-mail?

best wishes,

chap7 app.js app.get(/accounts/:id/activity) error for new account

When a (new) user registers, /accounts/:id/activity in app.js is called but the value of req.session.accountId is undefined and the application on the server crashes with an error (because models.Account.findById is called with accountId == undefined).
This "only" happens for a new user; existing users don't cause this problem.
I've been trying to debug what is going on here for a while, but no success.
My error or book code error?
If anyone could provide some feedback I'd appreciate.

addContact Function in Account (Node) model, malfunctioning as is

in the addContact() function in the Account model (server side), the book's example code on page 104 ex. 8-13 reads as so:

var addContact = function( account, addcontact) { 
    contact = { 
        name: addcontact.name, 
        accountId: addcontact._id, 
        added: new Date(), 
        updated: new Date() 
    }; 
    account.contacts.push( contact); 

    account.save( function (err) { 
        if (err) { 
            console.log(' Error saving account: ' + err); 
        } 
    }); 
};

However, when the contact gets pushed to contacts the name attribute seems to be dropped. I am not sure if this is a node version issue but this of course causes issues when the view is rendered for the model because the name element does not exist (as it is not being persisted to the db).

I changed my code to explicitly reference first and last like so:

var addContact = function( account, addcontact) { 
    contact = { 
        name: {
            first: addcontact.name.first,
            last: addcontact.name.last
        }, 
        accountId: addcontact._id, 
        added: new Date(), 
        updated: new Date() 
    }; 
    account.contacts.push( contact); 

    account.save( function (err) { 
        if (err) { 
            console.log(' Error saving account: ' + err); 
        } 
    }); 
};

This solved the issue for me.

02-06.js doesn't create a response

I'm getting an Unexpected Token ; error in chat.jade until I implement the update suggested in Issue 31. Now I don't get an error but I still don't get any kind of response.

I've also put some console.log('working'); lines into the chat script and 02-06 io.sockets.on callback to see if anything's happening other than the initial render but the lines aren't being written to the console.

It doesn't look like the script's running or the the server and page are communicating. Anyone else see this or have any thoughts on how to fix it?

Question about activity feed

I have been going through the book and something I don't really understand is how is the activity feed is being pushed to all of the contacts in the contact list.

I can see the following two lines of code, which are:

account.status.push(status);
account.activity.push(status);

As far as I can see account.activity.push(status) is only updating activity feed for the current user model and isn't being pushed to all of the contacts for that particular user. I did trying running the code in chapter 10 but for some reason adding contact doesn't work. It seems like there is no click handler attached to the button so can't really verify if the activity feed is being pushed to all the different users in the contact list.

Have I missed something in the code?

Thanks,
Nim

isFriend() in router : app.get('/accounts/:id', function(req, res)

app.get('/accounts/:id', function(req, res) {
var accountId = req.params.id == 'me' ? req.session.accountId : req.params.id;
models.Account.findById(accountId, function(account) {
if (accountId == 'me' || models.Account.hasContact(account, req.session.accountId)) {
account = account.toObject();//the line should be added
account.isFriend = true;
}
res.send(account);
});
});

Multiple Error at Mac OS X

Hello Guys
I'm trying to get this code working, but if I run thes commands
npm install
node app.js
I get this error:

module.js:340
throw err;
^
Error: Cannot find module './config/mail'
at Function.Module._resolveFilename (module.js:338:15)
at Function.Module._load (module.js:280:25)
at Module.require (module.js:362:17)
at require (module.js:378:17)
at Object. (/Users/peter/Desktop/book-node-mongodb-backbone-master/ch09/app.js:18:9)
at Module._compile (module.js:449:26)
at Object.Module._extensions..js (module.js:467:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.runMain (module.js:492:10)

If I simple rename mail.example.js to mail.js , I get this error:
Error: failed to connect to [localhost:27017]
at Server.connect.connectionPool.on.server._serverState (/Users/peter/Desktop/book-node-mongodb-backbone-master/ch10/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:564:74)
at EventEmitter.emit (events.js:126:20)
at connection.on._self._poolState (/Users/peter/Desktop/book-node-mongodb-backbone-master/ch10/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:124:15)
at EventEmitter.emit (events.js:99:17)
at Socket.errorHandler (/Users/peter/Desktop/book-node-mongodb-backbone-master/ch10/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:465:10)
at Socket.EventEmitter.emit (events.js:96:17)
at Socket._destroy.self.errorEmitted (net.js:329:14)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

Do I have to start or create a mongodb manually??

Thanks for your help

Peter

Pull requests

Hi Mike, I have sent you a pull request and wish to send you several more but I cannot seem to stack any more at my end so would be greatful if you would accept the patch to deal with the connect.session -> express-session package change. Then I will be able to send you more that deal with other changes to make chapter 8 work correctly now.

Example with Jasmine?

I'm loving the book so far! It's been very helpful and thorough and thankfully, short :-) I'm jut curious if you have any experience with Jasmine, and if you could give an example of how to wire it up into your Node/Backbone.js program? The RequireJS module is giving me a lot of grief about how to do any client side unit testing against my backbone models and documentation regarding Jasmine with RequireJS in Node is scarce.

Thanks again,

  • Keith

Ch 9 ~/public/js/views/profile.js , line 29

in the function postStatus, seems like the line

var statusCollection = this.collection;

doesn't do anything. Is that just legacy cruft?

postStatus: function() {
var that = this;
var statusText = $('input[name=status]').val();
var statusCollection = this.collection;
$.post('/accounts/' + this.model.get('_id') + '/status', {
status: statusText
}, function(data) {
that.prependStatus(new Status({status:statusText}));
});
return false;
},

ch06 server does not start

Hi,

To make sure im not typing something wrong. I cloned your code and tried running chapter 6. However, when attempting to start the server I get the following error:

events.js:71
throw arguments[1]; // Unhandled 'error' event
^
Error: failed to connect to [localhost:27017]
at Server.connect.connectionPool.on.server._serverState (/Users/chadeubanks/Dev/Node/node_social/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:530:73)
at EventEmitter.emit (events.js:126:20)
at connection.on._self._poolState (/Users/chadeubanks/Dev/Node/node_social/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:104:15)
at EventEmitter.emit (events.js:99:17)
at Socket.errorHandler (/Users/chadeubanks/Dev/Node/node_social/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:411:10)
at Socket.EventEmitter.emit (events.js:96:17)
at Socket._destroy.self.errorEmitted (net.js:329:14)
at process.startup.processNextTick.process._tickCallback (node.js:244:9)

Is there something missing in the books install process? MongoDB and Mongoose seemed to have been glossed over.

Receiving console error when click on See My Contacts from ch08

Downloaded latest copy, created mail.js in config folder. If I click on Add Contact without entering a valid Name or Email, it fails and when I enter a valid Name or Email it display Name correctly, but never saves contact. The following error is coming from content.scripts.c.js:11. Also started with fresh build of node_modules.

Uncaught TypeError: Cannot read property 'first' of undefined

Not quite sure what is going on. Please point me in the right direction.

Possible Zombie View Instances

This could just be me, I did use some of the code in the solutions from other users for issues I had with the official code from the book and this repository.

View instances aren't cleaned up when you navigate between those views where you can post a new status. This causes the post to be rendered twice, or even more. The status is rendered in multiples of 2 for each time you click the browser navigation buttons.

It does not get put to the database twice however. If you refresh the page the view instances are cleaned up and only one list item for each post exists.

`!!!` is deprecated, you must now use `doctype`

As seen on this SO question and when I ran the code from ch05 I came across the following,
Error: /Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/views/index.jade:1
> 1| !!! 5
2| html(lang="en")
3| head
4| title Social Network

`!!!` is deprecated, you must now use `doctype`
    at Object.Lexer.doctype (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/lexer.js:248:13)
    at Object.Lexer.next (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/lexer.js:833:15)
    at Object.Lexer.lookahead (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/lexer.js:113:46)
    at Parser.lookahead (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/parser.js:111:23)
    at Parser.peek (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/parser.js:88:17)
    at Parser.parse (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/parser.js:126:26)
    at parse (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/jade.js:95:62)
    at Object.exports.compile (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/jade.js:152:9)
    at Object.exports.render (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/jade.js:256:15)
    at Object.exports.renderFile (/Users/prometheansacrifice/development/github-repos/book-node-mongodb-backbone/ch05/node_modules/jade/lib/jade.js:293:18)

The SO question directed me to this leading me to suggest to you to update all the jade code accordingly

hasContact() function

var hasContact = function(account, contactId) {
if ( null == account.contacts ) return false;

account.contacts.forEach(function(contact) {
  if ( contact.accountId == contactId ) {
    return true;
  }
});
return false;

};

in chapter08, the hasContact function would never return true!!!

Please update Read Me

I've been confused by the readme file here. Since the software version using in the book is quite up to date. Your read me isn't reflect what it should be.

It may lead to your customer confusion and won't buy since node.js here show v.0.6.6 but your book (inside) show v.0.8.12. Other softwares should reflect the fact also. :)

Variable naming in views/chatsession.js in Chapter 09

Instead of ChatItemView and chatItemTemplate, I think they should be named to ChatSessionView and chatSessionTemplate as this file is all about the chat session view controller.

Other than that, it will NOT cause any malfunction.

Chap.7 public/js/views/profile.js 'views/Status' -> 'views/status'

This code in the beginning of the file states a dependency exists for 'views/Status':

define([..., 'views/Status'], function(...

But all files in the views directory begin with a lower-case letter. There is no 'Status.js' file, but rather 'status.js'.
So the code should actually be:

define([..., 'views/status'], function(...

The original code does not work for me. The fixed one does.

failed to connect to localhost:27017

Hi,

Someone else has raised an issue which you have closed about not being able to connect to the MongoDB. Would you be able to explain further how to 'start MongoDB and make sure it is running', please?

Sorry I have never used MongoDB, so would appreciate the help

Cheers

Question about chapter 6: reset password

In the reset password jade template code, can you explain more about how "#{locals.accountId}" works?

In the paragraph after the reset success jade template, you say we could have implemented these views as client code, but you chose to do it on the server because they are so important. Can you explain more about this choice? How do you know which is the right choice for any code?

A couple of questions: running code at end of chap 5; improving form in chap 6

First, is there a way to run the code at the end of chapter 5? I am guessing not, but just curious. I tried loading various files, but nothing seemed to work except just localhost:8080/ which loaded the index view (node).

Second, in Chap 6 / Registration, you suggest that we could improve the form to test the password, and also give messages to the user if the login failed. I'm looking at the code and don't really know how to do either of those things. I'm guessing I could check the confirm email and confirm password in the register function itself. But to provide messages back to the user in case of a failure: that I have no idea. Okay, maybe one idea: perhaps have another element (or create one on the fly), "#error", that is rendered in case of a failure. BUT, how do you render one element (the "#content" element) on success, and a different element ("#error") on failure? Perhaps having an alternate template? And in app.js, the 200 code is sent back, so how do we get the error information back to to the user?

Anyway, my point is that it would be awesome to include more details about these suggestions, perhaps as part of the code download or a supplement to the book, or an appendix, or...

So far I'm up through Registration in chapter 6. One thing that I occasionally find challenging is figuring out exactly where a file should go and what it should be named. Sometimes it's clear, other times, not. It would be great to go back and make sure that each and every code example has a full path to the file name in the caption.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.