Archive
-
PyMyFlySpy: track your flight using its headrest data
04 Dec 2024
-
Generating infinite, age-appropriate Cat Crimes puzzles
02 Sep 2024
-
PySkyWiFi: completely free, unbelievably stupid wi-fi on long-haul flights
09 Jul 2024
-
I've written a book about being a dad; now I want to get it published
25 Mar 2024
-
Thousands of elderly twins assure me that my kids will be alright
18 Oct 2023
-
Hello Deep Learning
13 Oct 2023
-
How to pass a coding interview with me
30 Aug 2023
-
I thought I knew what I was doing this time: how our second son was born
04 Apr 2023
-
Gamebert: a Game Boy emulator built by Robert
07 Feb 2023
-
How sad should I be about ChatGPT?
14 Dec 2022
-
Gameboy Doctor: debug and fix your gameboy emulator
03 Dec 2022
-
How to date a recording using background electrical noise
25 Oct 2022
-
Love the details
26 Sep 2022
-
I love him more and more every day on average
12 Sep 2022
-
Soon he’ll be three and soon he’ll be twenty-one
14 Jun 2022
-
I'm a security engineer and I still almost got scammed
20 Apr 2022
-
We're responsible for the Christmas magic now
15 Mar 2022
-
Off-The-Record Messaging part 4: key insights
15 Feb 2022
-
Off-The-Record Messaging part 3: how OTR works
15 Feb 2022
-
Off-The-Record Messaging part 2: deniability and forward secrecy
15 Feb 2022
-
Off-The-Record Messaging part 1: the problem with PGP
15 Feb 2022
-
I wouldn't call my friends strong male role models but they'll have to do
07 Dec 2021
-
How to write better sentences: 6 examples
30 Nov 2021
-
Height: 2ft 10 inches. Occupation: baby
14 Sep 2021
-
Vulnerability in Bumble dating app reveals any user's exact location
25 Aug 2021
-
Another family without a backstory
20 Apr 2021
-
Reliable osquery deployment for the paranoid
16 Feb 2021
-
Deleting Facebook
08 Feb 2021
-
Don't worry son, all your friends are weirdos too
06 Jan 2021
-
Buying a first home
25 Nov 2020
-
It can’t be for nothing: notes from The Last of Us Part 2
02 Nov 2020
-
Another RCE vulnerability in KensingtonWorks
29 Sep 2020
-
I got married and had kids so you don't have to
22 Sep 2020
-
Programming Projects for Advanced Beginners #7: Auto-project-builder
12 Aug 2020
-
What is an advanced beginner?
05 Aug 2020
-
PFAB #19: Working with raw bytes
26 Jul 2020
-
Preventing impossible game levels using cryptography
22 Jul 2020
-
PFAB #18: Adventures in shrinking serialized data
13 Jul 2020
-
PFAB #17: pre-computation sounds like cheating but isn't
27 Jun 2020
-
Remote code execution vulnerability in KensingtonWorks mouse manager
24 Jun 2020
-
PFAB #16: How to make your code faster and why you often shouldn't bother
14 Jun 2020
-
A blogging style guide vol. 2
26 May 2020
-
PFAB #15: Don't overwork your functions
17 May 2020
-
Parenthood #7: the coronavirus and happy birthday edition
13 May 2020
-
PFAB #14: Evil `eval`
03 May 2020
-
How does a TCP Reset Attack work?
27 Apr 2020
-
PFAB #13: When code is too clever to be clean
19 Apr 2020
-
Hundreds of companies assert usage rights over all ideas sent through their services
13 Apr 2020
-
Systems design for advanced beginners
06 Apr 2020
-
How to make yourself happier by making your iPhone worse
18 Mar 2020
-
Smile by Papa (Gary Computer Remix)
13 Mar 2020
-
PFAB #11: Separating logic and data
07 Mar 2020
-
Interview on the Cyberwire podcast about Wacom data collection
06 Mar 2020
-
Parenthood #6: Re-rolling the dice
02 Mar 2020
-
Online tracking is about finding excuses to send HTTP requests
25 Feb 2020
-
PFAB #10: First-class functions and dependency injection
23 Feb 2020
-
Don't let "Magic Enhancer for YouTube" slurp up your browsing history
18 Feb 2020
-
PFAB #9: Batch vs Stream processing
08 Feb 2020
-
Send me your privacy abuse tipoffs
07 Feb 2020
-
Wacom drawing tablets track the name of every application that you open
05 Feb 2020
-
PFAB #8: Input validation - tradeoffs between convenience and surprise
26 Jan 2020
-
How to set up The Hive on AWS ElasticSearch
14 Jan 2020
-
Parenthood #5: Great cement ideas that will make your partner happy
06 Jan 2020
-
PFAB#7: How to write a library
04 Jan 2020
-
2019 review
01 Jan 2020
-
PFAB#6: Real-world debugging practice
28 Dec 2019
-
PFAB#5: How to make your programs shorter
21 Dec 2019
-
PFAB#4: Exception handling and coping with failure
14 Dec 2019
-
PFAB#3: How to rigorously analyze your journey to work
07 Dec 2019
-
Why I have office hours and why you should too
05 Dec 2019
-
PFAB#2: How to structure your programs
30 Nov 2019
-
How to man-in-the-middle proxy your IOT devices
21 Nov 2019
-
PFAB#1: Define your boundaries
11 Nov 2019
-
Programming Feedback for Advanced Beginners #0
08 Nov 2019
-
I will give you feedback on your code
08 Nov 2019
-
Parenthood #4: Untitled Potato Portrait
10 Oct 2019
-
How to come up with blog post ideas
24 Sep 2019
-
HP printers try to send data back to HP about your devices and what you print
15 Sep 2019
-
Parenthood #3: Oscar Heaton, Quarterly Baby Review
25 Aug 2019
-
Programming Projects for Advanced Beginners #6: User Logins
12 Aug 2019
-
Real-World Programming Projects for Advanced Beginners
11 Aug 2019
-
Peeking through stock option exercise windows
06 Aug 2019
-
Programming Videos for Advanced Beginners #1: Battleships
27 Jul 2019
-
Maximizing profits and evaluating success as a Craigslist seller
23 Jul 2019
-
How to write an afl wrapper for any language
08 Jul 2019
-
Port scans and industrial fans: 1 month of parenthood
30 Jun 2019
-
I was 7 words away from being spear-phished
24 Jun 2019
-
Childbirth: a father's-eye view
17 Jun 2019
-
Endless Summer by The Midnight: a brief analysis
01 May 2019
-
Skeptical advice for programming jobseekers
28 Apr 2019
-
Synth1: an unofficial manual
21 Apr 2019
-
Open Source for Advanced Beginners #1: bashplotlib
14 Apr 2019
-
Open Source for Advanced Beginners
13 Apr 2019
-
How does Tor work?
06 Apr 2019
-
The Robot Reserve Army of Labor
31 Mar 2019
-
What beginner's mind is really like
25 Mar 2019
-
ROBERT: prove that your randomized trial really was random
17 Mar 2019
-
How to get to Silver in Rocket League 1v1s
07 Mar 2019
-
Making peace with Simpson's Paradox
24 Feb 2019
-
Introducing Afl-Ruby: fuzz your Ruby programs using afl
16 Feb 2019
-
It was all so easy: a story about privacy
06 Feb 2019
-
Third-party dream cookies
27 Jan 2019
-
A brief history of wi-fi privacy vulnerabilities
15 Jan 2019
-
The Wavefunction Collapse Algorithm explained very clearly
17 Dec 2018
-
Programming Projects for Advanced Beginners
08 Dec 2018
-
A blogging style guide
06 Dec 2018
-
Programming Projects for Advanced Beginners #5: Snake
02 Dec 2018
-
HTTPS in the real world
28 Nov 2018
-
The therapeutic properties and applications of Dark Souls
23 Nov 2018
-
Reproducible beliefs
17 Nov 2018
-
Programming Projects for Advanced Beginners #4: Photomosaics
03 Nov 2018
-
I Might Be Spartacus: a differential privacy marketplace
28 Oct 2018
-
/office-hours
22 Oct 2018
-
Programming Projects for Advanced Beginners #3b: Tic-Tac-Toe AI
09 Oct 2018
-
Programming Projects for Advanced Beginners #3a: Tic-Tac-Toe AI
09 Oct 2018
-
Lessons from my first 20 office hours
02 Oct 2018
-
What playing The Witness will teach my kid about problem solving
07 Sep 2018
-
How to build a TCP proxy #4: Fake Certificate Authority
31 Aug 2018
-
How to build a TCP proxy #3: Proxy Server
31 Aug 2018
-
How to build a TCP proxy #2: Fake DNS Server
31 Aug 2018
-
How to build a TCP proxy #1: Intro
31 Aug 2018
-
I'm giving feedback on blog posts
27 Aug 2018
-
Talk: Traits of Successful Software Developers
21 Aug 2018
-
How I kicked my email compulsion
20 Aug 2018
-
"Stylish" is back, and you still shouldn't use it
16 Aug 2018
-
What does a 0.01 increase in the Gini Coefficient actually look like?
15 Aug 2018
-
She wanted to do something better
28 Jul 2018
-
Programming Projects for Advanced Beginners #2: Game of Life
20 Jul 2018
-
I'm doing Office Hours
17 Jul 2018
-
How Tinder keeps your exact location (a bit) private
09 Jul 2018
-
I went to Skyrim, once
04 Jul 2018
-
"Stylish" browser extension steals all your internet history
02 Jul 2018
-
How to read
25 Jun 2018
-
Programming Projects for Advanced Beginners #1: ASCII art
12 Jun 2018
-
Why economists need bureaucracy
05 Jun 2018
-
Making YouTube less bad for you using CSS
07 May 2018
-
Re: All those regrettable posts that you thought were gone
01 May 2018
-
Let's grow the Richmond: SB827
08 Mar 2018
-
Another 10 somewhat advanced Magic: The Gathering plays
09 Dec 2017
-
Identity Graphs: how online trackers follow you across devices
24 Nov 2017
-
Cookie Syncing: how online trackers talk about you behind your back
21 Nov 2017
-
How does online tracking actually work?
20 Nov 2017
-
A zero-knowledge proof for the existence of God
13 Nov 2017
-
What's the worst word you'd say to beat your in-laws at Boggle?
27 Oct 2017
-
What is a self-hosting compiler?
24 Oct 2017
-
WeSeeYou: Democratizing De-Anonymization
17 Oct 2017
-
Tracking friends and strangers using WhatsApp
09 Oct 2017
-
Reverse engineering LogicPro synth files
17 Jul 2017
-
Confessions of an Economic Hitman - a review
27 Feb 2017
-
A small, security-adjacent bug in Instagram
20 Feb 2017
-
Notes from Rep. Jackie Speier's Town Hall
13 Feb 2017
-
A tale of love, betrayal, social engineering and Whatsapp
22 Oct 2016
-
There were millions
21 Sep 2016
-
Building a Magic: The Gathering sealed deck AI
12 Sep 2016
-
10 somewhat advanced Magic: The Gathering plays
03 Sep 2016
-
How to make Slack less bad for you
23 Aug 2016
-
Hide the internet
08 Aug 2016
-
Randomness-Driven Recruiting
05 Jul 2016
-
A delightful piece of spam from Xfinity
12 Jun 2016
-
Writing stories is not like programming
06 May 2016
-
In context
09 Apr 2016
-
There was only time like the present
23 Feb 2016
-
I am with the police
01 Feb 2016
-
He whispered, carelessly
21 Jan 2016
-
How they solved True Detective Season 1
22 Dec 2015
-
A day at The Free Market
30 Nov 2015
-
How to value your startup stock options
02 Nov 2015
-
Why and how to make smaller pull requests
26 Oct 2015
-
American Prankster
20 Oct 2015
-
Three Body Problem by Cixin Liu - the Cultural Revolution, in space
12 Oct 2015
-
Robber Barons understand technical debt too
21 Sep 2015
-
Favorite bits from my insane, never-to-be-published novel
08 Sep 2015
-
Staying safe cycling San Francisco's Wiggle
02 Sep 2015
-
Migrating bajillions of database records at Stripe
31 Aug 2015
-
The SSL FREAK vulnerability explained
06 Apr 2015
-
Scientific debugging
29 Mar 2015
-
Something that I don't talk about much
20 Mar 2015
-
Green Waves on an arbitrary Valencia Street
12 Dec 2014
-
Fun with your friend's Facebook and Tinder sessions
08 Dec 2014
-
Why you should read Playing to Win by David Sirlin
03 Nov 2014
-
Tales from a San Francisco housing search (DELETED SCENES)
26 Oct 2014
-
Tales from a San Francisco housing search
25 Oct 2014
-
Lessons from a surprisingly successful blog
26 Jul 2014
-
Is Ruby pass-by-reference or pass-by-value?
22 Jul 2014
-
How to win friends and influence repos
21 Jul 2014
-
Getting Nothing Done: a misguided quest for productivity
14 Jul 2014
-
Why I love refactoring
05 Jul 2014
-
Code review without your glasses
20 Jun 2014
-
A beginner's guide to funemployment
02 Jun 2014
-
Jaccard Similarity and MinHash for winners
02 May 2014
-
9 ways to get that engineer
21 Apr 2014
-
Why you should be vegetarian
18 Apr 2014
-
Downfall of a once readable blog post
07 Apr 2014
-
How does HTTPS actually work?
27 Mar 2014
-
Lessons From A Silicon Valley Job Search
07 Mar 2014
-
Is Python pass-by-reference or pass-by-value?
09 Feb 2014
-
Cookieless user tracking for douchebags
20 Jan 2014
-
Mathematicians hate civil liberties: 100 prisoners and 100 boxes
13 Jan 2014
-
The Blue-Eyed Islanders Puzzle
06 Jan 2014
-
Kanban at London's National Gallery
05 Nov 2013
-
The hidden way Bootstrap saved your life
20 Aug 2013
-
The Padding Oracle Attack
29 Jul 2013
-
How to hack a Rails app using its secret_token
22 Jul 2013
-
When you have a nail in your eye, everything looks like a nail
15 Jul 2013
-
You should be a mentor
25 Apr 2013
-
Infinite monkeys and infinite repos
09 Apr 2013
-
Check you’re wearing trousers first
01 Apr 2013
-
Take pride or f--- it
27 Mar 2013
-
How chronic pain has made me happier
19 Mar 2013
-
Coding with gumption
11 Mar 2013
-
You are not getting any better
04 Mar 2013
-
Featurewhack
24 Feb 2013
-
Nothing new under the sun
15 Feb 2013
-
How to save 1 day/year of quality Rails time
13 Feb 2013
-
Quantum Annealing, or, Do Weird Stuff
11 Feb 2013
-
Why it’s the taxpayer’s fault we’ve got no money
05 Jan 2013