RSSAmplifier

Blog

Raphael Poss · workbench

Notes on technology & management

dr-knz.netRSS feed ↗87 posts

Latest posts

LLMs in Software Engineering

A guide for newcomers to software engineering, and for anyone curious about how LLMs are changing it. Built from interviews with senior professionals from the tech industry. Opening If you are reading this, you probably have mixed feelings about large language models (LLMs). You may have used one and been …

Community Maps - Where Your People Are

This post explains how I developed Community Maps , a small web app that helps members of a community share their approximate location with each other. Note AI assistance (Opus 4.6) was used for minor edits in this text. Why this project I am currently trying to organize an event …

Human-Agent Computation Systems: A Complexity-Theoretic Sketch

Introduction It occurred to me that the combination of human operator + AI programming agents forms a system that, if you squint, looks like a computing system. From there, it took me quite a few months to fully verbalize this question: are there fundamental results from theoretical computer science that could …

Theoretical Limits on AI Code Transformation

Introduction One of my favorites experiences of trimming unfruitful work directions thanks to theoretical results happened when I discovered this 2001 article from Jeroen Voeten: On the fundamental limitations of transformational design . For context, when I discovered this article (around 2010), I was working on delivering an “optimizing compiler” for …

Investigation into Message Layer Security (MLS)

