On 2nd February 1882, in the Dublin suburb of Rathgar,
a son was given unto John and May Joyce.
James Joyce celebrated his 40th birthday in Paris on 2nd February 1922
by receiving the first printed copy of his novel Ulysses.
Parts of it had already been published in literary magazines and
the book was eagerly received by the cognoscenti.
It took more than a decade for Ulysses to be published
in Britain and the United States.
Censors had considered the book obscene,
but the courts established that it had legitimate literary merit.
For decades, Ulysses was poorly received in Ireland.
The book was considered blasphemous and obscene by many.
Worse, Joyce had …continue.
A while back, I had extracted some code out of a large file
into a separate file and made some modifications.
I wanted to check that the differences were minimal.
Let’s say that the extracted code had been between
lines 123 and 456 of large_old_file.
diff -u <(sed -n '123,456p;457q' large_old_file) new_file
What’s happening here?
- sed -n '123,456p' is printing lines 123–456 of large_old_file.
- The 457q tells sed to abandon the file at line 457.
Otherwise, it will keep reading all the way to the end.
- The <(sed ...) is an example of process substitution.
The output of the sed invocation
becomes the first input of the diff command.
A similar example: Diff a Transformed …continue.
40 years ago this month,
I sat down at a computer and wrote a program.
(Or "programme", as I spelled it then.)
It was the first time I had ever used a computer.
Very few people had used computers in 1982,
in Ireland or elsewhere.
What was the program?
Just a few lines of AppleSoft Basic.
But it was enough to get me hooked and change my life.
I still get a hit when a little bit of code unlocks in my brain.
It’s quite addictive.
There’s always more to learn and to see.
I wrote more about this in 2012: 30 Years of Programming.
At the beginning of 2021,
prompted by Russell Crowe’s defense of Master and Commander,
I began yet another re-read of the twenty Aubrey-Maturin novels.
Or, as the fandom would have it, another circumnavigation.
It’s probably my fifth or sixth circumnavigation,
since I bought the complete boxed set as a Christmas present to myself
in the early aughts.
I completed the twentieth book, Blue at the Mizzen, yesterday,
and also the few pages of the final, unfinished novel, 21.
(I also read about 120 other books in 2021,
down from a stupendous 200 books in 2020,
but that’s neither here nor there.)
Author: Robert Nystrom
Rating: ★ ★ ★ ★ ★
Publisher: Genever Benning
Keywords: programming, interpreters
Reading period: 10–28 December, 2021
I’ve read hundreds of technical books over the last 40 years.
Crafting Interpreters is an instant classic,
and far more readable and fun than many of the classics.
Nystrom covers a lot of ground in this book,
building two very different interpreters for Lox,
a small dynamic language of his own design.
He takes us through every line of
jlox, a Java-based tree-walk interpreter,
and of clox, a bytecode virtual machine written in C.
For the first implementation, jlox,
he covers such topics as scanning,
parsing expressions with recursive descent,
evaluating expressions, control flow,
I was surprised to read this evening that the Apache Web Server
just fixed an actively exploited path traversal flaw.
We had a performance regression in a test suite recently
when the median test time jumped by two minutes.
We tracked it down to this (simplified) code fragment:
task_inclusions = [ some_collection_of_tasks() ]
invalid_tasks = [t.task_id() for t in airflow_tasks
if t.task_id() not in task_inclusions]
This looks fairly innocuous—and it was—until the size of the result returned from some_collection_of_tasks()
jumped from a few hundred to a few thousand.
The in comparison operator conveniently works
with all of Python’s standard sequences and collections,
but its efficiency varies.
For a list and other sequences,
in must search linearly through all …continue.
I’ve been using password managers for at least 15 years
to keep track of all my passwords.
I have separate, distinct, strong passwords for hundreds of sites,
and I’ve only memorized the handful that I need to actually type regularly.
I started out with the KeePass desktop app originally,
but I switched to the online LastPass app about a decade ago.
At work, we use 1Password.
When I register for a site,
LastPass generates a random password for me,
LastPass securely syncs my passwords between machines and devices.
Its browser integration and its Android and iPhone apps
mean that I rarely ever have to actually type any of those ugly messes in.
But when …continue.
In The Punctuation Marks Loved (and Hated) by Famous Writers,
Emily Temple relays a range of opinions from writers
such as Tom Wolfe, Elmore Leonard, and Ursula K. Le Guin
on periods, semicolons, hyphens and more.
Listens to the sound of the sentence, and is always right, Bob: Toni Morrison
[On her editor, Bob Gottlieb, who famously
“was always inserting commas into Morrison’s sentences
and she was always taking them out”]
We read the same way.
We think the same way.
He is overwhelmingly aggressive about commas and all sorts of things.
He does not understand that commas are for pauses and breath.
He thinks commas are for grammatical things.
We have come to an …continue.
Some people, when confronted with a problem, think
“I know, I’ll use regular expressions.”
Now they have two problems.
— Jaime Zawinksi
A Twitter thread about very long regexes
reminded me of the longest regex that I ever ran afoul of,
a particularly horrible multilevel mess
that had worked acceptably on the 32-bit .NET CLR,
but brought the 64-bit CLR to its knees.
Whenever I ran our ASP.NET web application [on Win64],
it would go berserk, eat up all 4GB of my physical RAM,
push the working set of IIS’s w3wp.exe to 12GB,
and max out one of my 4 cores!
The only way to maintain any sanity was to run iisreset
every 20 minutes to gently …continue.