Skip to content

Category: General

The Insider’s Guide to Technical Writing, 2nd Edition

It was ten years ago that I read and reviewed the first edition of this book. At that time I said, “The book is a resounding success. Everything I love is in here. Everything I do (including those bits I don’t love quite so much) is in here. The book is not only written clearly, but with a style that is enjoyable to read. Examples are interesting and ring true to life. If you have ever wondered whether you might want to become a technical writer, wondered what a technical writer does, or you are a technical writer who knows there are gaps in your knowledge, buy and read this book.”

Over the past decade, the job has evolved and this wonderful book needed an update. The new edition came out recently and everything I wanted to see updated or added has been. The outdated content has been removed.

My career has led me on a path where I don’t have as much time to review books anymore, but I had to come out of semi-retirement for this one. My high praise for the first edition remains true and the new edition adds some extra polish that could not have been anticipated back in 2012. Kudos to author, Krista Van Laan, and to XML Press for a job well done!

Racket Programming the Fun Way

This is the second programming book that uses Racket that I have reviewed. I reviewed Realm of Racket back in 2013. I also reviewed a book about Racket’s ancestor, Land of Lisp, earlier that same year. While those books brought back some positive memories of when I first studied Lisp back in 1987 as an impressionable young lad, it was today’s book, Racket Programming the Fun Way by James W. Stelly that actually got me to stretch out beyond the book’s examples and exercises and write a little of my own code in Racket. First, the book, then a link to my silly personal stuff.

Going back decades, my memories of Lisp and it’s variants like Scheme and Racket involve things like everything is a list and remembering to count parentheses. I could read code quotes (slowly) but whilst I see the value in functional programming, this world of it was too much of a brain teaser to retain my focus.

When I picked up Stelly’s book, I flipped through the pages as I usually do with a new book. I was greeted by graphs and art and, GUI apps. Interesting. Then I noticed the math. Very cool.

The book takes you through a logical series of chapters that build on one another, passing from the needed introduction to lists and all the basics of handling data of various types to arithmetic, functions, conditionals, into realms where Racket gets super interesting. Creating plots and graphs, GUIs, and working with data are done in ways unique to Lisp and its dialects and I really like how this book explains how to do so. The last few chapters of the book are super fascinating as they delve into topics like logic programming, computing machines, and even writing an algebraic calculator in Racket.

Throughout, the book suggests the use of an editor I had not heard of called DrRacket. I found it to be useful, especially with its text highlighting and various interactive testing and execution abilities. While I can certainly write Racket code using my usual editor and run it from the command line, the suggestion was appreciated.

So, I read the book. I played with several of the exercises. I decided to give Racket my personal Hello World test: could I write the Guess My Number game in Racket using only what I learned in the book and the official Racket reference website as I have done with several other languages? Short answer: Yes, in about three hours. Not bad for not having written anything from scratch in Racket ever and not in Lisp in over 30 years, even with the possibility that perhaps I wrote some of the code in a non-standard way for Racket, it works as intended.

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

Monitoring my UPS with Grafana Cloud

A while back I bought an uninterruptible power supply (UPS) from CyberPower. I have a Linux workstation here at home that I need to keep safe from power outages.

CyberPower is kind enough to provide local monitoring and management software for Linux called PowerPanel that runs on the workstation and will shut it down appropriately if a power outage is detected and the battery back up is running low on battery power. Side note: this is not a paid advertisement, just being clear about the foundation for what I’m about to share.

It’s Friday. I like to learn new things on Fridays, especially playing with technology. Today I decided to see if I could monitor this UPS using Grafana Cloud. Disclosure: I work for Grafana Labs, makers of Grafana Cloud. In fact, I write documentation for Grafana Cloud, so trying novel use cases can only help me do my job better. Still, I found this to be fun and useful.

