Warning: Banned Content

Recently the family has been watching The Muppet Show on the Disney+ platform. As has been widely publicized, some of the episodes are preceded with a content warning and so we have made it a game to try to determine the offending portion of the episodes that would merit the warning. For example, in the Steve Martin episode, was it when he sings in “Chinese”? Apparently the Swedish Chef is OK–he appears in many episodes without the warning including one where he speaks “Mock Japanese”.

Months before, while perusing the Internet, I came across a list of banned books (past and current) and found it contained a lot of great books. Going through the list I saw many that are already part of the home library, but also identified some gaps that needed to be filled. In particular there were a few books that I know my wife would enjoy so I obtained nice, hardbound copies.

On the list were also various books that I have read before and have no desire read again. There were also various books that for which I have no desire to read even once. I don’t want those books in my home. It’s interesting to lookup why some of the books are banned and also to compare different lists of banned books. Overall, I have found various lists to be a good source of ideas of things to read, but definitely not a comprehensive or even reliable source of quality books. Some banned books are not worth reading (but perhaps shouldn’t be banned).

Many of the banned books are time-tested classics and thinking about such great literature being banned evokes images of historical factions burning books because of the radical ideas contained within. However, in the few months that we’ve had our banned book display in the foyer, my kids saw in the news about certain books being pulled off school and public library shelves–in a couple cases they found our home copies and added to the display.

I find the Disney+ content warnings for The Muppet Show to be silly, but I appreciate that Disney still makes the content available instead of withholding the entertaining shows for various ill-defined reasons. As for books being banned, there are a lot of books out there that I might find offensive–I choose not to read them. There are also books that I do choose to read in spite of the opinions of others.

A Changing Castle, a Change in Theme

I am not the target audience for Tuesdays at the Castle or the other books in the series. Likewise, the books are of little interest to my three sons. My wife describes them as “cute and predictable”. However they do tell stories which interest my daughter who gets excited when she is interested in something and who loves to share her excitement.

I suppose I should be honored that my daughter brought Tuesdays at the Castle to me as soon as she finished reading it so that I could [presumably likewise] enjoy the text. While I thought the concept of a castle that irregularly changes on a regular basis to be interesting, overall I think my impressions were that of a reader who is reading a book target towards young girls and is not part of said target audience. Nevertheless, it is not the worst thing I have read and it allowed for various conversation with my daughter. At her urging I think I have read all but one of the books in the series.

For many years (even predating the birth of the girl-child), my family has read various books at the table after dinner. With three older brothers, the books selected are frequently not the books my daughter would choose. Or sometimes, such as when we read Where the Red Fern Grows she does get really into the book only to become emotionally scarred. So when she proposed reading Tuesdays at the Castle as an after dinner book, it seemed only fair.

Even with an only marginally interested audience, the reading went quite well. Despite knowing what was going to happen, my daughter would get excited and her enthusiasm tends to be infectious. She was also a good sport and did not get offended at [amusing but snide] comments by brothers or the less-than-flattering voice affectation I employed for the characters. So despite it not being a preferred text for the majority, a good time was had by all.

Another good thing that came out of this was a renewed effort by the boys to find “good fit” reading material for the girl child. With a better understanding of what she likes, they raided the bookshelves and found several books they thought their sister would enjoy (and they did a pretty good job). This led to my daughter being exposed to even great books.

I’m glad that the family read Tuesdays at the Castle together and that I read the books as well. In both cases the change in reading material theme brought about happy memories and positive interactions.

Homeschool PE

I’ve been fortunate to work for companies that are supportive of families. While I was working for Datastax, the company supported employees and their families in various ways including reimbursing up to $1000 for expenses related to physical and mental health. And as for my current employer, Circle’s mission is to make families’ lives better online and off.

When Covid-19 quarantining started and everyone was home, my wife and I quickly realized that it was too easy to fall into into a slothful pattern of lounging around in soft pants all day and never leaving the house. While there are merits to said lifestyle (particularly during inclement weather), it didn’t seem conducive to a health family life. So we instituted “Homeschool PE”.

Every weekday at 11:00am, the family would head outside and do something. Examples include:

The Datastax health expense reimbursement paid for a lot of Homeschool PE equipment and members of my team refrained from scheduling meetings during my family’s Homeschool PE block. When I started at Circle, the first time I met the [woman who would soon become] CEO was when she dropped off a computer at my house while I was playing table tennis in the driveway with my kids. She commented that at her house they played table tennis on the back patio. She responded favorably when I told her about Homeschool PE and I later learned even suggested it to other employees.

