Archive
        
        
  
  - 
    
      diceomatic: a DSL for making children's dice games
    
    
      11 Jun 2025
     
- 
    
      MinorMiner: we turn your kid's maths homework into Bitcoin
    
    
      14 May 2025
     
- 
    
      It's not cheating if you write the video game solver yourself
    
    
      11 Mar 2025
     
- 
    
      Come and work with me on Anthropic's Frontier Red Team
    
    
      03 Feb 2025
     
- 
    
      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