I run CyberPower’s monitoring software as a daemon on my workstation and don’t really think about it. We had a power outage last September and the battery worked perfectly and the daemon detected the conditions I set and powered down the workstation at the right time. I can also find the status of the UPS at any time. Here’s what that looks like from the command line, when I issued the pwrstat -status command just a few moments ago.

I had the thought last night that if I issued that command on a regular interval, I could collect time series data that I could graph over time. I could learn things like whether battery capacity fluctuates and when or what activities on the workstation create increased load on the UPS and by how much. That last one would require a bit of correlation of data outside of this blog post, but you get the idea.

I installed and configured Prometheus on the workstation to collect time series metrics. Metrics are quantitative measures commonly used for comparing and tracking performance over time. I had to figure out how to transform the output of that pwrstat command into a format that Prometheus could ingest.

Something I’ve discovered over the years is that I am rarely the first person to come up with an idea. I found Mike Shoup’s cyberpower_exporter on GitLab which he wrote for this exact purpose. Prometheus exporters are created to take metrics from a specific source and transform it into a standardized Prometheus format. This exporter works beautifully and now provides the Prometheus format metrics via HTTP on my local machine. Here’s an excerpt of that that output looks like in a browser.

Cool! These metrics are gathered locally on the workstation multiple times per minute and stored in Prometheus on the workstation. Now, to ship those metrics off to Grafana Cloud.

Prometheus can be configured to send metrics to another location using a feature called remote write. To configure remote write to send my metrics to Grafana Cloud, I first had to sign up for a Grafana Cloud account and get it set up. I did that some time back, so today all I really had to do was edit the Prometheus configuration YAML file by inserting this code snippet, editing to include my Grafana Cloud username and in the place of a password, an API key.

remote_write:
        - url: https://prometheus-us-central1.grafana.net/api/prom/push
          basic_auth:
            username: {username}
            password: (APIkey}

I waited a few minutes and then used the Explore function in Grafana Cloud to confirm that the metrics were being received.

There they are! I tested a few queries to be sure. But, I’m still not done. I want a dashboard. That’s the whole point of this exercise. Honestly, I wanted to play with Thresholds, which among other things are useful for changing the color of a text or background of a panel in a dashboard depending on the value of a metric. This screenshot doesn’t show it, but if the value of any metric falls outside of parameters that I set, the panel (the box on the dashboard specific to that metric) will turn red. In addition, some of the metrics show a graph of that metric’s value over time so that I can see any fluctuations. This is useful.

This seems like a good use of a couple hours of my time on a Friday. I hope you agree.

Thoughts on Turning 50

I’m writing this post during the COVID-19 era. Officially, society is starting to open up. Unofficially, I think we are about to cause a second, larger wave of viral spreading. Anyway, with my chronic illnesses, I’m staying locked down. As I spend my fiftieth birthday in near-isolation (my older kids aren’t with me –EDIT: they surprised me by visiting!!–, but my wife and youngest kid are) I decided to share some thoughts that lead me here.

Ten years ago I wrote a post about turning 40. Here’s a follow up. This time, instead of sharing specific random things I’ve learned, I am going to share my journey through time, growing into who I am now.

This is long and I don’t know if this is as interesting to others as the post a decade ago, but I think at least some of this is worth chronicling.

Infancy and Childhood

Not much I want to say, except that I had allergies from infancy (seriously, I could only be fed rice and lamb for the first year and a half of my life). I was adopted, so breast feeding wasn’t an option. Also, I’ve always had bendy joints and could do weird tricks because of them.

We moved. A lot. The longest I lived in one place was four years.

My Teens

We continued to move frequently. I attended four different high schools across four cities in two states.

I struggled to fit in. Almost anywhere. Adults liked me, but I didn’t connect to most of my peers. I had a few good friends, but just a handful. That was enough, though, as the friends I had were great.

Through this experience I began to learn the art of diplomacy, speaking to others in their language and style and adjusting how I expressed ideas depending on the audience. Moving as much as I did forced me to learn how to communicate in a new context. Being an only child did as well.

