Brain dump, December 2022

What’s happening with Twitter is rather transparent: a) Elon overpaid for Twitter, having had his bluff called to purchase it, and b) Having overpaid for Twitter, he now needs to inflate its value. And how do you inflate its value? By driving engagement. And how do you drive engagement? By performing a bunch of provocative stunts, including even more of the trolling, division, and outrage mongering that makes Twitter the cesspool that it already was.

Nothing about the “Twitter files” is interesting or noteworthy outside the context of creating a feedback loop of engagement on Twitter itself.

If there are indeed “files” that are as earth-shattering as was alleged, then why not publish the files? Why release them to just a few select journalists (Matt Taibbi, Bari Weiss, etc.), who just happen to be politically aligned with Elon? Why did these journalists publish their revelations by way of Twitter threads — possibly the clumsiest way of publishing long-form content?

The contents of the revelations themselves are amazingly banal: these are the inner workings of a social media company trying its best to do content moderation, imperfectly, as all social media companies are bound to do.

Elon is extremely good at generating hype around what he does, which is what has made him such a good businessman. With the release of the Twitter files, notice that he didn’t merely release the files; he built up to it over the course of many days, tweeting numerous times about how he’s going to release the files. He didn’t need to do that; he could have just released the files. But by building up to it, he drew more eyes to the platform, regardless of what the content of the “files” was going to be.

And what will happen with Twitter now? Aside from the easy argument that a privately-held company can literally, and by definition, never be a “public square,” what else could happen with it? Elon can twiddle whatever knobs he likes, such as imposing a pricing model for verified users, creating different levels of verification, making tweets editable, etc. But the fundamental engagement model of Twitter will remain the same: otherwise-serious people flinging verbal turds at each other, provoked and boosted by avalanches of bots and anonymous trolls.

I’ve never engaged that much on Twitter, and don’t plan to continue. I probably won’t delete my account outright, as Sam Harris was wise enough to do, since I’d like to log on occasionally and check the state of the platform, out of perverse curiosity, but I believe genuinely that Twitter continues to be a net negative for our society, our politics, and our mental health.

A few guidelines for navigating social media

  • Virtually nothing is as bad as social media makes it seem.
  • There is almost always more context for everything shared on social media. Read the full article, watch the full video, and check other sources.
  • If you find yourself feeling outraged, someone is making money.
  • If you find yourself feeling afraid, someone is making money.
  • If a public figure tweets something so provocative that you feel compelled to reply, someone is making money.
  • Before submitting your reply, ask yourself, “Am I contributing to the good in the world?”
  • Before scrolling any further, ask yourself, “Am I enriching myself in a meaningful way?”
  • Before even opening your social media app, ask yourself, “Am I a better person by knowing the news right now, rather than next week?”
  • Remember that there are foreign governments who benefit from sowing division among us, and yes, they are on social media.
  • Remember that “influencers” on social media are acting out of self-interest, and will go to great lengths to drive engagement.
  • If you feel compelled to show solidarity with a cause, take an action that contributes to the cause, instead of adding an emoji to your bio.
  • Most people are much nicer in real life than on social media.

In praise of Windows Forms

Many of my personal projects such as DiskDigger, DiskImager, and so on are written using Windows Forms, on top of the Microsoft .NET framework. This is because these projects of mine were originally created many years ago during the heyday of Windows Forms, and I made somewhat of a gamble that WinForms would be a sustainable choice in the long term.

Fast forward to today, and it seems like mentioning Windows Forms in polite company evokes a chuckle or two. WinForms is now considered by many to be a quaint relic of a bygone era, which has been largely superseded by new and superior frameworks.

That being said, my old personal projects are still used by a good number of people, and even though I’ve added plenty of new features over the years, I haven’t changed a thing about the fact that they still use WinForms. And even when I need to create a new GUI app for some random purpose today, I find myself reaching for a blank WinForms project.

So why do I still use WinForms in my personal projects, and why have I not abandoned it in favor of something newer like UWP, or something more cross-platform like Qt?

Because it bloody works. You might have noticed that support for Windows Forms in the most recent versions of .NET is as robust as ever, and in no danger of being dropped. This is because WinForms is an extremely solid foundation for building GUI apps. All of the components are intuitive, make sense, and feel native to the platform, because they are. If you don’t need any of the fanciness provided by XAML such as animating components at every opportunity, rotating buttons by 12 degrees, or making your app run on Xbox One, then WinForms is for you!

