<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
  <title>Eric Chiang</title>
    <link>https://ericchiang.github.io/</link>
    <description>Recent content in posts on Eric Chiang</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 25 Feb 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://ericchiang.github.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Protobuf generators for fun and profit</title>
      <link>https://ericchiang.github.io/post/protoc-plugins/</link>
      <pubDate>Tue, 25 Feb 2025 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/protoc-plugins/</guid>
      <description>There aren&amp;rsquo;t a ton of great options for API definition languages. OpenAPI and gRPC are the only real game in town, but each have their own shortcomings. OpenAPI is a huge, awkward language for expressing types. gRPC is focused on its own protocol rather than interoping with more general semantics like REST.&#xA;Since I vastly prefer the Protocol Buffer language over YAML, I was recently looking into REST bindings for gRPC, but the inconsistency of the ecosystem stands out.</description>
    </item>
    <item>
      <title>Confidential Compute and GPUs</title>
      <link>https://ericchiang.github.io/post/confidential-gpus/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/confidential-gpus/</guid>
      <description>Recently, I’ve had a few conversations about NVIDIA Confidential Compute, usually in the context of startups trying to sell security products to AI companies.&#xA;The pitch generally looks like this: Companies are protective of their weights and their data. We should be able to train and/or run models on GPUs securely using attestation primitives. In the same way that we might store a private key in an HSM, surely we can design a similar construct for AI.</description>
    </item>
    <item>
      <title>The road to zero trust is paved with good intentions</title>
      <link>https://ericchiang.github.io/post/zero-trust/</link>
      <pubDate>Thu, 12 Dec 2024 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/zero-trust/</guid>
      <description>This blog post is a written version of a talk that Eric and Maya gave at NorthSec in 2022. You can also watch the recording and get the slides. This blog post is also cross-posted to Maya&amp;rsquo;s blog.&#xA;We put together the material for this post in 2022 during the peak of the zero trust hype cycle when RSA show floor booths, marketing materials, analyst reports, and even a US executive branch memorandum couldn&amp;rsquo;t stop talking about zero trust.</description>
    </item>
    <item>
      <title>Writing shared libraries in Rust</title>
      <link>https://ericchiang.github.io/post/rust-libs/</link>
      <pubDate>Mon, 26 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/rust-libs/</guid>
      <description>Every tool that gets big enough eventually provides a way to support third-party logic. Maybe you expose APIs for clients to call. Maybe you take some code and run it in a sandbox. Maybe you embed a Lua interpreter.&#xA;For many programs, extensibility means dynamic shared libraries. Good old, &amp;ldquo;here&amp;rsquo;s a .so file for you to dlopen().&amp;rdquo; PKCS #11, Sudo Plugins, Python and NodeJS addons, SQLite and Postgres extensions, Nginx and httpd modules, even LD_PRELOAD hacks.</description>
    </item>
    <item>
      <title>Calling C from Go</title>
      <link>https://ericchiang.github.io/post/cgo/</link>
      <pubDate>Sat, 17 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/cgo/</guid>
      <description>What&amp;rsquo;s a little shared memory between friends?&#xA;As someone who works a lot with operating systems, there are many scenarios that require loading C libraries. Plugins that use shared libraries, low-level device APIs, random Linux utilities. Despite modern options for interprocess communication, sometimes you get a header file and a shared object and have to run with it.&#xA;This post covers cgo, Go&amp;rsquo;s C interoperability layer.&#xA;Referencing C Go programs reference C symbols through the magic &amp;ldquo;C&amp;rdquo; package.</description>
    </item>
    <item>
      <title>Analyzing Spotify stream history</title>
      <link>https://ericchiang.github.io/post/spotify/</link>
      <pubDate>Mon, 12 Feb 2024 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/spotify/</guid>
      <description>Apologies in advanced for the music tastes.&#xA;I recently learned Spotify provides downloads for users&amp;rsquo; streaming history. For me, this is over 10 years worth of data, so at the very least it seemed like a good nostalgia trip. This post covers some of my analysis of my personal export, and hopefully is a good starting place if you&amp;rsquo;re interested in exploring your own.&#xA;To request your data, visit your Spotify account&amp;rsquo;s privacy page and select &amp;ldquo;Extended streaming history.</description>
    </item>
    <item>
      <title>The Rust borrow checker</title>
      <link>https://ericchiang.github.io/post/rust-borrow/</link>
      <pubDate>Tue, 07 Sep 2021 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/rust-borrow/</guid>
      <description>I’ve been having fun with Rust lately.&#xA;Rust is notoriously difficult, but at some point it clicks and starts to look like any language: structs and methods. Except you don’t have to worry about a bad free() causing a vulnerability, or basic string operation segfaulting.&#xA;Success with Rust’s memory model depends on understanding a few core concepts, and this post will go over references (and when to avoid them).&#xA;My first mistake was to think of references (&amp;amp;T) as pointers.</description>
    </item>
    <item>
      <title>The Trusted Platform Module key hierarchy</title>
      <link>https://ericchiang.github.io/post/tpm-keys/</link>
      <pubDate>Mon, 04 Jan 2021 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/tpm-keys/</guid>
      <description>The Trusted Platform Module is a security device that sits on a physical motherboard, runs in a CPU trust zone, or is provided by a hypervisor. By functioning below the OS and boot sequence, it provides a trust anchor to verify those systems even if they’ve been compromised. TPMs are required for any device qualified for Windows, underpinning technologies like Windows’ BitLocker, various features in ChromeOS, and Linux’s Integrity Measurement Architecture.</description>
    </item>
    <item>
      <title>Keep it simple, stupid</title>
      <link>https://ericchiang.github.io/post/kiss/</link>
      <pubDate>Sun, 05 Jan 2020 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/kiss/</guid>
      <description>Growing up in the Bay Area, I used to go to the Zeum in San Francisco with my parents. Since rebranded as the Children’s Creativity Museum, it’s a space in Yerba Buena Gardens that hosts exhibits catering to kids. By far, my favorite activity was the claymation where I’d get to design characters and shoot short scenes. I figured out how to make a model jump using wires and add a muzzle flash with one frame of red clay.</description>
    </item>
    <item>
      <title>Privileged containers aren&#39;t containers</title>
      <link>https://ericchiang.github.io/post/privileged-containers/</link>
      <pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/privileged-containers/</guid>
      <description>Disabling security features Applications that interact with host systems such as network plugins or storage drivers can have issues when run in a container, requesting access that’s been restricted by the kernel. For these cases, container runtimes have an out to disable these security features and let the process access the host. In Kubernetes this is achieved with the “privileged” security context field:&#xA;containers: - name: flannel image: quay.io/coreos/flannel:v0.11.0-amd64 command: - &amp;#34;/opt/bin/flanneld&amp;#34; - &amp;#34;--ip-masq&amp;#34; - &amp;#34;--kube-subnet-mgr&amp;#34; - &amp;#34;--iface=$(POD_IP)&amp;#34; env: - name: POD_IP valueFrom: fieldRef: fieldPath: status.</description>
    </item>
    <item>
      <title>User namespaces</title>
      <link>https://ericchiang.github.io/post/user-namespaces/</link>
      <pubDate>Wed, 20 Feb 2019 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/user-namespaces/</guid>
      <description>Ian Coldwater recently had a great thread on bridging the gap between the security and container worlds. A lot of those answers wont fit in a tweet, so here’s my attempt for a more in-depth response.&#xA;Namespaces for everyone User namespaces are a way to create unique views of user and group IDs. Unlike other namespaces, they can be created by non-root users and are primarily used by unprivileged processes to access capabilities normally reserved for root.</description>
    </item>
    <item>
      <title>Containers from scratch</title>
      <link>https://ericchiang.github.io/post/containers-from-scratch/</link>
      <pubDate>Sat, 07 Jan 2017 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/containers-from-scratch/</guid>
      <description>This is write up for talk I gave at CAT BarCamp, an awesome unconference at Portland State University. The talk started with the self-imposed challenge &amp;ldquo;give an intro to containers without Docker or rkt.&amp;rdquo;&#xA;Often thought of as cheap VMs, containers are just isolated groups of processes running on a single host. That isolation leverages several underlying technologies built into the Linux kernel: namespaces, cgroups, chroots and lots of terms you&amp;rsquo;ve probably heard before.</description>
    </item>
    <item>
      <title>A Let&#39;s Encrypt client for Go</title>
      <link>https://ericchiang.github.io/post/go-letsencrypt/</link>
      <pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/go-letsencrypt/</guid>
      <description>Just want to jump into the GitHub project? Click here.&#xA;If you haven&amp;rsquo;t heard, Let&amp;rsquo;s Encrypt is trying to secure the internet with automated and free TLS certificates.&#xA;In preperation for the Public Beta in December, I&amp;rsquo;ve written a simple client in Go which you can go get on GitHub. This post uses that client to take you through the workflow of signing up, completing challenges, and requesting certificates. Let&amp;rsquo;s Encrypt!</description>
    </item>
    <item>
      <title>Testing databases with Docker</title>
      <link>https://ericchiang.github.io/post/testing-dbs-with-docker/</link>
      <pubDate>Mon, 14 Sep 2015 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/testing-dbs-with-docker/</guid>
      <description>Databases, authentication management, metric aggregators; there&amp;rsquo;s a service or API for everything.&#xA;There&amp;rsquo;s also a place called dependency hell.&#xA;Dependency hell. Where it&amp;rsquo;s impossible to run a test on your laptop. Where bugs are found by running a main, clicking around, and seeing what breaks. Where you cross your fingers and pray that new versions don&amp;rsquo;t break everything. Where we use mocks and stubs to combat a growing technology stack.</description>
    </item>
    <item>
      <title>TLS with Go</title>
      <link>https://ericchiang.github.io/post/go-tls/</link>
      <pubDate>Sun, 21 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/post/go-tls/</guid>
      <description>NOTE: For an updated version of this post, see the GopherCon 2019 talk &amp;ldquo;PKI for Gopher&amp;rdquo;. (Video, Slides)&#xA;For a long time my knowledge of TLS was Googling &amp;ldquo;how to configure nginx as an HTTPS proxy.&amp;rdquo; Okay, the cert goes here and the key goes here, that&amp;rsquo;s my job done. But with more and more pushes for things HTTPS and HTTP/2 (which defaults to using TLS), it sometimes helps to understand this a little better.</description>
    </item>
    <item>
      <title>about</title>
      <link>https://ericchiang.github.io/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/about/</guid>
      <description>Co-Founder and CTO at Oblique.&#xA;email: eric.chiang.m@gmail.com github: @ericchiang bluesky: @ericchiang.bsky.social linkedin: profile Work&#xA;Oblique - March 2025 - present Google - July 2018 - March 2025 CoreOS (acquired by Red Hat) - November 2015 - June 2018 Yhat (YC W15) - March 2014 - November 2015 IBM (intern) - June 2013 – September 2013 Genentech (intern) - March 2013 – June 2013 Cloudera (intern) - May 2012 – August 2012 Talks</description>
    </item>
    <item>
      <title>license</title>
      <link>https://ericchiang.github.io/license/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
      <guid>https://ericchiang.github.io/license/</guid>
      <description>All code snippets on this site (ericchiang.github.io) are provided under the following license:&#xA;Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN &amp;#34;AS-IS&amp;#34; BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER.</description>
    </item>
  </channel>
</rss>
