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

    Nikita Prokopov

    tonsky.me · Personal blog · on HN since 2014

    Nikita Prokopov, a Clojure developer and creator of the Fira Code font, writes about software quality, UI design, and web development.

    Visit blogRSSHN submissions
    Design & UXProgrammingWeb Development
    What HN says

    HN recommends it as a favorite blog, praises his Fira Code font, and values his coherent vision for front-end programming and his UI critiques.

    Stats for nerds
    273HN people shared it
    200linked in comments
    17Kstory points
    Jul 2026last shared
    2015people per year2026

    Top posts on HN

    1. 1
      In loving memory of square checkbox
      1 person · 2K points · first shared 2024 · 505 comments on HN
    2. 2
      Software Disenchantment (2018)
      25 people · 1.5K points · first shared 2018 · 488 comments on HN
    3. 3
      Hardest problem in computer science: centering things
      10 people · 1.4K points · first shared 2024 · 455 comments on HN
    4. 4
      Time to Upgrade Your Monitor
      27 people · 1.3K points · first shared 2020 · 1,013 comments on HN
    5. 5
      Chrome breaks the Web
      2 people · 1.2K points · first shared 2017 · 458 comments on HN
    6. 6
      Computers as I used to love them
      6 people · 998 points · first shared 2020 · 257 comments on HN
    7. 7
      Let’s fix font size
      6 people · 921 points · first shared 2021 · 347 comments on HN
    8. 8
      Local First, Forever
      7 people · 701 points · first shared 2024 · 280 comments on HN
    9. 9
      Redesigning GitHub Repository Page
      4 people · 614 points · first shared 2019 · 303 comments on HN
    10. 10
      Graphics for JVM
      5 people · 578 points · first shared 2020 · 365 comments on HN

    What HN people wrote when they linked it

    • helmholtzMay 2023

      First, the font that we are used to has an outsize impact on what we prefer. So, if neither of these 'sit right', don't worry.

      Digital font designers have to start out by choosing something called the em-height. This is a nonsense holdover from print days, and is especially infuriating because no one agrees on a standard em-height. Therefore, fonts look different despite being set to the same size. Here is a great rant on this: [1]

      Lucida Console has a large x-height, which is generally considered helpful in small-size legibility. But it has that in common with both Consolas and Jetbrains Mono.

      For me, I can use Consolas, Lucida Console and Jetbrains Mono all down to Size 10 in Git Bash on a shitty 13" 1080p laptop screen. Hence my comment that the ClearType hinting is glorious.

      [1]: https://tonsky.me/blog/font-size/

    • dmitriidSep 2020

      I will gather a lot of downvotes, but still: I find Swift a very haphazardly designed language with very little foresight and forethought. This is further compounded by its standard libraries which are directly lifted from MacOS with all of their idiosyncrasies and huge incompatible changes from version to version.

      For what it's worth, [1] [2] [3] [4]

      [1] A type system that can't cope with SwiftUI: https://tonsky.me/blog/swiftui/

      [2] More syntax to shake a stick at https://twitter.com/dmitriid/status/1276482336486576133

      [3] Even more syntax weirdness https://twitter.com/bradfitz/status/1285302091544576000

      [4] Standard library between versions: https://twitter.com/dmitriid/status/1201441652507844608 File manipulation functions on String, great design.

    • karteumJul 2025

      > Usually, what you want is either the byte or the grapheme cluster.

      Exactly ! That's what I understood after reading this great post https://tonsky.me/blog/unicode/

      "Even in the widest encoding, UTF-32, [some grapheme] will still take three 4-byte units to encode. And it still needs to be treated as a single character. If the analogy helps, we can think of the Unicode itself (without any encodings) as being variable-length."

      I tend to think it's the biggest design decision in Unicode (but maybe I just don't fully see the need and use-cases beyond emojis. Of course I read the section saying it's used in actual languages, but the few examples described could have been made with a dedicated 32 bits codepoint...)

    • kccqzyApr 2025

      This might have been a good example fifteen years ago. These days with high-DPI displays you can't perceive a difference between font smoothing being turned on and off. On macOS for example font smoothing adds some faux bold to the fonts, and it's long been recommended to turn it off. See for example the influential article https://tonsky.me/blog/monitors/ which explains that font smoothing used to do subpixel antialiasing, but the whole feature was removed in 2018. It also explains that this checkbox doesn't even control regular grayscale antialiasing, and I'm guessing it's because downscaling a rendered @2x framebuffer down to the physical resolution inherently introduces antialiasing.

    • strawsJun 2015

      Nikita Prokopov has presented a pretty cohesive vision for front-end programming in the cljs community. Even if you don't agree with all of his opinions, he's one of the only people assembling a big picture about how to write apps in this way. It's worth reading his blog:

      http://tonsky.me/

      An emphasis on low-level tooling and not enough discussion around high-level architecture/examples has hurt the react+cljs combo adoption from my point of view. It's the nature of Lisp to come up with your own abstractions around application architecture, but the community would be wise to talk more about solving common web patterns and how to cleanly break away from those patterns when necessary.

    • tomaskafkaFeb 2020

      > knowing that I can't accidentally bungle up the history. I'm always nervous about that when I use git

      I just read a great insight yesterday:

      > Understanding there’s no harm to be done eases things a lot. It encourages experimenting, which is one of the most effective ways to learn new things and to get familiar with them. Imagine this: you start rebase, mess things up, hit Ctrl+Z several times and try again. Good news is, we can implement Undo/Redo given just ordinary Git implementation. Git already stores all the possible states our repo was in. All Undo/Redo will have to do is to shuffle some branch pointers here and there.

      https://tonsky.me/blog/reinventing-git-interface/

    Related

    Yogthosyogthos.net45 people

    Why I'm Productive in Clojure (2013)

    Yogthos
    Personal · last shared 2026
    Nikita Sobolevsobolevn.me39 people

    Do Not Log

    Nikita Sobolev
    Personal · last shared 2025
    Niko Matsakissmallcultfollowing.com221 people

    Towards a Rust Foundation

    Niko Matsakis
    Personal · last shared 2026
    Victor Shepelev (zverok)zverok.space35 people

    Appeal to Ruby Community from Kharkiv Rubyist

    Victor Shepelev (zverok)
    Personal · last shared 2026
    Pavel Panchekhapavpanchekha.com24 people

    We'd be better off with 9-bit bytes

    Pavel Panchekha
    Personal · last shared 2026
    Valentin Waeselynckvvvvalvalval.github.io29 people

    What makes a good REPL?

    Valentin Waeselynck
    Personal · last shared 2025
    swyxswyx.io120 people

    AWS is playing chess, Cloudflare is playing Go

    swyx
    Personal · last shared 2026
    Nikita Popovnpopov.com36 people

    Design Issues in LLVM IR

    Nikita Popov
    Personal · last shared 2026