The LEGO Build-It Book: Amazing Vehicles

LEGO. There, I got the attention of a large number of you.

The LEGO Build-It Book: Amazing Vehicles is the first volume in a new series from No Starch Press that is intended to give anyone ages 7 and older some ideas of things they can build or modify using LEGO. The 10 projects in this book are ranked by complexity, functions, and required pieces. The introduction page for each project includes design notes, technical specifications, and beautiful pictures of each finished product to whet the appetite. There is also a pretty neat section on advanced building with some useful tips for building with greater strength and imagination.

This particular volume is focused on vehicles. The 10 projects included are:

  • Off-Roader
  • Go-Kart
  • Muscle Car
  • Stroller
  • Multi-Purpose Truck
  • Historic Racer
  • Classic Car
  • Wheel Loader
  • Street Rod
  • Rescue Truck

The book is beautifully done with excellent art and clear instructions. Anyone looking for some vehicle plans and ideas is sure to find it interesting. My 7 year old son is waiting excitedly for me to finish this review and hand the book over to him. I consider that a very good sign, too.

Disclosure: I was given my copy of this book by the publisher as a review copy. See also: Are All Book Reviews Positive?

The Healthy Programmer

I sit at a desk all day. I sit with my hands on a keyboard or mouse and my eyes fixed on a computer screen. This is a terrible thing to do to one’s body. I learned this first hand when, just over two years ago, I developed wrist and back pain so severe I nearly chose a different career. Instead, I talked to a doctor, read up on ergonomics and repetitive stress injuries, and made some significant changes to how I work.

I wish this book had existed back then, and better yet that I had read the book before the pain started. Even though I am healthy and doing well, I find that I must be vigilant. I get up and walk for a few minutes every hour. I take longer walks at least twice a day. I look away from the monitor frequently. Still, when I’m in the groove, it is easy to look up and realize that I have not changed my position for 3 hours. Those moments are far less frequent, and must be infrequent if I want to be able to do this sort of work the rest of my life. Same goes for you, and the sooner you realize it and adjust your work habits for the sake of your health, the better.

The Healthy Programmer: Get Fit, Feel Better, and Keep Coding is a book I recommend highly to all who work behind a desk all day, but it is especially written for programmers. While I spend more time writing documentation nowadays, my thinking patterns and my physical habits fall into the same category. This book spoke clearly to me and I think it will to anyone in a similar position.

The Healthy Programmer suggests a method of implementing changes to daily work and diet patterns that will be familiar to programmers. It is iterative, measured, and all-around Agile. You start by taking stock of where you want to go, what you want to see happen. Then, you measure how things are today and make small changes, one at a time, to your life and see how each affects the things you measured. As you get the hang of one thing and choose to incorporate it into your regular lifestyle, you measure something else and repeat the process.

We start with an introductory chapter. These lay the foundation for why some habits are good while others are not. Most of the facts are already known to us. Face it, programmer/computer engineer types are a pretty bright bunch. However, we don’t always choose to apply our knowledge, primarily because of how we have adapted ourselves to the pressures of the job. Once you get past the no-scare-tactic-or-hype discussion of habits and the well-cited using academic journals research behind what the book promotes, you find yourself wanting to do the things it discusses. It is kind of like that time you heard about a new toolkit available in a programming language you love that lets you implement a feature you have been dying to play with. You can’t wait to get started.

Topics covered in the book include walking, sitting vs standing, diet and nutrition, headaches and eye strain, back pain, wrist pain, exercise, getting up and out of your cube or home office, understanding fitness, and more. Everything comes with citations and balanced, scientific discussion that never gives in to hype or fad. You get advice that is backed up by doctors, scientists, nutritionists, and fitness professionals…and none of it sounds like the stuff you hear in the diet craze of the month or year. There are no vague promises, no unrealistic expectations, no fearmongering nor scare tactics. Just good information that is well presented and molded into a style of communication and plan for implementation that will be familiar to programmers.

