Starting a New Job

Starting today, I’m very excited to be working as a technical writer for Canonical. It is a thrill to be able to earn money while learning and writing about something that I am already passionate about: Ubuntu.

Some readers of my blog may not know this: Canonical is the company that provides support and resources to help the open source community make Ubuntu and promote its use across a multitude of devices and use cases.

How Linux Works

This is the Second Edition of How Linux Works: What Every Superuser Should Know and is the only Linux-focused book I can recall that has a strong focus on the computer science, what is happening here and why, big picture instead of the how-tos. The reader does learn how to do things, but only after learning conceptually what is happening. This is something that is sorely lacking in today’s computer education classes and I am thrilled to see the author’s focus here. I am convinced that once a person understands the concept of what a computer is, what it does, and how it does so (from a high level), it is much easier to then learn the mechanics. This is important because the concepts apply across operating systems and across time as those systems change their methodology, say by replacing the System V init program with Upstart or systemd.

This is the sort of book that I would recommend for a user who is new to Linux and wants to understand why things work the way they work, not merely learn how to do things. If there is an immediate need to learn just mechanics, perhaps this should then be the second book to read after reading one that focuses on what to do when. Regardless of when they read it, any Linux user who wants to grow in their comprehension of Linux, its parts, and the entire operating system ecosystem will benefit from this book.

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

Learn to Program with Minecraft Plugins

My kids love playing Minecraft. I run a server for them. I would love for any of my kids to learn to program (and also to take over the server admin duties from me). This book immediately struck me as having great potential.

Learn to Program with Minecraft Plugins

Learn to Program with Minecraft Plugins: Create Flying Creepers and Flaming Cows in Java
starts slowly, but it says it is going to start slowly. As it must, the book begins with coverage of topics like installation and configuration. This is the only dull part of the whole book, and I don’t think that could be helped.

Once we get to the meat of the material, things pick up considerably. I love how the author chose to give a high level view of each topic first, to orient the reader. While doing so, consistent calming statements are made to reassure the reader that it is not necessary to understand everything being said at this stage. Then, once the big picture is painted, the details are filled in. The accompanying explanations are clear and written in an enjoyable manner.

I love how topics like pseudo-code are explained almost as an aside, but in a way that makes them seem almost obvious, as in “Oh yeah, why wouldn’t a programmer write something like that first to help the process along?”

Each chapter builds on the knowledge from the previous chapters while introducing topics in a logical order.

Almost any programming book will work for a highly motivated and brave student. However, this is one of those special books that I believe to be suitable for a tentative, interested-but-scared sort of student.

I’m impressed by the author’s ability to combine accurate details and descriptions of complex concepts in a way that I’m certain my kids could grasp and later apply to other programming languages and environments, should they wish to. Albert Einstein is reputed to have said, “If you can’t explain it to a six year old, you don’t understand it yourself.” Author Andy Hunt has deftly proven himself as one who understands. That he is also able to express these ideas to a novice-level audience without talking down to the reader is exceptional.

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

Ubuntu Books I Wrote in 2014

Just in time for the end of the year holidays…

I have a new edition of Ubuntu Unleashed 2015 Edition (affiliate link), now available for preorder. This book is intended for intermediate to advanced users.

I also failed to mention on this blog the newest edition of The Official Ubuntu Book (another affiliate link), now in its eighth edition. The book continues to serve as a quality introduction for newcomers to Ubuntu, both the software and the community that surrounds it.

Linux Distro for Kids?

Short, informal survey. Feel free to comment here or via private messages/email. I may not respond to all comments, but will read with appreciation any you make.

What is your favorite Linux distribution that is intended for use by kids, say anywhere between the ages of 8 and 18? If you have more than one, feel free to name each.

Why do you like it?

If your preference for kids is a standard distro and not one intended for that audience, which is it and why?

Android Programming Unleashed

