jvns.ca 31. 10. 2024ASCII control characters in my terminal – jvns.ca 27. 10. 2024Using less memory to look up IP addresses in Mess With DNS – jvns.ca 7. 10. 2024Some notes on upgrading Hugo – jvns.ca 1. 10. 2024Terminal colours are tricky – jvns.ca 27. 9. 2024Some Go web dev notes – jvns.ca 12. 9. 2024Reasons I still love the fish shell – jvns.ca 19. 8. 2024Migrating Mess With DNS to use PowerDNS – jvns.ca 6. 8. 2024Go structs are copied on assignment (and other things about Go I'd missed) – jvns.ca 8. 7. 2024Entering text in the terminal is complicated – jvns.ca 3. 7. 2024Reasons to use your shell's job control – jvns.ca 3. 6. 2024New zine: How Git Works! – jvns.ca 10. 4. 2024Notes on git's error messages – jvns.ca 1. 4. 2024Making crochet cacti – jvns.ca 28. 3. 2024Some Git poll results – jvns.ca 22. 3. 2024The "current branch" in git – jvns.ca 8. 3. 2024How HEAD works in git – jvns.ca 16. 2. 2024Popular git config options – jvns.ca 1. 2. 2024Dealing with diverged git branches – jvns.ca 26. 1. 2024Inside .git – jvns.ca 5. 1. 2024Do we think of git commits as diffs, snapshots, and/or histories? – jvns.ca 1. 1. 2024Some notes on NixOS – jvns.ca 31. 12. 20232023: Year in review – jvns.ca 4. 12. 2023Mounting git commits as folders with NFS – jvns.ca 23. 11. 2023git branches: intuition & reality – jvns.ca 14. 11. 2023Some notes on nix flakes – jvns.ca 10. 11. 2023How git cherry-pick and revert use 3-way merge – jvns.ca 6. 11. 2023git rebase: what can go wrong? – jvns.ca 1. 11. 2023Confusing git terminology – jvns.ca 20. 10. 2023Some miscellaneous git facts – jvns.ca 6. 10. 2023New talk: Making Hard Things Easy – jvns.ca 14. 9. 2023In a git repository, where do your files live? – jvns.ca 11. 8. 2023Notes on using a single-person Mastodon server – jvns.ca 8. 8. 2023What helps people get comfortable on the command line? – jvns.ca 7. 8. 2023Some tactics for writing in public – jvns.ca 4. 8. 2023Behind "Hello World" on Linux – jvns.ca 28. 7. 2023Why is DNS still hard to learn? – jvns.ca 10. 7. 2023Lima: a nice way to run Linux VMs on Mac – jvns.ca 8. 7. 2023Open sourcing the nginx playground – jvns.ca 23. 6. 2023New zine: How Integers and Floats Work – jvns.ca 5. 6. 2023Some blogging myths – jvns.ca 25. 5. 2023New playground: memory spy – jvns.ca 12. 5. 2023Introducing "Implement DNS in a Weekend" – jvns.ca 8. 5. 2023New talk: Learning DNS in 10 years – jvns.ca 19. 4. 2023New playground: integer.exposed – jvns.ca 17. 4. 2023A list of programming playgrounds – jvns.ca 31. 3. 2023Building a custom site for zine feedback – jvns.ca 7. 3. 2023Some possible reasons for 8-bit bytes – jvns.ca 3. 3. 2023How do Nix builds work? – jvns.ca 28. 2. 2023Some notes on using nix – jvns.ca 16. 2. 2023Writing Javascript without a build system – jvns.ca 11. 2. 2023Print copies of The Pocket Guide to Debugging have arrived – jvns.ca 8. 2. 2023Why does 0.1 + 0.2 = 0.30000000000000004? – jvns.ca 18. 1. 2023Examples of problems with integers – jvns.ca 13. 1. 2023Examples of floating point problems – jvns.ca 10. 1. 2023Some business graphs for 2022 – jvns.ca 21. 12. 2022New zine: The Pocket Guide to Debugging – jvns.ca 8. 12. 2022A debugging manifesto – jvns.ca 7. 12. 2022Tips for analyzing logs – jvns.ca 2. 12. 2022A couple of Rust error messages – jvns.ca 6. 11. 2022Making a DNS query in Ruby from scratch – jvns.ca 12. 9. 2022Why do domain names sometimes end with a dot? – jvns.ca 6. 9. 2022How to send raw network packets in Python with tun/tap – jvns.ca 30. 8. 2022Some ways to get better at debugging – jvns.ca 28. 7. 2022A toy remote login server – jvns.ca 20. 7. 2022What happens when you press a key in your terminal? – jvns.ca 9. 7. 2022Monitoring tiny web services – jvns.ca 28. 6. 2022Notes on running containers with bubblewrap – jvns.ca 12. 5. 2022sqlite-utils: a nice way to import data into SQLite for analysis – jvns.ca 10. 5. 2022Pages that didn't make it into "How DNS Works" – jvns.ca 26. 4. 2022New zine: How DNS Works! – jvns.ca 12. 4. 2022A list of new(ish) command line tools – jvns.ca 23. 3. 2022Implementing a toy version of TLS 1.3 – jvns.ca 13. 3. 2022Celebrate tiny learning milestones – jvns.ca 10. 3. 2022How to use undocumented web APIs – jvns.ca 8. 3. 2022Some tiny personal programs I've written – jvns.ca 23. 2. 2022Some things about getaddrinfo that surprised me – jvns.ca 20. 2. 2022Programming things that have gotten easier – jvns.ca 14. 2. 2022The multiple meanings of "nameserver" and "DNS resolver" – jvns.ca 1. 2. 2022A toy DNS resolver – jvns.ca 29. 1. 2022Reasons for servers to support IPv6 – jvns.ca 24. 1. 2022Hosting my static sites with nginx – jvns.ca 15. 1. 2022Some ways DNS can break – jvns.ca 11. 1. 2022How to find a domain's authoritative nameservers – jvns.ca 5. 1. 2022Why might you run your own DNS server? – jvns.ca 31. 12. 20212021: Year in review – jvns.ca 15. 12. 2021New tool: Mess with DNS! – jvns.ca 6. 12. 2021DNS doesn't "propagate" – jvns.ca 4. 12. 2021How to use dig – jvns.ca 17. 11. 2021Debugging a weird 'file not found' error – jvns.ca 15. 11. 2021Some notes on using esbuild – jvns.ca 4. 11. 2021How do you tell if a problem is caused by DNS? – jvns.ca 21. 10. 2021How to get useful answers to your questions – jvns.ca 5. 10. 2021Tools to explore BGP – jvns.ca 2. 10. 2021All my zines are now available in print! – jvns.ca 24. 9. 2021New tool: an nginx playground – jvns.ca 20. 9. 2021Teaching by filling in knowledge gaps – jvns.ca 16. 9. 2021Debugging by starting a REPL at a breakpoint is fun – jvns.ca 10. 9. 2021Quadratic algorithms are slow (and hashmaps are fast) – jvns.ca 19. 8. 2021Patterns in confusing explanations – jvns.ca 8. 7. 2021Write good examples by starting with real code – jvns.ca 8. 6. 2021Reasons why bugs might feel "impossible" – jvns.ca 2. 6. 2021You can now buy print version of my zines! – jvns.ca 24. 5. 2021Blog about what you've struggled with – jvns.ca 17. 5. 2021How to look at the stack with gdb – jvns.ca 11. 5. 2021The OSI model doesn't map well to TCP/IP – jvns.ca 2. 5. 2021I put all of my comics online! – jvns.ca 16. 4. 2021Notes on building debugging puzzles – jvns.ca 3. 4. 2021What problems do people solve with strace? – jvns.ca 31. 3. 2021A tool to spy on your DNS queries: dnspeep – jvns.ca 24. 3. 2021Get better at programming by learning how things work – jvns.ca 2. 3. 2021Things your manager might not know – jvns.ca 24. 2. 2021A little tool to make DNS queries – jvns.ca 23. 1. 2021Firecracker: start a VM in less than a second – jvns.ca 12. 1. 2021Server-sent events: a simple way to stream events from a server – jvns.ca 8. 1. 2021Daily blog posts about my time at RC – jvns.ca 4. 1. 2021Docker Compose: a nice way to set up a dev environment – jvns.ca 31. 12. 20202020: Year in review – jvns.ca 5. 12. 2020How I write useful programming comics – jvns.ca 30. 11. 2020An attempt at implementing char-rnn with PyTorch – jvns.ca
31. 10. 2024ASCII control characters in my terminal – jvns.ca 27. 10. 2024Using less memory to look up IP addresses in Mess With DNS – jvns.ca 7. 10. 2024Some notes on upgrading Hugo – jvns.ca 1. 10. 2024Terminal colours are tricky – jvns.ca 27. 9. 2024Some Go web dev notes – jvns.ca 12. 9. 2024Reasons I still love the fish shell – jvns.ca 19. 8. 2024Migrating Mess With DNS to use PowerDNS – jvns.ca 6. 8. 2024Go structs are copied on assignment (and other things about Go I'd missed) – jvns.ca 8. 7. 2024Entering text in the terminal is complicated – jvns.ca 3. 7. 2024Reasons to use your shell's job control – jvns.ca 3. 6. 2024New zine: How Git Works! – jvns.ca 10. 4. 2024Notes on git's error messages – jvns.ca 1. 4. 2024Making crochet cacti – jvns.ca 28. 3. 2024Some Git poll results – jvns.ca 22. 3. 2024The "current branch" in git – jvns.ca 8. 3. 2024How HEAD works in git – jvns.ca 16. 2. 2024Popular git config options – jvns.ca 1. 2. 2024Dealing with diverged git branches – jvns.ca 26. 1. 2024Inside .git – jvns.ca 5. 1. 2024Do we think of git commits as diffs, snapshots, and/or histories? – jvns.ca 1. 1. 2024Some notes on NixOS – jvns.ca 31. 12. 20232023: Year in review – jvns.ca 4. 12. 2023Mounting git commits as folders with NFS – jvns.ca 23. 11. 2023git branches: intuition & reality – jvns.ca 14. 11. 2023Some notes on nix flakes – jvns.ca 10. 11. 2023How git cherry-pick and revert use 3-way merge – jvns.ca 6. 11. 2023git rebase: what can go wrong? – jvns.ca 1. 11. 2023Confusing git terminology – jvns.ca 20. 10. 2023Some miscellaneous git facts – jvns.ca 6. 10. 2023New talk: Making Hard Things Easy – jvns.ca 14. 9. 2023In a git repository, where do your files live? – jvns.ca 11. 8. 2023Notes on using a single-person Mastodon server – jvns.ca 8. 8. 2023What helps people get comfortable on the command line? – jvns.ca 7. 8. 2023Some tactics for writing in public – jvns.ca 4. 8. 2023Behind "Hello World" on Linux – jvns.ca 28. 7. 2023Why is DNS still hard to learn? – jvns.ca 10. 7. 2023Lima: a nice way to run Linux VMs on Mac – jvns.ca 8. 7. 2023Open sourcing the nginx playground – jvns.ca 23. 6. 2023New zine: How Integers and Floats Work – jvns.ca 5. 6. 2023Some blogging myths – jvns.ca 25. 5. 2023New playground: memory spy – jvns.ca 12. 5. 2023Introducing "Implement DNS in a Weekend" – jvns.ca 8. 5. 2023New talk: Learning DNS in 10 years – jvns.ca 19. 4. 2023New playground: integer.exposed – jvns.ca 17. 4. 2023A list of programming playgrounds – jvns.ca 31. 3. 2023Building a custom site for zine feedback – jvns.ca 7. 3. 2023Some possible reasons for 8-bit bytes – jvns.ca 3. 3. 2023How do Nix builds work? – jvns.ca 28. 2. 2023Some notes on using nix – jvns.ca 16. 2. 2023Writing Javascript without a build system – jvns.ca 11. 2. 2023Print copies of The Pocket Guide to Debugging have arrived – jvns.ca 8. 2. 2023Why does 0.1 + 0.2 = 0.30000000000000004? – jvns.ca 18. 1. 2023Examples of problems with integers – jvns.ca 13. 1. 2023Examples of floating point problems – jvns.ca 10. 1. 2023Some business graphs for 2022 – jvns.ca 21. 12. 2022New zine: The Pocket Guide to Debugging – jvns.ca 8. 12. 2022A debugging manifesto – jvns.ca 7. 12. 2022Tips for analyzing logs – jvns.ca 2. 12. 2022A couple of Rust error messages – jvns.ca 6. 11. 2022Making a DNS query in Ruby from scratch – jvns.ca 12. 9. 2022Why do domain names sometimes end with a dot? – jvns.ca 6. 9. 2022How to send raw network packets in Python with tun/tap – jvns.ca 30. 8. 2022Some ways to get better at debugging – jvns.ca 28. 7. 2022A toy remote login server – jvns.ca 20. 7. 2022What happens when you press a key in your terminal? – jvns.ca 9. 7. 2022Monitoring tiny web services – jvns.ca 28. 6. 2022Notes on running containers with bubblewrap – jvns.ca 12. 5. 2022sqlite-utils: a nice way to import data into SQLite for analysis – jvns.ca 10. 5. 2022Pages that didn't make it into "How DNS Works" – jvns.ca 26. 4. 2022New zine: How DNS Works! – jvns.ca 12. 4. 2022A list of new(ish) command line tools – jvns.ca 23. 3. 2022Implementing a toy version of TLS 1.3 – jvns.ca 13. 3. 2022Celebrate tiny learning milestones – jvns.ca 10. 3. 2022How to use undocumented web APIs – jvns.ca 8. 3. 2022Some tiny personal programs I've written – jvns.ca 23. 2. 2022Some things about getaddrinfo that surprised me – jvns.ca 20. 2. 2022Programming things that have gotten easier – jvns.ca 14. 2. 2022The multiple meanings of "nameserver" and "DNS resolver" – jvns.ca 1. 2. 2022A toy DNS resolver – jvns.ca 29. 1. 2022Reasons for servers to support IPv6 – jvns.ca 24. 1. 2022Hosting my static sites with nginx – jvns.ca 15. 1. 2022Some ways DNS can break – jvns.ca 11. 1. 2022How to find a domain's authoritative nameservers – jvns.ca 5. 1. 2022Why might you run your own DNS server? – jvns.ca 31. 12. 20212021: Year in review – jvns.ca 15. 12. 2021New tool: Mess with DNS! – jvns.ca 6. 12. 2021DNS doesn't "propagate" – jvns.ca 4. 12. 2021How to use dig – jvns.ca 17. 11. 2021Debugging a weird 'file not found' error – jvns.ca 15. 11. 2021Some notes on using esbuild – jvns.ca 4. 11. 2021How do you tell if a problem is caused by DNS? – jvns.ca 21. 10. 2021How to get useful answers to your questions – jvns.ca 5. 10. 2021Tools to explore BGP – jvns.ca 2. 10. 2021All my zines are now available in print! – jvns.ca 24. 9. 2021New tool: an nginx playground – jvns.ca 20. 9. 2021Teaching by filling in knowledge gaps – jvns.ca 16. 9. 2021Debugging by starting a REPL at a breakpoint is fun – jvns.ca 10. 9. 2021Quadratic algorithms are slow (and hashmaps are fast) – jvns.ca 19. 8. 2021Patterns in confusing explanations – jvns.ca 8. 7. 2021Write good examples by starting with real code – jvns.ca 8. 6. 2021Reasons why bugs might feel "impossible" – jvns.ca 2. 6. 2021You can now buy print version of my zines! – jvns.ca 24. 5. 2021Blog about what you've struggled with – jvns.ca 17. 5. 2021How to look at the stack with gdb – jvns.ca 11. 5. 2021The OSI model doesn't map well to TCP/IP – jvns.ca 2. 5. 2021I put all of my comics online! – jvns.ca 16. 4. 2021Notes on building debugging puzzles – jvns.ca 3. 4. 2021What problems do people solve with strace? – jvns.ca 31. 3. 2021A tool to spy on your DNS queries: dnspeep – jvns.ca 24. 3. 2021Get better at programming by learning how things work – jvns.ca 2. 3. 2021Things your manager might not know – jvns.ca 24. 2. 2021A little tool to make DNS queries – jvns.ca 23. 1. 2021Firecracker: start a VM in less than a second – jvns.ca 12. 1. 2021Server-sent events: a simple way to stream events from a server – jvns.ca 8. 1. 2021Daily blog posts about my time at RC – jvns.ca 4. 1. 2021Docker Compose: a nice way to set up a dev environment – jvns.ca 31. 12. 20202020: Year in review – jvns.ca 5. 12. 2020How I write useful programming comics – jvns.ca 30. 11. 2020An attempt at implementing char-rnn with PyTorch – jvns.ca