F
Feed Atlas
OPML directory + server-side RSS reader

jyn.dev

SiteRSSBlogs
Back

Latest posts

  • remotely unlocking an encrypted hard disk
    Jan 22, 2026 jyn

    Your mission, should you choose to accept it, is to sneak into the earliest parts of the boot process, swap the startup config without breaking anything, and leave without a trace. Are you ready? Let's begin. the setup In which our heroes are introduced, and the scene is set. For a very long time I had a beat-up old ThinkPad that couldn’t hold a charge for the life of it, especially when running

  • pre-commit hooks are fundamentally broken
    Dec 26, 2025 jyn

    Let's start a new Rust project. $ mkdir best-fizzbuzz-ever $ cd best-fizzbuzz-ever $ cat << EOF > main.rs fn main() { for i in 0.. { println ("fizzbuzz"); }} EOF $ git init Initialized empty Git repository in /home/jyn/src/third-website/best-fizzbuzz-ever/.git/ $ git add main.rs $ git commit --message fizzbuzz [main (root-commit) 661dc28] fizzbuzz 1 file changed, 4 insertions(+) create mode

  • i'm just having fun
    Dec 15, 2025 jyn

    IT IS ONLY COMPUTER Reilly Wood i work professionally on a compiler and write about build systems in my free time and as a result people often say things to me like "reading your posts points to me how really smart you are" or "reading a lot of this shit makes me feel super small". this makes me quite uncomfortable and is not the reaction i'm seeking when i write blog posts. it's not a competiti

  • what is a build system, anyway?
    Dec 12, 2025 jyn

    Andrew Nesbitt recently wrote a post titled What is a Package Manager? This post attempts to do the same for build systems. big picture At a high level, build systems are tools or libraries that provide a way to define and execute a series of transformations from input data to output data that are memoized by caching them in an object store. Transformations are called steps or rules 1 and define

  • I want a better build executor
    Dec 05, 2025 jyn

    This post is part 4/4 of a series about build systems. The market fit is interesting. Git has clearly won, it has all of the mindshare, but since you can use jj to work on Git repositories, it can be adopted incrementally. This is, in my opinion, the only viable way to introduce a new VCS: it has to be able to be partially adopted. Steve Klabnik If you've worked with other determinism-based sy

  • I want a better action graph serialization
    Dec 04, 2025 jyn

    This post is part 3/4 of a series about build systems. The next post and last post is I want a better build executor. As someone who ends up getting the ping on "my build is weird" after it has gone through a round of "poke it with a stick", I would really appreciate the mechanisms for [correct dependency edges] rolling out sooner rather than later. mathstuf what does "action graph" mean? In a

  • negative build dependencies
    Dec 03, 2025 jyn

    This post is part 2/4 of a series about build systems. The next post is I want a better action graph serialization. This post is about a limitation of the dependencies you can express in a build file. It uses Ninja just because it's simple and I'm very familiar with it, but the problem exists in most build systems. Say you have a C project with two different include paths: dependency/include and s

  • brownouts reveal system boundaries
    Nov 19, 2025 jyn

    One of the many basic tenets of internal control is that a banking organization ensure that employees in sensitive positions be absent from their duties for a minimum of two consecutive weeks. Such a requirement enhances the viability of a sound internal control environment because most frauds or embezzlements require the continual presence of the wrongdoer. Federal Reserve Bank of New York Fa

  • the terminal of the future
    Nov 11, 2025 jyn

    Terminal internals are a mess. A lot of it is just the way it is because someone made a decision in the 80s and now it’s impossible to change. Julia Evans This is what you have to do to redesign infrastructure. Rich [Hickey] didn't just pile some crap on top of Lisp [when building Clojure]. He took the entire Lisp and moved the whole design at once. Gary Bernhardt a mental model of a termina

  • build system tradeoffs
    Nov 02, 2025 jyn

    This post is part 1/4 of a series about build systems. The next post is negative build dependencies. If I am even TEMPTED to use sed, in my goddamn build system, you have lost. Qyriad I am currently employed to work on the build system for the Rust compiler (often called x.py or bootstrap). As a result, I think about a lot of build system weirdness that most people don't have to. This post aims

  • the core of rust
    Aug 21, 2025 jyn

    NOTE: this is not a rust tutorial. Every year it was an incredible challenge to fit teaching Rust into lectures since you basically need all the concepts right from the start to understand a lot of programs. I never knew how to order things. The flip side was that usually when you understand all the basic components in play lots of it just fits together. i.e. there's some point where the interwove

  • how to communicate with intent
    Aug 11, 2025 jyn

    As you can see from this blog, I like to talk (my friends will be the first to confirm this). Just as important as knowing how to talk, though, is knowing what to say and when to listen. In this post I will give a few simple tips on how to improve your communication in various parts of your life. My goal is partly to help you to be a more effective communicator, and partly to reduce the number of

  • an engineer's perspective on hiring
    Aug 08, 2025 jyn

    note for my friends: this post is targeted at companies and engineering managers. i know you know that hiring sucks and companies waste your time. this is a business case for why they shouldn't do that. hiring sucks most companies suck at hiring. they waste everyone’s time (i once had a 9-round interview pipeline!), they chase the trendiest programmers, and they can’t even tell programmers apart

  • you are in a box
    Jul 14, 2025 jyn

    You are trapped in a box. You have been for a long time. D. R. MacIver Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can. Zawinski's Law of Software Envelopment switching costs and growth most tools simultaneously think too small and too big. “i will let you do anything!”, they promise, “as long as you give up your

  • constrained languages are easier to optimize
    Jul 12, 2025 jyn

    jyn, what the fuck are you talking about a recurring problem in modern “low-level” languages1 is that they are hard to optimize. they do not reflect the hardware, they require doing complex alias analysis, and they constantly allocate and deallocate memory. 2 they looked at the structure/expressiveness tradeoff and consistently chose expressiveness. what does a faster language look like consider

  • sorry for the rss screwup
    Jul 06, 2025 jyn

    a couple days ago i pushed about 10 empty posts at once to everyone subscribed to my RSS feed. oops. sorry about that. i've since fixed it, but most RSS readers i've seen will cache the posts indefinitely once they're published. the workaround for my own client was to delete my page and then readd it, which will unfortunately discard all your read/unread state. the reason this happened is that i a

  • operators, not users and programmers
    Jul 05, 2025 jyn

    the modern distinction between “programmers” and “users” is evil and destroys agency. consider how the spreadsheets grow spreadsheets are hugely successful. Felienne Hermans, who has spent her career studying spreadsheets, attributes this success to "their immediate feedback system and their continuous deployment model": the spreadsheet shows you its result as soon as you open it, and it requires

  • complected and orthogonal persistence
    Jun 30, 2025 jyn

    Everything Not Saved Will Be Lost—Ancient Nintendo Proverb persistence is hard say that you are writing an editor. you don't want to lose people's work so you implement an "autobackup" feature, so that people can restore their unsaved changes if the program or whole computer crashes. implementing this is hard! the way i would do it is to serialize the data structures using something like bincode

  • how i write blog posts
    Jun 18, 2025 jyn

    this isn’t about about blogging engines, don’t worry. there’s already plenty of writing about those. i use zola, i am mildly dissatisfied with it, i don’t care enough to switch. no, this is how i actually write. i have an um. eccentric setup. in particular, i can write draft posts from any of my devices—desktop, laptop, phone—and have them show up live on a hidden subdomain of jyn.dev without any

  • how i use my terminal
    Jun 16, 2025 jyn

    this is a whole blog post because it is "outside the overton window"; it usually takes at least a video before people even understand the thing i am trying to describe. so, here's the video: the steps here that tend to surprise people are 0:11 , 0:21 , and 0:41 . when i say "surprise" i don't just mean that people are surprised that i've set this up, but they are surprised this is possible at all

  • theory building without a mentor
    May 24, 2025 jyn

    NOTE: if you are just here for the how-to guide, click here to skip the philosophizing. theory building Peter Naur wrote a famous article in 1985 called Programming as Theory Building. it has some excellent ideas, such as: programming must be the programmers’ building up knowledge of a certain kind, knowledge taken to be basically the programmers’ immediate possession, any documentation being an

  • technical debt is different from technical risk
    May 23, 2025 jyn

    technical debt is commonly misunderstood the phrase "technical debt" at this point is very common in programming circles. however, i think the way this phrase is commonly used is misleading and in some cases actively harmful. here is a statement of the common usage by a random commenter on my fediverse posts: tech debt is [...] debt in the literal sense that you took a shortcut to get to your pro

  • sftp sandboxing
    May 05, 2025 jyn

    consider the following problem: you want to share a 300 MB directory with a single other person, not publicly over a public network any hosting service that lets you serve 300 MB costs money. also, for sufficient file sizes the wasted upload becomes noticeable. it would be much nicer if we could peer-to-peer this. sftp to the rescue! small problem: sftp shows you a lot of the system state. for one

  • tools
    May 03, 2025 jyn

    i care a lot about my tools. i have very high standards for tools along some axes, and low standards along others—but that's the topic of a different blog post. this post is about the tools i do use, and about tools i have my eye on and may use in the future. hopefully it will be useful to other people, such as programmers, sysadmins, etc. this is also not a description of how i use these tools, w

  • Terrible Horrible No Good Very Bad Python
    Mar 28, 2025 jyn

    time for everyone's favorite game!! what does this code do? def foo(): try: return os._exit() finally: return False import os foo() does it: return None return False throw an exception exit the process without printing anything something even more devious sit with it. have a good think. explain your answers. ready? ok fine what does it do returns False. want to know why? yes just tel

  • Scheduling Do-Not-Disturb in GNOME
    Feb 22, 2025 jyn

    Do Not Disturb GNOME has a little button that lets you turn on Do-Not-Disturb for notifications: Unfortunately, it has no way of scheduling DnD. Good news, though! It does support turning on DnD through the CLI: gsettings set org.gnome.desktop.notifications show-banners false. I put that in a script named toggle-dnd in my dotfiles: $ cat bin/toggle-dnd #!/bin/sh case ${1:-} in # "show-banners"

  • building your own
    Oct 24, 2024 jyn

    a deeper rabbit hole than expected what happens when you run cargo clippy? well, we can ask cargo what it does: $ cargo clippy -v Checking example v0.1.0 (/home/jyn/src/example) Running `/home/jyn/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/clippy-driver /home/jyn/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/bin/rustc --crate-name example --edition=2021 src/main.rs --e

  • the rust project has a burnout problem
    Jan 16, 2024 jyn

    the number of people who have left the rust project due to burnout is shockingly high. the number of people in the project who are close to burnout is also shockingly high. this post is about myself, but it's not just about myself. i'm not going to name names because either you know what i'm talking about, in which case you know at least five people matching this description, or you don't, in whic

  • wonder
    Dec 20, 2023 jyn

    this is a list of the times this year i felt wonder or joy. it's not exhaustive. it's mostly for me. but it's also for others, because i think a sense of wonder is a wonderful thing, and i wish it were valued more highly. i want to give a very special thanks to my friends Nori, Kate Crane, and Kate F, for showing me how much beauty there is in the world. wonder things i have seen i took this ph

  • How to maintain an Open Source project
    Dec 04, 2023 jyn

    Open source is unique in that energy, not time or money, is the limiting factor. The existential threats are maintainer burnout and an imploding community, not failing to make payroll. As a result, it’s very important to do three things: Recruit new maintainers as frequently as possible. Ruthlessly prioritize the energy of existing maintainers. Be kind to your users. All other concerns are in some

  • Why is Rust's build system uniquely hard to use?
    Jan 12, 2023 jyn

    This post will assume you have watched https://www.youtube.com/watch?v=oUIjG-y4zaA. You may also find it helpful to read https://rustc-dev-guide.rust-lang.org/building/bootstrapping/what-bootstrapping-does.html#stages-of-bootstrapping, but I won't assume prior knowledge of the information there. Why is bootstrap confusing? People get confused by Rust's build system a lot. I have been trying for a

  • Git cheats
    Sep 02, 2022 jyn

    A small note: this will be much less organized and thought out than my other blog posts because I have been unable to convince myself to write a blog in about 2 years. Instead these are some notes to myself that happen to be public for anyone who finds them useful. A small note written after spending 5 minutes on this post: holy shit this is so deranged I'm turning into Gankra lmao Git big fan of

  • async() => { await }
    Feb 09, 2022 jyn
  • I'll Rust With You: the song
    Sep 10, 2021 jyn

    I'll Rust With You: the song Niko Matsakis, co-lead for the Rust language team, recently published a song titled "Edition: the song". I decided I was not to be outdone and sang a cover of "I'll Rust With You", by Steam Powered Giraffe. The song has absolutely no relation to the Rust language other than the title, I just think it's fun. Video

  • borrow-checker FAQs
    Mar 20, 2021 jyn

    I got lots of positive feedback about the FAQ section in my Rust 2020 blog post, so I'm trying that format again for another topic that's been requested a lot: How to fix common borrow-checker issues. This isn't meant to explain how or why the borrow checker works the way it does (see The Nomicon or Two Beautiful Rust Programs for that), just how to work around some of its current limitations. In

  • and other valid rust programs
    Dec 08, 2020 jyn

    This is a story about type signatures, Higher Ranked Trait Bounds (HRTB), and the most confusing diagnostics bug I've seen in the Rust compiler. Along the way we'll learn how pulldown-cmark has been trying to fix the same API for 3 different releases, and discover that some bugs only appear at the compile time of downstream crates. If you don't know what some of the words mean, there is an appendi

  • The intra-doc links saga
    Oct 23, 2020 jyn

    One of my projects for the last 4 months or so has been working on 'intra-doc links', a feature of rustdoc that lets you link to items by name. That feature will be stable in 4 weeks in Rust 1.48.0! @Manishearth and I wrote a longer blog post about intra-doc links which you can read on the official Rust blog.

  • Rust in 2021
    Sep 05, 2020 jyn

    Who is this guy anyway? Hello, it's me! I'm a somewhat new contributor to Rust and I'm about three blog posts behind. Here they are all at once: I work on docs.rs! I wrote a C compiler in Rust I spend way too much time working on intra-doc links I help make it easier to contribute to the Rust compiler Wait, we're writing a blog post here. In particular I want to talk about that last point. I spe

  • Building Docs.rs
    Nov 26, 2019 jyn

    What is docs.rs? docs.rs is a site dedicated to hosting documentation for Rust projects. It automatically builds documentation for every package published to crates.io using cargo and rustdoc. Unfortunately, because rustdoc is tied so closely to the compiler, this requires building every package from source using cargo doc. As a result, I've heard several members of the docs.rs team describe it a

  • Intro to C
    Nov 05, 2019 jyn
  • Intro to Linux
    Sep 16, 2019 jyn
  • Intro to Python
    Sep 11, 2019 jyn
  • Fun with gaming on Linux
    Aug 04, 2019 jyn

    The Problem As my family frequently reminds me, most of my tech problems are of my own making. For instance, I wanted to play Civilization 5 with a friend of mine through Steam. I have a Linux/Windows dual-boot with a shared NTFS partition so that I can share files between the operating systems. I run Linux by default. I also have Hibernate disabled on Windows because I can't use the shared parti

  • Buffer Overflows and Stacks and Assembly, Oh My!
    Apr 29, 2019 jyn

    Google has a 'Intro' Capture The Flag competition at https://capturetheflag.withgoogle.com/#beginners/. I've been trying it out because, why not? The challenges aren't easy by any means - they range from javascript crypto (let me know if you find out how to break JS Safe!) to SQL injections to steganography. The challenge this post about, however, is a reverse engineering challenge: three, in fact

  • Reverse Engineering x86 assembly
    Sep 29, 2018 jyn

    Intro For those of you not familiar with the C toolchain, it goes something like this: Source -> preprocessed source -> assembly -> object file -> binary The second step (preprocessed -> assembly) is the hardest to undo. It removes labels, debug symbols, and turns a high-level control flow into assembly instructions. However, since you need a binary to run a program, if you can undo that step, yo

  • Keepass on Linux and Android
    Aug 24, 2018 jyn

    Previously, I wrote about using a password manager. However, the disadvantage of using an audited, local manager like Keepass is that it's hard to share passwords between devices. You can put the encrypted database in a file-sharing service like Google Drive, but that means you need a sync client on all of your devices, and Google doesn't have one for Linux. Fortunately, it's Linux, so there are a

  • Rewriting Jython
    Jun 09, 2018 jyn

    Intro Have you heard of Jython? It's a variant of Python written in Java instead of C; it lets you use native Java classes in python code. The most common use case is integration with large existing Java codebases: You can reuse Java code and still get the readability and conciseness of python. I was thinking about types in Python, particularly how it allows primitive operators to be overridden (

  • Copying Generic Arrays in Java
    Mar 29, 2018 jyn

    Intro Copying an array. It sounds so simple - run a quick for loop, or better yet, System.arraycopy. System.arraycopy(array, 0, tmp, 0, array.length); What if you need to perform a destructive operation? [1] In my Data Structures class, we're asked to implement heap sort without modifying the original array. This is simple enough: use array.clone. It preserves the order of the original array whi