Because it’s an absolute pleasure to use. Creating a new Windows Forms project in Visual Studio takes four clicks at the most, and you’re up and running. Designing your app’s window is as simple as dragging and dropping components from a toolbox and adjusting their properties to your liking. Creating an event handler for a component is as simple as double-clicking it. There’s virtually no boilerplate code to worry about — just focus on the code that responds to a button click, ListView selection, etc.

Because it’s compatible and lean. Compatible in the sense of running across various versions of Windows, that is. If you target the right version of the .NET framework, your WinForms app will run perfectly well on Windows XP as well as the latest build of Windows 11. As for leanness, a “hello world” graphical app is on the order of a few kilobytes, and even a hugely complex app would be hard-pressed to exceed a few megabytes of bytecode.

Compatibility (or lack thereof) with other operating systems is, of course, the major unfortunate drawback. This is where my original gamble from years ago didn’t pay off as much.  Since .NET was touted as a “cross-platform” framework, I thought naively that components like WinForms would eventually be ported over to Linux and macOS in an official way by Microsoft. This never happened, and the only real “porting” was done by the excellent Mono project, whose port of WinForms is great but not perfect, and really only works in Linux and not macOS.

Nevertheless, despite the blemish of the lack of actual cross-platform support, WinForms remains a truly solid choice for desktop GUI development on Windows. Don’t be surprised if we keep seeing WinForms used by hobbyists and enterprises well into the future, and don’t hesitate to give WinForms a second look yourself. It might not be the shiniest new thing, but it has persisted this long for a reason.

Homeowner’s log, February 2021

Our steam heating has had some sporadic issues now and then, and I think I’ve finally got it solved once and for all. It’s all about the steam traps! If you have a two-pipe steam heating system, it’s very important to replace the steam traps every few years. Or rather, replace the internal component of the steam traps, which is the cage unit.

Failed or failing steam traps can cause all kinds of issues in your heating system, including radiators not warming up quickly, all kinds of noises around the radiators, and water hammering in the return pipes due to steam leaking into them.

And this time, I made a video about it!

Just for my own recollection in the future: most of the steam traps are Barnes & Jones #3045, and a couple are #122. Both of these types are compatible with the #1721 cage unit. However, one of the radiators has a #134 trap which requires a #1929 cage unit. In the future, if these parts become scarce enough, it looks like Tunstall has new replacement units that might be compatible.

Brain dump, January 2021

If your app has a “splash screen,” it’s a tacit admission that the app doesn’t load as fast as it should. If you build a splash screen into your app on purpose, you’re in the wrong field.


Programming languages are tools; they are a means to an end. There are very many programming languages. Don’t fixate on just one. It’s not particularly useful to become a great expert in any single language. It’s better to be adaptable and pick up a language for an application for which it will be useful. Unless you’re an actual hobbyist of language design, there’s really no reason to “master” a programming language for its own sake. What you should master are theoretical computer science concepts, and an instinct for where these concepts fit in real-world applications. Once you do that, it becomes easy enough to express those concepts using the language that best fits your task.


I would say I’m almost a libertarian, but not quite. Libertarianism seems to be predicated on the idea that individual people know what’s best for themselves. As I get older, I see that this is actually a very, very unsafe assumption. A good example is vaccinations: vaccinations have to be instituted and mandated at the federal level, lest the general public be swayed against them by less credible scientists like Marjorie Taylor Greene. Another example is education, especially education of science (viz. evolution). It’s probably better for school curricula to be composed at the federal level, instead of being voted upon by local communities of parents and teachers who grew up on the same nonsense that they teach.


When I reject the existence of a god, I’m not just rejecting the god, I’m rejecting the entire logical framework within which this god is constructed. So, as long as you continue to make arguments that are confined to that framework, you’re not adding anything new to the discussion. The fact that so many people in the world are religious says nothing about whether such a being actually exists; instead, it says something about human psychology.  It says something about these ancient psychological devices that we evolved during our prehistory as frightened primates struggling to survive and understand the world around us. It’s so trivially easy to reverse-engineer religion, and see exactly which buttons it pushes on the psyche, which emotions it appeals to, and what various uses it has for its practitioners, whether it’s for good or for evil.


The definition of “conservative” seems to be changing. Conservative used to mean wanting to go back to the old days, where “old” days could be fifty years in the past. But today you can be called a conservative for wanting to go back ten years, when ideas that were considered liberal at the time would be considered far-right today. It’s a bit of a problem when our moral universe changes within a human lifetime, and an even bigger problem when our moral universe changes with each new social media app.