Hardware and OS
I’ve continued to use macOS as my operating system of choice. After being issued a ThinkPad P53 through work, I briefly used Ubuntu. Unfortunately that machine would kernel panic after a day or so of use. Given that I’m already embedded in the Apple ecosystem, using a Mac is convenient and makes a lot of sense.
In November, I migrated to a new 16" MacBook Pro with the M1 Pro with 10 CPU cores, 16 GPU cores and 32 GB unified memory. It didn’t seem necessary to upgrade to the M1 Max, given I’m not a professional video editor.
Early adopters of Apple Silicon contended with compatibility issues for common tools, such as Docker. So far, I haven’t run into any serious problems moving to M1.
I’m still using Atom, PyCharm, DataGrip, and nano. VS Code is popular among my coworkers, although some use PyCharm. While I’ve spent some time configuring VS Code, I still find PyCharm easier to use and more feature rich for Python development.
Python is my dominant language professionally. I’ve been using pyenv to manage multiple versions of Python (rather than brew installing them independently).
This year I’ve used R very little, mostly limited to network graph visualizations. Occasionally I have an opportunity to estimate a binomial random variable (as an oversimplification) and use R to interface with Stan.
Recreationally, I’ve been using Go. At the beginning of the year I hadn’t written much in Go. Over the past year I’ve written a few small cloud-native applications, a Steampipe plugin to query Confluence, and a few Advent of Code problems in Go. As with my brief stint with C# a few years ago, I appreciate the benefits of producing a small, fast binary.
In 2021 I used a lot of the same tools as in the past, like Homebrew as my package manager and Oh My Zsh to manage my
zsh configuration. Nevertheless, there are a few notable mentions.
k9s, and Helm
Throughout the year I continued using Kubernetes for a lot of aspects of my developer flow.
Thus, I spent a fair amount of time with
kubectl to iteract with the clusters.
kubectl is great, I also frequently use
k9s since it enables me to seamlessly view and interact with resources in the cluster.
Throughout the year, I found myself embracing Helm.
Many open source applications are distributed as Helm charts and can be easily modified and added to a Kubernetes cluster.
The pattern I found myself doing was to
helm pull the application chart and then use Kustomize for last-mile changes.
Occasionally it was easier to write my own chart or modify it directly.
Another tool I found in 2021 and fell in love with is Steampipe. Steampipe is an open source command line tool that leverages Postgres foreign data wrappers to provide an extensible SQL interface to APIs via plugins. There are are plugins for cloud providers (e.g. AWS, GCP, etc.) and software development services (e.g. GitHub, Jira, Kubernetes, etc.), you can write SQL to query resources rather than interacting with each vendor API. For example, using Steampipe it was trivial to query for AWS users' group members and inherited policies to audit permissions.
In many ways, my tech stack in 2021 was not markedly different than past years. Python continues to be my dominate programming language, macOS is still my daily driver, and AWS remains my preferred cloud provider. My toolkit expanded to include more use of Helm and adoption of Steampipe.
There were a few other new tools and themes that I didn’t have time to mention or much to say about: I’ve used more AWS Step Functions as my team became more heavily involved in workflow orchestration and design, we’ve been exploring MLflow for managing some parts of the ML lifecycle, and we’ve been using Apache Superset for data exploration and visualization.