This is a 200+ page book that can be easily skimmed over a weekend. Then, you can go back through it slowly over a period of months and let it help you be or become healthy and prevent, reduce, or eliminate pain. It is worth it.

Disclosure: I was given my copy of this book by the publisher as a review copy. See also: Are All Book Reviews Positive?

Nginx HTTP Server, Second Edition

I reviewed the first edition of this book back in 2010 (see: Nginx HTTP Server). To be honest, that review was lukewarm and one of the reasons I started thinking about whether I would continue to review every book sent to me or whether I should be more choosy. I decided nearly two years later to be more choosy.

Nginx HTTP Server, Second Edition is an improvement over the first edition. Some of the shortcomings I pointed out have been addressed. The unnecessary chapter about basic Linux commands is gone, for example. The space was filled by expanding the Nginx-specific technical information chapters. In general, the writing quality has also improved a little, although this book still displays the annoying tendency seen in most Packt Publishing books toward awkward phrasing and grammar. Sometimes I wonder if their editorial staff is comprised of non-native speakers of English, in which case I would be more gracious toward the editors themselves while being more concerned about the company’s decision making.

Because there are so few books on Nginx, and because I think it is a web server worth learning about, I’m going to post another lukewarm review of this book. It is improved over the previous edition and is still filled with excellent technical information, but you still have to slog through writing samples like this, from the preface:

…for the past few years the same reports reveal the rise of a new competitor: Nginx, a lightweight HTTP server originating from Russia (pronounced engine X). There have been many interrogations surrounding this young web server. Why has the blogosphere become so effervescent about it?

That is almost identical to the awkward quote I included in my 2010 review of the first edition. A couple of words have been changed, so this was obviously read and updated, but to call it edited is to slight real copy editors.

Bottom line: I don’t have anything new to say over the last edition, except that today there are other books in print, including the recently reviewed and better book on Nginx, Mastering Nginx, also by Packt. Take a look at the tables of contents for the two books and compare them. If the topics covered in Mastering Nginx are enough for your purposes, buy that book. If you need the information that is in this book but not in that one, then Nginx HTTP Server is still your best bet, even with its weaknesses. This information is hard to find anywhere else, and that is why I’m reviewing the book.

Disclosure: I was given my copy of this book by the publisher as a review copy. See also: Are All Book Reviews Positive?

Realm of Racket

This is not my first review of a book that covers a dialect of Lisp (see: Land of Lisp). That is because I am not alone in believing that learning Lisp makes you a better programmer, even if you never use it for any official project or paid job.

This is also not my first review of a book that is intended for young programmers. That is because I think learning a programming language is a useful skill worthy of pursuit, even if you never use it for anything but fun.

Realm of Racket was written by a group of people, including Conrad Barski, M.D, the author of Land of Lisp. Like that book, this is a book filled with enjoyable art, clear prose, and an easy to follow structure. The examples used in the book are easy to comprehend and do a very good job of illustrating the concepts being taught while also being interesting.

Why a group, though? Well, the back story is that is a book that was written by college freshmen and that is intended for a similar audience. As a result, it is alternately playful and unpretentious, with an eye for fun over drudgery, while at the same time being solid on the technical aspects (due to the supervision of knowledgeable people, or perhaps the young authors were just that good, the book doesn’t say).

So, what is Racket? The short answer is that Racket is a derivative of Scheme, which is in turn a derivative of Lisp. Some like to call them Lisp dialects. The book gives a solid grasp of important fundamentals with a clear description of the technical details. This is done by teaching the reader to program games, bit by bit. It is a fun and clear way to learn.

The book is filled with informal quips and illustrations, even the occasional comic. I have nothing bad to say about the book. I will say that the style is unique and may not suit everyone, but I think that is a direct result of the authors’ intent to pursue teaching programming to a market that does not like stodgy, formal textbooks. If that describes you or someone you know, the book is worth a look.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Mastering NGINX