Trying to figure out what I believed about anything was hard. I could see all sides of issues and ideas. That frustrated most people. Religion was difficult, but I tried really hard to follow the one I was raised in, reading all the books and listening to all the speakers I could.

I started experiencing severe pain in my joints. Doctors said, “It’s just growing pains. Here’s some ibuprofen.” It didn’t help. They had no other ideas.

I got my first computer at 11. I started playing guitar when I was 19. I’ve played video games for 42 years as of the time of this post. I first used a mainframe computer when I was 17. My classmates and I, who were studying LISP and supposed to be working on programs, spent too much time playing Rogue.

My Twenties

I found a group of people who treated me with love, respect, and acceptance. That felt good. I learned from them and shared what I had learned.

Religion became more important to me as I learned more and more. The good things shaped me. Questions about many aspects were ignored or set aside as I couldn’t find answers.

The allergies that I had struggled with since infancy continued to impact me and I added new meds. This is when I first began to experience chronic fatigue as well. I saw specialists for chronic pain and was diagnosed with benign joint hypermobility syndrome and told to “suck it up, here’s some ibuprofen.”

I bought my first electric guitar at 20. I started buying broken tube-driven guitar amplifiers in my mid 20s and fixing them. I built my own tube amp at 27.

I did a lot of computer stuff for fun as a hobby. I started writing regularly for multiple audiences. I had dial-up internet access that connected me to a bash shell from which I could check email, browse Gopher, and read Usenet in my early to mid 20s.

My Thirties

I sold nearly everything and moved to Morocco (that’s a long story that is better in person–ask me face to face and I’ll tell it). I lived there seven years. This time honed and shaped my ability to communicate to and connect with anyone, across multiple languages. My three oldest and gene-sharing children were born there. Part of why we moved back was because they were reaching school age.

I moved back to the USA, to Arizona where I grew up. The schools were (still are) grossly underfunded and poorly supported so even great teachers struggle to be effective. That was hard to see and disappointing.

During this time I met a lot of people from different faith traditions. Some were different forms of the religion I grew up in and I learned much from them, including some acceptable and helpful answers to some of my questions. I also started to really get to know people of other faiths. That had a big impact. Before my 30s were over I had left the religion I grew up in. I didn’t lose my faith, but my faith had grown in ways that didn’t allow me to fit there anymore.

My health. Urgh. No positive changes. Doctors tried to help with symptom control, but didn’t understand the causes of my problems, so solving them or helping ease their impact was impossible most of the time.

I played guitar less, mostly because I was busy with work, three small kids and a wife, and trying to learn Arabic well. I did well with those other things, though, at least most of the time.

I did a lot of computer stuff. I first got Ubuntu Linux to install on my laptop in April 2005, when I was 35. It wasn’t the first time I’d used Linux or a UNIX variant, but it was the first time I experienced success installing any form on equipment I owned.

I got my first official tech writing jobs, both freelance and full-time, near the end of my 30s.

My Forties

Libraries are a long-standing love of mine. One of my first jobs in my early 20s while an undergrad was in a library. I noticed that the profession was moving to more of an information science focus, with libraries as a big part of that. I really wanted to learn more about the info side, so I got a master’s degree in “information resources and library science.” No regrets! I wrote three books at the same time. That was insane and I won’t pack so many projects into the same time frame again.

I moved my family to Iowa. The schools are better funded (but not perfectly) and the teachers have a better chance to have positive impacts across a wider set of kids.

I continued as a tech writer and decided this is the career I want: writing for a living, especially about technology.

I enjoyed using computers and exploring new IT technology daily.

I began feeling light headed all the time. I saw lots of specialists from multiple disciplines. Like with my chronic pain, none could find the cause.

