https://jvns.ca
Julia Evans
Julia Evans
Julia Evans Julia Evans About Talks Projects Twitter Mastodon Github Favorites Zines RSS Hey! I'm Julia. Welcome to my blog. Here's every post I've ever written, organized by category. Enjoy! You can subscribe to a weekly digest of these blog posts. I publish computer zines at Wizard Zines. Most recent 10 posts Oct 7 2024 Some notes on upgrading Hugo Oct 1 2024 Terminal colours are tricky Sep 27 2024 Some Go web dev notes Sep 12 2024 Reasons I still love the fish shell Aug 19 2024 Migrating Mess With DNS to use PowerDNS Aug 6 2024 Go structs are copied on assignment (and other things about Go I'd missed) Jul 8 2024 Entering text in the terminal is complicated Jul 3 2024 Reasons to use your shell's job control Jun 3 2024 New zine: How Git Works! Apr 10 2024 Notes on git's error messages and all posts by category: (or see popular posts) Uncategorized Aug 2024 Go structs are copied on assignment (and other things about Go I'd missed) Cool computer tools / features / ideas Sep 2024 Some Go web dev notes Sep 2024 Reasons I still love the fish shell Aug 2023 What helps people get comfortable on the command line? Jul 2023 Lima: a nice way to run Linux VMs on Mac Feb 2023 Writing Javascript without a build system Jul 2022 Monitoring tiny web services Jun 2022 Notes on running containers with bubblewrap May 2022 sqlite-utils: a nice way to import data into SQLite for analysis Apr 2022 A list of new(ish) command line tools Feb 2022 Things that used to be hard and are now easy Jan 2022 Hosting my static sites with nginx Nov 2021 Some notes on using esbuild Jan 2021 Firecracker: start a VM in less than a second Jan 2021 Server-sent events: a simple way to stream events from a server Jan 2021 Docker Compose: a nice way to set up a dev environment Oct 2020 ninja: a simple way to do builds Aug 2020 Implementing 'focus and reply' for Fastmail with JMAP Jul 2020 scanimage: scan from the command line! Jun 2020 entr: rerun your build when files change Jun 2020 A little bit of plain Javascript can do a lot Jan 2020 PaperWM: tiled window management for GNOME Oct 2019 SQLite is really easy to compile Mar 2019 Why are monoidal categories interesting? Nov 2018 Tailwind: style your site without writing any CSS! Sep 2018 An awesome new Python profiler: py-spy! May 2018 Batch editing files with ed Nov 2017 Glitch: write fun small web projects instantly Nov 2017 Binder: an awesome tool for hosting Jupyter notebooks Sep 2017 Cool vim feature: sessions! Sep 2017 Data structure: the treap! Jun 2017 a tiny whack-a-mole game Jun 2017 Log-structured storage Apr 2017 Using the Strict-Transport-Security header Apr 2017 The fish shell is awesome May 2016 homu + highfive: awesome bots that make open source projects easier Apr 2016 you can take the derivative of a regular expression?! Mar 2016 tcpdump is amazing Feb 2016 How to measure your CPU time: clock_gettime! Jan 2016 Fast integer sets with Roaring Bitmaps (and, making friends with your modern CPU) Jan 2016 Sendfile (a system call for web developers to know about!) Oct 2015 PAPERS ARE AMAZING: Profiling threaded programs with Coz Nov 2014 LD_PRELOAD is super fun. And easy! Things I built Aug 2024 Migrating Mess With DNS to use PowerDNS Dec 2023 Mounting git commits as folders with NFS Jul 2023 Open sourcing the nginx playground May 2023 New playground: memory spy May 2023 Introducing "Implement DNS in a Weekend" Apr 2023 New playground: integer.exposed Apr 2023 A list of programming playgrounds Mar 2022 Some tiny personal programs I've written Dec 2021 New tool: Mess with DNS! Sep 2021 New tool: an nginx playground Apr 2021 Notes on building debugging puzzles Mar 2021 A tool to spy on your DNS queries: dnspeep Feb 2021 A little tool to make DNS queries Git Apr 2024 Notes on git's error messages Mar 2024 Some Git poll results Mar 2024 The "current branch" in git Mar 2024 How HEAD works in git Feb 2024 Popular git config options Feb 2024 Dealing with diverged git branches Jan 2024 Inside .git Jan 2024 Do we think of git commits as diffs, snapshots, and/or histories? Nov 2023 git branches: intuition & reality Nov 2023 How git cherry-pick and revert use 3-way merge Nov 2023 git rebase: what can go wrong? Nov 2023 Confusing git terminology Oct 2023 Some miscellaneous git facts Sep 2023 In a git repository, where do your files live? Nix Jan 2024 Some notes on NixOS Nov 2023 Some notes on nix flakes Mar 2023 How do Nix builds work? Feb 2023 Some notes on using nix DNS Jul 2023 Why is DNS still hard to learn? Nov 2022 Making a DNS query in Ruby from scratch Sep 2022 Why do domain names sometimes end with a dot? Feb 2022 The multiple meanings of "nameserver" and "DNS resolver" Feb 2022 A toy DNS resolver Jan 2022 Some ways DNS can break Jan 2022 Why might you run your own DNS server? Dec 2021 DNS "propagation" is actually caches expiring Jun 2020 What happens when you update your DNS? Terminals Oct 2024 Terminal colours are tricky Jul 2024 Entering text in the terminal is complicated Jul 2024 Reasons to use your shell's job control Jul 2022 What happens when you press a key in your terminal? Computer networking Sep 2022 How to send raw network packets in Python with tun/tap Jul 2022 A toy remote login server Jan 2022 Reasons for servers to support IPv6 Sep 2019 How to put an HTML page on the internet Feb 2019 Networking tool comics! Nov 2018 An example of how C++ destructors are useful in Envoy Oct 2018 Some Envoy basics Sep 2018 Editing my blog's HTTP headers with Cloudflare workers Jul 2018 IP addresses & routing Jul 2018 netdev day 2: moving away from "as fast as possible" in networking code Jul 2018 netdev day 1: IPsec! Jun 2018 How I use Wireshark Mar 2018 A few things I've learned about computer networking Sep 2017 Finding out if/why a server is dropping packets Sep 2017 What's a network interface? Jun 2017 Iptables basics Apr 2017 netdev conference, day 3 Apr 2017 netdev conference, day 2 Apr 2017 How to filter packets super fast: XDP & eBPF! Apr 2017 netdev conference, day 1 Apr 2017 Slow down your internet with tc Feb 2017 How big can a packet get? Jan 2017 Dissecting an SSL certificate Dec 2016 What's interesting about UDP? Aug 2016 Why do UDP packets get dropped? Jul 2016 How do HTTP requests get sent to the right place? Jun 2016 ★ Why do we use the Linux kernel's TCP stack? May 2016 What are SSL ciphers & session keys? Apr 2016 CDNs aren't just for caching How a computer thing works Aug 2023 Notes on using a single-person Mastodon server Aug 2023 Behind "Hello World" on Linux Mar 2022 Implementing a toy version of TLS 1.3 Mar 2022 How to use undocumented web APIs Feb 2022 Some things about getaddrinfo that surprised me Jan 2022 How to find a domain's authoritative nameservers Dec 2021 How to use dig Nov 2021 How do you tell if a problem is caused by DNS? Oct 2021 Tools to explore BGP Sep 2021 Quadratic algorithms are slow (and hashmaps are fast) May 2021 How to look at the stack with gdb May 2021 The OSI model doesn't map well to TCP/IP Apr 2020 Why strace doesn't work in Docker Mar 2020 Getting started with shaders: signed distance functions! Dec 2019 "server" is hard to define Dec 2019 How tracking pixels work Nov 2019 How containers work: overlayfs Oct 2019 SQL queries don't start with SELECT Jan 2018 How does gdb call functions? Nov 2017 How do groups work on Linux? Jun 2017 Async IO on Linux: select, poll, and epoll Feb 2017 Weird unix thing: 'cd //' Oct 2016 ★ What happens when you start a process on Linux? Aug 2016 How does gdb work? Jun 2016 Should you be scared of Unix signals? Mar 2016 I conquered thread pools! For today, at least. Mar 2016 Thread pools! How do I use them? Feb 2016 What is "the stack"? Nov 2015 Why Ruby’s Timeout is dangerous (and Thread.raise is terrifying) Nov 2015 ★ Why you should understand (a little) about TCP Mar 2015 How the locate command works (and let's write a faster version in one minute!) Feb 2015 ★ How gzip uses Huffman coding Dec 2014 ★ Diving into concurrency: trying out mutexes and atomics Oct 2014 How does SQLite work? Part 2: btrees! (or: disk seeks are slow don't do them!) Sep 2014 ★ How does SQLite work? Part 1: pages! Sep 2014 How is a binary executable organized? Let's explore it! Aug 2014 ★ What happens if you write a TCP stack in Python? May 2014 Diving into HDFS Feb 2014 Three steps to learning GDB binary representations of things Mar 2023 Some possible reasons for 8-bit bytes Feb 2023 Why does 0.1 + 0.2 = 0.30000000000000004? Jan 2023 Examples of problems with integers Jan 2023 Examples of floating point problems Kubernetes / containers Oct 2017 Operating a Kubernetes network Oct 2017 Reasons Kubernetes is cool Aug 2017 How Kubernetes certificate authorities work Jul 2017 Cherry picking commits & shell scripting in golang Jul 2017 How does the Kubernetes scheduler work? Jun 2017 A few things I've learned about Kubernetes Feb 2017 Swapping, memory limits, and cgroups Dec 2016 A container networking overview Nov 2016 What happens when you run a rkt container? Oct 2016 Running containers without Docker Oct 2016 What even is a container: namespaces and cgroups Oct 2016 A list of Linux container software Oct 2016 "I just want to run a container!" Sep 2016 Some questions about Docker and rkt Nov 2015 Docker is amazing Zines / comics Jun 2024 New zine: How Git Works! Jun 2023 New zine: How Integers and Floats Work Feb 2023 Print copies of The Pocket Guide to Debugging have arrived Dec 2022 New zine: The Pocket Guide to Debugging May 2022 Pages that didn't make it into "How DNS Works" Apr 2022 New zine: How DNS Works! Oct 2021 All my zines are now available in print! Jun 2021 You can now buy print version of my zines! May 2021 I put all of my comics online! Nov 2020 New zine: Hell Yes! CSS! Aug 2020 Wizard Zines' first print run: Help! I have a Manager! Aug 2020 Some more CSS comics Jul 2020 Some CSS comics Apr 2020 New zine: How Containers Work! Feb 2020 New zine: Become a SELECT Star! Oct 2019 Your Linux Toolbox: a box set of my free zines Sep 2019 New zine: HTTP: Learn your browser's language! Mar 2019 New zine: Bite Size Networking! Oct 2018 New zine: Oh shit, git! Sep 2018 New zine: Help! I have a manager! Aug 2018 New zine: Bite Size Command Line! Apr 2018 New zine: Profiling & tracing with perf!! Dec 2017 New zine: So you want to be a wizard Nov 2017 Linux comics: a small zine Jul 2017 Linux tracing zine May 2017 "Let's learn tcpdump" zine: now available for everyone Apr 2017 New zine: let's learn tcpdump! Jan 2017 New zine: "Networking! ACK!" Jan 2017 A tiny zine about machine learning Nov 2016 More drawings about computers Nov 2016 A few drawings about Linux Sep 2016 New zine: Linux debugging tools you'll love Jul 2016 A few sketches Apr 2015 A zine about strace Exercises Jun 2020 Questions to help people decide what to learn Dec 2019 Challenge: find Twitter memes with suffix arrays Dec 2019 Solutions to the tiny window manager challenge Nov 2019 Challenge: Write a bouncy window manager Nov 2019 What makes a programming exercise good? Sep 2019 Notes on building SQL exercises Aug 2019 git exercises: navigate a repository Aug 2019 curl exercises On writing words Aug 2023 Some tactics for writing in public Jun 2023 Some blogging myths Sep 2021 Teaching by filling in knowledge gaps Aug 2021 Patterns in confusing explanations Jul 2021 Write good examples by starting with real code On writing comics / zines Mar 2023 Building a custom site for zine feedback Dec 2020 How I write useful programming comics Nov 2020 A new way I'm getting feedback on my zines: beta readers! Aug 2020 Some possible future zines Aug 2020 An attempt to make a font look more handwritten Nov 2019 Some notes on vector drawing apps Oct 2019 Some research on shipping print zines Oct 2019 Zine revenue for 2019 Sep 2019 Taking a year to explain computer things Sep 2019 How to write zines with simple tools Dec 2018 How do you document a tech project with comics? Oct 2018 When does teaching with comics work well? Sep 2018 Why sell zines? Sep 2017 How to teach technical concepts with cartoons May 2017 Handwritten books Jan 2017 An idea for a programming book Nov 2016 Why cute drawings? Aug 2016 How (and why) I made a zine Conferences Feb 2019 !!Con 2019: submit a talk! Dec 2016 Systems We Love 2016 Jul 2016 PolyConf 2016 Dec 2015 Women in Machine Learning 2015 (fun!!!) Apr 2015 AdaCamp Montreal 2015 Jan 2015 Data Day Texas 2015 Nov 2014 PyData NYC (I gave a machine learning talk! yay!) Sep 2014 Strange Loop 2014 Jun 2014 !!Con talks are up Apr 2014 ♥ PyCon Jan 2014 CUSEC = fun Sep 2013 PyData Boston 2013 Apr 2013 Open Data Exchange 2013 Jan 2013 Montreal All-Girl Hack Night #2: now with cookies Dec 2012 Montreal All-Girl Hack Night #1: AMAZING Organizing conferences Jun 2016 Ideas for making better conference talks & conferences Mar 2015 You can choose who submits talks to your conference Jun 2014 Should my conference do anonymous review? May 2014 Anonymous talk review is amazing. Businesses / marketing Oct 2020 A few things I've learned about email marketing Jul 2020 saturday comics: a weekly mailing list of programming comics Jan 2019 A few early marketing thoughts Sep 2018 Who pays to educate developers? Aug 2018 I started a corporation! Statistics / machine learning / data analysis Nov 2020 An attempt at implementing char-rnn with PyTorch Dec 2018 Some nonparametric statistics math Apr 2017 Some good "Statistics for programmers" resources Feb 2017 How do these "neural network style transfer" tools work? May 2016 A few reasons to be skeptical of machine learning Apr 2016 Looking inside machine learning black boxes Jan 2016 Winning the bias-variance tradeoff Dec 2015 ★ How to trick a neural network into thinking a panda is a vulture Sep 2015 Is machine learning safe to use? Jul 2015 Some easy statistics: Bootstrap confidence intervals Feb 2015 A/A testing Nov 2014 Fun with machine learning: logistic regression! Nov 2014 Fun with machine learning: does your model actually work? Jul 2014 Fun with stats: How big of a sample size do I need? Jun 2014 Machine learning isn't Kaggle competitions Dec 2013 ★ A pandas cookbook Feb 2013 Graphing bike path data with IPython Notebook and pandas Year in review Dec 2023 2023: Year in review Jan 2023 Some business graphs for 2022 Dec 2021 2021: Year in review Dec 2020 2020: Year in review Dec 2019 2019: Year in review Dec 2018 2018: Year in review Dec 2017 2017: Year in review Dec 2016 2016: Year in review Dec 2015 2015: Year in review Talks Oct 2023 New talk: Making Hard Things Easy May 2023 New talk: Learning DNS in 10 years Dec 2018 New talk: High Reliability Infrastructure Migrations Sep 2018 Build impossible programs Mar 2017 So you want to be a wizard Infrastructure / operations engineering Nov 2018 Some notes on running new software in production Jun 2017 What can developers learn from being on call? Mar 2017 Bash scripting quirks & safety tips Nov 2016 Ideas about how to use AWS Oct 2016 Service discovery at Stripe Oct 2016 Consistency vs availability (wat?) Oct 2016 What's devops? Oct 2016 Operations for software developers for beginners Mar 2016 How do you do capacity planning? Feb 2016 Why I love log files Feb 2016 ★ TIL: clock skew exists Dec 2014 Fear makes you a worse programmer Career / work Mar 2021 Get better at programming by learning how things work Mar 2021 Things your manager might not know Jul 2020 When your coworker does great work, tell their manager Jun 2020 Tell candidates what to expect from your job interviews Feb 2020 Questions you can ask about compensation Jun 2019 Get your work recognized: write a brag document Oct 2018 What's a senior engineer's job? Sep 2018 Some possible career goals Mar 2018 Open source sabbatical = awesome Feb 2018 Writing performance reviews with positive constructive feedback Dec 2017 Taking a sabbatical to work on Ruby profiling tools Sep 2017 Telling people what you're working on Mar 2017 Writing down my career Feb 2017 Hiring & opportunity Jan 2017 Choosing the "best software" Sep 2016 ★ Getting things done Sep 2016 How I got a CS degree without learning what a system call is Aug 2016 Release it, then build it Aug 2016 ★ How do you decide what to work on? May 2016 Three ways to solve hard programming problems Jan 2016 Talking about stock options = awesome Dec 2015 ★ Things you should know about stock options before negotiating an offer Mar 2015 1:1 topic ideas Feb 2015 ★ How I learned to program in 10 years Apr 2014 Stopping to think Apr 2014 Becoming a better developer (it's not just writing more programs) Feb 2014 Sounding confident in interviews Jan 2014 What my technical interviews have looked like Dec 2013 ★ Questions I'm asking in interviews Working with others / communication Apr 2017 Making small culture changes Jan 2017 How do you make an awesome team? Jun 2016 Learning to like design documents Mar 2015 Senior engineering & fantasy heroes Dec 2014 On reading the source code, not the docs Aug 2014 Pair programming is amazing! Except... when it's not. Mar 2014 Pair programming Remote work Feb 2018 Working remotely, 4 years in Dec 2015 Surviving meetings while remote Oct 2014 Working remote, 8 months in (seeing humans is important!) Jun 2014 Working remote, 3 months in Mar 2014 Reports from remote-land: remote pairing works great! Talks transcripts / podcasts Aug 2018 A few recent podcasts Apr 2018 Talk: Building a Ruby profiler Mar 2018 How does the internet work? podcast Sep 2016 A swiss army knife of debugging tools: talk & transcript May 2016 Notes from my PyData Berlin keynote Jan 2016 A few notes on my CUSEC talk Jul 2014 Ruby Rogues podcast: systems programming tricks! On blogging / speaking Oct 2024 Some notes on upgrading Hugo May 2021 Blog about what you've struggled with May 2020 Metaphors in man pages Feb 2019 Organizing this blog into categories Mar 2018 Talks I'd love to see at RustConf Feb 2018 Measuring a blog's success: focus on conversations, not page views Dec 2017 How I set up an automatic weekly blog digest Mar 2017 Blogging principles I use Oct 2016 Switching to Hugo May 2016 "advice" for aspiring tech bloggers Dec 2014 Reproducing awesomeness Oct 2014 How to set up a blog in 5 minutes Jul 2014 Open sourced talks! Jan 2014 You should give talks. They will be awesome. Here's why! Feb 2013 Trying out Octopress On learning Mar 2022 Celebrate tiny learning milestones Oct 2021 How to get useful answers to your questions Sep 2018 How to teach yourself hard things Sep 2017 How to answer questions in a helpful way Aug 2017 Learning at work Jan 2017 Rules of programming experiments Dec 2016 How to ask good questions Aug 2016 Asking good questions is hard (but worth it) Apr 2016 How does knowledge get locked up in people's heads? Jun 2014 Asking questions is a superpower Apr 2014 "Ask if you have questions" isn't enough Rust Dec 2022 A couple of Rust error messages Jan 2018 Rust in 2018: it's way easier to use! Dec 2017 My first Rust macro Dec 2017 Debugging a segfault in my Rust program Dec 2017 Bindgen: awesome Rust tool for generating C bindings Nov 2017 What's a reference in Rust? Sep 2016 ★ Learning systems programming with Rust May 2016 A second try at using Rust Jan 2016 Calling C from Rust Jan 2016 ★ Why I ❤ Rust Mar 2014 My Rust OS will never be finished (and it's a success!) Mar 2014 ★ Writing an OS in Rust in tiny steps (Steps 1-5) Jan 2014 Some things my kernel can't do Linux debugging / tracing tools Apr 2021 What problems do people solve with strace? Dec 2017 A perf cheat sheet Jul 2017 Linux tracing systems & how they fit together Jun 2017 Notes on BPF & eBPF Jun 2017 3 short screencasts (/proc, tcpdump, strace) Mar 2017 ftrace: trace your kernel functions! Jul 2016 ★ Linux debugging tools I love Jun 2016 Using ltrace to debug a memory leak Jun 2016 A useful new strace feature May 2016 A workshop on strace & tcpdump Mar 2016 How does perf work? (in which we read the Linux kernel source) Feb 2016 perf top: an awesome way to spy on CPU usage Apr 2015 A few spy tools for your operating system (other than strace!) Mar 2015 Seeing system calls with perf instead of strace Dec 2014 Spying on Hadoop with strace May 2014 I can spy on my CPU cycles with perf! Apr 2014 ★ Debug your programs like they're closed source! Mar 2014 Debugging shared library problems with strace Feb 2014 More practical uses for strace! Feb 2014 Using strace to avoid reading Ruby code Feb 2014 Spying on ssh with strace Dec 2013 Understanding how killall works using strace Debugging Dec 2022 A debugging manifesto Dec 2022 Tips for analyzing logs Aug 2022 Some ways to get better at debugging Sep 2021 Debugging by starting a REPL at a breakpoint is fun Jun 2021 Reasons why bugs might feel "impossible" Apr 2020 When debugging, your attitude matters Jun 2019 What does debugging a program look like? Nov 2015 ★ How I got better at debugging Dec 2013 Coding strategies Debugging stories Nov 2021 Debugging a weird 'file not found' error Mar 2018 Reverse engineering the Notability file format Sep 2017 Debugging netlink requests May 2017 A small website mystery May 2016 Investigating Erlang by reading its system calls Mar 2016 Surprises in Ruby HTTP libraries Mar 2015 Nancy Drew and the Case of the Slow Program Fan posts about awesome work by other people Jun 2017 Awesome NLP tutorials by Allison Parrish May 2017 Like zines about computers? You might love Bubblesort Zines Feb 2017 A magical machine learning art tool Nov 2016 "A Critique of the CAP Theorem" Apr 2016 Some of my favorite blogs Feb 2014 A few blogs I really like Sep 2013 Julia Serano's 'Excluded' Mar 2013 Transit maps: 1941 vs 2011 Inclusion Apr 2017 No feigning surprise Oct 2016 A litmus test for job descriptions Mar 2016 Women-only spaces are a hack Jul 2015 An argument for hiring junior developers Dec 2014 Programming doesn't belong to men (it belongs to me) Nov 2014 What women in technology really think (150 of them, at least) Dec 2013 ★ When is "guys" gender neutral? I did a survey! not about computers Apr 2024 Making crochet cacti rbspy Mar 2018 Documentation site for rbspy! Feb 2018 Prototyping an ltrace clone using eBPF Feb 2018 Profiler week 6/7: more experiments, and a `report` subcommand! Feb 2018 Profiler week 5: Mac support, experiments profiling memory allocations Feb 2018 Writing eBPF tracing tools in Rust Jan 2018 Spying on a Ruby process's memory allocations with eBPF Jan 2018 Profiler week 4: callgrind support, containers, Mac progress! Jan 2018 I think I found a Mac kernel bug? Jan 2018 How do you spy on a program running in a container? Jan 2018 How do you read the memory maps of a Mac process? Jan 2018 Profiler week 3: refactoring, better testing, and an alpha release! Jan 2018 Profiler week 2: support for 1.9.3 -> 2.5.0, and line numbers! Jan 2018 Should I pause a Ruby process to collect its stack? Jan 2018 Profiler adventures: resolving symbol addresses is hard! Jan 2018 Profiler week 1: testing & profiling stripped binaries Dec 2017 How are Ruby's headers different from Python's headers? Dec 2017 How often do Ruby's stack struct definitions change? Dec 2017 How do Ruby & Python profilers work? Jun 2016 ★ How to spy on a Ruby program Performance Sep 2017 Profiling Go programs with pprof Dec 2016 How much memory is my process using? Jul 2016 Benchmarking correctly is hard (and techniques for doing it better) May 2016 The Etsy site performance report is amazing Apr 2016 Some links on Java garbage collection Apr 2016 Java garbage collection can be really slow Mar 2016 I/O matters. Feb 2016 Have high expectations for your computers Feb 2016 How CPU load averages work (and using them to triage webserver performance!) Jan 2016 Java isn't slow Sep 2015 ★ A millisecond isn't fast (and how we made it 100x faster) May 2014 ★ Computers are *fast*! Open source Aug 2017 Figuring out how to contribute to open source Oct 2016 A few questions about open source Apr 2015 Learning at open source sprints (no preparation required) Apr 2014 ★ Don't feel guilty about not contributing to open source Linux systems stuff Apr 2018 How to get a core dump for a segfault on Linux Nov 2016 Things to learn about Linux Jan 2016 Guessing Linux kernel registers Sep 2014 You can be a kernel hacker! Mar 2014 Recovering files using /proc (and spying, too!) Jan 2014 ★ 4 paths to being a kernel hacker Recurse Center 2020 Feb 2021 Day 57: Trying to set up GitHub Actions Feb 2021 Day 56: A little WebAssembly Feb 2021 Day 53: a little nginx, IPv6, and wireguard Feb 2021 Day 52: testing how many Firecracker VMs I can run Feb 2021 Day 51: Fixed my logging and made a couple of puzzles Jan 2021 Day 50: Building some tarballs for puzzles, and trying to make a kernel boot faster Jan 2021 Day 49: making the VMs boot faster Jan 2021 Day 48: Another Go program, and a little vim configuration Jan 2021 Day 47: Using device mapper to manage Firecracker images Jan 2021 Day 46: debugging an iptables problem Jan 2021 Day 44: Building my VMs with Docker Jan 2021 Day 43: Building VM images Jan 2021 Day 42: Writing a Go program to manage Firecracker VMs Jan 2021 Day 41: Trying to understand what a bridge is Jan 2021 Day 40: screen flickering & a talk about containers Jan 2021 Day 39: Customizing gotty's terminal Jan 2021 Day 38: Modifying gotty to serve many different terminal applications at once Jan 2021 Day 37: A new laptop and a little Vue Jan 2021 Day 35: Launching my VMs more reliably Jan 2021 Daily blog posts about my time at RC Jan 2021 Day 34: Learning about qemu Jan 2021 Day 33: pairing is magic and beautiful git diffs Jan 2021 Day 32: A Rails model that doesn't use the database with ActiveHash Dec 2020 Day 24: a short talk about blogging myths, and a debugging tip Dec 2020 Day 23: a little Rails testing Dec 2020 Day 22: getting OAuth to work in Rails Dec 2020 Day 21: wrangling systemd & setting up git deploys to a VM Dec 2020 Day 19: Clustering faces (poorly) using an autoencoder Dec 2020 Day 20: trying to figure out how Google Cloud IAM works Dec 2020 Day 18: an answer to an autoencoder question Dec 2020 Day 17: trying to wrap my head around autoencoders Nov 2020 Day 13: BPTT, and debugging why a model isn't training is hard Nov 2020 Day 11: learning about learning rates Nov 2020 Day 10: Training an RNN to count to three Nov 2020 Day 9: Generating a lot of nonsense with an RNN Nov 2020 Day 8: Start with something that works Nov 2020 Day 5: drawing lots of faces with sketch-rnn Nov 2020 How do you write simple explanations without sounding condescending? Nov 2020 Day 3: an infinitely tall fridge Nov 2020 Day 2: Rails associations & dragging divs around Nov 2020 Day 1: a confusing Rails error message Nov 2020 I'm doing another Recurse Center batch! Recurse Center 2013 Sep 2017 How I spent my time at the Recurse Center Jun 2014 How I did Hacker School: ignoring things I understand and doing the impossible Mar 2014 Hacker School's Secret Strategy for Being Super Productive (or: Help.) Feb 2014 "How was Hacker School?" Dec 2013 Day 46: Never Graduate Dec 2013 Day 45: I now have Rust code for executing executables! Dec 2013 Day 44: qemu + gdb = so great Dec 2013 ★ Day 43: SOMETHING IS ERASING MY PROGRAM WHILE IT’S RUNNING (oh wait oops) Dec 2013 Day 42: How to run a simple ELF executable, from scratch (I don't know) Dec 2013 Day 41: Linkers are upsetting Dec 2013 Day 39: Writing malloc wrong, for fun Dec 2013 Day 40: 12 things I learned today about linkers. Dec 2013 Day 40: Linkers are amazing. Dec 2013 Day 38: After 6 days, I have problems that I can't understand at all Dec 2013 ★ Day 37: After 5 days, my OS doesn't crash when I press a key Dec 2013 ★ Day 36: On programming without malloc Dec 2013 Day 35: Types in Rust, for beginners Dec 2013 How to call Rust from assembly, and vice versa Nov 2013 Videos from PyData NYC are up! Nov 2013 ★ What happens when you run 'Hello, world' Nov 2013 Writing a kernel using rustboot & rust-core Nov 2013 Day 34b: Writing curl using my TCP stack Nov 2013 Day 34: The tiniest operating system Nov 2013 Day 33: How to make music with ClojureScript Nov 2013 Day 32: Magical Orchestra!!! Nov 2013 Day 31: Binary trees with core.logic! Nov 2013 Day 30: Making music in Clojure with Overtone. Clojure bugs with laziness! Fun! Nov 2013 Day 29: Trying out Emacs! Nov 2013 Day 28: Made a git workflow visualization webapp! Nov 2013 Day 27: Automatically testing changes in state! Visualizing my Git workflow! Floats! Nov 2013 Day 25: ACK all the things Nov 2013 Day 26: Trying to describe the TCP state machine in a readable way. Failing. Nov 2013 Women in Technology workshop at PyData NYC Nov 2013 Day 24: Unit testing this TCP library Nov 2013 Day 22: Got some TCP packets back! Nov 2013 Day 23: Started writing a TCP stack in Python Nov 2013 NYC Python talk Nov 2013 Day 21: Trying to TCP Oct 2013 Day 19: A few reasons why networking is hard Oct 2013 ★ Day 20: Traceroute in 15 lines of code using Scapy Oct 2013 Day 18: ARP cache poisoning (or: In ur connection, sniffing ur packets) Oct 2013 Day 17: How to write a buffer overflow exploit Oct 2013 ★ Day 16: gzip + poetry = awesome Oct 2013 Do Rails programmers use node.js? Visualizing correlations in command usage Oct 2013 Day 15: How a .gz file is structured, redux Oct 2013 Day 14: When it's hard to write tests, that's when I should be testing Oct 2013 Day 13: Off by one errors Oct 2013 Day 12: Why Julia likes Julia Oct 2013 Day 10: Goals. Goals? Maybe I need to be *reading* more code? Oct 2013 Day 11: How does gzip work? Oct 2013 Day 9: Bytecode is made of bytes! CPython isn't scary! Oct 2013 Day 8: Julia writes Julia! And remembers that open source is hard. Oct 2013 Day 7: An echo server in Clojure Oct 2013 Day 6: I wrote a rootkit! Oct 2013 Day 5: I wrote a kernel module!!! Oct 2013 Where to find bike sharing systems' data feeds Oct 2013 Day 4: Processes vs threads, and kernel modules! Oct 2013 Day 3: What does the Linux kernel even do? Oct 2013 Day 2: netcat fun! Sep 2013 Day 1: What does a shell even do? Sep 2013 Hacker School Day 1: Messing around with the stack in C Sep 2013 Hacker School Day -4: unit testing in C. checkmk! Archives © Julia Evans. If you like this, you may like Ulia Ea or, more seriously, this list of blogs I love or some books I've read. You might also like the Recurse Center, my very favorite programming community (my posts about it)
en
en
1731036901
https://jvns.ca
Guhindura urubuga rwawe?
Uriko ukora iki?