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.
For the past few years, this blog has been hosted on a personal Kubernetes cluster. In addition to my blog, I used the cluster to host a few other websites, as well as run occasional compute jobs. Kubernetes is a great, very flexible technology, and since (full disclosure) I work at Google, throwing container images at a server infrastructure feels very natural to me. But maintaining a Kubernetes cluster means paying for the VMs, and lately I’ve been wondering if I can avoid those costs.
This RubyConf talk from Nov 13, 2018 discussed the benefits of providing client libraries for HTTP-based APIs, and some techniques for writing them.
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.
This ElixirConf talk from Sept 7, 2018 discussed ideas for making OTP applications work together with container-based deployments.
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.
This RailsConf talk from April 18, 2018 discussed best practices for designing Docker containers for Rails applications.
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.
This RubyConf talk from November 16, 2017 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.
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.
Part 10 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.
This is the tenth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we cover records, the type system, and dialyzer support in both languages.
Part 9 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.
This is the ninth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we continue coverage of the Erlang preprocessor, discussing how preprocessor features can be reproduced using Elixir.
Part 8 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.
This is the eighth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we study the Erlang preprocessor, probably the most significant Erlang feature that is not supported by Elixir.
Part 7 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post studies some of the “missing features” found in Erlang but omitted from Elixir, and how they can be reproduced in Elixir.
This is the seventh of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler.
Part 6 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post compares guard clauses in the two languages, and uncovers some features known by Erlang developers but often overlooked in Elixir.
This is the sixth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we study guard clauses and learn why Elixir guards look the way they do.