This article investigates Message Layer Security ( MLS ), the IETF standard protocol ( RFC 9420) for Signal-style end-to-end encryption. Through a practical analysis of OpenMLS (the Rust reference implementation) and a demonstration CLI chat application (mls-chat), the post reveals the substantial gap between protocol specification and production deployment. Introduction MLS (Message Layer …

What the EU’s efficiency labels can teach us about helping customers choose

Markets work when buyers are well informed. The European Union’s A–G label family is a long-running, quietly radical lesson in how to make that true for everyday decisions.

Time is a Range, Not a Point

This post introduces timecond , a TypeScript library I created to represent, evaluate, and describe complex conditions on time ranges. The support for time ranges is what makes it different from many other popular time scheduling libraries that focus on events (points in time). Note In contrast to all my prior …

The Share Web

The elephant in the room, anno 2024 , is that all meaningful interactions currently happen in group chats. People do not trust the traditional world wide web ( WWW ) as much as they trust content coming from their communities: WhatsApp group chats, Telegram channels or groups, Facebook pages/groups, etc. However, there …

Unusual primitives in programming languages

This post explores unusual primitive constructs in programming languages, from data-like primitives to somewhat esoteric features. Unusual primitives are interesting because they indicate an attempt by the language designer to help the programmer think in a new way. Acknowledgement: This writeup is a response and followup to Hillel Wayne’s …

The machine does not (yet) think outside of the box

Once upon a time, I spent multiple months implementing a graphing calculator using GW - BASIC ( manual ). Would I be able to do the same more quickly and effectively today using generative AI ? ❦❦❦ Let’s give it a go, using Claude AI to start: Implement a simple graphing calculator in GW …

Contextual suggestions for SQL syntax

I published an article on the Cockroach Labs Blog: Contextual suggestions for SQL syntax . In this article, I explained how I designed the first version of the “tab completion” engine for CockroachDB. Also available via the Wayback Machine .

Bubbles and sparkles: refreshing CockroachDB’s SQL shell

I published an article on the Cockroach Labs Blog: Bubbles and sparkles: refreshing our SQL shell . In this article, I explain how I migrated the CockroachDB SQL shell to use the Charm library. Also available via the Wayback Machine .

One-on-one meeting questions

Let us start this year with the following: Manager’s club - Mega list of 1 on 1 Meeting Questions Superficially, this list (which can also be downloaded in a structured format here ) compiles questions that can be asked during periodic meetings between a manager and their reports. What I like …

Loss of input in Charm’s Bubbletea

Abstract In the Bubbline project we are trying to build readline-like semantics on top of Charm’s Bubbletea . As of Bubbletea v0.23, we discovered this is currently impossible to do in a way that preserves input continuity reliably across readline invocations. This result is general. Any Bubbletea-based program or …

People management incentives

What makes an engineering manager want to improve their people management behaviors & skills? In this document, we will look at various mechanisms through which organizations incentivize good people management, and which levers are available to reports to “manage up” and hold their managers accountable. ❦❦❦ For context, a quick aside: what …

You’re a Tech Lead. What now?

You’re arriving here because you’ve been nominated for a Technical Leadership ( TL ) role in some team. Or perhaps you’re considering applying for one. Note The following document is about the experience of being a TL , and that of evolving into the TL role. It does not detail …

Navigating and optimizing performance reviews

It’s this time of the year again! Maybe it’s called “review”, maybe it’s called “check-in”: the moment in the year where you and your manager sit down together to look at the past period, review the work you’ve done, and discuss directions for the future. In …

Updates to CockroachDB’s security architecture between v20.1 and v22.1

In 2020, I published the following two articles: Data flows and security architecture in CockroachDB Authentication configuration in PostgreSQL and CockroachDB The original text was targeting version v20.1 of CockroachDB. This month, I have updated these two pages to reflect the improvements between v20.1 and the upcoming v22 …

Self-direction: navigating agency and responsibility

After reaching a certain level of seniority, it’s expected that a worker can self-direct in service of the organizational goals. This creates a situation that can be difficult to navigate: is it really self-direction if the organization decides what are the “right” and “wrong” choices in the end? Today …

Tech Career Progression for Beginners

There are more-or-less “hidden” rules on how to actively progress one’s career in a large-ish corporation. Let’s look at them here. What’s in a role A role on the workplace contains a combination of behavior , skill and responsibility . Behavior is what you actually do. Skill is what …

Understanding the Beginner’s Mind

Say, you’re tasked with onboarding a new teammate, a new co-worker. You don’t know them well yet, but you want them to become effective at what the team does, quickly. You also want to quickly shore up their confidence, if that’s also needed. How to get there …

Levels of Technical Leadership

This document describes why and how a tech company can offer a career path to its engineering technical leaders, that is, different tracks for “deep ICs” versus “broad ICs”. To motivate this evolution, we identify two separate pressure points: from the business, to grow an increasingly skilled and mature technical …

Abstract Machine Models

Ever since 2010, I have studied the “meta” of software, by studying (and thinking about) the continued dialogue between programming language designers, computer designers, and programmers. The following constitutes a snapshot of my current thinking. Epistemological context During the period 2008-2012, I was requested to help design&build programming tools …

How to get into computer security (2/2)

On September 28, 2021, Melissa Amaya and Jon Purnell from the Data & Dev podcast interviewed me and Aaron Blum, lead engineer of the security team at Cockroach Labs. The focus was to understand what it takes to start in a computer security career , either fresh out of school or via …

How to get into computer security (1/2)

On September 28, 2021, Melissa Amaya and Jon Purnell from the Data & Dev podcast interviewed me and Aaron Blum, lead engineer of the security team at Cockroach Labs. The focus was to understand what it takes to start in a computer security career , either fresh out of school or via …

My Go executable files are still large

Note The latest version of this document can be found online at https://dr-knz.net/go-executable-size-visualization-with-d3-2021.html . Alternate formats: Source , PDF . Note After a lively discussion on Hacker News and input from Russ Cox, the conclusions in the analysis below were reworded to avoid the notion of “non-useful bytes”. The …

Log and error redaction in CockroachDB v20.2

I published an article on the Cockroach Labs Blog: Log and error redaction in CockroachDB v20.2 . In this article, I explain how I designed the log redaction engine in CockroachDB. Also available via the Wayback Machine .

Errors vs. exceptions in Go and C++ in 2020

Note The latest version of this document can be found online at https://dr-knz.net/go-errors-vs-exceptions-2020.html . Alternate formats: Source , PDF . Introduction Back in 2018, we compared empirically the performance overheads of Go and C++ with regards to the low-level calling convention: to pass arguments , to return multiple values , and …

The Go low-level calling convention on x86-64 (updated)

Note The latest version of this document can be found online at https://dr-knz.net/go-calling-convention-x86-64-2020.html . Alternate formats: Source , PDF . Introduction Two years ago, this article reviewed the low-level code generation of the Go compiler, as of version 1.10. A few things have changed since, and so an …

Beyond fmt.Errorf()—everyday error objects in Go

The idiomatic way to propagate errors in Go is using the predefined type error . Yet Go’s standard library only provides very rudimentary constructors for error objects, errors.New() and fmt.Errorf() . This article introduces how the CockroachDB errors library , a drop-in replacement to Go’s own errors package, expands …

The Go error printing catastrophe

Go 1.13’s standard library has adopted Dave Cheney ‘s main contribution to error handling from 2015: the idea that Go error objects are structured as linked lists . Alas, this adoption created a giant gap for Go developers: it has become difficult, almost impossible, to make printing error objects …

The Go standard error APIs

This writeup is part of the prologue to a series of articles that talk about the “CockroachDB errors library” , which is really a general-purpose, open source replacement for Go’s standard errors package. So, what are we talking about here? The basic Go error API : errors are values The Go …

Go’s formatting APIs

This writeup is part of the prologue to a series of articles that talk about the “CockroachDB errors library” , which is really a general-purpose, open source replacement for Go’s standard errors package. Consider for example the following piece of code: import "fmt" type T struct { x int } func main …

Cloud-Native Security has Two R’s, not Three

This article explains how I stopped a software vendor and at least one of its customers from hemorraging $50K+ yearly due to unnecessary costs. ❦❦❦ A recommended best practice in Enterprise security is the “three R’s”: Repair, Repave and Rotate [1] [2] [3] . Repair means applying security patches as soon …

Expressivity vs Tractability

Hillel proposed on Twitter today: “ Expressiveness” is how easily we can ‘do’ things in a system. “Tractability” is how easily we can assert properties on things we ‘do’. F.ex DFAs are tractable, Turing machines are expressive. The expressiveness vs tractability tradeoff is one of the most fundamental in CS …

Nested transactions in CockroachDB 20.1

I published an article on the Cockroach Labs Blog: Nested transactions in CockroachDB 20.1 . In this article, I explain how I implemented nested transactions and SQL savepoints in CockroachDB v20.1. Also available via the Wayback Machine .

Ubuntu without Snap

Ubuntu 20.04 LTS uses Snap to distribute certain packages by default, including Chromium. This was a mistake and yields dysfunctional systems. Here’s how to fix it. How Remove all installed snaps: for p in $( snap list | awk '{print $1}' ) ; do sudo snap remove $p done Clean up the …

Local connection overheads in PostgreSQL and CockroachDB

What is faster: a local connection over a unix domain socket , or a local TCP / IP connection with TLS encryption? To a network expert, the answer seems intuitively obvious: the unix socket. But why? And by how much? Moreover, online docs and tutorials for both PostgreSQL and CockroachDB recommend—or …

Authentication configuration in PostgreSQL and CockroachDB

Both PostgreSQL and CockroachDB provide a little-known gem when it comes to controlling incoming SQL connections: a flexible, versatile configuration DSL for client authentication . In this blog post, I will explain this configuration language , describe several common and some advanced use cases , reveal a few security pitfalls , all the while …

Data flows and security architecture in CockroachDB

This blog post provides an overview of the data flows inside CockroachDB and its data security architecture. Note This post was originally published in February 2020, targeting CockroachDB v20.1. It was edited in February 2022 to reflect changes in CockroachDB v22.1. A summary of changes is available in …

The STRIDE threat model with examples

I like to think about computer security as the science of how things can go wrong with computers. There is so much that can go wrong! In so many different ways! To avoid becoming overwhelmed, computer engineers need a systematic way to think about security, talk about it with each …

A tour of Emacs as my Go editor

Using Emacs and advanced Emacs customization for editing Go.

Starting Your Remote Workplace For Fun and Profit

“My partner is moving for their job,” “I would like to move out of the city” or “I need to spend some time caring for my relatives,” so would the conversation often start. Then, unavoidably, “and so I am thinking about working remotely.” Then, an awkward silence. My co-workers often …

Hacking week: hardware/software co-design for a UT-LEON3 extension

This week, I collaborated with my friend Martin at Daiteq to add a feature to the UT - LEON3 processor and support it in our variant of the C language called SL . In short, we extended the processors’ thread creation protocol to support a wider variety of synchronization modes, and created …

I stopped using Slack and it is wonderful

Specifically, I shifted my use of Slack to become a low-volume, two-times-a-day, asynchronous, opt-in communication medium in my workflow. In doing so, I removed its essence as a chat, always-on app. I stopped using the “Slack” that my industry experiences; only its logo remains. This has had tremendous positive effects …

Why are my Go executable files so large?

Note The latest version of this document can be found online at https://dr-knz.net/go-executable-size-visualization-with-d3.html . Alternate formats: Source , PDF . Note Erratum (2019-04-02): The increase in binary size from CockroachDB v1.0 to v19.2 is 94%/125%, not 194%/225% as initially written. The increase in source code …

The acronym “DML” may not mean what you think it means

SQL defines many statements for different things: creating tables, putting data into tables, using tables, between other things. To reason about groups of statements with related behavior, the data community uses common, widely accepted acronyms to designate these groups. For example, the acronym “ DDL ” stands for “data definition language”, the …

My database has bugs — now what?

Upon our arrival in New Orleans on November 5th, 2018, my friend Nathan explained to me, with a mix of apparent excitement and apprehension: “our internal Jepsen test suite found a real consistency bug .” I replied: “This is great! This confirms yet again that good testing is actually useful! Have …

Measuring errors vs. exceptions in Go and C++

Note The latest version of this document can be found online at https://dr-knz.net/measuring-errors-vs-exceptions-in-go-and-cpp.html . Alternate formats: Source , PDF . Introduction The following document investigates the performance of signalling errors from functions in Go and C++. In contrast with the previous analyses that focused on a single topic, here …

Measuring argument passing in Go and C++

Note The latest version of this document can be found online at https://dr-knz.net/measuring-argument-passing-in-go-and-cpp.html . Alternate formats: Source , PDF . Introduction The following document investigates the performance of passing arguments to functions in Go, and compare that to C++. This is a follow-up to an earlier article I wrote …

Raphael Poss · workbench · RSS Amplifier