Projects
follow
/projects/
Twitter
follow
https://twitter.com/b0rk
Github
follow
https://github.com/jvns
Favorites
follow
/categories/favorite/
Zines
follow
https://wizardzines.com
weekly digest of these blog posts
follow
/newsletter
Wizard Zines
follow
https://wizardzines.com
How to get useful answers to your questions
follow
/blog/2021/10/21/how-to-get-useful-answers-to-your-questions/
Tools to explore BGP
follow
/blog/2021/10/05/tools-to-look-at-bgp-routes/
All my zines are now available in print!
follow
/blog/2021/10/02/all-my-zines-are-now-available-in-print/
New tool: an nginx playground
follow
/blog/2021/09/24/new-tool--an-nginx-playground/
Teaching by filling in knowledge gaps
follow
/blog/2021/09/20/teaching-by-filling-in-knowledge-gaps/
Debugging by starting a REPL at a breakpoint is fun
follow
/blog/2021/09/16/debugging-in-a-repl-is-fun/
Quadratic algorithms are slow (and hashmaps are fast)
follow
/blog/2021/09/10/hashmaps-make-things-fast/
Patterns in confusing explanations
follow
/blog/confusing-explanations/
Write good examples by starting with real code
follow
/blog/2021/07/08/writing-great-examples/
Reasons why bugs might feel "impossible"
follow
/blog/2021/06/08/reasons-why-bugs-might-feel-impossible/
Cool computer tools / features / ideas
follow
#cool-computer-tools---features---ideas
Firecracker: start a VM in less than a second
follow
/blog/2021/01/23/firecracker--start-a-vm-in-less-than-a-second/
Server-sent events: a simple way to stream events from a server
follow
/blog/2021/01/12/day-36--server-sent-events-are-cool--and-a-fun-bug/
Docker Compose: a nice way to set up a dev environment
follow
/blog/2021/01/04/docker-compose-is-nice/
ninja: a simple way to do builds
follow
/blog/2020/10/26/ninja--a-simple-way-to-do-builds/
Implementing "focus and reply" for Fastmail with JMAP
follow
/blog/2020/08/18/implementing--focus-and-reply--for-fastmail/
scanimage: scan from the command line!
follow
/blog/2020/07/11/scanimage--scan-from-the-command-line/
entr: rerun your build when files change
follow
/blog/2020/06/28/entr/
A little bit of plain Javascript can do a lot
follow
/blog/2020/06/19/a-little-bit-of-plain-javascript-can-do-a-lot/
PaperWM: tiled window management for GNOME
follow
/blog/2020/01/05/paperwm/
SQLite is really easy to compile
follow
/blog/2019/10/28/sqlite-is-really-easy-to-compile/
Tailwind: style your site without writing any CSS!
follow
/blog/2018/11/01/tailwind--write-css-without-the-css/
An awesome new Python profiler: py-spy!
follow
/blog/2018/09/08/an-awesome-new-python-profiler--py-spy-/
Batch editing files with ed
follow
/blog/2018/05/11/batch-editing-files-with-ed/
Glitch: write fun small web projects instantly
follow
/blog/2017/11/13/glitch--write-small-web-projects-easily/
Binder: an awesome tool for hosting Jupyter notebooks
follow
/blog/2017/11/12/binder--an-awesome-tool-for-hosting-jupyter-notebooks/
Cool vim feature: sessions!
follow
/blog/2017/09/10/vim-sessions/
Data structure: the treap!
follow
/blog/2017/09/09/data-structure--the-treap-/
a tiny whack-a-mole game
follow
/blog/2017/06/26/vue-js-fun/
Log-structured storage
follow
/blog/2017/06/11/log-structured-storage/
Using the Strict-Transport-Security header
follow
/blog/2017/04/30/using-strict-transport-security/
The fish shell is awesome
follow
/blog/2017/04/23/the-fish-shell-is-awesome/
homu + highfive: awesome bots that make open source projects easier
follow
/blog/2016/05/13/homu-plus-highfive-making-less-work-for-open-source-maintainers/
you can take the derivative of a regular expression?!
follow
/blog/2016/04/24/how-regular-expressions-go-fast/
tcpdump is amazing
follow
/blog/2016/03/16/tcpdump-is-amazing/
How to measure your CPU time: clock_gettime!
follow
/blog/2016/02/20/measuring-cpu-time-with-clock-gettime/
Fast integer sets with Roaring Bitmaps (and, making friends with your modern CPU)
follow
/blog/2016/01/23/fast-integer-sets-with-roaring-bitmaps/
Sendfile (a system call for web developers to know about!)
follow
/blog/2016/01/23/sendfile-a-new-to-me-system-call/
PAPERS ARE AMAZING: Profiling threaded programs with Coz
follow
/blog/2015/10/31/papers-are-amazing-profiling-threaded-programs-with-coz/
LD_PRELOAD is super fun. And easy!
follow
/blog/2014/11/27/ld-preload-is-super-fun-and-easy/
Things i built
follow
#things-i-built
Notes on building debugging puzzles
follow
/blog/2021/04/16/notes-on-debugging-puzzles/
A tool to spy on your DNS queries: dnspeep
follow
/blog/2021/03/31/dnspeep-tool/
A little tool to make DNS queries
follow
/blog/2021/02/24/a-little-tool-to-make-dns-queries/
Computer networking
follow
#computer-networking
What happens when you update your DNS?
follow
/blog/how-updating-dns-works/
How to put an HTML page on the internet
follow
/blog/2019/09/06/how-to-put-an-html-page-on-the-internet/
Networking tool comics!
follow
/blog/2019/02/10/a-few-networking-tool-comics/
An example of how C++ destructors are useful in Envoy
follow
/blog/2018/11/18/c---destructors---really-useful/
Some Envoy basics
follow
/blog/2018/10/27/envoy-basics/
Editing my blog"s HTTP headers with Cloudflare workers
follow
/blog/2018/09/03/editing-my-blog-s-http-headers-with-cloudflare-workers/
IP addresses & routing
follow
/blog/2018/07/24/ip-addresses-routing/
netdev day 2: moving away from "as fast as possible" in networking code
follow
/blog/2018/07/12/netdev-day-2--moving-away-from--as-fast-as-possible/
netdev day 1: IPsec!
follow
/blog/2018/07/11/netdev-day-1--ipsec/
How I use Wireshark
follow
/blog/2018/06/19/what-i-use-wireshark-for/
A few things I"ve learned about computer networking
follow
/blog/2018/03/05/things-ive-learned-networking/
Finding out if/why a server is dropping packets
follow
/blog/2017/09/05/finding-out-where-packets-are-being-dropped/
What"s a network interface?
follow
/blog/2017/09/03/network-interfaces/
Iptables basics
follow
/blog/2017/06/07/iptables-basics/
netdev conference, day 3
follow
/blog/2017/04/08/netdev-conference-day-3/
netdev conference, day 2
follow
/blog/2017/04/07/netdev-conference-day-2/
How to filter packets super fast: XDP & eBPF!
follow
/blog/2017/04/07/xdp-bpf-tutorial/
netdev conference, day 1
follow
/blog/2017/04/06/netdev-2-1/
Slow down your internet with tc
follow
/blog/2017/04/01/slow-down-your-internet-with-tc/
How big can a packet get?
follow
/blog/2017/02/07/mtu/
Dissecting an SSL certificate
follow
/blog/2017/01/31/whats-tls/
What"s interesting about UDP?
follow
/blog/2016/12/21/what-s-interesting-about-udp/
Why do UDP packets get dropped?
follow
/blog/2016/08/24/find-out-where-youre-dropping-packets/
How do HTTP requests get sent to the right place?
follow
/blog/2016/07/14/whats-sni/
Why do we use the Linux kernel"s TCP stack?
follow
/blog/2016/06/30/why-do-we-use-the-linux-kernels-tcp-stack/
What are SSL ciphers & session keys?
follow
/blog/2016/05/06/what-are-ssl-ciphers-and-session-keys/
CDNs aren"t just for caching
follow
/blog/2016/04/29/cdns-arent-just-for-caching/
How a computer thing works
follow
#how-a-computer-thing-works
How to look at the stack with gdb
follow
/blog/2021/05/17/how-to-look-at-the-stack-in-gdb/
The OSI model doesn"t map well to TCP/IP
follow
/blog/2021/05/11/what-s-the-osi-model-/
Why strace doesn"t work in Docker
follow
/blog/2020/04/29/why-strace-doesnt-work-in-docker/
Getting started with shaders: signed distance functions!
follow
/blog/2020/03/15/writing-shaders-with-signed-distance-functions/
"server" is hard to define
follow
/blog/2019/12/26/whats-a-server/
How tracking pixels work
follow
/blog/how-tracking-pixels-work/
How containers work: overlayfs
follow
/blog/2019/11/18/how-containers-work--overlayfs/
SQL queries don"t start with SELECT
follow
/blog/2019/10/03/sql-queries-don-t-start-with-select/
How does gdb call functions?
follow
/blog/2018/01/04/how-does-gdb-call-functions/
How do groups work on Linux?
follow
/blog/2017/11/20/groups/
Async IO on Linux: select, poll, and epoll
follow
/blog/2017/06/03/async-io-on-linux--select--poll--and-epoll/
Weird unix thing: "cd //"
follow
/blog/2017/02/08/weird-unix-things-cd/
What happens when you start a process on Linux?
follow
/blog/2016/10/04/exec-will-eat-your-brain/
How does gdb work?
follow
/blog/2016/08/10/how-does-gdb-work/
Should you be scared of Unix signals?
follow
/blog/2016/06/13/should-you-be-scared-of-signals/
I conquered thread pools! For today, at least.
follow
/blog/2016/03/29/thread-pools-part-ii-i-love-blocking/
Thread pools! How do I use them?
follow
/blog/2016/03/27/thread-pools-how-do-i-use-them/
What is "the stack"?
follow
/blog/2016/02/27/a-few-notes-on-the-stack/
Why Ruby’s Timeout is dangerous (and Thread.raise is terrifying)
follow
/blog/2015/11/27/why-rubys-timeout-is-dangerous-and-thread-dot-raise-is-terrifying/
Why you should understand (a little) about TCP
follow
/blog/2015/11/21/why-you-should-understand-a-little-about-tcp/
How the locate command works (and let"s write a faster version in one minute!)
follow
/blog/2015/03/05/how-the-locate-command-works-and-lets-rewrite-it-in-one-minute/
How gzip uses Huffman coding
follow
/blog/2015/02/22/how-gzip-uses-huffman-coding/
Diving into concurrency: trying out mutexes and atomics
follow
/blog/2014/12/14/fun-with-threads/
How does SQLite work? Part 2: btrees! (or: disk seeks are slow don"t do them!)
follow
/blog/2014/10/02/how-does-sqlite-work-part-2-btrees/
How does SQLite work? Part 1: pages!
follow
/blog/2014/09/27/how-does-sqlite-work-part-1-pages/
How is a binary executable organized? Let"s explore it!
follow
/blog/2014/09/06/how-to-read-an-executable/
What happens if you write a TCP stack in Python?
follow
/blog/2014/08/12/what-happens-if-you-write-a-tcp-stack-in-python/
Diving into HDFS
follow
/blog/2014/05/15/diving-into-hdfs/
Three steps to learning GDB
follow
/blog/2014/02/10/three-steps-to-learning-gdb/
Kubernetes / containers
follow
#kubernetes---containers
Operating a Kubernetes network
follow
/blog/2017/10/10/operating-a-kubernetes-network/
Reasons Kubernetes is cool
follow
/blog/2017/10/05/reasons-kubernetes-is-cool/
How Kubernetes certificate authorities work
follow
/blog/2017/08/05/how-kubernetes-certificates-work/
Cherry picking commits & shell scripting in golang
follow
/blog/2017/07/30/a-couple-useful-ideas-from-google/
How does the Kubernetes scheduler work?
follow
/blog/2017/07/27/how-does-the-kubernetes-scheduler-work/
A few things I"ve learned about Kubernetes
follow
/blog/2017/06/04/learning-about-kubernetes/
Swapping, memory limits, and cgroups
follow
/blog/2017/02/17/mystery-swap/
A container networking overview
follow
/blog/2016/12/22/container-networking/
What happens when you run a rkt container?
follow
/blog/2016/11/03/what-happens-when-you-run-a-rkt-container/
Running containers without Docker
follow
/blog/2016/10/26/running-container-without-docker/
What even is a container: namespaces and cgroups
follow
/blog/2016/10/10/what-even-is-a-container/
A list of Linux container software
follow
/blog/2016/10/02/a-list-of-container-software/
"I just want to run a container!"
follow
/blog/2016/10/02/i-just-want-to-run-a-container/
Some questions about Docker and rkt
follow
/blog/2016/09/15/whats-up-with-containers-docker-and-rkt/
Docker is amazing
follow
/blog/2015/11/09/docker-is-amazing/
Zines / comics
follow
#zines---comics
You can now buy print version of my zines!
follow
/blog/2021/06/02/you-can-now-buy-print-version-of-my-zines-/
I put all of my comics online!
follow
/blog/2021/05/02/publishing-comics/
New zine: Hell Yes! CSS!
follow
/blog/2020/11/22/new-zine--hell-yes--css-/
Wizard Zines" first print run: Help! I have a Manager!
follow
/blog/2020/08/22/print-run-manager-zine/
Some more CSS comics
follow
/blog/2020/08/10/some-more-css-comics/
Some CSS comics
follow
/blog/2020/07/25/some-comics-about-css/
New zine: How Containers Work!
follow
/blog/2020/04/27/new-zine-how-containers-work/
New zine: Become a SELECT Star!
follow
/blog/2020/02/03/new-zine--become-a-select-star/
Your Linux Toolbox: a box set of my free zines
follow
/blog/2019/10/21/print-collection-of-my-first-7-zines/
New zine: HTTP: Learn your browser"s language!
follow
/blog/2019/09/12/new-zine-on-http/
New zine: Bite Size Networking!
follow
/blog/2019/03/15/new-zine--bite-size-networking-/
New zine: Oh shit, git!
follow
/blog/2018/10/27/new-zine--oh-shit--git-/
New zine: Help! I have a manager!
follow
/blog/2018/09/22/new-zine--help--i-have-a-manager/
New zine: Bite Size Command Line!
follow
/blog/2018/08/05/new-zine--bite-size-command-line/
New zine: Profiling & tracing with perf!!
follow
/blog/2018/04/16/new-perf-zine/
New zine: So you want to be a wizard
follow
/blog/2017/12/01/new-zine--so-you-want-to-be-a-wizard/
Linux comics: a small zine
follow
/blog/2017/11/25/linux-comics--zine-edition/
Linux tracing zine
follow
/blog/2017/07/09/linux-tracing-zine/
"Let"s learn tcpdump" zine: now available for everyone
follow
/blog/2017/05/14/learn-tcpdump-zine/
New zine: let"s learn tcpdump!
follow
/blog/2017/04/29/new-zine--let-s-learn-tcpdump/
New zine: "Networking! ACK!"
follow
/blog/networking-zine-launch/
A tiny zine about machine learning
follow
/blog/2017/01/20/a-tiny-zine-about-machine-learning/
More drawings about computers
follow
/blog/2016/11/27/more-linux-drawings/
A few drawings about Linux
follow
/blog/2016/11/10/a-few-drawings-about-linux/
New zine: Linux debugging tools you"ll love
follow
/blog/2016/09/07/new-zine-linux-debugging-tools-youll-love/
A few sketches
follow
/blog/2016/07/23/a-few-sketches/
A zine about strace
follow
/blog/2015/04/14/strace-zine/
Exercises
follow
#exercises
Questions to help people decide what to learn
follow
/blog/2020/06/14/questions-to-help-you-learn/
Challenge: find Twitter memes with suffix arrays
follow
/blog/twitter-memes-challenge/
Solutions to the tiny window manager challenge
follow
/blog/2019/12/03/solutions-to-the-tiny-window-manager-challenge/
Challenge: Write a bouncy window manager
follow
/blog/2019/11/25/challenge--make-a-bouncy-window-manager/
What makes a programming exercise good?
follow
/blog/2019/11/20/what-makes-a-programming-exercise-good/
Notes on building SQL exercises
follow
/blog/2019/09/30/notes-on-building-sql-exercises/
git exercises: navigate a repository
follow
/blog/2019/08/30/git-exercises--navigate-a-repository/
curl exercises
follow
/blog/2019/08/27/curl-exercises/
On writing comics / zines
follow
#on-writing-comics---zines
How I write useful programming comics
follow
/blog/2020/12/05/how-i-write-useful-programming-comics/
A new way I"m getting feedback on my zines: beta readers!
follow
/blog/2020/11/07/a-new-way-i-m-getting-feedback-on-my-zines--beta-readers-/
Some possible future zines
follow
/blog/2020/08/12/some-possible-future-zines/
An attempt to make a font look more handwritten
follow
/blog/2020/08/08/handwritten-font/
Some notes on vector drawing apps
follow
/blog/2019/11/18/some-notes-on-vector-drawing-apps/
Some research on shipping print zines
follow
/blog/2019/10/28/some-research-on-shipping-print-zines/
Zine revenue for 2019
follow
/blog/2019/10/01/zine-revenue-2019/
Taking a year to explain computer things
follow
/blog/2019/09/13/a-year-explaining-computer-things/
How to write zines with simple tools
follow
/blog/2019/09/01/ways-to-write-zines-without-fancy-tools/
How do you document a tech project with comics?
follow
/blog/2018/12/09/how-do-you-document-a-tech-project-with-comics/
When does teaching with comics work well?
follow
/blog/2018/10/28/when-does-teaching-with-comics-work-well/
Why sell zines?
follow
/blog/2018/09/23/why-sell-zines/
How to teach technical concepts with cartoons
follow
/teach-tech-with-cartoons/
Handwritten books
follow
/blog/2017/05/14/handwritten-books/
An idea for a programming book
follow
/blog/2017/01/17/an-idea-for-a-programming-book/
Why cute drawings?
follow
/blog/2016/11/14/why-cute-drawings/
How (and why) I made a zine
follow
/blog/2016/08/29/how-i-made-a-zine/
Conferences
follow
#conferences
!!Con 2019: submit a talk!
follow
/blog/2019/02/16/--con-2019--submit-a-talk-/
Systems We Love 2016
follow
/blog/2016/12/23/systems-we-love/
PolyConf 2016
follow
/blog/2016/07/03/polyconf-2016/
Women in Machine Learning 2015 (fun!!!)
follow
/blog/2015/12/07/women-in-machine-learning-2015-fun/
AdaCamp Montreal 2015
follow
/blog/2015/04/15/adacamp-montreal-2015/
Data Day Texas 2015
follow
/blog/2015/01/12/data-day-texas-2015/
PyData NYC (I gave a machine learning talk! yay!)
follow
/blog/2014/11/27/pydata-nyc-i-gave-a-machine-learning-talk-yay/
Strange Loop 2014
follow
/blog/2014/09/20/strange-loop-2014/
!!Con talks are up
follow
/blog/2014/06/22/con-talks-are-up/
♥ PyCon
follow
/blog/2014/04/13/pycon/
CUSEC = fun
follow
/blog/2014/01/22/cusec-equals-fun/
PyData Boston 2013
follow
/blog/2013/09/12/pydata-boston-2013/
Open Data Exchange 2013
follow
/blog/2013/04/07/open-data-exchange-2013/
Montreal All-Girl Hack Night #2: now with cookies
follow
/2013/01/27/all_girl_hack_night_2/
Montreal All-Girl Hack Night #1: AMAZING
follow
/2012/12/16/all_girl_hack_night/
Organizing conferences
follow
#organizing-conferences
Ideas for making better conference talks & conferences
follow
/blog/2016/06/06/make-better-conference-talks/
You can choose who submits talks to your conference
follow
/blog/2015/03/06/you-can-choose-who-submits-talks-to-your-conference/
Should my conference do anonymous review?
follow
/blog/2014/06/06/should-my-conference-do-anonymous-review/
Anonymous talk review is amazing.
follow
/blog/2014/05/28/anonymous-talk-submission-equals-amazing/
Businesses / marketing
follow
#businesses---marketing
A few things I"ve learned about email marketing
follow
/blog/2020/10/28/a-few-things-i-ve-learned-about-email-marketing/
saturday comics: a weekly mailing list of programming comics
follow
/blog/2020/07/05/saturday-comics/
A few early marketing thoughts
follow
/blog/2019/01/29/marketing-thoughts/
Who pays to educate developers?
follow
/blog/2018/09/01/who-pays-to-educate-developers-/
I started a corporation!
follow
/blog/2018/08/14/i-started-a-company-/
Statistics / machine learning / data analysis
follow
#statistics---machine-learning---data-analysis
An attempt at implementing char-rnn with PyTorch
follow
/blog/2020/11/30/implement-char-rnn-in-pytorch/
Some nonparametric statistics math
follow
/blog/2018/12/29/some-initial-nonparametric-statistics-notes/
Some good "Statistics for programmers" resources
follow
/blog/2017/04/17/statistics-for-programmers/
How do these "neural network style transfer" tools work?
follow
/blog/2017/02/12/neural-style/
A few reasons to be skeptical of machine learning
follow
/blog/2016/05/19/a-few-reasons-to-be-skeptical-of-machine-learning-results/
Looking inside machine learning black boxes
follow
/blog/2016/04/10/why-i-dont-like-black-boxes/
Winning the bias-variance tradeoff
follow
/blog/2016/01/02/winning-the-bias-variance-tradeoff/
How to trick a neural network into thinking a panda is a vulture
follow
/blog/2015/12/24/how-to-trick-a-neural-network-into-thinking-a-panda-is-a-vulture/
Is machine learning safe to use?
follow
/blog/2015/09/06/is-machine-learning-safe-to-use/
Some easy statistics: Bootstrap confidence intervals
follow
/blog/2015/07/04/bootstrap-confidence-intervals/
A/A testing
follow
/blog/2015/02/06/a-a-testing/
Fun with machine learning: logistic regression!
follow
/blog/2014/11/17/fun-with-machine-learning-logistic-regression/
Fun with machine learning: does your model actually work?
follow
/blog/2014/11/16/fun-with-machine-learning-making-sure-your-model-actually-works/
Fun with stats: How big of a sample size do I need?
follow
/blog/2014/07/11/fun-with-stats-how-big-of-a-sample-size-do-i-need/
Machine learning isn"t Kaggle competitions
follow
/blog/2014/06/19/machine-learning-isnt-kaggle-competitions/
A pandas cookbook
follow
/blog/2013/12/22/cooking-with-pandas/
Graphing bike path data with IPython Notebook and pandas
follow
/blog/2013/02/27/graphing-bike-path-data-with-ipython-notebook-and-pandas/
Year in review
follow
#year-in-review
2020: Year in review
follow
/blog/2020/12/31/2020--year-in-review/
2019: Year in review
follow
/blog/2019-year-in-review/
2018: Year in review
follow
/blog/2018/12/23/2018--year-in-review/
2017: Year in review
follow
/blog/2017/12/31/2017--year-in-review/
2016: Year in review
follow
/blog/2016/12/21/2016--year-in-review/
2015: Year in review
follow
/blog/2015/12/26/2015-year-in-review/
Infrastructure / operations engineering
follow
#infrastructure---operations-engineering
New talk: High Reliability Infrastructure Migrations
follow
/blog/2018/12/15/new-talk--high-reliability-infrastructure-migrations/
Some notes on running new software in production
follow
/blog/2018/11/11/understand-the-software-you-use-in-production/
What can developers learn from being on call?
follow
/blog/2017/06/18/operate-your-software/
Bash scripting quirks & safety tips
follow
/blog/2017/03/26/bash-quirks/
Ideas about how to use AWS
follow
/blog/2016/11/16/ideas-about-how-to-use-aws/
Service discovery at Stripe
follow
/blog/2016/10/31/service-discovery-at-stripe/
Consistency vs availability (wat?)
follow
/blog/2016/10/21/consistency-vs-availability/
What"s devops?
follow
/blog/2016/10/16/whats-devops/
Operations for software developers for beginners
follow
/blog/2016/10/15/operations-for-software-developers-for-beginners/
How do you do capacity planning?
follow
/blog/2016/03/20/how-do-you-do-capacity-planning/
Why I love log files
follow
/blog/2016/02/12/why-i-love-log-files/
TIL: clock skew exists
follow
/blog/2016/02/09/til-clock-skew-exists/
Fear makes you a worse programmer
follow
/blog/2014/12/21/fear-makes-you-a-worse-programmer/
Career / work
follow
#career---work
Get better at programming by learning how things work
follow
/blog/learn-how-things-work/
Things your manager might not know
follow
/blog/things-your-manager-might-not-know/
When your coworker does great work, tell their manager
follow
/blog/2020/07/14/when-your-coworker-does-great-work-tell-their-manager/
Tell candidates what to expect from your job interviews
follow
/blog/2020/06/30/tell-candidates-what-to-expect-from-your-job-interviews/
Questions you can ask about compensation
follow
/blog/compensation-questions/
Get your work recognized: write a brag document
follow
/blog/brag-documents/
What"s a senior engineer"s job?
follow
/blog/senior-engineer/
Some possible career goals
follow
/blog/2018/09/30/some-possible-career-goals/
Open source sabbatical = awesome
follow
/blog/2018/03/28/open-source-sabbatical---awesome/
Writing performance reviews with positive constructive feedback
follow
/blog/2018/02/10/positive-constructive-feedback/
Taking a sabbatical to work on Ruby profiling tools
follow
/blog/2017/12/02/taking-a-sabbatical-to-work-on-ruby-profiling-tools/
Telling people what you"re working on
follow
/blog/2017/09/03/telling-people-what-you-re-working-on/
Writing down my career
follow
/blog/2017/03/17/career-narrative/
Hiring & opportunity
follow
/blog/2017/02/16/hiring---opportunity/
Choosing the "best software"
follow
/blog/2017/01/24/choosing-the-best-thing/
Getting things done
follow
/blog/2016/09/19/getting-things-done/
How I got a CS degree without learning what a system call is
follow
/blog/2016/09/12/how-i-got-a-cs-degree-without-learning-what-a-system-call-is/
Release it, then build it
follow
/blog/2016/08/16/release-it-then-build-it/
How do you decide what to work on?
follow
/blog/2016/08/16/how-do-you-work-on-something-important/
Three ways to solve hard programming problems
follow
/blog/2016/05/29/three-ways-to-solve-hard-programming-problems/
Talking about stock options = awesome
follow
/blog/2016/01/06/talking-about-stock-options/
Things you should know about stock options before negotiating an offer
follow
/blog/2015/12/30/do-the-math-on-your-stock-options/
1:1 topic ideas
follow
/blog/2015/03/06/1-1-topic-ideas/
How I learned to program in 10 years
follow
/blog/2015/02/17/how-i-learned-to-program-in-10-years/
Stopping to think
follow
/blog/2014/04/27/stopping-to-think/
Becoming a better developer (it"s not just writing more programs)
follow
/blog/2014/04/08/growing/
Sounding confident in interviews
follow
/blog/2014/02/03/sounding-confident-in-interviews/
What my technical interviews have looked like
follow
/blog/2014/01/16/what-my-technical-interviews-have-looked-like/
Questions I"m asking in interviews
follow
/blog/2013/12/30/questions-im-asking-in-interviews/
Working with others / communication
follow
#working-with-others---communication
Making small culture changes
follow
/blog/2017/04/16/making-small-culture-changes/
How do you make an awesome team?
follow
/blog/2017/01/13/how-do-you-make-an-awesome-team/
Learning to like design documents
follow
/blog/2016/06/03/learning-to-like-design-documents/
Senior engineering & fantasy heroes
follow
/blog/2015/03/28/senior-engineering-and-fantasy-heroes/
On reading the source code, not the docs
follow
/blog/2014/12/29/on-reading-the-source-code-not-the-docs/
Pair programming is amazing! Except... when it"s not.
follow
/blog/2014/08/05/pair-programming-is-amazing-except-when-its-not/
Pair programming
follow
/blog/2014/03/01/pair-programming/
Remote work
follow
#remote-work
Working remotely, 4 years in
follow
/blog/2018/02/18/working-remotely--4-years-in/
Surviving meetings while remote
follow
/blog/2015/12/31/surviving-meetings-while-remote/
Working remote, 8 months in (seeing humans is important!)
follow
/blog/2014/10/22/working-remote-8-months-in/
Working remote, 3 months in
follow
/blog/2014/06/06/working-remote/
Reports from remote-land: remote pairing works great!
follow
/blog/2014/03/29/reports-from-remote-land-remote-pairing-works-great/
Talks transcripts / podcasts
follow
#talks-transcripts---podcasts
Build impossible programs
follow
/blog/2018/09/18/build-impossible-programs/
A few recent podcasts
follow
/blog/2018/08/11/a-few-recent-podcasts/
Talk: Building a Ruby profiler
follow
/blog/2018/04/16/rbspy-talk/
How does the internet work? podcast
follow
/blog/2018/03/05/codenewbie-networking-podcast/
A swiss army knife of debugging tools: talk & transcript
follow
/blog/2016/09/17/strange-loop-talk/
Notes from my PyData Berlin keynote
follow
/blog/2016/05/21/a-few-notes-from-my-pydata-berlin-keynote/
A few notes on my CUSEC talk
follow
/blog/2016/01/14/a-few-notes-on-my-cusec-talk/
Ruby Rogues podcast: systems programming tricks!
follow
/blog/2014/07/17/ruby-rogues/
On blogging / speaking
follow
#on-blogging---speaking
Blog about what you"ve struggled with
follow
/blog/2021/05/24/blog-about-what-you-ve-struggled-with/
Metaphors in man pages
follow
/blog/2020/05/08/metaphors-in-man-pages/
Organizing this blog into categories
follow
/blog/2019/02/17/organizing-this-blog-into-categories/
Talks I"d love to see at RustConf
follow
/blog/2018/03/24/rustconf-talks/
Measuring a blog"s success: focus on conversations, not page views
follow
/blog/2018/02/20/measuring-blog-success/
How I set up an automatic weekly blog digest
follow
/blog/2017/12/28/making-a-weekly-newsletter/
Blogging principles I use
follow
/blog/2017/03/20/blogging-principles/
Switching to Hugo
follow
/blog/2016/10/09/switching-to-hugo/
"advice" for aspiring tech bloggers
follow
/blog/2016/05/22/how-do-you-write-blog-posts/
Reproducing awesomeness
follow
/blog/2014/12/19/reproducing-awesomeness/
How to set up a blog in 5 minutes
follow
/blog/2014/10/08/how-to-set-up-a-blog-in-5-minutes/
Open sourced talks!
follow
/blog/2014/07/25/fork-my-talks/
You should give talks. They will be awesome. Here"s why!
follow
/blog/2014/01/12/public-speaking/
Trying out Octopress
follow
/blog/2013/02/24/trying-out-octopress/
On learning
follow
#on-learning
How to teach yourself hard things
follow
/blog/2018/09/01/learning-skills-you-can-practice/
How to answer questions in a helpful way
follow
/blog/answer-questions-well/
Learning at work
follow
/blog/2017/08/06/learning-at-work/
So you want to be a wizard
follow
/blog/so-you-want-to-be-a-wizard/
Rules of programming experiments
follow
/blog/2017/01/04/rules-of-programming-experiments/
How to ask good questions
follow
/blog/good-questions/
Asking good questions is hard (but worth it)
follow
/blog/2016/08/31/asking-questions/
How does knowledge get locked up in people"s heads?
follow
/blog/2016/04/30/building-expertise-at-work/
Asking questions is a superpower
follow
/blog/2014/06/13/asking-questions-is-a-superpower/
"Ask if you have questions" isn"t enough
follow
/blog/2014/04/04/ask-if-you-have-questions-isnt-enough/
Rust in 2018: it"s way easier to use!
follow
/blog/2018/01/13/rust-in-2018--way-easier-to-use/
My first Rust macro
follow
/blog/2017/12/24/my-first-rust-macro/
Debugging a segfault in my Rust program
follow
/blog/2017/12/23/segfault-debugging/
Bindgen: awesome Rust tool for generating C bindings
follow
/blog/2017/12/21/bindgen-is-awesome/
What"s a reference in Rust?
follow
/blog/2017/11/27/rust-ref/
Learning systems programming with Rust
follow
/blog/2016/09/11/rustconf-keynote/
A second try at using Rust
follow
/blog/2016/05/12/a-second-try-at-using-rust/
Calling C from Rust
follow
/blog/2016/01/18/calling-c-from-rust/
Why I ❤ Rust
follow
/blog/2016/01/10/why-i-rust/
My Rust OS will never be finished (and it"s a success!)
follow
/blog/2014/03/21/my-rust-os-will-never-be-finished/
Writing an OS in Rust in tiny steps (Steps 1-5)
follow
/blog/2014/03/12/the-rust-os-story/
Some things my kernel can"t do
follow
/blog/2014/01/03/what-my-kernel-doesnt-do/
Linux debugging / tracing tools
follow
#linux-debugging---tracing-tools
What problems do people solve with strace?
follow
/blog/2021/04/03/what-problems-do-people-solve-with-strace/
A perf cheat sheet
follow
/blog/2017/12/27/a-perf-cheat-sheet/
Linux tracing systems & how they fit together
follow
/blog/2017/07/05/linux-tracing-systems/
Notes on BPF & eBPF
follow
/blog/2017/06/28/notes-on-bpf---ebpf/
3 short screencasts (/proc, tcpdump, strace)
follow
/blog/2017/06/26/3-screencasts/
ftrace: trace your kernel functions!
follow
/blog/2017/03/19/getting-started-with-ftrace/
Linux debugging tools I love
follow
/blog/2016/07/03/debugging-tools-i-love/
Using ltrace to debug a memory leak
follow
/blog/2016/06/15/using-ltrace-to-debug-a-memory-leak/
A useful new strace feature
follow
/blog/2016/06/07/strace-y/
A workshop on strace & tcpdump
follow
/blog/2016/05/06/a-workshop-on-strace-and-tcpdump/
How does perf work? (in which we read the Linux kernel source)
follow
/blog/2016/03/12/how-does-perf-work-and-some-questions/
perf top: an awesome way to spy on CPU usage
follow
/blog/2016/02/24/perf-top-my-new-best-friend/
A few spy tools for your operating system (other than strace!)
follow
/blog/2015/04/06/a-few-spy-tools-for-your-operating-system-other-than-strace/
Seeing system calls with perf instead of strace
follow
/blog/2015/03/30/seeing-system-calls-with-perf-instead-of-strace/
Spying on Hadoop with strace
follow
/blog/2014/12/10/spying-on-hadoop-with-strace/
I can spy on my CPU cycles with perf!
follow
/blog/2014/05/13/profiling-with-perf/
Debug your programs like they"re closed source!
follow
/blog/2014/04/20/debug-your-programs-like-theyre-closed-source/
Debugging shared library problems with strace
follow
/blog/2014/03/10/debugging-shared-library-problems-with-strace/
More practical uses for strace!
follow
/blog/2014/02/27/more-practical-uses-for-strace/
Using strace to avoid reading Ruby code
follow
/blog/2014/02/26/using-strace-to-avoid-reading-ruby-code/
Spying on ssh with strace
follow
/blog/2014/02/17/spying-on-ssh-with-strace/
Understanding how killall works using strace
follow
/blog/2013/12/22/fun-with-strace/
Debugging
follow
#debugging
Reasons why bugs might feel "impossible"
follow
/blog/2021/06/08/reasons-why-bugs-might-feel-impossible/
When debugging, your attitude matters
follow
/blog/debugging-attitude-matters/
What does debugging a program look like?
follow
/blog/2019/06/23/a-few-debugging-resources/
How I got better at debugging
follow
/blog/2015/11/22/how-i-got-better-at-debugging/
Coding strategies
follow
/blog/2013/12/28/coding-strategies/
Debugging stories
follow
#debugging-stories
Reverse engineering the Notability file format
follow
/blog/2018/03/31/reverse-engineering-notability-format/
Debugging netlink requests
follow
/blog/2017/09/03/debugging-netlink-requests/
A small website mystery
follow
/blog/2017/05/10/a-small-website-bug-story/
Investigating Erlang by reading its system calls
follow
/blog/2016/05/13/erlang-seems-really-complicated/
Surprises in Ruby HTTP libraries
follow
/blog/2016/03/04/whats-up-with-ruby-http-libraries/
Nancy Drew and the Case of the Slow Program
follow
/blog/2015/03/15/nancy-drew-and-the-case-of-the-slow-program/
Fan posts about awesome work by other people
follow
#fan-posts-about-awesome-work-by-other-people
Awesome NLP tutorials by Allison Parrish
follow
/blog/2017/06/17/allison-parrish/
Like zines about computers? You might love Bubblesort Zines
follow
/blog/2017/05/02/like-zines-about-computers--you-might-love-bubblesort-zines/
A magical machine learning art tool
follow
/blog/2017/02/02/a-magical-machine-learning-tool/
"A Critique of the CAP Theorem"
follow
/blog/2016/11/19/a-critique-of-the-cap-theorem/
Some of my favorite blogs
follow
/blog/2016/04/09/some-of-my-favorite-blogs/
A few blogs I really like
follow
/blog/2014/02/13/a-few-blogs-i-really-like/
Julia Serano"s "Excluded"
follow
/blog/2013/09/25/julia-seranos-excluded/
Transit maps: 1941 vs 2011
follow
/blog/2013/03/04/transit-maps-1941-vs-2011/
Inclusion
follow
#inclusion
No feigning surprise
follow
/blog/2017/04/27/no-feigning-surprise/
A litmus test for job descriptions
follow
/blog/2016/10/21/a-litmus-test-for-job-descriptions/
Women-only spaces are a hack
follow
/blog/2016/03/06/women-only-spaces-are-a-hack/
An argument for hiring junior developers
follow
/blog/2015/07/25/an-argument-for-hiring-junior-developers/
Programming doesn"t belong to men (it belongs to me)
follow
/blog/2014/12/28/programming-doesnt-belong-to-men-it-belongs-to-me/
What women in technology really think (150 of them, at least)
follow
/blog/2014/11/11/the-best-thing-ive-ever-read-about-women-in-technology/
When is "guys" gender neutral? I did a survey!
follow
/blog/2013/12/27/guys-guys-guys/
Documentation site for rbspy!
follow
/blog/2018/03/26/rbspy-docs/
Prototyping an ltrace clone using eBPF
follow
/blog/2018/02/24/an-ltrace-clone-using-ebpf/
Profiler week 6/7: more experiments, and a `report` subcommand!
follow
/blog/2018/02/19/profiler-week-6-7--more-experiments--and-a--record--subcommand-/
Profiler week 5: Mac support, experiments profiling memory allocations
follow
/blog/2018/02/06/profiler-week-5/
Writing eBPF tracing tools in Rust
follow
/blog/2018/02/05/rust-bcc/
Spying on a Ruby process"s memory allocations with eBPF
follow
/blog/2018/01/31/spying-on-a-ruby-process-s-memory-allocations/
Profiler week 4: callgrind support, containers, Mac progress!
follow
/blog/2018/01/29/profiler-week-4/
I think I found a Mac kernel bug?
follow
/blog/2018/01/28/mac-freeze/
How do you spy on a program running in a container?
follow
/blog/2018/01/26/spy-container/
How do you read the memory maps of a Mac process?
follow
/blog/2018/01/26/mac-memory-maps/
Profiler week 3: refactoring, better testing, and an alpha release!
follow
/blog/2018/01/22/profiler-week-3--refactoring--better-testing--and-an-alpha-release/
Profiler week 2: support for 1.9.3 -> 2.5.0, and line numbers!
follow
/blog/2018/01/15/profiler-week-2--support-for-1-9-3----2-5-0--and-line-numbers/
Should I pause a Ruby process to collect its stack?
follow
/blog/2018/01/15/should-i-pause-a-ruby-process-to-collect-its-stack/
Profiler adventures: resolving symbol addresses is hard!
follow
/blog/2018/01/09/resolving-symbol-addresses/
Profiler week 1: testing & profiling stripped binaries
follow
/blog/2018/01/08/profiler-week-1--testing---handling-stripped-binaries/
How are Ruby"s headers different from Python"s headers?
follow
/blog/2017/12/20/how-are-ruby-s-headers-different-from-python-s-headers-/
How often do Ruby"s stack struct definitions change?
follow
/blog/2017/12/19/how-much-does-the-ruby-abi-change-/
How do Ruby & Python profilers work?
follow
/blog/2017/12/17/how-do-ruby---python-profilers-work-/
How to spy on a Ruby program
follow
/blog/2016/06/12/a-weird-system-call-process-vm-readv/
Performance
follow
#performance
Profiling Go programs with pprof
follow
/blog/2017/09/24/profiling-go-with-pprof/
How much memory is my process using?
follow
/blog/2016/12/03/how-much-memory-is-my-process-using-/
Benchmarking correctly is hard (and techniques for doing it better)
follow
/blog/2016/07/23/rigorous-benchmarking-in-reasonable-time/
The Etsy site performance report is amazing
follow
/blog/2016/05/01/the-etsy-site-performance-report/
Some links on Java garbage collection
follow
/blog/2016/04/23/some-links-on-java-garbage-collection/
Java garbage collection can be really slow
follow
/blog/2016/04/22/java-garbage-collection-can-be-really-slow/
I/O matters.
follow
/blog/2016/03/23/io-matters/
Have high expectations for your computers
follow
/blog/2016/02/10/have-high-expectations-for-computers/
How CPU load averages work (and using them to triage webserver performance!)
follow
/blog/2016/02/07/cpu-load-averages/
Java isn"t slow
follow
/blog/2016/01/03/java-isnt-slow/
A millisecond isn"t fast (and how we made it 100x faster)
follow
/blog/2015/09/10/a-millisecond-isnt-fast-and-how-we-fixed-it/
Computers are *fast*!
follow
/blog/2014/05/12/computers-are-fast/
Open source
follow
#open-source
Figuring out how to contribute to open source
follow
/blog/2017/08/06/contributing-to-open-source/
A few questions about open source
follow
/blog/2016/10/26/a-few-questions-about-open-source/
Learning at open source sprints (no preparation required)
follow
/blog/2015/04/12/learning-at-open-source-sprints/
Don"t feel guilty about not contributing to open source
follow
/blog/2014/04/26/i-dont-feel-guilty-about-not-contributing-to-open-source/
Linux systems stuff
follow
#linux-systems-stuff
How to get a core dump for a segfault on Linux
follow
/blog/2018/04/28/debugging-a-segfault-on-linux/
Things to learn about Linux
follow
/blog/2016/11/21/things-to-learn-about-linux/
Guessing Linux kernel registers
follow
/blog/2016/01/18/guessing-linux-kernel-registers/
You can be a kernel hacker!
follow
/blog/2014/09/18/you-can-be-a-kernel-hacker/
Recovering files using /proc (and spying, too!)
follow
/blog/2014/03/23/recovering-files-using-slash-proc-and-other-useful-facts/
4 paths to being a kernel hacker
follow
/blog/2014/01/04/4-paths-to-being-a-kernel-hacker/
Recurse center 2020
follow
#recurse-center-2020
Day 57: Trying to set up GitHub Actions
follow
/blog/2021/02/10/day-57--fighting-with-github-actions/
Day 56: A little WebAssembly
follow
/blog/2021/02/09/day-56--a-little-webassembly/
Day 53: a little nginx, IPv6, and wireguard
follow
/blog/2021/02/04/day-53--configuring-nginx/
Day 52: testing how many Firecracker VMs I can run
follow
/blog/2021/02/04/day-52--out-of-memory-errors/
Day 51: Fixed my logging and made a couple of puzzles
follow
/blog/2021/02/02/day-51--made-a-couple-of-puzzles/
Day 50: Building some tarballs for puzzles, and trying to make a kernel boot faster
follow
/blog/2021/01/30/day-50--building-some-tarballs-for-puzzles/
Day 49: making the VMs boot faster
follow
/blog/2021/01/29/day-49--making-the-vms-boot-faster/
Day 48: Another Go program, and a little vim configuration
follow
/blog/2021/01/28/day-48--another-go-program/
Day 47: Using device mapper to manage Firecracker images
follow
/blog/2021/01/27/day-47--using-device-mapper-to-manage-firecracker-images/
Day 46: debugging an iptables problem
follow
/blog/2021/01/26/day-46--debugging-an-iptables-problem/
Day 44: Building my VMs with Docker
follow
/blog/2021/01/22/day-44--got-some-vms-to-start-in-firecracker/
Day 43: Building VM images
follow
/blog/2021/01/21/day-43--building-vm-images/
Day 42: Writing a Go program to manage Firecracker VMs
follow
/blog/2021/01/20/day-42--writing-a-go-program-to-manage-firecracker-vms/
Day 41: Trying to understand what a bridge is
follow
/blog/2021/01/19/day-41--trying-to-understand-what-a-bridge-is/
Day 40: screen flickering & a talk about containers
follow
/blog/2021/01/16/day-40--screen-flickering---a-talk-about-containers/
Day 39: Customizing gotty"s terminal
follow
/blog/2021/01/15/day-39--customizing-gotty-s-terminal/
Day 38: Modifying gotty to serve many different terminal applications at once
follow
/blog/2021/01/14/day-38--modifying-gotty-to-serve-many-different-terminal-applications-at-once/
Day 37: A new laptop and a little Vue
follow
/blog/2021/01/13/day-37--a-new-laptop-and-a-little-vue/
Day 35: Launching my VMs more reliably
follow
/blog/2021/01/09/day-35--launching-my-vms-more-reliably/
Daily blog posts about my time at RC
follow
/blog/2021/01/08/some-extra-daily-blog-posts/
Day 34: Learning about qemu
follow
/blog/2021/01/08/day-34--learning-about-qemu/
Day 33: pairing is magic and beautiful git diffs
follow
/blog/2021/01/07/day-33--a-login-bug--a-git-trick--and-generating-yaml-files/
Day 32: A Rails model that doesn"t use the database with ActiveHash
follow
/blog/2021/01/07/day-32--a-rails-model-that-doesn-t-use-the-database-with-activehash/
Day 24: a short talk about blogging myths, and a debugging tip
follow
/blog/2020/12/10/day-24--a-short-talk-about-blogging-myths/
Day 23: a little Rails testing
follow
/blog/2020/12/10/day-23--some-rails-testing/
Day 22: getting OAuth to work in Rails
follow
/blog/2020/12/08/day-22--getting-oauth-to-work-in-rails/
Day 21: wrangling systemd & setting up git deploys to a VM
follow
/blog/2020/12/08/day-21--wrangling-systemd/
Day 19: Clustering faces (poorly) using an autoencoder
follow
/blog/2020/12/05/day-19--clustering-faces-using-an-autoencoder/
Day 20: trying to figure out how Google Cloud IAM works
follow
/blog/2020/12/05/day-20--trying-to-run-a-rails-app-in-google-cloud-run/
Day 18: an answer to an autoencoder question
follow
/blog/2020/12/03/day-18--some-answers-to-autoencoder-questions/
Day 17: trying to wrap my head around autoencoders
follow
/blog/2020/12/01/day-17--trying-to-wrap-my-head-around-autoencoders/
Day 13: BPTT, and debugging why a model isn"t training is hard
follow
/blog/2020/11/26/day-13--bptt---staring-at-graphs-a-lot/
Day 11: learning about learning rates
follow
/blog/2020/11/23/day-11--learning-about-learning-rates/
Day 10: Training an RNN to count to three
follow
/blog/2020/11/20/day-10--training-an-rnn-to-count-to-three/
Day 9: Generating a lot of nonsense with an RNN
follow
/blog/2020/11/19/day-9--generating-a-lot-of-nonsense-with-an-rnn/
Day 8: Start with something that works
follow
/blog/2020/11/18/how-to-do-hard-projects--start-with-something-that-works/
Day 5: drawing lots of faces with sketch-rnn
follow
/blog/2020/11/16/day-5--lots-of-faces-with-sketch-rnn/
How do you write simple explanations without sounding condescending?
follow
/blog/2020/11/15/simple-explanations-without-sounding-condescending/
Day 3: an infinitely tall fridge
follow
/blog/2020/11/11/day-3--an-infinitely-tall-fridge/
Day 2: Rails associations & dragging divs around
follow
/blog/2020/11/10/day-2--rails-associations---dragging-divs-around/
Day 1: a confusing Rails error message
follow
/blog/2020/11/09/day-1--a-little-rails-/
I"m doing another Recurse Center batch!
follow
/blog/2020/11/05/i-m-doing-another-recurse-center-batch-/
Recurse center 2013
follow
#recurse-center-2013
How I spent my time at the Recurse Center
follow
/blog/2017/09/17/how-i-spent-my-time-at-the-recurse-center/
How I did Hacker School: ignoring things I understand and doing the impossible
follow
/blog/2014/06/29/how-i-did-hacker-school/
Hacker School"s Secret Strategy for Being Super Productive (or: Help.)
follow
/blog/2014/03/10/help/
"How was Hacker School?"
follow
/blog/2014/02/15/how-was-hacker-school/
Day 46: Never Graduate
follow
/blog/2013/12/20/day-46-never-graduate/
Day 45: I now have Rust code for executing executables!
follow
/blog/2013/12/19/day-45-reading-elf-headers/
Day 44: qemu + gdb = so great
follow
/blog/2013/12/17/day-44-gdb-is-great/
Day 43: SOMETHING IS ERASING MY PROGRAM WHILE IT’S RUNNING (oh wait oops)
follow
/blog/2013/12/16/day-43-hopefully-the-last-day-spent-fixing-linker-problems/
Day 42: How to run a simple ELF executable, from scratch (I don"t know)
follow
/blog/2013/12/13/day-42-how-to-run-an-elf-executable-i-dont-know/
Day 41: Linkers are upsetting
follow
/blog/2013/12/12/day-41-linkers-are-still-upsetting/
Day 39: Writing malloc wrong, for fun
follow
/blog/2013/12/10/day-39-i-wrote-a-malloc/
Day 40: 12 things I learned today about linkers.
follow
/blog/2013/12/10/day-40-12-things-i-learned-today-about-linkers/
Day 40: Linkers are amazing.
follow
/blog/2013/12/10/day-40-learning-about-linkers/
Day 38: After 6 days, I have problems that I can"t understand at all
follow
/blog/2013/12/06/day-38-after-7-days/
Day 37: After 5 days, my OS doesn"t crash when I press a key
follow
/blog/2013/12/04/day-37-how-a-keyboard-works/
Day 36: On programming without malloc
follow
/blog/2013/12/03/day-36-programming-without-malloc/
Day 35: Types in Rust, for beginners
follow
/blog/2013/12/02/types-in-rust/
How to call Rust from assembly, and vice versa
follow
/blog/2013/12/01/how-to-call-rust-from-assembly/
Videos from PyData NYC are up!
follow
/blog/2013/11/30/videos-from-pydata-nyc-are-up/
What happens when you run "Hello, world"
follow
/blog/2013/11/29/what-happens-when-you-run-a-unix-program/
Writing a kernel using rustboot & rust-core
follow
/blog/2013/11/29/writing-an-os-using-rustboot-and-rust-core/
Day 34b: Writing curl using my TCP stack
follow
/blog/2013/11/27/day-34b-wrapping-up-the-tcp-stack/
Day 34: The tiniest operating system
follow
/blog/2013/11/26/day-34-the-tiniest-operating-system/
Day 33: How to make music with ClojureScript
follow
/blog/2013/11/25/day-33-how-to-make-music-with-clojurescript/
Day 32: Magical Orchestra!!!
follow
/blog/2013/11/21/day-32-magical-orchestra/
Day 31: Binary trees with core.logic!
follow
/blog/2013/11/20/day-31-logic-programming-pretty-music/
Day 30: Making music in Clojure with Overtone. Clojure bugs with laziness! Fun!
follow
/blog/2013/11/19/day-30-making-music-in-clojure-with-overtone/
Day 29: Trying out Emacs!
follow
/blog/2013/11/18/day-29-trying-out-emacs/
Day 28: Made a git workflow visualization webapp!
follow
/blog/2013/11/15/day-28-more-git-workflow-pictures/
Day 27: Automatically testing changes in state! Visualizing my Git workflow! Floats!
follow
/blog/2013/11/13/day-27-magic-testing-functions/
Day 25: ACK all the things
follow
/blog/2013/11/12/day-25-ack-all-the-things/
Day 26: Trying to describe the TCP state machine in a readable way. Failing.
follow
/blog/2013/11/12/day-26-trying-to-describe-the-tcp-state-machine/
Women in Technology workshop at PyData NYC
follow
/blog/2013/11/12/women-in-technology-workshop-at-pydata-nyc/
Day 24: Unit testing this TCP library
follow
/blog/2013/11/07/day-24-unit-testing-this-tcp-library/
Day 22: Got some TCP packets back!
follow
/blog/2013/11/06/day-22-got-some-tcp-packets-back/
Day 23: Started writing a TCP stack in Python
follow
/blog/2013/11/06/day-23-started-writing-a-socket-library/
NYC Python talk
follow
/blog/2013/11/06/nyc-python-talk-slides/
Day 21: Trying to TCP
follow
/blog/2013/11/05/day-21-trying-to-tcp/
Day 19: A few reasons why networking is hard
follow
/blog/2013/10/31/day-19-i-might-understand-why-networking-is-hard/
Day 20: Traceroute in 15 lines of code using Scapy
follow
/blog/2013/10/31/day-20-scapy-and-traceroute/
Day 18: ARP cache poisoning (or: In ur connection, sniffing ur packets)
follow
/blog/2013/10/29/day-18-in-ur-connection/
Day 17: How to write a buffer overflow exploit
follow
/blog/2013/10/28/day-17-buffer-overflows/
Day 16: gzip + poetry = awesome
follow
/blog/2013/10/24/day-16-gzip-plus-poetry-equals-awesome/
Do Rails programmers use node.js? Visualizing correlations in command usage
follow
/blog/2013/10/24/do-rails-programmers-use-node-visualizing-correlations-in-command-usage/
Day 15: How a .gz file is structured, redux
follow
/blog/2013/10/23/day-15-how-gzip-works/
Day 14: When it"s hard to write tests, that"s when I should be testing
follow
/blog/2013/10/22/day-14-apparently-i-should-write-tests/
Day 13: Off by one errors
follow
/blog/2013/10/21/day-13-off-by-one-errors/
Day 12: Why Julia likes Julia
follow
/blog/2013/10/17/day-12-julia-reflects-on-julia/
Day 10: Goals. Goals? Maybe I need to be *reading* more code?
follow
/blog/2013/10/16/day-10-goals/
Day 11: How does gzip work?
follow
/blog/2013/10/16/day-11-how-does-gzip-work/
Day 9: Bytecode is made of bytes! CPython isn"t scary!
follow
/blog/2013/10/14/day-9-bytecode-is-made-of-bytes/
Day 8: Julia writes Julia! And remembers that open source is hard.
follow
/blog/2013/10/12/day-8-julia-writes-julia-and-open-source/
Day 7: An echo server in Clojure
follow
/blog/2013/10/09/day-7-an-echo-server-in-clojure/
Day 6: I wrote a rootkit!
follow
/blog/2013/10/08/day-6-i-wrote-a-rootkit/
Day 5: I wrote a kernel module!!!
follow
/blog/2013/10/07/day-5-i-wrote-a-kernel-module/
Where to find bike sharing systems" data feeds
follow
/blog/2013/10/06/where-to-find-the-bixi-xml-data-feed/
Day 4: Processes vs threads, and kernel modules!
follow
/blog/2013/10/04/day-4-processes-vs-threads/
Day 3: What does the Linux kernel even do?
follow
/blog/2013/10/02/day-3-what-does-the-linux-kernel-even-do/
Day 2: netcat fun!
follow
/blog/2013/10/01/day-2-netcat-fun/
Day 1: What does a shell even do?
follow
/blog/2013/09/30/hacker-school-day-2-what-does-a-shell-even-do/
Hacker School Day 1: Messing around with the stack in C
follow
/blog/2013/09/30/hacker-school-day-1-messing-around-with-the-stack-in-c/
Hacker School Day -4: unit testing in C. checkmk!
follow
/blog/2013/09/26/hacker-school-day-4-c-unit-testing/
Ulia Ea
follow
https://web.archive.org/web/20181228051203/http://www.uliaea.ca/
blogs I love
follow
https://jvns.ca/blogroll
Recurse Center
follow
https://www.recurse.com/scout/click?t=546ea46360584b522270b8c3e5d830f8
(my posts about it)
follow
/categories/hackerschool/