Welcome to Evan Klitzke’s web log.

Using std::unique_ptr With C APIs
Handling Updated RPM Package Configuration Files
An Annoyance With std::filesystem::last_write_time
Don't use div(3)
STL Iterators and Performance Revisited
How To Use std::lower_bound and std::upper_bound
How Tail Call Optimization Works
Blog Generator Rewrite
Generating Kernel Headers For BPF Kprobes
Making helm-projectile-find-file Fast In Large Projects
Running Build Commands Nicely
Maintaining Sorted Lists In Python
The CBC Padding Oracle Problem
Using Local OPTIND With Bash getopts
Weekend Hack: nossl.io
Disabling Ubuntu MOTD Spam
Bash Subcommand Aliases
Beware of strncpy() and strncat()
Lobotomizing GNOME
Using gpg-agent Effectively
An Overview of Bitcoin UTXOs
Making Bitcoin Fast: Introduction
How SystemTap Userspace Probes Work
Using Emacs And RTags With Autools C++ Projects
Indexing Git Repos With Hound
Summing Integer Ranges With dc
Generating Segwit Change Addresses in Bitcoin 0.15
An Observation About The Bitcoin Block Size Debate
How Many Bitcoins Did Satoshi Nakamoto Mine?
Notes on std::shared_ptr and std::weak_ptr
Pyflame Packages
Using Google Inbox With mailto Links In Firefox
Dumping Multi-Threaded Python Stacks
PTR Records Are Strange
An Unexpected Python ABI Change
Resurrecting the SRAM Automatix
Production Tornado Deployment With Systemd
Demystifying The Selfish Mining Bet
Bitcoin Transaction Malleability
Setting Up A Headless Raspberry Pi On Linux
Smarter clang-format In Emacs
Down the SSH_AUTH_SOCK Rabbit Hole: A GNOME Adventure
The Traveling Salesman Problem Is Not NP-complete
Declaring C String Constants The Right Way
C String Literals Are Lvalues
PATH_MAX Is Tricky
Pinning GPU Memory in Tensorflow
How To Host Your Own Private Git Repositories
Bash $* and $@
Blog Rewrite In Go
Efficient File Copying On Linux
The Cult of DD
Unix System Call Timeouts
How To Play Pool At A Bar
An Introduction to Valgrind Memcheck
All About Linkers
In Defense of C++
Unexpected Places You Can And Can't Use Null Bytes
How TCP Sockets Work
Blocking I/O, Nonblocking I/O, And Epoll
Goroutines, Nonblocking I/O, And Memory Usage
Hanging A Process With Select
Stopping A Process
Stdout Buffering
How To Nice A Bash Function
Crosh/SSH and ChromeOS
x86 Register Encoding
Pyflame Dual Interpreter Mode
Call Stacks and Link Registers
Towers of Hanoi in x86 Assembly
Go Compiles Infinite Loops Very Efficiently
Declare Your Bash Variables
Using ssh-agent and ED25519 Keys on GNOME
Systemd Socket Activation
Esc is Ctrl-[
F-Market Line Considered Harmful
5-HTP Contraindications
Documenting Code
Fedora, QEMU, and 9p Filesystem Passthrough
Inline C/Assembly In Bash
A Funny Thing About C and C++
CRCs vs Hash Functions
GitHub Private Repos
Memory Protection and ASLR on Linux
C++ and Thoughts On Java, Go, and Rust
The Curious Case of Position Independent Executables
GNOME Terminal Server
The x86-64 Red Zone
Free Medical Data
Ptrace, Syscall, and Python
How GCC LTO Works
Generator Comprehensions / Using any() and all() in Python
The 64-bit Extensions to x86 Are a Mess
Configuring GNOME
GCC Generates Strange Code
How To Use Autotools
GPL Licensing
Parsing ELF symbol tables
A Ptrace Idiosyncrasy
Demangling C++ Symbols
C Functions Without Arguments
Ptrace (continued)
Using Ptrace For Fun And Profit
SSH Again
Effectively Using .bash_profile
Self-Balancing Trees
Linux Swappiness
Misunderstanding mlock(2) and mlockall(2)
Bash If/Equals
Some Minor Site Changes
The SF Housing Crisis
Environment Variables
The Halting Problem
Binding On Port 0
Color and TTYs
Cornering At Low Speeds
The Caveats of TCP_NODELAY
The Hate Is Real
Uninterruptible Sleep
eCryptfs on Fedora
New Bike Day
Envoy and Ed25519
Android Developer Options & ADB
Testing Code
Slack IRC Gateway
BitlBee Accounts
Large Data Files
The Thrill Of Riding
BitlBee & HipChat
Mission Bicycle w/ SRAM Automatix Hub
The Commodification of Databases
Rendering Videos From OpenGL Is Hard
Linear Algebra; or, The Folly of Youth
Surprising Things Found While Exploring Bash
Cars And Turn Restrictions On Market St In San Francisco
Being Self-Taught
Resource Management in Garbage Collected Languages
My Philosophy on "Dot Files"
An Important Difference Between mysql(1) and MySQLdb