I recently moved this blog off of a Kubernetes cluster and onto Cloud Run, Google's new container-based serverless environment. This article explores why serverless might make sense for a Jekyll-based static website like my blog, and walks through how to containerize a static site and deploy it to Cloud Run. Read More ›
On Nov 13, 2018, I spoke on "Yes, you should provide a client library for your API!" at RubyConf in Los Angeles, CA. The talk discussed the benefits of providing client libraries for HTTP-based APIs, and some techniques for writing them. Read More ›
On Sept 7, 2018, I spoke on "Docker and OTP: Friends or Foes?" at ElixirConf in Bellevue, WA. The talk discussed ideas for making OTP applications work together with container-based deployments. Read More ›
On April 18, 2018, I spoke on "Containerizing Rails: Techniques, Pitfalls, and Best Practices" at RailsConf in Pittsburgh, PA. The talk discussed best practices for designing Docker containers for Rails applications. Read More ›
On November 16, 2017, I spoke on "Dispelling the Dark Magic: Inside a Ruby Debugger" at RubyConf in New Orleans, LA. The talk demonstrated how to implement a simple debugger for Ruby applications, and covered some of the techniques used in the implementation of the Stackdriver Debugger for Ruby. Read More ›
This is the tenth of a series of articles on what I've learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post covers records, the type system, and dialyzer support in both languages. Read More ›
This is the ninth of a series of articles on what I've learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post continues our coverage of the Erlang preprocessor, discussing how preprocessor features can be reproduced using Elixir. Read More ›
This is the eighth of a series of articles on what I've learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post covers the Erlang preprocessor, probably the most significant Erlang feature that is not supported by Elixir. Read More ›