As online school started up in the fall and the weather became less amenable, regular Homeschool PE faded away, but during the spring and summer it was definitely a good thing for my family. Sometimes it was hard to get everyone to get up and outside, but once we started playing it was generally a good time all around. I’m grateful for the fun experiences and happy memories from Homeschool PE and appreciate my employers who support me and my family.

Why is it funny?

I have already written about how Randall Munroe ruined most web comics for me, but apparently I am in the minority since there hasn’t been a significant transformation of web comics or comics in general. It makes me wonder why I find it funny–particularly since I don’t always recognize (or perhaps just not appreciate) other types of humor. Different people have different styles of humor and may appreciate various comedic situations to varying degrees. This brings to mind Margo Leadbetter:

Nobody tried to explain to Margo why “it” was funny which is just as well since, despite her genuine desire to understand, an explanation would not have helped. But when the screen hit the statue (not an idiom) she got “it” (which was a related but different “it” amusing the others).

Getting back to why I find Munroe so hilarious, it may be that I am a suitable audience for the content. This appeared on the xkcd website for more than a decade:
Warning: this comic occasionally contains strong language (which may be unsuitable for children), unusual humor (which may be unsuitable for adults), and advanced mathematics (which may be unsuitable for liberal-arts majors).1

I am too old (and too big) to be a child, not mature enough to be an adult, and studied Japanese Literature and Computer Science (separately) in college so the content isn’t immediately unsuitable for one such as myself. There is a website that explains each xkcd comic, but reading the explanations of why it is funny typically just doesn’t do it for me. Reading Randall Monroe amuses me without anyone explaining to me why it is funny. Perhaps that is enough.

Sheveling Again

Before sheveling

Apparently its been more than two-and-a-half years since I last had a completely sheveled desk. When it comes to horizontal office surfaces, my tidiness level remains an abysmal constant, but a lot of other things have changed during that period and my desk has evolved. Below are a few highlights of changes I pondered while sheveling.

  • I’ve changed jobs twice since the last sheveling which means switching out work computers (I’ve gone through four work laptops) and using a Mac.
  • Working from home used to be more rare and meetings were often on conference calls. Now most people in the tech industry work from home and meetings are video chats. So out with the phone and in with the external web cam.
  • On top of her job, my wife increased her volunteer activity and also started a graduate school program–the nine-year-old printer couldn’t handler the increased load had had to be replaced.
  • I really need to clean my desk more frequently.
After sheveling

The End of an Era

Boy#1’s first day of kindergarten

When Boy#1 started kindergarten, I took it upon myself to walk him to school. Back then I still went into work every day so I would push my bike along as we walked and talked. Once he was safely deposited, I would hop on my bike and ride the rest of the way to work. I quickly realized that walking with him was time well spent. I don’t think the boy missed any days of school that year so, apart from a handful of days when my wife decided it was too rainy to walk or I was sick, he and I walked to school together every day that year. It was great.

The next year we continued walking together rain or shine to the school every day. It certainly wasn’t always what could be considered “quality” time, but day after day, week after week, month after month certainly added up to “quantity” time. It was great.

Then Boy#2 came of age and so the three of us walked together. Some days we’d race. Some days we’d walk backwards or skip or gallop of hop for stretches of the route. Some days the wind and rain were such that I worried the kids would get too wet. Some days we just walked and talked. It was great.

Then one summer we moved–it wasn’t very far, but it did significantly change the walking route to the school. Other people saw the good thing we had going and soon we had a few other children joining us on the walk. There were a few days when we had every grade K-6 represented in our little group. This changed the group dynamic significantly and it was interesting to see how the kids of different ages interacted together. It was great.

Eventually Boy#3 came of age and joined the herd. By this time Boy#1 was participating in some early morning activities at school and so he didn’t walk with us every day, but there were still days when I was walking with my three sons along with other kids from the neighborhood. The next year, Boy#1 moved on to middle school so he took the bus instead of walking. Two years after that Boy#2 joined him, but that same year the Girl Child started kindergarten. I watched my children grow as I walked with them each day. It was great.

