What is the best filesystem to use for an external hard drive? For a while, I have been using FAT32 for fairly small filesystems which anything can mount (FAT32 can support a filesystem up to two terabytes in size; I use FAT32 for my car stereo which doesn’t support exFAT), and NTFS for anything bigger.
FAT32 doesn’t support journalling and has a four gigabyte filesize limitation. exFAT has issues with patents (but, yes, Microsoft gave open source software a free license to use exFAT) and doesn’t have journalling. NTFS has only readonly support on MacOS unless one buys a third party program.
Probably the best universal read-write filesystem which all mainstream operating systems support (including some BSDs) is UDF, the filesystem DVDs used. It’s a read-write filesystem, it’s a log-structured filesystem which means the entire filesystem is a journal, it’s supported for both reading and writing in Windows, Linux, and MacOS, among other operating systems, and filesystems can be up to 16 terabytes in size.
There is some hacking to make a UDF drive cross-platfom, but there is a utility which handles the corner cases and documents all of the UDF compatibility wrinkles.
Wired has an article about the manosphere movement, i.e. the kinds of guys who believe the lie that 80% of the women sleep with only 20% of the men. It argues that this movement is fueled by greedy men who spread lies online to hook men in to the movement and sell them things.
Getting men to believe 80% of the women only sleep with 20% of men is a great way to make money: Convince men they can become part of that imaginary 20% if they buy your $20 dating guide which supposedly teaches you to become a “real man” (whatever that is) who attracts all the girls.
ObHack is a fork of Oblige 2 which I mainly worked on back when I didn’t have Internet at home and wanted to be able to play unlimited Freedoom and Heretic levels.
There was interest in me doing a version of ObHack for later versions of Oblige, something I never did until a couple of years ago, when I started using Oblige 7 to generate Heretic levels.
Compared to Oblige 7, ObHack7 has the following changes
Town theme enabled (this looks like maps in E1 with classic Heretic).
New theme: Egypt (which ObHack had), which makes very sandy “desert” levels.
“Episodic” levels start out smaller and get much bigger.
“Small”/
Heretic: More tomes, more mega-armor.
We now make Episode 6 levels for Heretic (see discussion below).
Heretic: Level starts usually have backpack, often mega-armor.
Heretic: The only liquid we have is water.
CONFIG.TXT updated.
Added note that, because of a bug in Oblige7, levels using a date for the seed should have the seed be in MMDDYYN000 format, where MM is month, DD is day, YY is year (2000-2099), and N is a number from 1 to 9; the final three digits of the seed should be 0. Example seed: 0725261000 (or 725261000) for a seed with today’s date.
Now that Heretic + Hexen has been released, finally giving the E6 levels official names, here are my thoughts on playing Heretic here in 2026:
Heretic + Hexen opted to have a mid-1990s pixelated look for the game. There is a reason why Quake added support for hardware acceleration to get rid of that ugly pixelated look, and why people quickly in the late 1990s added graphic cards to their computers to have things look much more smooth.
The best way to play Heretic here in the 2020s, in my opinion, is with the final release of Dengine, which is Heretic with modern graphics, and uses Quake-like “mouse look” and WASD gameplay, the way a modern FPS (first person shooter) game should be played.
I also like to play using the mid-first-2000s-decade 1.8.6 release of Dengine, which also supports mouse look, hardware acceleration, is tiny (only 2.2 megs in size), and runs great even on an ancient N455 Netbook from 2010. I have a mirror of this old version of Dengine.
Heretic’s “Shadow of the Serpent Riders” release included three secret levels in Episode 6; these maps were for deathmatch play. E6M3, “American’s Legacy”, doesn’t have an exit.
Oblige 7 handled episode 6 by ignoring it. ObHack7 handles Episode 6 by having E6M3 have an exit; ObHack generates not only E6M1-E6M3, but also E6M4, E6M5, and so on, even generating E6M9.
The way Heretic + Hexen handles E6M3 having an exit is by having a “You’re not supposed to get here, but hurray, you won the secret levels” message after exiting E6M3, then ending the game. E6M4 and so on are not accessible.
Dengine (Doomsday) 1.8.6 had a bug: It would take one to E6M4 once one exited E6M3, and so on until E6M8. Switching the exit in E6M8 causes the exit to “click”, but otherwise nothing happens. Exiting E6M9 puts one in level E6M0. While it’s not possible to load a game saved in E6M0, exiting E6M0 puts one in E6M1 again.
ObHack2 in fact generated an E6M0 level so one could exit the secret E6 level and continue playing maps. ObHack 7 doesn’t generate E6M0; not only isn’t there a way of getting to E6M9 without using the Doomsday console, but exiting E6M9 will, since there isn’t E6M0, crash Doomsday 1.8.6.
This is a non-issue for source ports with UMAPINFO support, but ObHack7 is made for Doomsday 1.8.6, which came out well over a decade before UMAPINFO existed, and doesn’t generate UMAPINFO lumps.
I mention Obsidian, another fork of Oblige 7. Obsidian is available here:
My impression is that Obsidian has a lot of features Oblige 7 doesn’t have, but the code is a lot more buggy and unstable than Oblige 7 and ObHack are.
ObHack7 can be downloaded by clicking (or tapping on) this link, and source code is also available.
Note that both files are compressed using 7-zip. Windows 11 comes with built-in 7-zip support; users of Windows 10 or earlier can use 7-zip to extract the files.
When I worked for Marshall, he would read to me from the Bible.
Marshall was from the deep south; the Bible belt. The state he was from hasn’t given their electoral votes to a Democrat since 1976. He came from a world and a set of values that are very conservative Christian.
I was, at the time, an atheist. I wasn’t just any old kind of atheist; I was an intolerant atheist who got annoyed by people reading and talking about the Bible in front of me.
Marshall started wanting to read the Bible to me during our breaks from work in the office. I would object most loudly “I don’t want you reading that book to me!” Marshall was insistent, and since he was the, you know, president of the company, he got his way.
So he would sometimes read me some passage from the Bible. This would invariably lead to me complaining that God was just a myth. We would have long arguments about this.
I finally capitulated and told Marshall I was willing to agree that there is a God. This wasn’t good enough for him. He told me I had to have a Christian faith. When I asked him why, he told me because I was born and raised Christian, so that is the only faith I could have.
Marshall and myself had various spiritual debates. These debates would often get heated; I had a lot of intolerance in my atheism, and Marshall was, at this point, so frustrated with his life he was looking for any reason to get in to an argument.
One of the our productive debates was when I told him about a dream I had many years before, where I met someone named Peter who guided me to a magical place. He was impressed with the dream; when I mentioned the person who led me in the darkness was named Peter, he told me Peter was one of the important apostles in the New Testament, and that maybe it was that Peter who I saw in the dream.
Decades after moving on from Marshall, I talked to him one last time. He told me he didn’t even want to remember that part of his life, and with good reason: He lost his car, his house, and the girlfriend he had at the time ended up divorcing him.
I told him it was a pleasant memory for me and that being with him at that time in his life was key to my spiritual growth and becoming an adult.
We said “I love you” to each other before ending the call. That was the last time I ever talked to Marshall; I didn’t find out he died until a couple years after he passed away.
When I take a daily walk around sunset, something about the light in the air reminds me of my time with Marshall. It is a very pleasant and peaceful feeling today; being with Marshall planted the seed for having a relationship with God that I have to this day. I became a man because Marshall mentored me at a very key moment in my life. This is something I am glad I experienced.
A blog titled Why write code in 2026 has come out. I am glad I retired from writing code just before human programmers were replaced with AIs; I get to concentrate on interacting with people instead of machines today and have a lot more deep meaningful friendships than I had when I was making a lot of money writing code for countless companies, most of whom are failed and forgotten today.
I still write code the old-fashioned way, by hand, here in 2026, but, I do use AI to answer programming questions which I used to have to dig through Stack Overflow arguments to find the answer to.
There is a bill running through congress right now to make daylight savings time be year-round; people in the US would no longer have the annoyance of “spring forward” and “fall back”.
Mexico used to follow daylight savings time, having their clocks change time when they did in the United States, but stopped observing DST in 2022. So now central Mexico is, depending on the time of year, in Mountain Daylight Time (during the summer) or Central Standard Time (during the winter); should this bill pass the senate, then central Mexico will always be in Mountain Daylight Time, which means its hour will not shift relative to the US depending on the time of year.
Well over one generation ago, I worked at a gas station (today’s blog picture is a picture of me from this era). It was a lot of work, and I had to work graveyard two nights a week (making doing anything during the day, such as going to college, impossible), but I kept doing it because I knew once I saved up enough for a car, I would be able to get out of the trap and start a career path. And, indeed, that is exactly what happened.
In today’s generation, that does not appear to be viable anymore. Back when I was working at the gas station, the exit path was clear: Since I was very talented with computers and the then emerging Internet, I just needed to start working in Silicon Valley. And that’s exactly what I did.
AI has greatly reduced the number of jobs in tech, so the exit path I had so many years ago is no longer viable. Indeed, I know people under crippling student loan debt who just cannot make enough money to chip away at their debt or even own a car, much less start a family.
I saw “Terminator 2” when it first came out, and just re-watched it in light of the fact that AI is now real. In the movie, they were about 25 years more optimistic about AI becoming real than what happened in the real world; AI was viable in 1997 in the movie, but in real life it didn’t become viable until 2023 or 2024, when people starting using ChatGPT as a free therapist.
Also, AI was developed by the military in the movie,1 but while the military has helped fund AI development, it has been created by and funded in the private sector.
Yes, this movie describes one risk of AI: It may decide to kill us. Whether or not that is a real risk is still up in the air, but what has happened is that AI is causing massive economic damage, completely destroying the tech industry and highly paid computer programmers.
I remember being a kid working at a gas station, slowly saving up enough money to buy a car, and being on the internet for hours every night, learning computers and technology to get out of the trap of only being able to work in a gas station. Finally, I saved up enough to buy an old car, had a friend of a friend who worked for a place that was hiring, and got my foot in the door by working as tech support for the then nascent internet industry in Silicon Valley. From there, I slowly became a highly paid software developer.
With AI taking over everything, people these days no longer have that opportunity. AI is eating away at the middle class, and today’s generation of talented artists, musicians, and computer programmers are having their jobs being taken away from them by AI agents, forcing them to stay in low paying service positions.
The picture for this blog is a waxwork of the Terminator at Madame Tussauds, London. The picture was taken by Daniel Jurena from Prague, Czech Republic. The picture has been altered (resized and cropped), and is CC-BY-SA 2.0 licensed.
1: The details are more complicated, but in the interest in having no spoilers, this is a reasonable description of how Skynet was created.
I have decided to no longer contribute to The Motte. Like DailyKos and a lot of other online spaces, it has become a place where people think it’s OK to be rude to other people and not have basic respect and dignity.
Its problem is this: The Motte suffers from the “Nazi Bar” problem that Twitter (X) also suffers from. Since The Motte is an online space that allows racists and other bigots to post “reasonable” arguments, the place has become dominated by right wing shills.
People not having basic kindness and decency in anonymous forums has been a long standing issue in the technical community; Slashdot, while not being racist, had had issues with kindness two decades ago and they are prevalent to this day.
Fortunately, I have a network of friends who do have kindness, love, and decency.
While The Motte doesn’t link to this anywhere on their website, The Motte’s server code is available online as open source software. The code is, as is typical for 2026, a lot of AI-generated slop, but the code is out there and other people are free to make their own version of “The Motte” for Reddit-style discussions.
It’s well known in the hacker community that GitHub has reliability issues. The issue I am dealing with is this: GitHub pages. While the servers that serve the static pages are rock solid reliable, the GitHub actions which convert Git code in to a static web page is very unreliable.
GitHub pages are OK for pages which aren’t updated very frequently, such as the MaraDNS home page or my blog archive, but they are not OK for pages which update frequently, such as my current blog.
That in mind, I will self-host my current blog, and use GitHub for the archive.
With the post-C23 changes to the C specification, djbdns 1.05 (its final release) no longer even compiles. Considering that, two decades ago, djbdns advocates were well known online for being obnoxious loud mouthed people, it’s telling that not one of them is actively maintaining djbdns here in the 2020s.
I, on the other hand, am actively maintaining djbdns. My own fork of a fork of djbdns, ndjbdns, does compile, but one needs to type in this incantation to compile it:
export CC="c99 -D_DEFAULT_SOURCE" ./configure make
The I have updated MaraDNS to be C23 compatible code so it will still be
able to compile should C compilers ever stop supporting the C99
specification, even though I don’t think losing C99 will be an issue:
As I type this, not only do both The MaraDNS authoritative server, the Deadwood recursive server, as
well as the Lua/ Lunacy standalone still emits warnings (but does compile)
when compiled as a C23 program, so my next project is to have Lunacy
compile without warning in a modern C23 compiler.
cc command these days, by default, tries to compile
C23, which is a distinctly different language than the C which
djbdns (and, yes, my own MaraDNS when I was starting
it) was written in. The above command, for now, instructs GCC/MaraDNS: Compiles as C23 code
gcc and clang
support the C99 specification, they also support the C90 spec that is
now some 36 years old.
Lunacy is a scripting language I use in MaraDNS (both to process DNS queries with the coLunacyDNS server and to generate the documents); it is a security hardened fork of Lua 5.1.
The last time I bumped the version number was in late 2022 with the 2022-12-06 release of Lunacy. The 2026-07-05 release is by and large unchanged; the only changes are:
It is now possible to set the compiler with CC when
using the Makefile and Makefile.editline
makefiles.
There are now no warnings when compiling with clang 20; there is only one warning when compiling with GCC 16.
There is now a makefile to compile Lunacy using TCC 0.9.25 in Windows
The reference manual has added a note about not exposing the output
of pairs to untrusted parties, and includes a sorted
sPairs function, as well as noting popen2 arguments
should only come from trusted sources.
Since 2022, I have written a book about how to use Lunacy as a
scripting language like Ruby/
The code is available on the Lunacy webpage.
I have also updated MaraDNS so she generates no warnings when compiled with:
GCC 15 (Ubuntu 26.04)
GCC 16 (Cygwin)
Clang 20 (Cygwin)
Clang 21 (Ubuntu 26.04)
TCC 0.9.27 (Ubuntu 26.04)
Since MaraDNS here in 2026 compiles with no warnings, even when
-Wall is set, and since MarsDNS uses the -std=c99
flag when compiling programs, should MaraDNS not compile in the future,
it is almost certainly a bug in the compiler toolchain and not a bug in
MaraDNS.
The code is available on GitHub as well as other repos.