I found and met my birth mother. My adoptive parents are the names on my birth certificate, but they told me in a loving way very early on that I was adopted. I feel like I always knew. I never was interested in learning about or meeting my birth parents, until one day in my mid 40s. Meeting her was life-changing in good ways. I met my full-blood sister shortly after. I met lots of genetic family and am in contact with lots of them. This has been wonderful, except that my birth mother died too soon after I met her.

I was divorced after 22 years of marriage. That sucked. I got help from multiple counselors and friends. I feel most sorry for my oldest three kids (they were my only kids at the time). It has been hardest on them, I think.

I spent several months being alone, resting more than I ever have, and even working out regularly. It helped with the lightheadedness, but wasn’t a cure. This was the first time in my life that I lived alone since my early 20s. I had enough energy to take care of myself and felt pretty good. Even so, I decided I would rather use my energy with others around, even if it meant I didn’t have as good of control over my chronic health problems.

I met someone new and married her. Her son is now added to my brood, making it four kids in total.

I started a YouTube channel where I play guitar and sing, because I wanted to learn to sing. Guitar playing is not the star here, and honestly, I don’t play as well as I used to most of the time because the joints in my hand seem to be more hypermobile than they used to be and so it hurts. From the beginning, some videos have been good and some not-so-good. It’s been more than five years and I can see significant progress, but still have some clunkers as I try to push my boundaries.

A long-time online friend mentioned that there have been changes in diagnostic criteria and added diagnoses related to my joints and chronic pain. I decided to follow up. One more specialist later, I was diagnosed with Ehler-Danlos Syndrome (EDS).

Studying and learning about EDS connected every single one of my lifelong chronic health issues. With some prompting from me, I got referrals to other specialists to confirm my suspicions that I had a few common comorbidities.

It turns out that I also have postural orthostatic tachycardia syndrome (POTS) and mast cell activation syndrome (MCAS), which is a really new diagnosis and field of research. I see an Immunology specialist at the university for MCAS, because no one else knows much about it.

That set of diagnoses covers everything from hypermobility to chronic pain to chronic fatigue to allergies to lightheadedness and a few things I haven’t mentioned. It all makes sense, which is a relief even if there is no cure. Also, they had better ideas on how to treat some symptoms. I decided to start reading medical journals on the illnesses and convinced doctors to try some treatments being tested, and those have helped as well.

Life with chronic illness is improving, even if not always easy. Oddly enough, people with EDS tend to look younger than they are while feeling older than they are. Both fit me. I’m also not hiding my illnesses anymore, which is a relief.

My oldest kid turned 18 and graduated from high school not long before I turned 50. I feel proud.

So many changes. I ended the decade a different person. I still hold to the values in the “Turning 40” post, but they were tested, tried, and pushed.

My Fifties (where I’m starting today)

I am content with who I am. I am at peace. That wasn’t true at the start of any decade of my life, except the first one.

I’ve learned that what others think of me is really none of my business and it has lifted a huge burden of trying to please others. I’m trying instead to live in a way where I feel good about who I am when I look in the mirror.

I know what I believe and value in life. I have religious beliefs that are comforting and encouraging, and have learned to embrace some mysteries and laugh at some things that used to puzzle and perplex me. My internal life is simpler and filled with contentment most of the time.

I’m still a Christian, but with a ton of influence from Zen Buddhism and Sufism and other things that have helped me considerably. A local Episcopal Church is my home and filled with kind and accepting people who also consider Christianity their path while welcoming anyone that guides toward God, love, and peace. That feels right, but some people in the group I grew up in would say I’ve fallen away. I’m fine with that.

My career has developed beautifully and I’m happy with it. I love the company I work for now and hope to stay there until I retire someday years from now.

My health is what it is, but so many mysteries about what’s going on have been solved. That brings more peace than I expected. The peace is greater than the frustration over the lack of a cure. Today’s treatments are helping me more than anything I’ve had in the past and I’m feeling better than ever, even on my bad days.

