Vegetarians, spam, spite programming, and drug names
shorts
Vegetarians
Wikipedia’s list of countries by the percentage of vegetarians is extremely very muchísimo surprising:
🇮🇳 India 20–39%
🇲🇽 Mexico 19%
🇧🇷 Brazil 14%
🇨🇳 China 14%
🇹🇼 Taiwan 13–14%
🇦🇷 Argentina 12%
🇦🇹 Austria 11%
🇯🇲 Jamaica 10%
🇻🇳 Vietnam 10%
🇮🇹 Italy 9.5%
🇫🇮 Finland 8%
🇩🇪 Germany 8%
🇮🇱 Israel 8%
🇹🇭 Thailand 8.0%
🇨🇦 Canada 7.6%
🇧🇪 Belgium 7%
🇵🇱 Poland 6.6%
🇨🇱 Chile 6%–14%
🇸🇪 Sweden 6%
🇦🇺 Australia 5.3%
🇨🇭 Switzerland 5.3%
🇺🇦 Ukraine 5.2%
🇨🇿 Czech Republic 5%
🇭🇺 Hungary 5%
🇵🇭 Philippines 5%
🇸🇬 Singapore 5%
🇬🇧 United Kingdom 5%
🇲🇾 Malaysia 5%
🇮🇪 Ireland 4.3–8.4%
🇺🇸 United States 4.2%
🇨🇴 Colombia 4%
🇩🇰 Denmark 4%
🇪🇪 Estonia 4%
🇬🇷 Greece 4%
🇯🇵 Japan 4%
🇳🇴 Norway 4%
🇱🇻 Latvia 3%
🇱🇹 Lithuania 3%
🇰🇷 South Korea 3%
🇳🇱 Netherlands 2.3%
🇳🇿 New Zealand 2%
🇷🇴 Romania 2%
🇪🇸 Spain 1.4%
🇸🇮 Slovenia 1.4–1.6%
🇵🇹 Portugal 1.2%
🇷🇺 Russia 1%
🇫🇷 France 0.8%
India at the top? Of course. And Taiwan / Vietnam / Israel / Germany all seem plausible. But Mexico at #2? Argentina at #6? What?
I think there’s a 90% chance this reflects that those numbers all come from different surveys and measuring the percentage of vegetarians in a country is harder than it seems. The World Atlas gives a list where the ordering seems less crazy, though I can’t find any information about their methodology and many of the numbers still strike me as high.
Spam
The main domain of this blog, dynomight.net, is listed on the SpamHaus domain block list, which apparently makes it inaccessible in a significant fraction of the world. This is puzzling because:
No spam has even been sent from
dynomight.net.No email has ever been sent from
dynomight.net.No ads have ever been hosted on
dynomight.net.No malware has ever been hosted on
dynomight.net.The domain has a good enough reputation to get thousands of referrals from Google each month, suggesting that it isn’t generally considered harmful and dangerous.
If you go to the block page, SpamHaus reassures that if you’re blocked, you need not panic! Just submit a request and they’ll quickly verify that nothing nefarious is happening, and you’ll be good to go! But I’ve submitted that request several times over the past six months, which always leads to the following conversation:
Dynomight: Please unblock me, I am not evil, I am good.
SpamHaus: Thank you for contacting Spamhaus Removals Ticketing department. The ticket cannot be processed as we are unable to verify the ownership of dynomight.net. Please contact your IT department for further assistance.
Dynomight: But it’s me. This email is listed on my about page. Can you at least explain why the domain is blocked? Or what I need to to verify ownership, whatever that means?
SpamHaus: Thank you for contacting Spamhaus Removals Ticketing department. The ticket cannot be processed as we are unable to verify the ownership of dynomight.net. Please contact your IT department for further assistance.
SpamHaus: This issue is closed.
Oddly, my personal blog does not have an IT department. Maybe they think DumPy is malware.
(Edit: To clarify, the problem is that when people go to the website in their browser, the website is blocked as malware. I don’t care about sending email from dynomight.net because I don’t send email from dynomight.net.)
Spite programming
Speaking of which, there was a proposal to add DumPy-like syntax to NumPy. This led to the following response:
This is the kind of thing that I’d like to see mature outside of numpy for a while before it gets calcified by an in-
numpyimplementation. Right now, it’s basically a spite project (and I mean this in the most complimentary, productive sense) by one person that satisfies their lone use cases. It will change as more people use it for their own use cases.
(By the way, I think this is the right call, and I take it in the sense meant. I just thought it was an amusingly incisive description.)
Spite self-promotion
Speaking of which, if you haven’t yet experienced the grandeur of DumPy, I finally made it into a “real” package, meaning you need no longer suffer the hideous inconvenience of downloading a single file and putting it in a folder. If you have uv installed you should be able to play around with it simply by typing the following into your command line:
uv run --with dumpy-numpy pythonFor example, you should be able to compute a Hilbert Matrix by doing this:
> dynomight@computer:~$ uv run --with dumpy-numpy python
Installed 7 packages in 47ms
Python 3.14.2 [blahblahblah] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import dumpy as dp
>>> H = dp.Slot()
>>> with dp.Range(5) as i:
... with dp.Range(3) as j:
... H[i,j] = 1 / (i + j + 1)
...
>>> H
Slot([[1. 0.5 0.33333334]
[0.5 0.33333334 0.25 ]
[0.33333334 0.25 0.2 ]
[0.25 0.2 0.16666667]
[0.2 0.16666667 0.14285715]], shape=(5, 3))If you have no idea what NumPy or uv or Hilbert Matrices are, carry on.
Drug names
Tisagenlecleucel is a drug. When I look at that name, I see a long series of Science Letters. But what science lies within, exactly?
It turns out that the way to read that name is to split it by syllables into “tisa-gen-lec-leu-cel” and then read themback to front: “Cell therapy drug that targets leukocytes (white blood cells) that is genetically modified and BTW ‘tisa’ is a cool-sounding series of letters.”
As far as I can tell, “lec” is just a kind of spacer indicates selection of certain types of cells (h/t/ Lessons in Chimeristry).
Most generic drug names work like this. The formula is some random-cool-sounding letters at the start, followed by a meaningful structured suffix. For example, the “-ib” suffix indicates small-molecule inhibitors. But because there are many kinds of small-molecule inhibitors, there are many kinds of “ib”.
-ib (Small Molecule Inhibitor)
-ciclib (Cyclin-Dependent Kinase inhibitor - Cyclin + ib) (Palbociclib, Ribociclib)
-coxib (COX-2 inhibitor - Cyclooxygenase + ib) (Celecoxib, Etoricoxib)
-degib (Hedgehog pathway inhibitor - Hedgehog + ib) (Vismodegib, Sonidegib)
-farnib (Farnesyltransferase inhibitor - Farnesyl + ib) (Lonafarnib, Tipifarnib)
-lisib (PI3K inhibitor - Phosphatidylinositol + ib?) (Alpelisib, Idelalisib)
-menib (Menin inhibitor - Menin + ib) (Revumenib, Ziftomenib)
-parib (PARP inhibitor - Poly ADP-Ribose Polymerase + ib) (Olaparib, Niraparib)
-zomib (Proteasome inhibitor - Proteasome + ib) (Bortezomib, Carfilzomib)
In some places, the hierarchy goes deep. For example, you can expand the “nib” subcategory into sub-sub-categories and sub-sub-sub-categories:
-ib (Small Molecule Inhibitor)
I also made a longer tree for antivirals1.
Sadly, I have not been able to find any of these things:
Any comprehensive reference on where the names actually came from. (The hints above are mostly just guesses.)
Any guide on what are the most important suffixes to learn first so you can impress people with your knowledge of generic drug names.
Any nice visualization at all of the entire tree. Instead, the American Medical Association just seems to make available this extremely-not-fun-looking spreadsheet.
Inevitably, older drugs often don’t stick to the rules and the US has it’s own standard for drug names which is almost but not quite the same as the international / WHO standard. That’s is why the US (and Canada and Japan and South Korea) call N-acetyl-para-aminophenol
Acetaminophen (N-acetyl-para-aminophenol),
while the rest of the world starts with a slightly different name for the same chemical and calls it
Paracetamol (Para-acetylaminophenol).
Incidentally, Johnson & Johnson seem to have chosen their brand name to basically overlap as little as possible with the US name:
Tylenol (N-acetyl-para-aminophenol)
Here’s the tree, which I made with some AI assistance.
-vir (Antiviral substances) (Remdesivir)
-amivir (Neuraminidase inhibitors - neuraminidase + vir) (Oseltamivir, Zanamivir)
-asvir (Hepatitis C NS5A inhibitors - NS5A + vir) (Ledipasvir, Velpatasvir)
-buvir (Hepatitis C RNA polymerase inhibitors - NS5B + vir) (Sofosbuvir)
-capavir (Capsid assembly inhibitors - capsid + vir) (Lenacapavir)
-cavir (Carbocyclic nucleoside RT inhibitors - carbocyclic + vir) (Abacavir, Entecavir)
-clovir (DNA polymerase inhibitors - cyclic / acyclic + vir) (Ganciclovir)
-corvir (Coronavirus polymerase inhibitors - corona + vir) (Temocorvir)
-denvir (Dengue NS4B inhibitors - dengue + vir) (Mosnodenvir)
-desivir (Adenosine-analog polymerase inhibitors - adesine? + vir) (Remdesivir, Galidesivir)
-fovir (Phosphonic acid polymerase inhibitors - phosphonic + vir) (Tenofovir, Adefovir)
-navir (HIV Protease inhibitors - proteinase + vir) (Ritonavir, Darunavir)
-piravir (Pyrazine RNA polymerase inhibitors - pyrazine + vir) (Favipiravir, Molnupiravir)
-previr (Hepatitis C Protease inhibitors - protease + vir) (Simeprevir, Grazoprevir)
-ravir (Rabies RNA polymerase inhibitors - rabies + vir) (Mokravir)
-sporovir (RSV nucleocapsid inhibitors - syncytial protein? + vir) (Bemaspesporovir)
-tegravir (Integrase inhibitors - integrase + vir) (Raltegravir, Dolutegravir)
-trelvir (SARS-CoV-2 Mpro inhibitors - nitrile + vir) (Nirmatrelvir, Ensitrelvir)
-virine (NNRTI Antivirals - vir + amine) (Rilpivirine, Doravirine)
-virimat (Maturation inhibitors - vir + maturation) (Bevirimat)
-virsen (Antisense oligonucleotides - vir + antisense) (Fomivirsen)


What is interesting about surveys is if you ask people if they are vegetarian, you get a much higher number than if you ask people if they don't eat any beef, chicken, fish, etc.
Perhaps "tisa" is short for "it is a"