• Don't rollback rollbacks

    In a version control system, a rollback is a type of change that undoes the effects of a previous commit. In essence, a rollback is a commit that applies the inverse diff of another commit. At Google, our tools make it trivial to create rollbacks for a given changelist or CL. (A CL is similar to a commit but can be either pending—in review—or submitted.) Making it trivial to create rollback CLs is important in a culture where the standard upon encountering a problem is “rollback first, ask questions later” because it removes friction from the process of backing out problematic changes.

  • My self-powered commute

    People tell me I’m crazy. Maybe. But this is the only way I’ve found to consistently fit exercise into the hectic schedule of my daily life with two young kids. I live in Brooklyn about 10 kilometers (6 miles) away from the Google office in Manhattan. Here is my commute:

  • Shell readability: function parameters

    The shell supports defining functions, which, as we learned in the previous post, you should embrace and use. Unfortunately, they are fairly primitive and their use can, paradoxically, introduce other readability problems. One specific problem is that function parameters are numbered, not named, so the risk of cryptic code is high. Let’s see why this is a problem.

  • Shell readability: main

    Our team develops Bazel, a Java-based tool. We do have, however, a significant amount of shell scripting. The percentage is small at only 3.6% of our codebase… but given the size of our project, that’s about 130,000 lines—a lot, really. Pretty much nobody likes writing these integration tests in shell. Leaving aside that our infrastructure is clunky, the real problem is that the team at large is not familiar with writing shell per se.

  • From Jekyll to Hugo

    It is done. This site is now powered by Hugo instead of Jekyll. It took me a full week’s worth of early mornings to achieve, but the results are great… internally, that is, because as a reader you should notice no changes other than minor style tweaks. Performance differences As of today, this site hosts 711 posts totaling 3.4MB of text. The style sheet is based on Bootstrap and is built from scratch using SASS.

  • Looking to replace Jekyll

    Back in May 2015, I was lured to Medium by its simplicity and growing community, which resulted in me posting a bunch of articles there and enjoying every moment of it. But, eventually, I noticed that I was losing control of my content. So a year later, my experiments to create static homepage resulted in me moving from Blogger and Medium to a Jekyll-managed site. Almost two years have passed since that migration and I can only count 7 miserable new posts. This ridiculously-low number, unfortunately, doesn’t track my willingness to write—but the friction to posting has become so high that I fear composing new essays.

  • Fighting execs via sandboxfs on macOS

    Since the announcement of sandboxfs a few weeks ago, I've been stabilizing its integration with Bazel as a new sandboxing technique. As part of this work, I encountered issues when macOS was immediately killing signed binaries executed through the sandbox. Read on for the long troubleshooting process and the surprising trivial solution.