I don’t know what’s next, but I’ve started to stop regretting the past and worrying over the future and trying to embrace the present. It is the path I intend to follow the best I can. Mindfulness is helpful. Learning to let go of “Will I feel good enough to participate in this scheduled event?” fears about tomorrow and scheduling disappointments where people are mad because I won’t/can’t commit to something has been a boon to my mental health and welfare.

I’m good enough. I’m content. I’m embracing the mystery of today.

The Game is Rigged

The game is rigged. We all know it. So what?

The art is learning how to navigate within the structure for your own benefit. All it takes is a change in your perspective.

Care about others a little bit less; care about yourself a little bit more.

Selfishness rules the world. Dog eat dog and all that rot. It is kill or be killed; take or be taken.

I get out of bed and stumble toward the kitchen.

How can I face another day of constant warfare? I need coffee. Food. Maybe something stronger.

I glance at the stove and the sink and am reminded of tasks not done. Blurgh, no clean dishes, no clean pans. No eggs for me.

I hear my alarm. What was it I was supposed to be doing? Oh, yeah. A heavy sigh pushes my body a little closer to the floor. I trudge to the bathroom for a quick brush of the teeth and hair. Time to head out.

I exit the flat. The dingy hallway closes in on me. I am reminded again of my status. Dog eat dog; I chant my new mantra, trying to convince myself. I must get out of here. This life is killing me.

I see the sign on the elevator. Out of order. Again. It has worked exactly two days in the last month. I stumble down six flights of stairs.

The lobby lights are dim. Only one working bulb in the entire room. The trash by the mailboxes remains from last week. Not my responsibility. I try to convince myself. I cleaned up the lobby every week this year. I am starting over. Time for some other dog to be devoured. I’m done.

I exit the building. The streets are dark. I hate having to leave so early. The bus will arrive at my stop soon. Only two bus changes today. That is better than my old place, but it still takes too long to get to work.

Brr. Dirty snow consumes the sidewalk, except on the narrow path created by my neighbors’ feet. No one shovels in the slums. No one cares. No one issues citations. The law doesn’t apply here, unless they want to crush someone.

Six blocks go by. Only one more and I will reach the bus stop. No building here to block the wind. A shiver overtakes me. I need a new coat. Sigh. I need to make rent.

I check my phone: 6:00 am. The bus should arrive in 5 minutes. I look around. No one else is here. That is odd. I check the posted schedule. Unchanged. Is it a holiday? No. WTF.

6:05. No bus. 6:10. I will miss my connections. Still no one else at the stop. Finally, someone strolls by. Do you know what is going on? Bus strike today?! I can’t afford a taxi. I don’t have a car. No one is able to give me a ride. No work today. Pay rent or buy food? The game is rigged.

The Cartoon Introduction to Calculus

How did calculus come to be? Why? Who was involved? What does this have to do with pineapples (page 84)? These and other questions are integral to this book, which is not derivative of any other I have read. Okay, enough puns. Let’s get to the facts.

The Cartoon Introduction to Calculus is my favorite calculus book ever. Written by Grady Klein and Yoran Bauman, Ph.D., the book is informative, interesting, and insanely funny. That is not an easy task considering the subject matter. I got a C in calculus as a university freshman, and although I understand the topic better today, I really wish this book had existed at the time.

All the important topics are covered. The reader begins by being introduced to the history of calculus with both Leibniz and Newton and the questions they were exploring that lead each to “invent” or “discover” (pick your own side, I’m not taking one) the mathematics involved. We learn about The Fundamental Theorem of Calculus, limits, derivatives, how this is useful in applications like economics, all the way to integrals and how they are used in physics. I sincerely wish the practical applications had been made this clear to me when I first encountered the subject!

