Categories
Just Shelley

When UPS says “train derailment”

I received a notice from UPS on a package shipped from California. “Train derailment” was all it said.

So I have to backtrack to discover that a coal train derailed in Nevada on Sunday, damaging the tracks. The tracks weren’t fixed until Tuesday, which delayed all other trains using these same tracks. My package arrived in Kansas today, where it was most likely unloaded from one of the delayed trains. My package will probably be arriving Monday rather than Friday.

At least I now know my package isn’t one of many, strewed across some desolate wilderness somewhere amidst twisted and torn metal—most likely being pawed by bears or wooly men.

Categories
Just Shelley

Golden Girl going, going, going

Folks who have been reading my various publications over the years will know about Golden Girl.

Golden Girl, in her prime and brand new

Golden Girl is a 2002 Ford Focus I purchased when living in San Francisco a decade ago. She’s my first car, since I didn’t get a driver’s license until later in life. How much later in life is incidental to this story.

Golden Girl met the new neighbor on Saturday.

Golden Girl, a little worse for wear

The rear of the neighbor’s moving truck hit Golden Girl just right, half tearing off her bumper cover. No issue about who was at fault in the accident, since my car was parked, but his insurance (Geico) is playing the ‘still investigating’ card. I expect to get reimbursed for the damage…eventually.

This is the latest in a series of automotive challenges I’ve had with Golden Girl, and the time has come to say good-bye. For many years I used the bus, and it won’t kill me to use a bus, now. I’m in discussion with an animal welfare charity about donating the car. Even with the damage, the car is in good working order and would be relatively easy to fix. It should fetch a decent enough chunk of money.

I like the idea of Golden Girl’s final act (for me) to be helping critters.

Categories
Books JavaScript Technology

Finished tech review and the move to Node 0.8x

Just finished the final tech review of my Learning Node book. At 400 pages, it’s a big book. I must admit to being more than a little tired. Right now, I feel I could sleep for a week.

The big announcement in Node land is that unstable 0.7.x is being moved to stable 0.8.x next week. As a final act for my book, I put all the examples through a 0.7.10 tests. The results were better than I expected, not as good as I hoped.

I hit a couple of minor deprecation issues. For instance, path.exists has been deprecated in favor of fs.exists. I used the exit event with one child process application, and I needed to convert it to the new close event. This new event not only waits for the process to end, but all stdio pipes are closed.

Other modules ran into the same deprecation issues. Most of the testing modules in Chapter 14 won’t work with Node 0.8.x, but I think the changes to make them work will be minor.

Socket.IO didn’t work with 0.7.10 and the developers know it. I’m more than a little surprised at the reaction to people turning in issues related to the problem. Not to mention, closing the bugs without even attempting a fix. As I wrote in comments to the issues, today’s 0.7.x stable is about to become next week’s 0.8.x stable, and this bug is going to get very popular.

The db-mysql module also didn’t work with 0.7.10, and the highly popular jsdom module also had problems.

I noted the compatibility issues in the chapters, and provided alternative examples for those I could correct. That is the best I can do.

I’ve giv’n her all she’s got, Captain!

Categories
Books Writing

Changing course

Learning Node will be my last book for O’Reilly, at least for the foreseeable future.

Learning Node was a particularly exhausting book. Not only is there much to cover in one book, Node is a very dynamic technology. I like to think my coverage is both comprehensive and solid, but I guess we’ll see how the book does when it hits the streets.

In the next year, I’m going to enter the ranks of the self-published. I’m also focusing less on technology, and more on other areas of interest. What these areas are will become evident over the next several months.

My next book won’t be on technology, and I’m not sure that the one after will be on technology, either. I’m not saying Learning Node is my last book on technology, but I am most definitely taking a break from the tech book field. Most tech writers will understand when I write about the challenges in providing decent and accurate code examples for a new or changing technology, at the same time you’re trying to ensure that your grammar is correct, and your prose is clear and readable. Not only do you have to worry about your comma use in your text, you also have to worry about comma use in your code.

Just when you finally punch all the code, screen grabs, and text into a comprehensive whole, you’re then faced with an audience that’s just as likely to tell you it’s not interested in buying a book when they can find the material online, and for free.