Nginx is an http server intended for high traffic websites with a mind toward network scalability. I used NGINX as my primary web server for about 3 years. At the time, I hosted my sites on under-powered hardware that had little memory and had trouble keeping up with demand when I used Apache, but was able to keep this web site up and running the day one of my posts hit the front page of Digg (back when dinosaurs roamed the Earth and Digg was a really cool website). Back then, NGINX was still pretty new and most of the documentation was either in Russian, sporadic, or consisted of random posts on people’s blogs. It has been a couple of years since I upgraded my server to something beefier. At that time, I switched back to Apache, since I have used it for years and know it very well. That could change again, especially now that the official documentation for NGINX is much better, and because of today’s review book.

Mastering NGINX is by Dimitri Aivaliotis, a systems architect for a hosting provider and someone who uses NGINX daily. His experience shows in the quality and depth of the material. Unlike a different book on NGINX from the same publisher that I reviewed in 2010, Nginx HTTP Server, this book is well written and does not suffer from what I have come to call “The Packt Problem.” I hope this is a sign that Packt’s copy editing process has improved and that there is now a stronger commitment to offer titles that are worthy of being read because of the quality of the writing as well as the quality and uniqueness of the technical content.

Mastering NGINX is intended for experienced systems administrators and systems engineers, people who are familiar with using and administering *nix machines and configuring servers. This is not a beginner book. For me, that is a plus. It allows the author to get right down to business with NGINX.

We start with a short and typical installation chapter, complete with a discussion of modules that includes third-party modules and their benefits and risks. Installing using the package managers of several types of Linux distributions is covered along with compiling from source and the various flags and configure options available.

The next chapter jumps right in to the good stuff. Most of the NGINX materials I once used tell you what to change, but not why to change it. For a long time I was left wondering how to tell when to use specific configuration options, which files to find them in, and what the parameters are that I can use. The goal of this book is not to tell you what to do, but to describe these very things, so that in the end, you should be able to find and open an NGINX configuration file and edit it to fit your situation. Well done.

I was a little concerned when I realized that I was nearing the end of the chapter and still had some questions in my mind about some of the parameters and settings. Then I read this on page 40 in the chapter summary:

What we did not cover in this chapter are the configuration options provided by the various modules that may be compiled into your nginx binary. These additional directives will be touched upon through the book, as that particular module is used to solve a problem. Also absent was an explanation of the variables that NGINX makes available for its configuration. These too will be discussed later in this book. This chapter’s focus was on the basics of configuring NGINX.

Bravo! The author was thinking ahead, anticipated my concerns, and addressed them immediately at the point I had them.

