# Fun Bugs: Episode I

Introduction I’ve been meaning to get started on a series talking about the kind of bugs we find in production on the CloudBuild Cache. For a little bit of context, our team runs over 40k machines across the US, with over 85 PB of total storage capacity, and serve as a caching layer for lots of things: source code, NuGet packages, build artifacts, etc etc. We basically provide a P2P cache made specifically for builds within CloudBuild, though the current implementation is nothing like the paper.

# How to use emacs on Windows in 2020

Trying to use emacs natively on Windows is honestly extremely bothersome, even if you use distributions that try to make it easy, like spacemacs. In my experience, running from MSYS2 “works”, but some random hardcoded emacs 25 certificate has been expired for a while, so you can’t download packages. Compiling from source works though its a pain in itself, especially if you multiple computers!. I haven’t tried Cygwin, mostly because it feels too bloated.

# A year at Microsoft

A lot has changed in the last couple of years for me. I did my first internship at Microsoft in 2016, which led to two more internships at Microsoft and one at Google. After that, roughly in mid 2018, I received my full time offer with Microsoft. This led to a race to graduate: I was missing a couple of final exams and my thesis, all of which had to be completed by March 2019, when I was to start my work at Microsoft.

# NCH: closing the gap

Introduction Following up with my last post on NCH being roto-translation invariant, the idea of this one is to cover what I consider the most important gaps left by the original brief paper. My expectation is that doing this will help understand better why NCH works, and hopefully gain some insight into how to improve it. Equivalence of formulations Equation (4) in the paper says: $$f_i^{r_i} (x) = \frac{1}{2 r_i} (r_i^2 - || x - (p_i + r_i n_i) ||^2)$$

# NCH is roto-translation invariant

Introduction I have recently started my thesis on 3D surface reconstruction. One way to do so is to define a surface as the zero level set of a function $f : \mathbb{R}^3 \to \mathbb{R}$, and then find some way to build this function out of a set of points $\mathcal{P} \subset \mathbb{R}^3$. NCH is a method that allows you to define such a function starting from a point cloud along with their normals, which tell you which way is the inside of the surface.

# Processing Trees with Recursion Schemes

A long time ago, I was in touch with a production system whose purpose was to run a piece of data through a decision tree. At every step, the output could be Good, Bad, Move Left, or Move Right; there were no leaves, since at the end you were supposed to always have returned either Good or Bad (this means it would be an error for you to get there).

# Understanding Modulo Bias

It is often said that this code: unsigned int randomNumber = rand() % k; is a bad idea, at least if you are expecting a uniform distribution. I’m going to try and explore this topic in a more formal fashion than I have seen so far. The reason why it is bad is pretty elementary and easy to understand: imagine you have a random generator that outputs values between $$0$$ and $$9$$ (i.

# Yet Another Proof of Brooke's Theorem

A classical result from Graph theory is that given $$G$$ an undirected graph: \chi(G) \leq \Delta(G) + 1 Where $$\chi(G)$$ is the minimum number of colors required to paint the nodes of $$G$$ with the usual restriction that no node has the same color as any of its neighbors, and $$\Delta(G) = max_{v \in V(G)}(dg(v))$$, that is, the maximum degree. This result is known as Brooke’s Theorem. The usual way to prove this result is to use the Greedy coloring algorithm: go through every node, and pick the lowest color not yet used by any of its neighbors.

# Characterizing the trace of a matrix

I have been studying for my finals lately, and so I decided to put together a proof of a nice exercise I found in some book. The trace function, given by $$tr : \mathbb{K}^{n \times n} \to \mathbb{K}$$, is defined as tr(A) = \sum_{i=1}^n A_{ii} First of all, the proof of additivity \begin{equation} \begin{split} tr(A + B) &= \sum_{i=1}^n (A+B)_{ii} \\ &= \sum_{i=1}^n (A)_{ii} + (B)_{ii} \\ &= \sum_{i=1}^n (A)_{ii} + \sum_{i=1}^n (B)_{ii} \\ &= tr(A) + tr(B) \end{split} \end{equation} Afterwards, the proof of homogeneity