Some Thoughts on Elixir

I’ve been experimenting with Elixir for a few years off and on and have really enjoyed it so far. I can’t use it professionally, so all I’ve been able to do is some Exercism exercises (which I highly recommend) along with some other random projects. For example, I used it a fair bit to solve many of the Advent of Code 2022 puzzles (here’s a link to my repo of solutions).

I’m not sure that I’m ready to call myself an expert and definitely wouldn’t say it has replaced Ruby as my favorite language, but it has been fun so far. More than fun, actually; I’ve learned a lot and it has influenced how I write code in other languages. It isn’t just that it is a functional language; there are several other aspects that feel worth carrying along with me. I love Elixir’s pattern matching and while Ruby has introduced it, it isn’t quite as powerful as Elixir’s. I assign fewer variables now, instead favoring small functions that I can chain together (thanks to |> in Elixir). Tests in code comments — especially right above functions/methods, called Doctests — are amazing. I wish I could bring that with me to Ruby. Finally, I get why Elixirists refer to functions by their name and arity (like foo/2) and how different Elixir is from Ruby.

If you’ve thought about picking up another language, I would highly recommend Elixir. You’ll probably learn something new!

Kubernetes Controllers via Metatron (Part 3)

Previously, in Part 1 I described Kubernetes Controllers and the Operator pattern. In Part 2, I explained why Controllers are important and how Metacontroller makes it easier to build them in your favorite language.

In this, the 3rd and final part of this series, I’ll show off Metatron, which is my Ruby-based approach to building Metacontrollers. We’ll walk through building a basic CompositeController responsible for a custom Blog Kubernetes resource. I’m still working on the gem, but this should be a good demonstration of its capabilities and how easy it is to get started. Much of this post is a recap from Part 2, but it seems worthwhile to present it all together.

Continue reading Kubernetes Controllers via Metatron (Part 3)

My First Year at Shopify

This week I completed a full year at Shopify and it has been GREAT! I don’t think it would be an exaggeration to say that Shopify is the best place I’ve worked. This isn’t meant to diminish other places I’ve worked; I’ve had a lot of fun, made some great friends, and had some fantastic bosses throughout my career. Shopify is also far from perfect. That said, I just feel home at Shopify. I feel appreciated, I enjoy what I do, and I work with some fantastic people. I can get behind our mission and how we’re accomplishing it.

I’m astonishingly lucky to work at a job I love. I’m proud and honored to be associated with Shopify. I can’t wait to see what amazing things I’ll be a part of over the next year and beyond!

Kubernetes Controllers via Metatron (Part 2)

Previously in Part 1, I discussed what Kubernetes Controllers are, how they work, and gave some examples of their usage. I also gave a description of Operators and explained how they are just a specific kind of Controller. All this in the service of explaining what my new gem Metatron is and how it is helpful.

Here, in Part 2 of this series, I’ll describe Metacontroller, including what it is, how it is helpful, and how it relates to Metatron for creating new Controllers.

Continue reading Kubernetes Controllers via Metatron (Part 2)

Kubernetes Controllers via Metatron (Part 1)

I recently released a new Ruby gem called Metatron. This gem aims to make it very easy to create Kubernetes controllers, either to implement the Operator pattern or to respond to events related to built-in resource types. It does this by deferring to Metacontroller for the Kubernetes API interactions and handling the boilerplate work of providing the JSON API it expects. To be clear, Metacontroller does most of the heavy lifting here. It provides some fantastic examples for creating various kinds of controllers, but sadly none of them are Ruby-based. This really seems like a great place for Ruby to shine. So, I decided to roll up my sleeves and get to work on that.

I touched on a lot of advanced Kubernetes topics in that short paragraph. It might not be clear precisely what value Metatron is adding to the equation, so I’m going to dive deep into the concept of Kubernetes controllers, Metacontroller, and finally Metatron itself in a three-part miniseries. Buckle up and prepare to learn lots about Kubernetes!

Continue reading Kubernetes Controllers via Metatron (Part 1)

Waylon: A New Bot Framework

Sure, it might not be obvious why the world needs yet another bot framework, but I’m working on one. The idea is to make a scalable, intuitive, and feature-rich framework that runs on the latest Ruby. Long-running tasks shouldn’t be a problem and the framework should make things like caching a breeze. Permissions are a first-class concept, as are features like threaded replies, reactions, blocks (for rich-text responses), and support for more than just chat input. Enter Waylon: a bot framework built with these concepts (and more) in mind.

Continue reading Waylon: A New Bot Framework

Solving Physical Puzzles with Ruby

Most of the time, challenges I tackle with Ruby solve code-related problems. This includes things like web services, scripts, chatbots, etc., all of which are virtual in some way. Recently though, I decided to solve a puzzle in the real world.

My son was trying to put together a wooden puzzle. It requires having four colors (blue, green, red, and yellow) each present on all four sides of a rectangle. These colors are on wooden cubes that can be rotated. So four cubes, each with six sides to rotate around. It turns out that this means there are a lot of possible combinations of these cubes, most of which won’t work. By my math, there are six sides that can face up (a “y” axis), multiplied by four possible rotations around that axis (6 * 4 = 24) for each cube. Raised to the power of the four cubes (24^4 = 331776). After about 30 minutes of hearing his frustration, I told him “I bet I can solve this puzzle with some code” but he was skeptical.

I took that as a challenge to both my coding skills and his respect for me as his dad, so I obliged. After finishing, I figured it would be worth sharing.

Continue reading Solving Physical Puzzles with Ruby

Three Months at Shopify

I just recently hit the three-month mark in my new position at Shopify. It has been an amazing experience, for sure. While I’ve definitely had other jobs that I enjoyed, I’ve never worked anywhere quite like Shopify or on my team. I’m working with some of my favorite technologies (like lots of Rails on Kubernetes and doing exciting things with MySQL), but it isn’t just that. The culture, especially on my team, has been fantastic. I have some really exciting (and solvable) challenges on the horizon, and I believe in our mission. I’m not drowning in work but there’s plenty to do. I can confidently say that the company does a good job of actually caring about us and our mental well-being.

This wasn’t meant to be a glowing review of Shopify as much as it is an insight into this new chapter of my life. Work is a huge part of who I am, so having it improve so much seems worth sharing. I’m genuinely excited to see where things go from here.

My Thoughts on Meetings

Meetings can take up a lot of time and cost companies a fair amount of money. They often distract from real work, and fill up our day. When we have too many of them, it is difficult to remain enthusiastic about participating. Here, I’ll provide my thoughts on meetings. I’ll make the case for why we should seek to reduce the amount of time we spend them, and why we should make the time we do spend in them as productive as possible.

Continue reading My Thoughts on Meetings