The rest of the book gives deeper, more detailed information about specific uses for NGINX. Topics covered include using NGINX for serving mail, reverse proxying, setting up security, HTTP serving, including setting up your server for use with PHP (which is much easier now than when I wrote this outdated post), caching, tracking, and various sorts of troubleshooting. I was thrilled to see the appendices, especially the rewrite rule guide, as when I tried to do rewrites, I couldn’t find any good information (see my now-long-outdated post on the topic.

I was pleased to see how complete and clear the book is. Kudos to the author, the reviewers and editors, and the publisher. I recommend this book to anyone who uses NGINX or wants to do so.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Learn You Some Erlang for Great Good!

Functional programming is not new, but it is becoming popular once again. For this reason, in my last book review, I talked about a Lisp book and this review will cover a book on Erlang. Functional programming treats computation differently from other programming languages. Here, computation is done by evaluating mathematical functions. State and mutable data are avoided. Most of this is rooted in lambda calculus, in which everything is a function (yes, I’m simplifying, but this is a short review). Even if you prefer to use a different programming style, learning a functional language is beneficial to expand your skills and your ability to think of a problem in multiple ways, which often leads to more elegant and human-readable solutions. This is vital for long-term maintainability of code.

Learn You Some Erlang for Great Good! is by Fred Hébert. One of the things I really admire and appreciate about the author is that he provides a great example to others. So often, budding programmers and computer scientists feel intimidated by functional programming, somehow believing that they need to study for years and earn a higher level computer science degree before they even make the attempt. Hébert is a self-taught programmer and also the author of one of (perhaps the) most respected and used Erlang tutorials out there, on which this book is based and shares a title. He was named Erlang user of the year for 2012. Hébert proves that really bright people can learn and use and teach complicated things, and you can do so without learning it in a university. So, put aside the intimidation and press on!

This book covers all the basics of language and syntax, as well as the needed functional programming concepts and techniques. It covers the hot Erlang topics of today, too, stuff like concurrency and distributed computing. One thing I love is that as the book discusses these things, it does so without the typical hype and over-zealousness that often accompanies Erlang presentations and discussions. In fact, there is an amusing series of information box notes throughout the book, each titled “Don’t Drink Too Much Kool-Aid,” that give a welcome, balanced view of various features, praises, and criticisms of Erlang. Each of these shows a grounding in reality that comes from real-world use.

This is a serious book filled with quality discussions, clear writing, interesting and useful examples, and an occasional bit of whimsy. The book isn’t playful like Land of Lisp, but it isn’t dry and boring or overly academic, either. It is an accessible, practical book that the real-world programmer who is considering Erlang will find useful.

Disclosure: I was given my copy of this book by the publisher as a review copy.

Land of Lisp

Programming books are not fun. No one uses Lisp anymore, and almost no one ever did. There is no practical reason to read a book about Lisp. These are a few misconceptions that this review aims to correct.

Land of Lisp is by Conrad Barski, M.D. It is a book filled with enjoyable art, clear prose, and an easy to follow structure. The examples used in the book are easy to comprehend and do a very good job of illustrating the concepts being taught while also being interesting.

Let’s step back for a minute. What is Lisp? Lisp is a functional and expressive programming language. It was born out of an attempt to make a programming language that is easily read and understood by humans while also being able to do a lot in a short number of lines. Lisp code is compact and involves a manner of expressing instructions that is different from any other programming language I have experienced. It is with good reason that people describe Lisp as poetry, as elegance, or as “casting spells”. When you really get it, Lisp will affect how you program in any language because it changes how you think. I may be biased, I first encountered Lisp way back in 1987.

Land of Lisp includes within it the same sense of quirky brilliance that you remember in your favorite computer science or physics gurus. All share a different, not-completely-serious way of looking at the world that also allows them to come up with ideas that shatter stereotypes and enable new inventions. The book resides somewhere between the classic The Far Side comics and Richard Feynmann, perhaps with some of the better qualities of Richard Stallman thrown in, without Stallman’s sometimes off-putting traits. The book is a throwback to an era when playful brilliance was the norm in science, including computer science, and I mean that in a good way. This is one of the most fun computer books I have ever read.

So what about the quality of the information, from a technical standpoint? Rest easy, this also receives kudos. Land of Lisp starts with a short history section to give the reader context and then jumps right in to programming. Throughout the book, games are used to illustrate concepts. The first game is identical to the “guess the number” game I programmed on my Casio fx-7200G programmable graphing calculator back in 1986. The game is a simple one, but it provides a launching pad to greater things. The program is used to discuss global and local variables, functions, and basic Lisp etiquette.

From here, we move into syntax, code and data, and lists. Then, in the section titled “Lisp is Symmetry,” we begin the deeper topics like conditionals, paths, objects, reading and printing text, lists, and lambda. The last one, lambda, even gets its own chapter, which is a good thing since so many find it difficult and confusing at first. Before the section ends, Land of Lisp helps you learn important concepts using the classic Hunt the Wumpus and we get into arrays, hash tables, structures, and sequences. Now we are almost halfway through the book.

Land of Lisp includes some atypical examples for Lisp, and I like this. While it teaches the remaining vital programming concepts and Lisp style, we learn not only silly games, but even how to create a web server, really grok functional programming, macros, and more. The book is focused on Common Lisp, but modern variants like Clojure are also discussed.

If you have ever wanted to learn Lisp, but find typical tutorials and resources a bit dry, this is the book for you. Even if you aren’t as excited about the playful bits of the book, the quality of the prose and technical descriptions are such that you should give Land of Lisp a chance.

Disclosure: I was given my copy of this book by the publisher as a review copy.

A Chance Encounter with Mr. Darcy’s Progenitor

(In honor of the 200th anniversary of Pride & Prejudice, a review written in a style which attempts similarity to that of Miss Austin.)

I found myself, through no fault of my own, suffering terribly for several days under a fever. During the course of that time, I exhausted the contents of my reading list and asked my beloved wife if I might read her favorite book, one Pride and Prejudice by a Miss Jane Austin. Here is my opinion.

Miss Austin is a talented writer. She is witty, charming, gifted in her phrasing and descriptive ability, and has a sharp, perhaps wicked, sense of humor. I don’t like her at all. Next to hers, my own prose arrives at the ear uninteresting and plain. Hateful woman. Her ability to make the mundane and silly prattle of Elizabethean women both interesting and delightful gives me cause to doubt my own abilities.

I had the privilege of attending a ball at which Miss Austin was also an attendee. A Mr. Darcy, my longtime friend at whose estate I have often passed enjoyable hours fishing for trout in his stream or listening to his delightful sister play on the piano forte, did the pleasure of introducing us. In person, I found Miss Austin engaging, insightful, and possessed of a savage ability to expose to the world the innermost parts of other attendees with a mere sentence. May I always find myself in her good favor.

During that encounter, Miss Austin enquired as to my opinion of her book, as Mr. Darcy had informed her previously of my reading it. I told her all that I have already described to you. She then asked me to be forthright and direct with her as to my personal opinion. I hesitatingly told her that, while I found her writing gifted and her skills great, I was not enamoured with her subject matter as it falls outside of my personal interests. She gave a frown and replied, “Of course, you are not among my target audience.”

We both stood silently for a moment, regarding one another. Our stern gazes met, softened, and smiles appeared. Soon we found ourselves laughing giddily and causing no small scene. In the end, we embraced and parted as friends.

Python for Kids

I previously reviewed a book intended to teach programming to kids, Super Scratch Programming Adventure. That book used a self-contained editor and language that was easy to understand, easy to use, but confined its usefulness to a very limited set of roles. This is because of how Scratch is run and written.

It is no secret that I like Python. Even though I really don’t write code anymore, at least not very often, for most purposes I am still a big fan of Python over any other programming language I have learned. I’ve reviewed two Python books in the past, Learning Python and Python for Unix and Linux System Administration. While I know people who use Python as a beginner’s language for kids, I had not done any reading nor read any curriculum used for teaching programming to kids using Python that I felt I could recommend freely. Until now.

Python for Kids: A Playful Introduction to Programming is by Jason R. Briggs. It is the book that fills the hole in my Python library. It starts with a nice introduction and installation instructions for Windows 7, Mac OS X, and most importantly to me, Ubuntu (on which you are really only checking to make sure you have Python 3 installed, since Python is installed by default, although Ubuntu releases older than 12.04 may still have Python 2.x installed as default). Perhaps it is because we started in a similar era, but I found Briggs very easy to read and follow; like me, he started out by learning BASIC on a TRS-80. More likely, the clarity and tone are the result of an intentional focus so that kids can comprehend the complexities of the material. In either case, he did a wonderful job.

The book is broken down into logical chapters, each building upon the previous ones. It starts with foundational concepts like variables and calculations, adds types like strings and lists and tuples, then begins with an introduction to graphic interaction using the turtle module. This is much sooner than typical, and I think it is beneficial because it gives kids a quicker jump to that fun moment of power, “Hey! I just made that thing move on the screen.”

Then the book builds understanding with explanations of if and else statements and loops. On top of that are added the concepts of functions, modules, classes, and objects. We are now a mere third of the way through the book.

From here on, the simple explanations given will be expanded upon in easily-absorbed chunks. Built-in Python functions and useful modules each get a chapter. Then, we revisit turtle graphics to play some more. Once the basic graphic concepts are taught with turtle, tkinter is presented.

The last third of the book is focused on games. Specifically, using some fun game examples to flesh out the concepts more completely, developing greater fluency with the concepts, grammar, and vocabulary already presented.

One weakness of many beginning programming books is that once you finish the book you have to do further research on your own to figure out what to do next. I love that Python for Kids does not end this way, but instead includes a useful Appendix titled Where to Go from Here. This Appendix is short, but gives enough information to help the reader learn just a little bit about some Python resources and other programming languages to make those next steps just a little bit easier.

This book is suitable for kids in upper elementary school and older. The only real prerequisites are the ability to read and understand the concepts and a computer that will run Python. While the book is clearly written using suitably simple vocabulary, it is not watered down and never talks down to the reader. For this reason, despite the title, this book could be just as useful for the adult programming novice, too.

Disclosure: I was given my copy of this book by the publisher as a review copy.

LEGO books for all

This time around I have a real treat: three books about LEGO. These bricks were a staple of my childhood. They are well made and foster creativity in ways no other toy does. My LEGO collection has been handed down to my kids (who allow me to play with them sometimes) and added to many times.

These books give interesting insights and ideas that LEGO aficionados may enjoy. Each book is focused on a different segment of this audience. All are from No Starch Press. All the books are nicely printed on quality paper and include amazing color illustrations throughout. I’ll say right up front that, while I really liked all three of these books, I am reviewing them in order of preference. This preference reflects my personal tastes more than my feelings about the quality or content of any of the books, though. I think each deserves a high rating.

The first book is The Unofficial LEGO Builder’s Guide, 2nd Edition by Allan Bedford. This book has a lot of words, but they are not wasted words. It communicates the philosophy behind the engineering of LEGO and then builds on that knowledge the skills necessary to design and create anything you can conceive of using LEGO. That’s an amazing feat! There are some step by step directions to build a few things, but these are used more to illustrate good and useful techniques rather than give examples of what to build. The information given is deep, interesting, and would give a great foundation to anyone wanting to learn to build using other materials later in life. I recommend this book to anyone from older elementary school all the way through adulthood.

The second book is The LEGO Adventure Book, Vol. 1 by Megan Rothrock. This hardcover book includes a series of about 25 step-by-step building guides that are similar to what is provided when you buy a LEGO kit and pictures of about 200 built models for further inspiration. The illustrations in this book are stellar and the models are outstanding. Anyone looking to be inspired to build more interesting and more beautiful things will find this book thrilling. The book follows a loose story line focused on an adventure, a quest to learn how to build interesting and complicated things with LEGO. The story line is neither vital nor distracting, it just gives an fun excuse to move from idea to idea. This is the book that I expect my kids to enjoy most (ages 7, 9, and 10), with the older kids graduating to the book above very soon. This book includes “Vol. 1” in the title. I haven’t seen any other volumes, but will be watching for their appearance.

The third book is The Unofficial LEGO Technic Builder’s Guide by Paweł “Sariel” Kmieć. This is the most technical of the books in this review. Not everyone moves from standard LEGO bricks and kits to the Technic series. Those with a bent toward engineering, toward learning the mechanics of systems, love Technic kits and what can be done with them. I remember building my first car with a working steering wheel that actually turned the front wheels using Technic pieces back when I was in middle school (say 12 or 13 years old). I loved learning how this stuff works and the flexibility that comes from building with the even-more-precise-and-flexible gears, beams, and technical pieces available. I remember building a model of an internal combustion engine and tons of other stuff of this sort. Not everyone finds this interesting, and this smaller audience is the only reason this book is listed last. If you like this sort of thing, this book will expand your palette in ways you never imagined. You will learn about all the types of pieces available, how to use them to even greater effect, and learn some great mechanical science at the same time.

Disclosure: I was given my copy of these books by the publisher as review copies.