Domain expertise is a funny thing. Before developing some expertise in a
domain, we often judge tools from that domain based on their ease-of-use. Think
of the controls of a consumer road car compared to a Formula One race car. The
consumer car is “better” because it’s intuitive to use, teenagers get the hang
of it in a few weeks. If all you need is to commute…
Let us consider for a moment the construction of an operation in C++26’s
 std::execution (hereafter exec ). 1 In such a construction we need several
things: we need a sender , the source of an operation; and a receiver , the
sink of an operation. We combine them with exec::connect(sender, receiver) to
form an operation state ( op_state ). 
 The resulting object captures…
I think it’s clear that ASIO is both one of the most important libraries in C++
yet to achieve standardization, and one of the worst documented C++ libraries to
ever hold such a prestigious position. Trying to learn the ins-and-outs of
ASIO’s model without spending arduous amounts of time reading the source code is
borderline impossible. Learning the best practices for…
Python isn’t slow. The core eval loop ,
while slower than a JIT, is no slouch when it comes to dispatching bytecode.
There is no reason that business logic written in Python which orchestrates the
operation of highly optimized extension libraries should be a bottle neck. 
 
 
 
 
 
 
 Time is precious, get to the point
 
 
 
 
…
SystemVerilog is a strange language. Students of computer science frequently
struggle when they first encounter it, because if you squint and turn your head
 just so it looks like a programming language. However, the parts of the
language commonly known as “the synthesizable subset” have very little to do
with programming. 
 SystemVerilog does exactly what it says…
There is
 a five year old CMake bug 
describing the need for a “cookbook” to walk users through
effective packaging of CMake projects. As with so many corners of CMake 
usage, the technical documentation extensively describes how everything works,
but gives no hints to which components of the extensive CMake ecosystem
should be used. Inevitably, projects end up…
The visitor pattern is an
esoteric programming pattern that has never been widely popular. No one
seems to be totally certain on what it’s good for, as demonstrated by the
diversity of opinions found on StackOverflow .
One notable quote from the software engineering StackExchange 
sums up the vibe: 
 
 Visitor pattern has the most narrow use and almost never will…
In the Reddit comments for the original Command Line Flags post 
there was an interesting discussion about what to do for positional parameters
when the user wants to pass an argument that matches an existing flag.
 /u/AlmaemberTheGreat pointed out 
the standard way to do this in the Unix world is to handle a pseudo-flag: -- . 
 The intent being when -- is encountered the…
You are programming a tool in C++. Not a huge tool, not a tool where you care
enough about performance to say, use faster data structures than those provided
by the standard library, but one where you feel compelled to add some useful
options. After a brief and uninspiring survery of the field you settle on the
old standard for implementing program settings, you’re going to…
Tandon’s CS program, unlike CAS and the majority of other schools with CS programs, does not have any sort of CS placement. Officially, the only course an incoming CS/CE/ECE major can skip is the very first Intro course with an AP CS exam score of 4 or 5. Unofficially, you can skip all of the requirements of any of the majors so long as you get enough credits in the required course work by…

 The bureaucracy is expanding to meet the needs of the expanding bureaucracy. 
 — Oscar Wilde 
 
 Bureaucracy in the mind of the average American is typically a prescriptive 
arm of government. It is the clerk at the DMV, demanding yet one more proof of
identity, or the stamp of approval from the county’s Building Code Advisory
Board to put up a shed in the…
For those who have never ventured into the dark underworld of the Python
C‑Extension API, you may believe that it is as fluid and rewarding as
the rest of the Python ecosystem. I regret to inform you that this is not the
case. Line 13 of The Zen of Python 
says: 
 
 There should be one – and preferably only one – obvious way to do it. 
 
 The C‑Extension…
What follows is the personal statement that I submitted to Columbia and NYU as
part of my college applications. I was always going to end up talking about the
Navy, submarines, and the nuclear pipeline. It was my life for the past six
years, there was no avoiding it. I needed to pick a single experience that
could relate to all of that and also myself as an individual,…
This is just some dumb shit I’ve been musing on, but I think it might be
healthy to type up some of these errant streams of consciousness. My normal
process is to force these thoughts on some
 FNG on my boat, who has no choice
but to sit their and listen to my infinite wisdom, lest he upset me and I curse
him into endless dinq -ness. 
 Today I’m thinking about…
This is a pretty common question, enough that I can milk it for some blog
content. The short answer is this, I’ve been nickelpro for as long as I’ve
been on the internet. My site is nickelp.ro because nickel.pro got sniped
by a domain squatter before I
could get to it, back when .pro TLDs cost waaaay too much money. The domain
has grown on me over the years, since…
I am a senior research and development engineer at Kitware, where I work on
CMake, build tooling, and solving various practical problems for our clientele.
I also develop and lead trainings on whatever topic needs teaching. 
 My background crosses software, computer engineering, and operational
engineering. I studied computer engineering at NYU, spent time teaching systems
and…