There are other books out there that do a pretty good job of presenting this material clearly and well, such as one I reviewed ten years ago. What makes this book stand out is the writing and illustration. It is funny, and that is disarming. Bauman, who is billed as “The World’s First and Only Stand-Up Economist” and Klein, a previous work of whose I reviewed six years ago, pair up to write an easy-to-read, interesting, laughter-producing, intelligent guide to a tough topic for many. I’m impressed.

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

Amazing Decisions: The Illustrated Guide to Improving Business Deals and Family Meals

How do you make decisions? Do you know? Some of us use market norms while some use social norms. These and other topics are covered in today’s review.

Amazing Decisions: The Illustrated guide to Improving Business Deals and Family Meals by Dan Ariely and illustrated by Matt R. Trower aims to help readers learn to consider the reasons why some decisions are better than others.

To achieve the book’s goals of explaining how social sciences and behavioral economics overlap and differ we are presented with a narrative. The narrator, Adam, faces a continuous and confusing set of choices he must make. How will he decide which option to choose in each of these moments? Assisting the narrative are colorful and well-done illustrations.

The author submits that decision making is often a subconscious balancing act between competing norms. We have economics to consider. We also have what is acceptable or appropriate in society. It is not always obvious how to balance these two.

To help explain how we deal with them in Western society, Ariely gives Adam two fairies, the market fairy and the social fairy. Good decision making often requires us to identify and evaluate the forces at work around us, and these characters help Adam do just that. In the process, we as readers are given some thoughts and skills to consider and adapt.

Anyone with a weakness in either of these two departments, economics or social sciences, will benefit from this book, along with anyone with strengths but who aren’t sure how to balance the two perspectives. I am especially looking forward to seeing the reaction of my Autistic son and how the book may influence him when he reads it.

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

Moonbound: Apollo 11 and the Dream of Spaceflight

On July 20, 1969, humans first walked on the moon. It was an amazing achievement, even by today’s standards 50 years later.

Moonbound: Apollo 11 and the Dream of Spaceflight is not the first book by Jonathan Fetter-Vorm that I have reviewed. In fact I have reviewed two others previously. As with each of those, this book is well-researched, historically valuable, and filled with illustrations that enhance the text.

In this book, we learn the history of the moon landing, starting years back with the beginnings of astronomy and studies and beliefs about the moon, through early rocket science and the war years, all the way to the successful Apollo 11 landing and safe return home.

The story is told using multiple voices, which I especially appreciate. While the Apollo project history is frequently shown and told through the voice of participants, such as famous astronauts, there is also a narrator for historic contextual moments and scenes. Moving the story along through a series of vignettes and flashbacks is both interesting and also allows important background knowledge to be brought in at just the right moment for it to have its greatest impact.

As with all of his work that I have reviewed, Fetter-Vorm’s artwork is splendid, appropriate to the moment, and beneficial. I especially liked the way he moves between color and grey scale images for impact when showing scenes of “present moments” passing through the Apollo 11 developments and contextual history.

This is one worth picking up for anyone even slightly interested in space.

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

Astronomy for Kids

I have an eight year old who knows more about the solar system than most adults I know. He is fascinated by stars, planets, asteroids, comets, and anything else you can think of in space. How cool that I was able to give him this book.

Astronomy for Kids: How to Explore Outer Space with Binoculars, a Telescope, or Just Your Eyes! is a wonderfully laid out, fascinating, and intellectually stimulating introduction to becoming an astronomer, whether amateur or eventually a professional. The stated (and in my opinion achieved) goal is to help kids find and name objects in the night sky while teaching cool and fun facts about them.

The book starts with useful basics like “don’t look at the sun” and why some objects are only visible during a certain time of the year or from a specific hemisphere. From there we move to going outside at various times of the year and finding constellations and other objects with just the naked eye. Then, with binoculars. Next, using a telescope. The book is filled with clear and colorful illustrations and diagrams making it very easy for any reader to understand what is being described in the text and what they are looking for in the sky.

My eight year old is really enjoying this book and I’m sure your kids will, too.

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