I’m one of the lucky tech writers in that all but a couple of my books have earned out the advances, and provided relatively decent royalties. I’m not a bestselling author, but to earn out advances on 20 books isn’t bad in the tech field. At the same time, though, I’m not making it as a writer, and I have to try something new. That, or see if the local McDonald’s is hiring, because my days of tech contracting are over.

I plan on being as innovative as possible with my self-published works. For one, I don’t see any of the books being very large. Electronic publishing opens the doors for focused, shorter works, attractively priced. By attractively priced I mean that I don’t see any of my books priced at more than $5.00. In fact, I envision a Starbucks pricing model, with book prices comparable to prices you’d pay for a Starbucks coffee: smaller books will be equivalent to the price for a tall latte; larger, more complex works, closer to the price for a venti Caramel Macciato.

Lower prices and shorter works does not mean the books won’t be solid. My first self-published book is on a topic I’ve been researching for three years. But it’s a focused topic: too big for a Kindle Singles, and way too small for a more traditional book. It’s a topic that greatly interests me, and I think that’s the most important consideration.

Of course, I still have to worry about grammar and the damn commas, but at least I don’t have to worry about code.

Categories
Technology Writing

Node: References and Resources

Recovered from the Wayback Machine.

During my explorations of Node.js, I came across many excellent resources, references, tutorials, and various other online publications related to the technology. I had planned on incorporating this material into an appendix for Learning Node but decided it would make a better online resource than a book chapter.

Every person interested in Node should start with the Node.js web site, as well as the web site for npm, the application that manages Node module installations:

If you’re interested in Node in a Windows environment, you might a little extra help in getting set up. I recommend the following resources:

There’s an enormous number of resources for the Node.js newbie, including basic tutorials and entire online books. I know there are more than what I discovered, but the following is a good start:

One person, Felix Geisendörfer, has provided several excellent online resources for new and experienced Node folks:

As you learn Node, you’ll hear about the Node event loop. The following are a couple of good articles on the event loop:

REPL is the Node interactive stand alone application. REPL stands for Read-Eval-Print-Loop. Following are good REPL resources:

Modules are the heart and soul of Node.js. It can be an interesting experience finding Modules, because you need to look carefully among the many available to see which are the ones currently supported, and which have, more or less, been abandoned. Luckily, there are good Node module resources:

A good rule of thumb about which module to use is check for recent activity in the module’s repository. Are there outstanding issues? Pull requests that have gone unanswered for a long time? Also do a Google search, see who is using the module, for what, and how recently.

For more on npm, itself, do check out the Developer guide. Also spend some time understanding the differences between global and local installation of modules.

Node is based on the CommonJS model. If you want to learn more about CommonJS, I recommend Taking baby steps with Node.js–CommonJS and creating custom modules.

The heart of the module system is the package.json file. Nodejitsu provides an article and a couple of good cheat sheets related to package.json and npm:

Peter Krumin did a great series of articles on Node.js Modules you should know about. Several of my favorite are included in the list.

If you work with Node, and you write modules, chances are you’re going to become intimately involved with EventEmitter. The following are good EventEmitter resources and references:

Control flow is a big topic of interest for Node developers:

There are good frameworks for Node, but I focused on Connect/Express. I felt that Express was more Node-like, and requires less upfront time than the other frameworks. That’s not to say there weren’t challenges with Express, as it went from Express 2.x to Express 3.x and then back down to Express 2.x, but one adapts. I focused on Express 3 in the book.

Connect is the middleware layer for Express. TJ Holowaychuk provides an introduction to Connect 2 at Connect 2.0. The Express web site is at Express.com, though note that the documentation is still focused on Express 2. For the Express 2 developer, check out the Migrating from 2.x to 3.x guide. Mike Valstar writes specifically about Express error handling and 404 pages.

I grew fond of Redis when working with Node.js. The Redis site is at redis.io. Redis is nicely documented, at the site and in the Little Redis Book.

Following are other articles and links of interest, in no particular order or grouping:

Hack Sparrow article on running Express application in a production environment http://www.hacksparrow.com/running-express-js-in-production-mode.html. Charlie Robbins provides a how-to on distributing Node.js apps with Hook.io at http://blog.nodejitsu.com/distribute-nodejs-apps-with-hookio. More on the Hook.io module at http://ejeklint.github.com/2011/09/23/hook.io-for-dummies-part-1-overview/.

