Skip to content
HomeVideosBooksBlogs
AllTop postsTopics
Podcasts
HistoryListsWatch laterLiked videosFollowing

The videos, books, blogs and podcasts Hacker News keeps recommending, all in one place.

VideosBooksBlogsPodcastsAboutPrivacySettings

Data from Hacker News, HackerTube, HackerBooks, HackerBlogs and Open Library. Credits · Not affiliated with Y Combinator.

HomeVideosBooksBlogsPodcasts
Ctrl K
    W

    Waleed Khan

    blog.waleedkhan.name · Personal blog · on HN since 2021

    Waleed Khan, a software engineer who writes about Git tooling, Rust, and query languages, and built git-branchless.

    Visit blogRSSHN submissions
    ProgrammingOpen Source & LinuxLanguages & Compilers
    What HN says

    HN commenters cite his git undo post as evidence Git needs better UX, and point to his commit-stack formatting and SQL talk posts.

    Stats for nerds
    19HN people shared it
    28linked in comments
    1.1Kstory points
    Nov 2025last shared
    2021people per year2025

    Top posts on HN

    1. 1
      Git undo: We can do better
      4 people · 764 points · first shared 2021 · 476 comments on HN
    2. 2
      Automatically detecting and replying to recruiter spam
      2 people · 124 points · first shared 2021 · 106 comments on HN
    3. 3
      Fast rebases with git-move
      4 people · 95 points · first shared 2021 · 74 comments on HN
    4. 4
      Bringing Revsets to Git
      1 person · 40 points · first shared 2022 · 3 comments on HN
    5. 5
      The Rust module system for Python users
      1 person · 33 points · first shared 2021 · 3 comments on HN
    6. 6
      Incrementally porting a small Python project to Rust
      2 people · 6 points · first shared 2021 · Discussion on HN
    7. 7
      "Will I ever use this in the real world?"
      2 people · 5 points · first shared 2025 · Discussion on HN
    8. 8
      Half my work is adding a cache
      2 people · 5 points · first shared 2025 · Discussion on HN
    9. 9
      Encoding ML-style modules in Rust
      2 people · 3 points · first shared 2023 · Discussion on HN
    10. 10
      The USB-C Dream
      1 person · 3 points · first shared 2021 · Discussion on HN

    What HN people wrote when they linked it

    • steveklabnikFeb 2025

      > So jj calls commits "changes", and this is less confusing?

      Sort of. It has both changes and commits, actually. (and sometimes commits are called revisions.)

      jj log @ muzrswxs steve@steveklabnik.com 2025-02-12 10:23:11 85b41b31 │ (empty) (no description set) ○ wotxrwpp steve@steveklabnik.com 2025-02-12 10:23:09 24ce0a16 │ (empty) (no description set) ○ ztxxskuu steve@steveklabnik.com 2025-02-11 18:20:56 1b3e12ac │ run sqlx migrate as part of deploy process ◆ qwovsnvt steve@steveklabnik.com 2025-02-11 17:45:24 trunk b224ca8b │ <redacted> Okay, so muzrswxs is a change ID. It's true that we're connecting changes in a graph, and that that forms history. So in that sense, it's like a git commit. But because changes are mutable (well, the ○ ones and @ are, the ◆ there is not), they are implemented as a sequence of commits. So if you look on the far right there, you'll see 85b41b31 and then below it, 24ce0a16. Below that, 1b3e12ac. These are commit IDs.

      The first two changes are empty, so what happens if we modify a file?

      jj log @ muzrswxs steve@steveklabnik.com 2025-02-12 10:28:18 404a73b1 │ (no description set) ○ wotxrwpp steve@steveklabnik.com 2025-02-12 10:23:09 24ce0a16 │ (empty) (no description set) ○ ztxxskuu steve@steveklabnik.com 2025-02-11 18:20:56 1b3e12ac │ run sqlx migrate as part of deploy process ◆ qwovsnvt steve@steveklabnik.com 2025-02-11 17:45:24 trunk b224ca8b │ …

    • TuringTestApr 2022

      I think the crux is that any complex data structure f1 using glyphs would not need to be updated explicitly in an imperative program through a function like updateFontInGlyph; the runtime would do it as part of its semantics. Of course that's a double-edged sword, as you may get undesired side effects as well as the desired ones like this.

      There are ways to achieve such "automatic updating" of items in a functional data structure, but you need to build them explicitly instead of relying on the runtime, which gives you more responsibility but also more control. The most direct approach as compared to imperative code would be to build the data structure on top of mutable state-based streams, though there are other possibilities like monotonic or immutable structures.

      https://blog.waleedkhan.name/monotonicity/

    • hardwaregeekMar 2023

      IMO git would be way better with different naming and some UX improvements. Like a git undo[1] command, or renaming git reflog (git usage or git cmdlog), git blame (git author), and so on. Also stuff like the index, while great for experienced developers, leads to a lot of confusion early on.

      I'd love a command pallet where you could search for basic behavior in plain text like "reset my branch to GitHub's copy" or "only rebase two commits" and have it find the magic incantation.

      [1]: https://blog.waleedkhan.name/git-undo/

    • arxanasNov 2025

      Just gave a talk about this: https://blog.waleedkhan.name/what-if-sql-were-good/

      - Recommend Ascent (Rust only, but supports targeting WASM)

      - Soufflé: good, but too hard to integrate into existing systems; lots of ergonomic problems in comparison to Ascent (can elaborate)

      - CozoDB: really cool but seems to be abandoned

      - Logica: have not tried it yet

    • chrishill89Dec 2024

      You want to rewrite each commit snapshot in isolation? Like fix the formatting for each?

      Sounds like `git test fix` from git-branchless.

      https://blog.waleedkhan.name/formatting-a-commit-stack/

    • sa1Oct 2021

      If it was that easy, https://blog.waleedkhan.name/git-undo/ wouldn't be a thing.

    Related

    Dustin Ingramdustingram.com16 people

    Powering the Python Package Index in 2021

    Dustin Ingram
    Personal · last shared 2025
    Llogiqllogiq.github.io43 people

    Rust Performance Pitfalls

    Llogiq
    Personal · last shared 2026
    Manish Goregaokarmanishearth.github.io97 people

    Picking Apart the Crashing iOS String

    Manish Goregaokar
    Personal · last shared 2026
    Ralf Jungralfj.de99 people

    There is no memory safety without thread safety

    Ralf Jung
    Personal · last shared 2026
    Andrew Gallantblog.burntsushi.net141 people

    My FOSS Story

    Andrew Gallant
    Personal · last shared 2026
    Bluish Coderbluishcoder.co.nz77 people

    Using Freenet

    Bluish Coder
    Personal · last shared 2025
    Yossarianblog.yossarian.net72 people

    We should all be using dependency cooldowns

    Yossarian
    Personal · last shared 2026
    Eric Kiddrandomhacks.net65 people

    Rust lifetimes: Getting away with things that would be reckless in C++

    Eric Kidd
    Personal · last shared 2026