Konrad Rudolph

@klmr
684 Followers
479 Following
1.1K Posts
Bioinformatician & software engineer
#genomics #bioinformatics #fair #code #rstats #cpp #python (he/him)
Websitehttps://klmr.me/about
GitHubhttps://github.com/klmr
This blog about rendering Arabic is, as promised, terrific: https://lr0.org/blog/p/arabic/
An interactive introduction to the terrific experience of rendering Arabic typography and its technical debt | La Vita Nouva

@a The prose is just incredibly beautiful. I wish I could write like this.

“Latin letters do not hold hands. Arabic letters do, and the web, in 2026, looks at them holding hands and stretches the air between the words anyway.”

Google has permanently replaced the dictionary / definition feature with AI overview. This is the most stupid decision they could ever make as far as finding the definitions of words goes on google. Etymology? Gone. Pronunciation? Gone. Similar words, synonyms and antinyms? Gone. What, in the actual, hell? No! Just... Just no!
@hrbrmstr @ggpsv Amazing share, I learned a lot from it!
@sbi There are dozens of us!
I don’t mind QR code menus in restaurants.
@coolbutuseless WRE says to use backticks for shell interpolation instead.
@ryanmcshane @coolbutuseless The issue in this case is that lists in the JSON get deserialised as vectors, not unnamed lists, so you lose type information (scalars vs lists of length one), so you can’t losslessly round-trip your data.
@ryanmcshane @coolbutuseless … not guess the format, and preserve all objects as lists (unless the user explicitly specifies a fixed deserialisation format). Auto-guessing as the default is an antipattern.

@eliocamp Hmm not sure what you mean, `|>` works fine with higher-order functions. Here’s some dummy code which makes your pipeline work:

cdo_sub = function (a, b) {
\() a + b
}

cdo_sqr = function (x) {
\() {
r = x()
r * r
}
}

cdo_mean = function (x) {
\() mean(x())
}

cdo_execute = function (x) {
x()
}

file1 = 1 : 5
file2 = 2 : 6

cdo_sub(file1, file2) |>
cdo_sqr() |>
cdo_mean() |>
cdo_execute()

(In real code you’d force() the args first.)