Susan Potter

Software

software

Unique identifier types

Have you ever found yourself in a situation where you needed to generate unique identifiers (UIDs) for objects, records, or entities within a system? It's a common problem in software development, and there are different schemes to generate UIDs. Each of these schemes has its …

software

Extracting Your Twitter Archive into DuckDB

Since I heard a number of people interested in extracting the data from their Twitter archive, I thought it would be beneficial to describe the steps. Assumptions you have already requested your account's Twitter archive via the Twitter site your Twitter archive is …

software

A WebSockets Story

It was a cold and blustery day, and Susan sat huddled in front of her recent birthday present to herself - a ThinkPad running NixOS - her fingers numb with cold. She had been struggling for hours - well, at least 3 minutes which felt like hours - to establish a connection with …

software

Getting Started with Flix, Part 0

This part 0 post should work for any developer who wants to get started with Flix. Flix is a programming language that supports constructs native to functional programming languages like Scala and Haskell while supporting row polymorphic extensible records like PureScript and …

software

Tracking diffs by scoping to file, range, function, method, or class changes in Git

One common question I see from developers using Git is how they can review the history of one function, method, or class over time through Git's history of the project. In codebases that have evolved over years, a developer just wants to know how one particular semantic …

software

How to make seemingly impossible decisions

Originally published as a Twitter thread starting here. Anyone who has spent any time in either a technical or people management leadership position in software development knows that you need to make seemingly difficult decisions frequently. This week I coached a coworker …

software

TypeScript enum versus const enum

Today I found that there is a difference between enum and const enum in TypeScript in the generated JavaScript. Namely: with a non-const enum the compiler generates an object with key-value pairs. with a const enum the definition alone doesn't generate any code, only …

software

Using three-way diffing context for merge conflict style in Git

It recently came to my attention that not everyone overrides the default merge.conflictStyle git-config setting. So in case anyone here wanted to try something new out that would provide more context during a Git conflict resolution scenario here you go. I use diff3 which you …

software

Algebraic Data Types in TypeScript

Note: the code for the TypeScript (to help you follow along) is available here: Encoding Algebraic Data Types in TypeScript code Background Recently I've been reviewing TypeScript code at work. A common pattern I've observed in pull requests and some open source projects …

software

Algebraic Data Types: For the math(s) inclined

This was initially published as a section of one of my substack posts. You might be wondering why the term algebraic data types has the word algebra in it. Don’t sweat it if you hated algebra in high school, I will not call on you to solve simultaneous equations or prove by …

software

A quick review of a pure functional serverless application deployed to production

/images/car-dashboard-small.webp Photo by Dawid Zawiła on Unsplash This was adapted from a tweet thread on June 3rd, 2020. Notes: all references to $ (dollars) is in reference to US Dollars (USD) latencies are quoted in milliseconds (ms) unless otherwise noted this …

software

Random notes on Unikernels

This is an adaptation of a Slack chat explanation from work (slightly reworded to read better for the audience) from work in 2017. Random notes on unikernels Introducing unikernels You might have heard terms like unikernel, nanokernel, or library operating systems. These …

software

DynamoDB: The Basics

Introduction This post introduces concepts and principles used to design DynamoDB tables as I have been learning how to leverage this technology in a new project. This introduction will compare and contrast the core concepts and ideas with those found in relational database …

post

Economic concepts applied in software development, reliability engineering, and technical leadership

One of my favorite subjects as a layperson is economics. I have found many useful applications of methods and concepts to my work in software development, technical leadership, and reliability engineering roles. This is a post to share some of these. A few ideas from economics: …

software

To Type or not to Static Type

Originally published as a Gist here: https://gist.github.com/mbbx6spp/60577af8dc4106d6e710cd804292ce20 Minor modifications in formatting and an extra line of no-judgement was added to this text from the original Gist. Purpose, Disclaimer and Confessions This is the (mostly) no …

software

Parametricity: A Practitioners Guide

Introduction What software developer likes surprises, especially in production? Not me. At least not when I am on call. ;) Wouldn't it be great if we were able to reason about our code to make our lives as simple as possible when debugging or eliminate debugging …

software

Algebraic Data Types

An algebraic data type can take many forms: Sum type Product type Hybrid Sum/Product type Recursive type (not covered in this post) Sum Types (aka Tagged Unions) A sum type is a type that has a known and exhaustive list of constructors where a value of that type must …

software

SCM: The Next Generation

I am sure most developers (whether Java, Ruby, Python, or other) have used Subversion, Perforce or CVS to manage and control their projects' source, but have you used darcs or git? I'm sure most of you would have heard of git it hosts the Linux kernel code currently. …