Blog posts
Cache or Crash: Exploring the risks of using caching in distributed software systems
Discover the complexities of caching in distributed software systems as we explore both its benefits and potential risks. Learn from real-world examples and delve into best practices for implementing caching securely, without compromising availability.
Deterministic Encryption for Database Primary Keys
Explore the benefits of deterministic encryption for database keys, enhancing security while maintaining unique constraints. This post covers how it functions, compares to traditional methods, and offers practical tips for successful implementation.
Creating a Cost-Effective and Highly Available Chatbot with OpenAI, AWS, and Discord
This blog post discusses how to create a cost-effective and highly available chatbot
with OpenAI, AWS, and Discord. It explains the advantages of using these three tools
together, and the challenges involved in creating a chatbot. Solutions proposed in this
article include using EC2 Spot Instances for cost-effective hosting and using distributed
locking with leases to prevent duplicate work and handle faults, providing a
cost-effective and reliable way to create a chatbot.
Formal modeling as a design tool
Alloy is a language and analyzer for formal software modeling. As a way of starting to learn Alloy I model a toy design that I know to be broken: Python pip’s legacy dependency resolution algorithm.
Healthy breathing with a smart bulb
Inhale 5 seconds, exhale 5 seconds. Research repeatedly demonstrates that this breathing pattern reduces
anxiety, stress, high blood pressure, and insomnia, both during sessions and durably for months afterward. In
this article I summarize research into breathing, and create an open-source tool that uses a smart bulb
as a peripheral-vision breathing guide.
Using a native cryptography library in Flutter
Flutter is a Google UI toolkit for writing cross-platform mobile applications. Using
native code from Flutter is now easier than ever by using the
dart:ffi
library that is currently in
beta. In this article we demonstrate why you’d want to use native code, and a practical example of doing so
using the libsodium
cryptography library.
[DRAFT] Random Permutations With Constant Space
You want to iterate over a random ordering of items without storing or needing to lookup already-used items.
We can borrow an algorithm from cryptography called the Feistel Network to generate random permutations in constant
space and time. Applications include generating unique gift card codes or credit card numbers for your customers
without exposing already-generated codes/numbers, and efficiently implementing the fizzlefade effect from
Wolfenstein 3D.