N

Nikhil

nikhilism.com · Personal blog · on HN since 2016

Nikhil is a software engineer who writes about Smalltalk, Racket, deterministic builds, concurrency, and Linux containers.

What HN saysHN links it for posts on Smalltalk, Racket, and Windows deterministic builds. Commenters cite his build post, though one says it falls short of a truly reproducible C++ build.
17HN people shared it
7linked it in comments
20stories submitted
94story points
9 months agolast shared
2016people per year2026

Most-shared posts

  1. 1
    Experiencing Smalltalk
    4 people · 16 points · first shared 2021 · discussion on HN
  2. 2
  3. 3
    Racket Beyond Languages (2023)
    3 people · 3 points · first shared 2023 · discussion on HN
  4. 4
    Getting to Deterministic Builds on Windows
    3 people · 2 points · first shared 2021 · discussion on HN
  5. 5
    Why does my stack have an extra 4 bytes?
    2 people · 35 points · first shared 2017 · discussion on HN
  6. 6
    A Future Is a Suspending Scheduler
    2 people · 2 points · first shared 2020 · discussion on HN
  7. 7
    Mystery Knowledge and Useful Tools
    1 people · 17 points · first shared 2020 · 2 comments on HN
  8. 8
    Linux Application Container Fundamentals
    1 people · 3 points · first shared 2016 · discussion on HN
  9. 9
    A Bazel Persistent Worker for Rust
    1 people · 2 points · first shared 2020 · discussion on HN
  10. 10
    Remote Dbus Notifications over SSH
    1 people · 2 points · first shared 2023 · discussion on HN
  11. 11
    Working Through Gossip Glomers in Racket
    1 people · 1 points · first shared 2023 · discussion on HN
  12. 12
    Retrieving function arguments while unwinding the stack
    1 people · 1 points · first shared 2019 · discussion on HN
  13. 13
  14. 14
    Sampling profiler internals introduction
    1 people · first shared 2018
  15. 15
    Nudge skill
    1 people · first shared 2026

What HN people wrote when they linked it

nsm · 2024-04-26
I think Pharo would benefit a lot from having lots and lots of screen casts, since so much stuff is visual. I don't think something like ESUG is a sustainable way to spread techniques. A lot of stuff that is well documented in the Pharo ecosystem is old. A lot of the new stuff doesn't have great docs. Just reference docs and code is not enough. There has to be a coherent narrative around an API to put it together. Also, I'm all onboard having a UI environment for programming, but it needs to have great keybindings that follow platform HIGs, and at least my Pharo 10 experience of the window management was really bad. I wrote about this some https://nikhilism.com/post/2021/experiencing-smalltalk/
e12e · 2021-05-29
Nice tip, I started with something short - writing a screenshot utility: https://youtu.be/3BF-vUts3ws Ed: i really enjoyed the video, but I feel it could have been even better (and shorter) if he used a proper debugger for the second part. But I don't know if that is available in the os. The more I use a debugger, the more I realize I should use a debugger, and the earlier I should use a debugger. Advice/directions to start early with a debugger might be the best part of Zed Shaws "Learn C the hard way". Eg: https://github.com/zedshaw/learn-c-the-hard-way-lectures/blob/master/e… (not a full featured chapter, but note that this is fairly early - exercise 4). On a related note, it appears Shaw doesn't use the/any debugger at all in the ruby book, which is frankly quite crazy - ruby has great debuggers and repl. But that's a digression. For a blog post that illustrate how one might do "debug driven" (or "debug first) development, see: https://nikhilism.com/post/2021/experiencing-smalltalk/ (Smalltalk and lisp does this very well - you can't AFAIK quite go that far with c++, but it's what all systems should aspire to, as a baseline (70s debug experience) ).
peter_d_sherman · 2021-03-16
Related: https://bazel.build/faq.html >"What is Bazel? Bazel is a tool that automates software builds and tests. Supported build tasks include running compilers and linkers to produce executable programs and libraries, and assembling deployable packages for Android, iOS and other target environments. Bazel is similar to other tools like Make, Ant, Gradle, Buck, Pants and Maven. What is special about Bazel? Bazel was designed to fit the way software is developed at Google. It has the following features: Multi-language support: Bazel supports many languages, and can be extended to support arbitrary programming languages. High-level build language: Projects are described in the BUILD language, a concise text format that describes a project as sets of small interconnected libraries, binaries and tests. In contrast, with tools like Make, you have to describe individual files and compiler invocations. Multi-platform support: The same tool and the same BUILD files can be used to build software for different architectures, and even different platforms. At Google, we use Bazel to build everything from server applications running on systems in our data centers to client apps running on mobile phones. Reproducibility: In BUILD files, each library, test and binary must specify its direct dependencies completely. Bazel uses this dependency information to know what must be rebuilt when you make changes to a source file, and which tasks can run in parallel. This means that all…
skissane · 2017-01-23
Is someone in the US government really still using an IBM 7074? Really? I'm shocked. How could that possibly be cost-effective? Actually, this blog post makes the story clearer: http://nikhilism.com/post/2016/systems-we-love/ It isn't a physical IBM 7074. When it came time to migrate from 7074 to S/360, rather than rewriting their 7074 software, they just wrote a 7074 emulator for S/360. And, it sounds like, they are still running their 7074 software, under their 7074 emulator, most likely on a recent z/Architecture mainframe. The article makes it sound like people still use "1960s mainframes" when I very much doubt anyone is still running 1960s hardware in production. People use modern machines–modern IBM mainframes, which are multicore 64-bit processors–or other mainframe vendors such as Unisys or Fujitsu use mainly I believe x86-64 running Linux running a software emulator for the old mainframe CPU. A lot of legacy, sure, but I think this article makes it sound even more legacy than it really is.
groby_b · 2025-11-19
This is many useful things, but it's far from a reproducible C++ build. That'd require you ensure bit-for-bit identic builds when you reproduce, and logging the repository state is just a tiny first step to get there. https://nikhilism.com/post/2020/windows-deterministic-builds/ is a good resource on some of the other steps needed. It's... a non-trivial journey :)
KilledByAPixel · 2019-11-26
This is the JSCrush algorithm that I did not write and it is kind of magic. The uncompressor is crazy small. You can read more about it here... https://nikhilism.com/post/2012/demystifying-jscrush
nkozyra · 2019-04-05
Of course[1], but this tutorial isn't about the language, per se, you should be able to translate it pretty trivially. These sorts of tutorials are more about the inner workings of database operation; I recall doing something like this in grad school but you're reminded quickly how more complex databases are than you think about when all you're doing is using them. And hell, I'm not even that good at using them. [1] http://nikhilism.com/post/2016/writing-simple-database-in-rust-part-1/

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close