Over the years, certain reoccurring themes developed. These include “The Great Tennis Court Race” and the dancing hill. In our version of “button, button, who’s got the button” we race to hit crosswalk signal button. We were chased by [imaginary] wolves across the [also imaginary] frozen tundra and engaged in “slug bug” vs “punch buggy” debates and battles. We avoided stepping on cracks except for when we could only step on cracks. It was great.

This past school year–the Girl Child’s last year of elementary school–we continued walking every day. For the first part it was just me and her and then a younger girl joined us for the balance the daily journey. Things were going great until suddenly and unexpectedly things changed due to covid-19 and kids stopped going to school. I miss the chatter of children. I miss warming to the day by walking. I miss the pattern, the habit, the routine. I miss the time spent together.

Today would have been the last day of school for my daughter, so we walked to the elementary school together one final time. While the rest of the family slept, she and I walked the familiar route and engaged in pleasant conversation. We reached the empty school, took a couple of pictures, and then walked home together while planning activities for the summer. It was great.

The Girl Child’s “last day” of fifth grade

Dear Datastax

Dear Datastax,

I couldn’t leave without writing you a note to thank you and reminisce a bit about the good times we shared together. The last two years have been intense, memorable, and exciting. Working with you has been a wonderful experience.

It seems so long ago when I showed up in Austin for my first week on the job with a handful of people on the new cloud team. You were so supportive and everyone was so nice and welcoming. I don’t think that office exists any longer and I can no longer count the cloud team members on my fingers. We both have changed a lot since then–I know I’m certainly better because of my time with you. Of course there are the cool technologies that we played with that can now season my resume, but there is also what we built together, how we built it together, and most importantly, there are the people with whom we did all the awesome things.

We spent an awful lot of time together, but I appreciate that you supported me spending time with my family. Most days I’d check in with you around 7:30am and didn’t wish you goodnight until 10:45pm. Even though we worked a lot, I was able to walk my daughter to school every school day. I was able to attend all the parent/teacher conferences for my kids. I never had to miss a band concert, play, camp out, choir concert, piano recital, or graduation. I was able to take care of sick family members. Every evening I could sit down to dinner with my family. Thank you for never judging me poorly for trying to be a good husband and father.

I have so many happy memories with you. Learning new things. Passionate discussions trying to get to the best solution. Kosher BBQ in Chicago. Live demos where the demo-gods smiled and things did not crash and burn. Dinner under the space shuttle. The satisfaction we shared seeing our code start to come together and work. However, some of my fondest memories are when things didn’t work and we would swarm with the team in a web meeting to complain, laugh, and work on a solution with people dropping to eat dinner or put kids to bed and then popping back in to bang against the problem until we figured it out at 1, 2, 3am.

Do you remember last May during the last few days before Accelerate? What a flurry of activity! Then the training session started. We crossed our fingers, held our breaths, watched, and waited to see if what we built would be able to handle everything thrown at it. Everything worked–we did a great job there.

How about the week leading up to the release of Astra? That was some crazy fun chaos as we scrambled to get last minute tweaks, fixes, and changes (such as renaming Apollo to Astra) deployed and tested. I was exhausted as we finally made the switchover changes to put Astra out there so that anyone could plug in a credit card and get a running Cassandra database a minute later. We did some more testing to make sure everything was working correctly and then I went to bed reveling in our accomplishment. I slept like the dead.

Now that it is time for me to try something else I’m certainly going to miss you, but I’m also so proud of what we were able to do together. With friends and colleagues we built Astra. We created a product that I (as a developer) want to use. I am using it. I will continue to use it. I hope Astra will continue to grow and become a huge success. I hope you will remember me as fondly as I remember you.

Cheers,

Nathan
https://www.linkedin.com/in/nathanbak/
http://www.nathanbak.com/

A Database I Want to Use

If you’re only interested in connecting your ESP8266 to a database, skip to the bottom paragraph. If you’re not interested in databases, read the whole thing.

I am not interested in databases. As a software developer, I understand the value of a good database and I like using databases to store/retrieve/search/etc. data. The part I don’t like is the setting up, configuring, optimizing, scaling, maintaining, and other tasks required to keep a database up-and-running. I want to spend my time writing code rather than babysitting a database. I want to use a database, not run a database.

Nearly four years ago when playing with my then new ESP8266 I needed a database and I ended up going with REDIS and WEBDIS because it was the lowest bar to entry that I could find for my requirements. It has worked well-enough for my needs, but nothing to rave about. I’ve spent the past two years making something exponentially better.

