|
![]() ![]()
![]() ![]() |

If your reasons for voting for Donald Trump for president included that you wanted to cause unnecessary death and suffering and reduce to the standing and trustworthiness of the United States with the rest of the world then congratulations, you've been given what you wanted. If not, maybe you should engage in some reflection on what you've helped to bring about.
On Bluesky, doctor Atul Gawande, author of the excellent book Being Mortal (which I read in 2019) and The Checklist Manifesto (which was well-reviewed but I have not read), who was USAID Assistant Administrator for Public Health from 2022 to 2025, wrote the following posts:
I ran @USAID health programs for the last 3 years. Trump's 90 day Stop Work Order on foreign assistance does serious damage to the world and the US. Examples:π§΅January 26, 2025 at 8:56 AM1. Stops work battling a deadly Marburg outbreak in Tanzania and a wide outbreak of a mpox variant killing children in west Africa before it spreads further.
2. Stops monitoring of bird flu in 49 countries, a disease which already killed an American on home soil.
3. Stops critical work on polio eradication.
4. Stops >$1B in corporate drug donations and coordination eradicating tropical diseases like river blindness, elephantiasis, and others on the verge of elimination in whole regions. https://www.neglecteddiseases.gov/about/results-and-impact/
5. Stops medicines, supplies, systems building, staff support aiding >90 million women and children to get low cost vaccinations, prenatal care, safe childbirth, contraception, and other basic lifesaving health needs. https://www.usaid.gov/PreventingChildandMaternalDeaths
6. Stops direct services for 6.5 million orphans, vulnerable children, and their caregivers affected by HIV in 23 countries.
7. Stops donated drug supplies keeping 20 million people living with HIV alive.
8. Would furlough all USAID contract staff β which includes half of its global health bureauβunless exempted.
Make no mistake β these essential, lifesaving activities are being halted right now. Clinics are shuttering. Workers sent home. Partners including US small businesses face being unable to meet payroll. All despite clear requirements from Congress to do this work.
This Administration is already trashing US standing, alliances with scores of countries built over half a century, world-leading capacity and expertise, and American security.
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ

Not much blogging going on here still, but here's my annual list of books read for 2024.
- James Bamford, Spy Fail: Foreign Spies, Moles, Saboteurs, and the Collapse of America's Counterintelligence (2023)
- Benjamin Breen, Tripping on Utopia: Margaret Mead, The Cold War and the Troubled Birth of Psychedelic Science
- Jennifer Burns, Milton Friedman: The Last Conservative (2023)
- Bryan Burrough, Vendetta: American Express and the Smearing of Edmond Safra (1992)
- Ron Chernow, The House of Morgan: An American Banking Dynasty and the Rise of Modern Finance (1990, 2010 foreword)
- Rich Cohen, The Fish That Ate the Whale: The Life and Times of America's Banana King (2012)
- Daniel C. Dennett, I've Been Thinking (2023)
- Cory Doctorow, The Bezzle (fiction)
- Edward Dolnick, Down the Great Unknown: John Wesley Powell's 1869 Journey of Discovery and Tragedy Through the Grand Canyon (2002)
- Jon Friedman & John Meehan, House of Cards: Inside the Troubled Empire of American Express (1992)
- Beverly Gage, G-Man: J. Edgar Hoover and the Making of the American Century (2022)
- John Ganz, When the Clock Broke: Con Men, Conspiracists, and How America Cracked Up in the Early 1990s
- Masha Gessen, The Future Is History: How Totalitarianism Reclaimed Russia (2017)
- Martin Kihn, House of Lies: How Management Consultants Steal Your Watch and Then Tell You the Time (2005)
- Stephen Kinzer, Poisoner in Chief: Sidney Gottlieb and the CIA Search for Mind Control (2020)
- Stephen Kinzer, The True Flag: Theodore Roosevelt, Mark Twain, and the Birth of American Empire (2017)
- Talia Lavin, Wild Faith: How the Christian Right is Taking Over America
- Milton Mayer, They Thought They Were Free: The Germans 1933-45 (1955)
- Michael Warren Lucas, git commit murder (2017, fiction)
- Arvind Narayanan and Sayash Kapoor, AI Snake Oil: What Artificial Intelligence Can Do, What It Can't, and How to Tell the Difference
- Craig Nelson, Thomas Paine: Enlightenment, Revolution, and the Birth of Modern Nations (2006)
- Ryan J. Reilly, Sedition Hunters: How January 6th Broke the Justice System (2023)
- Chris Rodda, Liars for Jesus: The Religious Right's Alternate Version of American History, Volume 2 (2016)
- ZoΓ« Schiffer, Extremely Hardcore: Inside Elon Musk's Twitter
- Matt Zwolinski and John Tomasi, The Individualists: Radicals, Reactionaries, and the Struggle for the Soul of Libertarianism
A few planned or already (or still) in-progress reads for 2024:
(Previously: 2023, 2022, 2021, 2020, 2019, 2018, 2017, 2016, 2015, 2014, 2013, 2012, 2011, 2010, 2009, 2008, 2007, 2006, 2005.)
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ

Per Stephanie Kirchgaessner in The Guardian, 14 October 2024:
Douglas Hamlin, who was appointed to lead the NRA this summer in the wake of a long-running corruption scandal at the gun rights group, was involved decades ago in the sadistic killing of a fraternity house cat named BK, according to several local media reports at the time.
Hamlin pleaded no contest to a misdemeanor charge of animal cruelty brought against him and four of his fraternity brothers in 1980, when he was an undergraduate student at the University of Michigan at Ann Arbor. The charge was brought against Hamlin under a local Ann Arbor ordinance. All five members of Alpha Delta Phi were later expelled from the fraternity.
The details of the case, described in local media reports at the time, are gruesome. The house cat was captured, its paws were cut off, and was then strung up and set on fire. The killing, which occurred in December 1979, was allegedly prompted by anger that the cat was not using its litterbox.
The case caused such a furore locally that some students and animal rights activists wore buttons and armbands in memory of BK.
While The Guardian notes that Hamlin's role was not clear, Judge S.J. Elden singled him out for particular criticism as the president of the fraternity who had a responsibility to prevent it--and not, as was attempted without success, to cover it up.
(See other conservative animal abuse tagged posts, about Kevin Roberts, Bill Frist, Kristi Noem, James Dobson, Mike Huckabee, Mitt Romney, and Jerry Falwell.)
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ

Here's my best effort, informed by Adam Klasfeld's at Just Security and others I came across.
Corrections gladly accepted.
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ

Kevin Roberts, the president of the Heritage Foundation and head of Trump's Project 2025, was previously a history professor at New Mexico State University. While at the university, he told colleagues and dinner guests that he was irritated by the barking of a neighbor's dog, so he killed it with a shovel. Kenneth Hammond, then chairman of the history department, told The Guardian:
My recollection of his account was that he was discussing in the hallway with various members of the faculty, including me, that a neighbor's dog had been barking pretty relentlessly and was, you know, keeping the baby and probably the parents awake and that he kind of lost it and took a shovel and killed the dog. End of problem.
Two other former colleagues report hearing the same story directly from Roberts; three others report hearing the story repeated from people who heard it directly from Roberts.
Roberts denies the story, claiming instead:
In 2004, a neighbor's chained pit bull attempted to jump a fence into my backyard as I was gardening with my young daughter. Thankfully, the owner arrived in time to restrain the animal before it could get loose and attack us.
(Source: Stephanie Kirchgaessner, "Project 2025 mastermind allegedly told colleagues he killed a dog with a shovel," The Guardian, 24 September 2024)
See the "conservative animal abuse" tag on this blog for several other accounts of prominent conservatives killing or abusing dogs and cats.
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ

