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
    R

    Robert Elder

    blog.robertelder.org · Personal blog · on HN since 2015

    Robert Elder writes technical posts on Linux, C, hardware, and algorithms, often with interactive visualizations.

    Visit blogRSSHN submissions
    Systems & PerformanceOpen Source & LinuxProgramming
    What HN says

    HN commenters recommend it as a Linux systems blog, praising his series on making a CPU, and link his posts on comm and signed ints.

    Stats for nerds
    61HN people shared it
    126linked in comments
    6.9Kstory points
    Jan 2025last shared
    2015people per year2025

    Top posts on HN

    1. 1
      A Guide to Recording 660FPS Video on a $6 Raspberry Pi Camera
      5 people · 738 points · first shared 2019 · 100 comments on HN
    2. 2
      How to make a CPU – a simple picture-based explanation
      4 people · 609 points · first shared 2021 · 169 comments on HN
    3. 3
      How to Get Fired Using Switch Statements and Statement Expressions
      6 people · 449 points · first shared 2016 · 132 comments on HN
    4. 4
      Don Libes' Expect: A Surprisingly Underappreciated Unix Automation Tool
      2 people · 349 points · first shared 2016 · 102 comments on HN
    5. 5
      Why Is It So Hard to Detect Keyup Event on Linux?
      4 people · 321 points · first shared 2019 · 131 comments on HN
    6. 6
      A common mistake involving wildcards and the find command
      2 people · 293 points · first shared 2020 · 143 comments on HN
    7. 7
      Scandalous Weird Old Things About The C Preprocessor (2015)
      4 people · 276 points · first shared 2015 · 41 comments on HN
    8. 8
      Stories and Tips: Interviews with Facebook, Twitter, Amazon and Others
      2 people · 224 points · first shared 2016 · 85 comments on HN
    9. 9
      Jeri Ellsworth and the Robot Uprising of 2038
      2 people · 215 points · first shared 2018 · 65 comments on HN
    10. 10
      An introduction to data processing on the Linux command line
      2 people · 212 points · first shared 2019 · 71 comments on HN

    What HN people wrote when they linked it

    • deathanatosSep 2015

      > Use `signed char` for strings

      If you're dealing with POSIX / the C stdlib, mirror it and use char* . (The string version of "Respect the integer types used by each API."; if you're coding for Windows you'll likely need to use LPWSTR or whatever they call it now.) But: if you're storing UTF-8 string data, you _want_ unsigned char (and maybe uint8_t[2]): if start trying to inspect the code units, esp. to decode them to code points, you're going to need to do comparisons and bit manipulations on them, and its too easy to write `code_unit < 0x80` or something similarly silly (e.g., while masking bits to see if it's a continuation byte). It's like the article early today called "Should I use Signed or Unsigned"[1] states: "Prefer unsigned when using bitwise operators".

      > Limit recursion

      Recursion is fine; you simply need to be aware of your worst case stack depth. You're looking, really, for the complexity of your stack usage, or the big-oh of your stack size. If you're doing something like recursing down an in-memory balanced binary tree, it's O(log(n)) in the worst case: ~64 stack frames on a 64-bit CPU. Can you fit that many on the stack? Certainly that's heavier than a normal function call, but it's still a finite, computable size.

      If you can't compute that / prove an upper bound, then I agree.

      > Aside: any language that uses keywords like public and private to determine visibility instead of placement/scoping is bad

      If not with keywords, how should visibility be…

    • TheOtherHobbesAug 2016

      No, it's not about stuff you know.

      This was posted recently, but it was so good it's worth repeating:

      http://blog.robertelder.org/50-interviews-with-facebook-twitter-amazon-others/

      The interesting point is the distinction between skill and talent.

      Skill is close to competence. You can solve well-defined problems using standard tools and practices.

      Talent is close to proficiency. You can not only improvise good solutions for novel problems, but you can also prioritise problems intelligently to achieve strategic goals, because you have a clear view of how the codebase fits into your business or project.

      Without talent you can waste a lot of time by picking the wrong tools, or using tools in the wrong ways. Even though your code may be perfectly correct, the solution built with the code can still be completely wrong or useless.

      In fact talent is somewhat orthogonal to skill. You can have an untrained version of that overview talent, but it's not so useful if it isn't grounded in skill.

      When you have both, you have real proficiency - good code doing the right things to solve the right problems.

    • GehinnnNov 2022

      I just worked on a new diff algorithm for VS Code, in particular for the new merge editor (you can turn it on with "diffEditor.diffAlgorithm": "experimental").

      Diffing is hard and there are many subtleties (e.g. https://github.com/microsoft/vscode/issues/164370).

      The space efficient Myers diff algorithm has some problems when using it for merging, as tiny changes at the beginning of a file can cause a different path selection later on. Also, Myers doesn't minimize the number of hunks (only their total length), which sometimes leads to unnatural outcomes.

      If anybody has good ideas for more advanced diffing algorithms, I'm all ears! (maybe even tree based ones, like difftastic)
      It's already very difficult to objectively evaluate the quality of a diff or to see if improving the diff for a special case doesn't make the average case worse.

      As for the visualization of Myers, I can recommend to have a look at https://blog.robertelder.org/diff-algorithm/.

    • cannamAug 2022

      I agree with the content of this article, but all the same my advice is usually the opposite - for reasons that its author sets out rather well in the table in his follow-up article (https://blog.robertelder.org/signed-or-unsigned-part-2/)

      I wrote a little piece about this myself once (http://soundsoftware.ac.uk/c-pitfall-unsigned.html)

      I suppose I would loosely characterise my view as

      - if your profession is "C programmer" and you really know what you're doing, you probably want to use unsigneds most of the time

      - if your profession is something else, e.g. signal processing researcher who has to translate an algorithm to C or C++, you are probably better off not using unsigneds at all.

    • PuffinBlueMar 2024

      This seems like the perfect opportunity to introduce those unfamiliar to Robert Elder. He makes cool YouTube[0] and blog content[1] and has a series on regular expressions[2] and does some quite deep dives into the differing behaviour of the different tools that implement the various versions.

      His latest on the topic is cool too: https://www.youtube.com/watch?v=ys7yUyyQA-Y

      He's has quite a lot of content that HN folks might be interested in I think, like the reality and woes of consulting[3]

      [0] https://www.youtube.com/@RobertElderSoftware

      [1] https://blog.robertelder.org/

      [2] https://blog.robertelder.org/regular-expressions/

      [3] https://www.youtube.com/watch?v=cK87ktENPrI

    • fuzztesterAug 2024

      ha ha, i laughed at that one too, the "procrastinate on work until the last day" example.

      csplit stand for context split, iirc.

      there is also the split command. it splits on the basis of number of lines, which can be specified in various ways.

      didn't know about the '--filter' flag earlier. it allows you to filter each output file through some other command. useful.

      https://blog.robertelder.org/intro-to-split-command/

      https://man7.org/linux/man-pages/man1/split.1.html

    Related

    Chris Siebenmannutcc.utoronto.ca/~cks388 people

    Go is Google's language, not ours

    Chris Siebenmann
    Personal · last shared 2026
    Chris Wellonsnullprogram.com295 people

    Why Aren't There C Conferences?

    Chris Wellons
    Personal · last shared 2026
    Rob Landleylandley.net125 people

    What is Toybox?

    Rob Landley
    Personal · last shared 2026
    Rob Pikecommandcenter.blogspot.com216 people

    Go: What we got right, what we got wrong

    Rob Pike
    Personal · last shared 2026
    SVDS Blogsvds.com27 people

    Ethereum: Rise of the World Computer

    SVDS Blog
    Company · last shared 2021
    Arm Community Blogcommunity.arm.com147 people

    An update on GNU performance

    Arm Community Blog
    Company · last shared 2025
    Dan Luudanluu.com1.2k people

    We only hire the trendiest

    Dan Luu
    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