In 2018 I joined Datastax which is the most important company behind the NoSQL database Apache Cassandra. Cassandra was not a database that I wanted to use. While the performance, scalability and reliability of Cassandra are unsurpassed, the complexity to get Cassandra ready to go and keep it running was a deal breaker for someone like me that isn’t interested in being a DB admin.

As a Senior Software Engineer on the Datastax Cloud Team I had various responsibilities, but my personal goal was to create a database I wanted to use. The team succeeded with Datastax Astra which is a “Cloud-native Database-as-a-Service built on Apache Cassandra”. That means I can just go to a website, fill in a few details, click a button, and seconds later I have a database I can use. It’s awesome.

My day job was working to make Datastax Astra a database I wanted to use and finally I am able to spend my weekends using it. I created an Arduino library called astra_esp8266 which makes it easy for an ESP8266 to communicate with a database. The source code is available on github but most users will probably just want to install the library into an Arduino IDE. After four years, with two of those years taking thousands of hours of my time, there is now a database that I want to use.

Multistage Docker Builds For Go Services

One thing I like about using Go for services is that it can have a much smaller footprint than other languages. This is particularly useful when building Docker images to run since a Docker container contains everything needed to run a service.

But images sizes can grow quickly. As Go code gets more complicated you can and up with a large number of dependencies and tests. Sometimes additional tools are needed as part of the build process such as for code generation. I also like to have various tools available when debugging build problems. But you can have all of that and still end up with small image by using multistage builds in Docker.

Multistage builds were added to Docker a couple of years ago and work very well. I will refer interested parties to the official documentation, but one issue I have encountered as I have used multistage builds is that sometimes the Go executable I create in a penultimate stage does not execute properly in the image created in the final stage. Typically the reason for this is because I use Ubuntu based images for building (Ubuntu is the Linux flavor I’m most comfortable using) and prefer Alpine based images for the final package to reduce size. So this is perhaps a problem of my own making, but I have found solutions to the common errors I see.

FROM golang:latest as builder 

# Generic code to copy, compile and run unit tests
WORKDIR /src
COPY src/ ./
RUN go test -v


FROM alpine:latest

WORKDIR /root/

# If you don't adde the certificates you get an error like:
# x509: failed to load system roots and no roots provided
RUN apk --no-cache add ca-certificates

# Because musl and glibc are compatible we can link and fix
# the missing dependencies.  Without this we get an error like:
# sh: ./main: not found
RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2

# Copy the go exec from the builder
COPY --from=builder /go/bin/main .

CMD [ "./main" ]

The above Dockerfile is a generic multistage build of a “main” go application. Here are couple things of note:
– The “RUN apk –no-cache add ca-certificates” snippet is necessary to avoid “x509” errors.
– The “RUN mkdir /lib64 && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2” snippet is a bit of a hack to get around the glibc vs musl in Ubuntu vs Alpine. Without it, you get unhelpful, difficult-to-debug errors like “sh: ./main: not found”.

An alternative to the library linking above is to instead set flags when compiling in Ubuntu like “CGO_ENABLED=0 GOOS=linux”.

When using multistage Docker builds for Go services, I’ve found the image for the first stage to be several hundred megabytes, but the image produced by the final stage will often be around a dozen megabytes. You can’t even fit a JVM in an image that small let alone a Java based service.

Meeting Time

My home is typically not quiet. Lately, with everyone home, it means there’s been even more noise. The kids are supposed to practice their various instruments daily which include piano, saxophone, trombone, and clarinet (not to mention the “bonus” ukulele and drum playing). Boy#2 is on a smoothie kick when means the blender is frequently running. Doors slam as kids run out to play in the yard and then come back in yelling about minor injuries. Conversations (calm and animated) abound.

A year or two ago I purchased an “On Air” sign online. The cord exited from the side so I modified it so instead the cord sticks straight out the back. It was intended to be hung by a chain (included), so I added some slots to be able to screw it directly to the wall. I then removed the plug and pushed the cord through a hole I drilled in the wall. The cord was rewired to an extension cord that plugs in to a simple “smart” plug. From there it was simple to hook it into our Alexa home ecosystem.

Now, when I have a meeting and need the house to be quieter-than-normal, I just say “Alexa, turn on broadcasting” (saying “turn on on air” sounded awkward to me) and the sign illuminates. But beyond that, my family is good enough to recognize the glowing red above my door and refrain from high audio behaviors.