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
    D

    Dmitry Frank

    dmitryfrank.com · Personal blog · on HN since 2015

    Dmitry Frank, an embedded and systems programmer who writes about real-time kernels, C techniques, Go testing, and developer tools such as Nerdlog.

    Visit blogHN submissions
    ProgrammingHardware & ElectronicsSecurity
    What HN says

    HN commenters cite his U2F token backup write-up as a practical method, and discuss his tabs-versus-spaces piece and Nerdlog's log-rotation limits.

    Stats for nerds
    25HN people shared it
    45linked in comments
    1.5Kstory points
    Apr 2025last shared
    2015people per year2025

    Top posts on HN

    1. 1
      How I ended up writing a new real-time kernel (2015)
      4 people · 399 points · first shared 2015 · 17 comments on HN
    2. 2
      Why I love Go
      1 person · 248 points · first shared 2017 · 185 comments on HN
    3. 3
      Let’s Run Lisp on a Microcontroller
      2 people · 144 points · first shared 2016 · 10 comments on HN
    4. 4
      Object-oriented techniques in C
      2 people · 113 points · first shared 2015 · 72 comments on HN
    5. 5
      Mocking time and testing event loops in Go
      4 people · 109 points · first shared 2020 · 33 comments on HN
    6. 6
      Show HN: Geekmarks: An Open-Source, API-Driven, Geeky Bookmarking Service
      2 people · 98 points · first shared 2017 · 28 comments on HN
    7. 7
      Bulgaria Freelance Taxes: Detailed Breakdown
      1 person · 88 points · first shared 2022 · 128 comments on HN
    8. 8
      How JavaScript closures work under the hood
      1 person · 83 points · first shared 2015 · 16 comments on HN
    9. 9
      Reliable, Secure and Universal Backup for U2F Token
      5 people · 49 points · first shared 2018 · 73 comments on HN
    10. 10
      I'm tired of makefiles
      3 people · 41 points · first shared 2016 · 50 comments on HN

    What HN people wrote when they linked it

    • travisgriggsJan 2019

      We played with RIOT for a couple of months.

      For our current product, (and I would think a lot of IoT apps), power is king. We run on batteries, and getting back to idle/low power states as often as possible is crucial. I've found that a lot of the embedded RTOS often have tickless modes as an "add on." We had problems getting RIOT to a happy point with that for our chip (samd21).

      Like some of the other commenters, I've grown a real distaste for embedded RTOS frameworks that try to provide all kinds of layers. In order to be generic/cross platform, they always come up short in capability. The functionality that I'm looking for, is simply getting the basic threading/sync primitives to work well and right. Past that, I'm fine doing the chip IO parts myself. At the time, there was a debate on whether priority inversion was a problem RIOT should worry about or not.

      After FreeRTOS, and then RIOT, I found TNEO (https://dmitryfrank.com/articles/how_i_ended_up_writing_my_own_kernel). It's been a dream and rock solid for us. It does not come with a large make/build system. It's just C code. You tweak a couple of things, include one or two bits, and I was off to the races. Coupling it with Unity for testing and then writing ~200 unit tests that stressed all of its functionality was straightforward, helped me understand it even better, and gave me a high degree of confidence in its abilities. It's been super solid for us since. It does the one thing I need it to: MicroKernel for…

    • scrollawayJul 2016

      One of the main drivers for spaces is alignment, which you should never attempt to do with tabs (except in contexts which normalize tabstops, which generally excludes programming).

      Aligning within a line can and should be done with spaces. There's good reasons against alignment in such cases -- for example, it creates git blame/git diff noise when reformatting due to having to update alignment on a bunch of other lines just because you introduced a variable one character longer than the others. Irrelevant, though; such alignment is perfectly fine to do with spaces in a context where you indent with tabs.

      The other type of alignment is beginning-of-line alignment, which is indeed not doable with spaces. Some people recommend doing such alignment with spaces despite the tab indent (cf. http://dmitryfrank.com/articles/indent_with_tabs_align_with_spaces). It's a valid argument but I feel it's too much of an aberration to be taken seriously.

      I personally find such alignment generally repulsive anyway. Take a look at the following code and tell me which method looks better:

      http://sprunge.us/ZFHJ

      Too many times have I seen such function calls where the space between the parenthese and the soft wrap leaves <10 characters to work with. And here we go with one small argument per line, every argument preceded by 70+ spaces. I know programmers who could fit video games in the bytes used for just a single function call like that.

    • floatbothOct 2018

      USB/NFC tokens and phones/computers are all "loseable". There are cool ideas about backup tokens https://dmitryfrank.com/articles/backup_u2f_token but IMO they can't be the only way to sign in, there should be some way to restore access from nothing (I guess my specific paranoia is about being locked out :D)

      There are many specific auth "factors":

      - valid signature from an extrernal hardware token (U2F/WebAuthn via e.g. YubiKey)

      - valid signature from a device's embedded token/TPM (something like Touch ID / Windows Hello / Android keystore thing)

      - … as a WebAuthn implementation

      - … in response to a push notification on another device (Twitter, if they still have that)

      - … in response to a QR code (SQRL, Yandex.Key)

      - one-time code via push notification to another device (Apple)

      - one-time code generated from a shared secret key (TOTP)

      - one-time sign-in link via email (Tumblr)

      - passwords

      - secret questions (like extra passwords but worse)

      - behavior pattern analysis (IIRC Google showed an Android demo that looked at keyboard typing patterns and whatnot)

      A good auth system should combine multiple factors in a correct way to minimize both impersonation and lockout chances, and maximize usability. How? That's the challenge…

    • ecesenaMar 2019

      re: your thread.

      Today the backup practice is to enable 2 keys in all accounts: one that you keep with yourself, the other that you leave in a safe.

      There's been some experiments of creating copies of the master secret, e.g. [1]. Today you can do so either w/ u2f zero or with its upgrade solo hacker (note the hacker version), but we currently don't support it officially.

      My personal advice as of now is to always have security key(s) + totp code. The security keys protect you against phishing, so if you click on an email link and get prompted for login, you're either safe (if you use the security key) or at least reminded about the risk (if you're used to use the security key but you don't have it with you at the moment). Viceversa, if you're directly logging into a website and you typed the url yourself, then totp offers the same security, so it's a totally valid alternative. Hope this makes sense.

      [1] https://dmitryfrank.com/articles/backup_u2f_token

    • imdoorMay 2021

      In principle, there is a way for you to have U2F backup keys. Here's a great write-up https://dmitryfrank.com/articles/backup_u2f_token

      The basic idea is to have two U2F devices with with the same device_secret but one of the devices (the backup) is pre-programmed to add a large offset to the so called counter value. Upon login the service must check the counter value and ensure that the received value is greater than the one it's seen previously. If you happen to lose the first key, you can use the second key to log into all of the affected online services and upon doing so, the service would accept the new larger counter value and thereby invalidate the lost key.

    • vngzsMay 2022

      With a sufficiently programmable hardware key, yes, you can back up the secrets. See an enumeration of methods in [0]. Be careful if you plan on doing this; make sure the tradeoffs make sense to you. You probably want to do the programming from an airgapped, trustworthy Linux machine.

      Beware that if you do this and lose your primary key, or if it is stolen, then an attacker can impersonate you. Setting up multiple unique keys is probably more useful in general, even if it's more cumbersome.

      [0]: https://dmitryfrank.com/articles/backup_u2f_token

    Related

    John Regehrblog.regehr.org401 people

    Teaching C

    John Regehr
    Personal · last shared 2026
    ldpreloadldpreload.com34 people

    Finding a kernel regression in half an hour with git bisect run (2018)

    ldpreload
    Personal · last shared 2026
    Dmitry Grinbergdmitry.gr120 people

    I got almost all of my wishes granted with RP2350

    Dmitry Grinberg
    Personal · last shared 2026
    Chris Siebenmannutcc.utoronto.ca/~cks388 people

    Go is Google's language, not ours

    Chris Siebenmann
    Personal · last shared 2026
    Eli Benderskyeli.thegreenplace.net428 people

    Common Pitfalls in Go Benchmarking

    Eli Bendersky
    Personal · last shared 2026
    Easyperfeasyperf.net36 people

    Precise timing of machine code with Linux perf

    Easyperf
    Personal · last shared 2026
    John A. De Goesdegoes.net81 people

    Twitter's Fucked

    John A. De Goes
    Personal · last shared 2026
    Igor Ostrovskyigoro.com35 people

    Gallery of Processor Cache Effects

    Igor Ostrovsky
    Personal · last shared 2026