Rasmus Andersson wrote a Template for setting up Node.js-backed web apps on EC2 at http://rsms.me/2011/03/23/ec2-wep-app-template.html. Another writing on setting up Node on Amazon EC2 from Ben Nadel at http://www.bennadel.com/blog/2321-How-I-Got-Node-js-Running-On-A-Linux-M….

A XSS (Cross Site Scripting) Cheat Sheet can be found at http://ha.ckers.org/xss.html. Another cheat sheet, this time on SQL Injection at http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/.

Heroku provides instructions on how to create a self-signed SSL certificate at https://devcenter.heroku.com/articles/ssl-certificate-self. Another tutorial on the same subjec. at http://www.akadia.com/services/ssh_test_certificate.html.

I don’t cover backbone.js in the book, but an article on combing it with MongoDB, Mongoose, and Restify can be read at http://backbonetutorials.com/nodejs-restify-mongodb-mongoose/.

A comparison of Redis and Cassandra http://hammerprinciple.com/databases/items/redis/cassandra. More on Apache Cassandra at http://cassandra.apache.org/. Redis is compared with Memcached at http://webdevrefinery.com/forums/topic/8221-memcached-vs-redis/. The Memcached web site is at http://memcached.org/.

Guillermo Rauch’s Use Jade Blocks, not Layouts, at http://www.devthought.com/code/use-jade-blocks-not-layouts/.

Curl is your friend when testing RESTful applications. Some helpful examples at http://www.yilmazhuseyin.com/blog/dev/curl-tutorial-examples-usage/.
The Ruby on Rails routing guide applies equally well to Node: http://guides.rubyonrails.org/routing.html.

Charlie McConnell wrote an article on “How to use stream.pipe” at http://docs.nodejitsu.com/articles/advanced/streams/how-to-use-stream-pipe.

One of the better, more thorough answers I’ve seen at Stack Overflow is the answer to “What is the Difference between proxy server and reverse proxy server” at http://stackoverflow.com/questions/224664/difference-between-proxy-serve….

Guillermo Rauch wrote a multipart tweet filtering proxy, beginning with Part 1 at http://www.devthought.com/2012/01/24/filtering-tweets-for-your-favorite-….

Shravya Garlapati at LinkedIn, wrote a very helpful article, Blazing Fast node.js: 10 performance tips from LinkedIn Mobile http://engineering.linkedin.com/nodejs/blazing-fast-nodejs-10-performanc….

The Async module can be found at https://github.com/caolan/async. More on the creation of Async at http://caolanmcmahon.com/posts/asynchronous_code_in_node_js.

The Step module is located at https://github.com/creationix/step.
There is promise support in Node with Q at https://github.com/kriskowal/q, and deferred https://github.com/medikoo/deferred, as well as Futures https://github.com/coolaj86/futures.

Yes, you can use Node modules with client-side JavaScript with help from RequireJS at http://requirejs.org/. And you can scrape web pages using Node, jQuery, and Jsdom, with a little help from this article http://liamkaufman.com/blog/2012/03/08/scraping-web-pages-with-jquery-no….

Since Node is based on the CommonJS model, read more about CommonJS at http://www.commonjs.org/. An interesting article on Node, CommonJS, and custom modules by Jan Van Ryswyck can be found at http://elegantcode.com/2011/02/04/taking-baby-steps-with-node-js-commonj….

A Nodejitsu article on using the Process module can be found at http://docs.nodejitsu.com/articles/getting-started/the-process-module. More on Node and processes by at http://dailyjs.com/2012/03/22/unix-node-processes/.

More on TCP Socket Programming in Node.js at http://www.hacksparrow.com/tcp-socket-programming-in-node-js.html. A general article on TCP vs. UDP can be found at http://www.skullbox.net/tcpudp.php. More on UDP Networking at http://twistedmatrix.com/documents/current/core/howto/udp.html.

If you’re curious about the performance differences between using process.nextTick and setTimeout, you can view benchmark tests at https://gist.github.com/1257394.