OpenBSD 5.9 (current as of this post is 7.5) introduced the "pledge" system call and 6.4 introduced the "unveil" system call, which together provide a means of more granular control of system access by processes running on the system to enforce least privilege. When a program calls "pledge", it provides a list of categories of system calls (called "promises") that it is planning to make during the life of the running process (children have to make their own pledges and are not restricted), and attempts to make calls outside of those areas will cause the call to be blocked and the process to be killed. Additional calls to pledge cannot add new categories but it can remove them, so access can become more restrictive but not less restrictive.
"Unveil," by contrast, selectively exposes parts of the file system, by file path, with specific access, and the rest of the file system is correspondingly "veiled" or blocked from access. Successive calls to unveil can expand or override previous ones, expanding access to the file system, adding write and create permissions where there was previously read only, but only until unveil is called with no arguments, which locks the current state in place. Further attempts to call unveil after that result in a violation.
Violations of pledges or attempts to access file paths that are not unveiled show up in process accounting logs for the process with the process flags "P" or "U", respectively. (My "reportnew" log monitoring script knows how to monitor process accounting logs and can be easily set up to report on such violations.)
Perl scripts on OpenBSD can also use pledge and unveil, with two modules provided in the base operating system, "OpenBSD::Pledge" and "OpenBSD::Unveil". I've been adding this functionality to several of my commonly used scripts and have learned a few tips that I'd like to share.
Pledge:
* Check your call to pledge for errors. If you typo the name of a promise (category of system calls), or you provide pledge with a string of comma separated promises instead of an array or list, it will fail and nothing will be pledged.
* If you don't have any idea what promises are required, just use "error". With the error promise, instead of blocking the system call and killing the process, the result is logged to /var/log/messages and you can see what promises are required.
* The "stdio" promise is always included with OpenBSD::Pledge, so you don't need to list it.
* The "unveil" promise is required if you intend to use OpenBSD::Unveil.
* Calls to exec or system require the "proc" and "exec" promises; the new processes created as a result are not restricted and need to make their own use of pledge and unveil. (Note: this means that if you are calling a system command that writes to a file, but your script doesn't otherwise write to files, you do not need to pledge the "wpath" promise in your script.)
* If you otherwise fork a child process (e.g., explicitly using "fork" or Parallel::ForkManager or implicitly forking a child process using "open" to read from or write to a command), the promises pledged by the parent process are carried over to the child, which can then restrict them further. (Hat tip to Bryan Steele, who pointed this out on Bluesky without specifically referring to the Perl context.)
* If you use the DBI perl module with mariadb and are accessing a database through a named pipe on the same server, you'll need to pledge the "unix", "inet", and "prot_exec" promises. (This works even from a chroot jail if the named pipe or socket is a hard link from the jail.)
* This isn't a tip, but an observation: if you promise "proc" but not "exec," your system call will fail but your process will not be killed and the script will continue running.
Unveil:
* If you make use of other perl modules in your code with "use", they are loaded prior to your call to unveil and so you don't need to unveil directories like /usr/libdata/perl5 in order to use them. The exception is perl modules that include compiled shared objects (".so"), or which use "require" on other modules (loading them at runtime), in which case you do need unveil such directories, but only with "r" permission.
* If you use the DBI perl module with mariadb, you will need to unveil /var/run/mysql with "rw" and /usr/lib and /usr/local/lib with "rx".
* If you use calls to "system" or "open" which use pipes, globs, or file redirection, you need to unveil "/bin/sh" with "x" permission. You may be able to rewrite your code to avoid the requirement--can you call "system" with a command name and list of arguments rather than a string, and do any processing you need in your program instead of with the shell?
* If you use calls to "system" to execute system commands, you need to unveil them with "x" permission but in most cases you don't need to include "r".
* It is often much easier to unveil a directory rather than individual files; if you plan to check for the existence of a file and then create it if it doesn't exist, you need "rwc" on the containing directory.
* One of the biggest challenges sometimes is to find the source of an unveil violation; unveiling "/" with various permissions to see if it goes away, and then removing that and testing individual directories under the root directory in trial and error can help find things. That's how I first found the need to unveil "/bin/sh".
Finally, if you are writing perl modules it's helpful to document which promises need to be pledged and files and directories need to be unveiled in the calling scripts in order for them to function. It would be inappropriate to pledge or unveil within the module except in a context like a forked child process. I've done this with my Signify.pm wrapper for the OpenBSD "signify" command for signing and verifying files with detached signatures or gzip archives with embedded signatures in the gzip header comments.
If you've made use of pledge and unveil--in perl scripts or otherwise--what lessons have you learned?
- Facebookβ
- Google+β
- Instapaperβ
- Tweetβ