I have a chapter in one of my books, Ubuntu Unleashed, that gives an introduction to using Ubuntu as a foundation for developing for Android. The information in that chapter barely scratches the surface of the topic. As a response to those who are interested in learning more and who ask me for book recommendations, I am writing this review.

Android Programming Unleashed is part of the same series as my book. I’m stating that right up front so that everyone knows that I have a potential conflict of interest. Read my review with that in mind. I’m trying to be unbiased, and I have no direct financial or editorial interest in Android Programming Unleashed, but I am the author of a book in the same series. So, now that that is out of the way, let’s dig in.

Android Programming Unleashed is written by B.M. Harwani. It contains more than 650 well-written pages of useful information written by someone who clearly has experience teaching others. The book is structured in four parts, each of which contain several chapters.

The first part, Fundamentals of Android Development, starts like most development and programming books, with information about installation and a general introduction to the platform, tools, and getting started. It also includes a chapter on the basic widgets used in an Android application, including some standard classes, layouts, controls, and events.

The second part dives in deeper. Building Blocks for Android Application Design contains four chapters that each cover an important aspect like laying out controls, utilizing resources and media, using selection widgets and debugging, and displaying and fetching information using dialogs and fragments.

The third part, Building Menus and Storing Data, completes the basics that are needed for most useful applications. Here you learn how to create interactive menus and various useful options for those menus as well as how to use databases in Android applications.

The fourth part gives you additional information that will enable you to create more complex and interesting applications. Advanced Android Programming: Internet, Entertainment, and Services contains six chapters that cover a wide range of topics. Here you learn about implementing drawing and animation, displaying web pages and maps, communicating with SMS and email, creating and using content providers, creating and consuming services, and publishing Android applications to the Google Play store.

The book is clearly written and complete. It uses the standard tools for Android development, so the installation instructions include information for developing on the Windows, Mac, and Linux platforms. The figures and illustrations are clear and useful and the book contains numerous code samples. The code samples are also available for download using instructions given in the book’s introduction.

So, whether my book or something else whetted your appetite to code up some apps for Android, this is the book I recommend you take a look at.

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

DevOps Troubleshooting

Have you ever been responsible for a server and had something go wrong? Ever been in a situation where you didn’t know what was causing the problem or how to figure it out? I think any of us who develop code, work in quality assurance, or administer systems have had this sort of experience. Sometimes problems appear that were never covered in a class or training session. Experience is an amazing teacher, but gaining that experience can be intimidating and sometimes painful. This book gives anyone working in DevOps a bit of a head start.

DevOps Troubleshooting: Linux Server Best Practices starts with a discussion of best practices in troubleshooting. This lays a good foundation for the rest of the book and should be read right away. If you don’t already know how to narrow down the location or source of a problem, how to communicate with others who may be affected or who can assist, or even where to start when a problem arises, the first chapter gives a solid plan to help you out. Most of the content of this chapter will seem obvious to people with experience, but they were not obvious to us when we started, and this information would have saved most of us a few headaches. Ideas like favoring quick, simple tests over slow and complex one, favoring past solutions that are known to work, and most importantly, understanding how the systems work before doing anything are vital. I like the advice about using the internet, but carefully, and resisting rebooting as a cure-all (because it doesn’t help you find the cause of the problem).

The chapters that follow are each focused on a specific type of problem. They include discussions of tips, tricks, and tools for diagnosing, and fixing issues. There are chapters that cover server slowness due to CPU, RAM, and Disk I/O issues, boot problems, full or corrupt disk issues, network problems, DNS server issues, email problems, web server problems, and database problems. There is even a chapter on diagnosing common hardware problems.

Experienced Linux server gurus may pick up a trick or two, but it is those who are new to working with Linux servers who are most likely to benefit from this book, and benefit in significant ways. The book doesn’t cover how to use Linux or how to set up your server, but it covers exactly what the title of the book says it will cover. For this reason, I consider this a perfect second Linux book for anyone who is relatively new to any aspect of DevOps with Linux.

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?

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.