Programming Leftovers
-
How to interpret, understand, and act on feedback
The problem with getting a pile of comments from a “360 feedback” peer review process with your coworkers is that whatever is written is usually not Truth (with a capital “T”). It’s not that anyone is lying, but rather that the feedback you receive is the final output of a sequence of multiple lossy steps. To discern the signal within the noise, we have to try to work backwards through those stages and apply interpretation and judgement to reverse the distortion and extract useful meaning.
By the time you’re reading a comment from a feedback document, it’s pretty far from being a direct line to objective universal Truth. It actually represents (1) someone’s phrasing of (2) an opinion that is in their mind, derived from (3) their preferences, opinions, and past experiences being applied to (4) their interpretation of events they’ve observed/data they’ve gathered, which are drawn from (5) the limited subset of your actions that have been visible to the feedback author. Phew — that’s a mouthful of a sentence. No worries if you need to re-read it a few times for it to make sense.
-
Two Years of OCaml
The other day I saw this post on OCaml discussed in Hacker News and Lobsters.
Almost two years ago I rewrote the Austral compiler from Standard ML to OCaml, so I thought I’d share my thoughts on OCaml after using it in writing a complex software project, explaining what is good and what is bad and how it compares mainly to Haskell.
If this seems overwhelmingly negative, it’s because the things OCaml does right are really just uncontroversial. They’re obviously right and hardly worth pointing out. It’s actually a weirdly optimistic thing: that a language with so many glaring deficiencies stands far above everything else.
-
Learning Some Logarithms
A colleague asked how many digits of \(\pi\) I can recite from memory. I realised I still remember the 27.3 digits I memorised in my childhood11 Wait, what does it mean to remember 0.3 digits? I know the digit after the last one is in the range 0–4, which is one bit of information, and the full digit would be just over three bits. Hence, 1/3 or 0.3 digits. Okay but why do I know the digit after the last is in the range 0–4? I deliberately picked a cut-off point that didn’t force me to round the last digit up, so that if I wanted to expand and learn even more digits later I wouldn’t have to re-learn the last rounded digit.. I was slightly embarrassed to admit this, because of how useless it is to know more than, say, four significant figures of \(\pi\).
There are many other useful values to memorise, e.g. some logarithms would be neat.
-
Do papercuts matter?
Papercut – a small annoyance in a piece of software, a rough edge, something that shouldn’t be there, a little issue that makes you say “ugh” out loud or roll your eyes. It’s usually not a bug, since functionality is not impeded, but it is something that should be fixed.
Lately I’ve started to wonder: does it even matter whether piece of software has papercuts?
-
Why use cycle notation for permutations?
So the cycle structure is exactly the structure of a permutation that remains if you ignore the actual labels, and the cycle notation brings that structure to the foreground.
-
Server-side rendering in Rust - a Dall.E use-case
Last week, I decided to see the capabilities of OpenAI’s image generation. However, I noticed that one has to pay to use the web interface, while the API was free, even though rate-limited. Dall.E offers Node.js and Python samples, but I wanted to keep learning Rust. So far, I’ve created a REST API. In this post, I want to describe how you can create a webapp with server-side rendering.
-
Electronic medical record auto-text templates
The templates on this page are released under the CC0 1.0 Universal Public Domain Dedication.
-
Circles and Momentum
Sometimes your path looks exactly like circle, from point A back to point A. But when your path returns to point A, you are not the same person as when you started — and so, from that perspective, neither is point A. To paraphrase T.S. Elliot, the end of our exploring will be to arrive where we started and know the place for the first time.
I’m going to try and be more mindful of noticing the directional momentum of seemingly circular paths.
-
Array of Structs in C++
Tutorial on how to declare the array of structures in the C++ programming language to manage and store a group of connected data elements in a single variable.
-
Valhalla's Things: Programming the ESP32-C3-DevKit-Lipo with Arduino
A few months ago we may have bought a few ESP32-C3-DevKit-Lipo boards from Olimex.
Since every time I go back to working with them I’ve forgotten how to do so, and my old notes on the fediverse are hard to find, this is the full procedure.
-
Filter NaN Pandas
To filter out the rows having the NaN values in Python, the “dataframe” functions, such as “dataframe.notnull()”, and “dataframe.dropna()” functions are used.
-
NumPy Save Dict
To save the dictionary into a file in Python, the “dump()” function is used and the “load()” function is used to read the saved dictionary from a file.
-
Python OSError
The OS is a built-in exception error module’s class in Python known as “OSError”. To handle these errors, the exceptional handling technique can be used.
-
Update: zipdump.py Version 0.0.25
Some changes to the translate option: now it supports this format (like some of my other tools): i=codec[:error],o=codec[:error] i= is input and o= is output. If you don't specify an error handling mode, strict will be used.