Portable GUI Framework Principles

Published at 08:25 on 17 November 2025

There are two major schools of thought when it comes to portable graphical user interface frameworks:

  1. To create applications that harmonize as well as possible with the rest of the platform an application happens to be running on.
  2. To create applications that appear as alike as possible, no matter what platform an application happens to be running on.

It is my contention that, for desktop applications, the first principle is the correct one, and the second principle is a harmful design anti-pattern.

The reason is quite simple: most users use one sort of platform, and that is it. You have Windows users, Mac users, and Linux users, and those users tend to stick with their desktop platform of choice. So they don’t care how a given application looks on some other platform. All they care about is how well it harmonizes with the rest of the platform they do use. This makes the basic rules of the game the same no matter what application they happen to be using. I don’t care how special you think your own application is, so far as the average user is concerned, it’s just another tool in their toolbox.

And it is the users, not the developer, who is the truly important ones here. The users are the ones for whom the application was written, after all. They vastly outnumber the developers.

Yes, some users switch between platforms of different types. That is their choice. As part of their choice, they have accepted the natural consequence of having to deal with multiple pattern languages. There is no way to be such a user and to not have this consequence imposed on one. As such, an application whose look and feel varies from platform to platform does not impose any significant new onerous cost on such users.

I am speaking here about desktop applications. For smartphone applications, the matter is quite different. This is because, despite all the hullabaloo about which is best, the Android look and feel really does not differ that much from the iPhone look and feel. It is one of the things that really struck me when I moved from Android to iPhone. Yes, there were a few places where I got confused and had to get used to doing things “the iPhone way,” but surprisingly few. For the most part, I was able to just pick up my new iPhone and start using it.

Since the pattern languages of the two smartphone platforms are so similar, it is sensible to have a goal of a smartphone app appearing as alike as possible on both platforms. It makes the jobs of your documentation writers and user-support people easier, and it does so at approximately zero cost to any end user.

It is even less appropriate to have a goal of making a smartphone app and a desktop application appear as identical as possible than it is to have such a goal for two different desktop platforms. This is because the two basic types of platform are so radically different. A smartphone is profoundly resource-deprived compared to a desktop system. The desktop can be an appropriate place to host large, complex applications (assuming large, complex things need to be done). A smartphone is never an appropriate place for such an application.

What this all means is that frameworks like Avalonia which prioritize Principle No. 2 above should be seen as primarily smartphone frameworks that also happen to support the desktop… badly.

Alternatives to the JVM for Portable Desktop Applications

Published at 19:17 on 16 November 2025

I have been using the JVM (Java Virtual Machine) to host desktop applications I develop. Originally I wrote the code in Java, but in recent years have switched to Kotlin, because it is a more modern language with a more concise and expressive syntax and a more sensibly-designed standard library.

The big problem with Java is not the language, it is the culture around the language. I have a friend with a number of pet sayings, one of which is “tradition is mightier than innovation,” and that certainly applies in spades to Java. There’s just so much bad tradition enshrined as respected convention in the Java world. I call the result Java Community Antipatterns or JCA’s for short.

Kotlin is better in the JCA department, but due to its intellectual proximity to the Java world, some of the Java brain rot has inevitably bled over, so Kotlin still has its issues. To pick just two examples:

  • Its Ktor Client HTTP request library is a lot more complex than it ought to be (way more complex than the Requests library that is common in the Python world or the standard System.Net.Http package of the .NET world). Despite the complexity, some of its features, such as bearer token management, still manage to fall short of what is commonly needed.
  • Its lightweight multithreading is likewise (there are both Job and Deferred objects, both very similar yet subtly different, where .NET gets along just fine with a single Task object).

On top of that, for a lot of things, there simply isn’t a Kotlin library. You end up calling a Java library. That is easy enough to do, because Kotlin runs on the JVM and was designed to interoperate with Java code, but the Java library is inevitably a lot clunkier and harder to use than it ought to be, due to those JCA’s.

If it weren’t for the JCA’s, Kotlin would be a near-ideal programming language. If it weren’t for the heat and dryness, Phoenix would have a near-ideal climate. (And aside from that, Mrs. Lincoln, how did you enjoy the play?)

So I decided to kick the tires on potential alternatives yet again. Always a good idea, because the state of the art is always in flux in the computing world. And the answer I got was: despite the flaws of the JVM, it’s still hard to do better than it.

Mostly, it boils down to three things the Java world got right:

  • To prioritize platform agnosticism.
  • To include graphical user interface (GUI) capability in the core framework.
  • To prioritize, or at least facilitate, making the graphical elements in Java GUI programs harmonize with the overall pattern language of the platform the application happens to be executing on.

The first two encapsulate the “write once, run anywhere” philosophy that has been one of Java’s key design principles basically since Day One. Other virtual machines still just don’t do as good a job of actualizing this principle.

This most often manifests when graphical desktop applications are involved. Pretty much any virtual machine out there will do a great job of running command line utilities or daemons running as detached jobs portably.

Python, for example, has a great cross-platform GUI library called PyQt. Alas, it doesn’t ship with it; one must add it on. And, like many Python libraries, it isn’t written purely in Python. In fact, it’s mostly written in C++, a language that compiles down to machine code, not portable byte code. This makes it a lot harder to distribute a run-anywhere application, particularly on platforms like the Mac, which is unusually programmer-hostile in this regard.

Microsoft .NET has a very nice virtual machine, with a standard library that, unlike Java’s, is for the most part well-designed and easy to use. But it was written by Microsoft, whose corporate interests as the creator of Windows run counter to the ideal of platform agnosticism. .NET code can run (and long has been able to run) on Macs and Linux boxes… as long as you stick to command-line or daemon programs. Out-of-the-box desktop support is no longer strictly limited to Windows (Macs are now supported), but Linux is left out in the cold even as of this late date.

There are third-party frameworks like Avalonia that claim to address this deficiency, but by not being present out-of-the-box, they raise the same gotchas that PyQt does in Python. Plus most of them fail badly when it comes to harmonizing well with the overall pattern language of a platform.

What it all boils down to is that I could shift to some alternate platform, and this would make my life easier in some respects, but only at the cost of making it significantly harder in others, or inescapably compromising the quality of my applications. It is far from clear to me that there would be any overall net benefit. In fact, I rather suspect the opposite would be the case. I guess that’s good news in a sense, as it means I probably haven’t been wasting my time using a suboptimal platform.

The Java community’s faults may be legion, but Java set out to be a “write once, run anywhere” language, and its virtual machine has to this date succeeded at that goal better than any other such environment of which I am aware.

Status Report

Published at 07:00 on 8 November 2025

Have been pretty quiet here recently. That’s because I’m focusing on other stuff, namely, getting this site out of the USA. Currently it is hosted at a server farm in the San Francisco Bay Area, run by a US-based cloud hosting company. Soon it will be hosted at a server farm in Quebec, run by a France-based cloud hosting company.

Also, my domain names are in the process of being cut over from being hosted by a US-based registrar to a Canada-based one.

Given the rapid progress of democratic decline in the USA, and the political nature of much of what I post here, such measures are, I think, only prudent.

Newspapers and Magazines Are Not Timelines

Published at 07:45 on 2 November 2025

Time to clarify what I recently published here.

Per my recent definition, newspapers and magazines might appear to be timelines, but they are not. This is because all articles in a publication have a single source: the the individual (or typically) firm producing the publication. Everything goes through the same editorial team before it gets in. The information has been curated by humans.

The exception would be a publication with extremely lax (or no) editorial standards whatsoever, which simply publishes everything (or nearly everything) submitted to it. Those would be timelines.

This also explains why the posts of an individual social media account are not timelines, even though virtually all social media users repost content from others. Those reposts were still done by a human. The information has still been curated.

Thesis: Timelines Are Evil

Published at 07:41 on 31 October 2025

Before continuing, it is necessary to define what I mean by timeline in this article.

timeline, n. An online list of one-to-many communications from mixed sources.

So, Facebook’s infamous algorithmic timeline qualifies as a timeline, but so are its “feeds” of friends and groups. The chronological timelines of Bluesky and Mastodon are also timelines, and therefore also evil. An email account that is on one or more mailing lists is also a timeline, but an email account that is not subscribed to lists is not a timeline. If you log onto Facebook, the list of your friends is not a timeline, because that is a list of Facebook accounts, not communications from those accounts. If you click on a friend and view their posts, that is also not a timeline, because the contents come from a single source, not mixed sources. And so on.

Timelines are evil because of the time burden they impose. This is because of how computer technology makes it so easy to send information, coupled with how timelines often contain many senders of information, inevitably makes for very busy timelines.

Some very timeline-like things existed before the dawn of the Internet. Junk mail and junk phone calls turned physical mailboxes and telephones into such things. This is why so many people rightly found them objectionable.

Algorithmic timelines are more evil than strict chronological ones, because of the opaque nature of the criteria for ordering and selecting timeline contents, but even strict chronological timelines are evil.

The only thing that can make a timeline non-evil is sparse traffic, but due to information being so cheap and easy to send this can never reliably be the case. Evil is the natural state of most timelines, and even normally non-evil timelines will at times assume this state.

Timelines are the chief thing responsible for making people spend so much time online and disconnected from the real world that exists outside of cyberspace. Create a timeline for someone, and the fear of missing out on something important that might be buried in it leads them to spend unhealthy amounts of time online.

As such, timelines are probably responsible (or at least partly responsible) for much of the recent trend of politics and society getting worse, which is driven by organic and real-world interactions being replaced by time spent in cyberspace, based on opaque criteria, all the while being monitored and exploited by capitalists and politicians.

At least this is my current operating theory. I arrived at it as a result of struggling over why I spent so much time in front of computer screens, to the detriment of achieving other goals in my life. As such, I am now in the process of experimentally de-timelining my life.

The Hamas Hostages

Published at 11:14 on 29 October 2025

Hamas claims having trouble locating them. Israel claims Hamas is deliberately not releasing the bodies. Who is more believable?

In this particular situation, I think it is Hamas. Not because I like them (I don’t), but simply because the Hamas line jibes better with reality. Even the New York Times, hardly a pro-Hamas publication, states “devastation in the enclave complicates the retrieval of all remains.”

Because of course it would. Years of relentless bombing have pulverized Gaza. There is ample photographic evidence of this. So many bombs have been dropped in some areas that a significant part of the (in)famous network of tunnels Hamas excavated has no doubt collapsed. Those same tunnels were doubtless used by Hamas to hide some of their captives. Those bodies are now many meters underground. Even the captives held in buildings are going to be buried under several meters of rubble, if those buildings were bombed. And all of it happened in a chaotic war situation with hastily-planned last-minute moves, of which accurate records were almost certainly not kept (and even when records were kept, the damage from the attacks has in many cases destroyed them).

To expect prompt delivery of all remains is thus highly unrealistic. The Socialist Republic of Vietnam is still to this very day finding and repatriating remains of American servicemen who perished in a war that ended fifty years ago. For decades, there were endless conspiracy theories circulating that Vietnam was deliberately not returning bodies, or even still holding captives as prisoners of war, long after the Paris Peace Accords were signed and the conflict ended. None of these allegations have ever been substantiated.

Every war has its missing. There are missing servicemen from World War I that are still unaccounted for. The sad reality is that a few of these captives in Gaza will probably never have their bodies located and repatriated. (Yes, I know the Hamas captives were generally civilians and not combatants, but the general conditions that make their bodies hard to locate are fundamentally the same.)

Finally, Netanyahu benefits if there is a war going on. He’s not a very popular leader, and he has a lot of scandals to his name. Trump had to twist his arm almost to the point of breaking it in order to compel him to agree to a cease fire. Because of course he did. Netanyahu wants war. War is a distraction from his scandals and unpopularity. Even some normally very staid sources reluctant to criticize Israel have pointed this out. Israeli opposition figures point it out frequently.

So of course Netanyahu is going to demand the unrealistic and the impossible. It gives him a pretext to end the ceasefire and continue holding on to power.

About Graham Platner

Published at 10:09 on 26 October 2025

He’s the (apparently) left populist candidate running in the Democratic Party primary to become that party’s candidate for U.S. Senate from the state of Maine (to hopefully unseat Susan “Concerned” Collins).

Everything was going relatively well for him until it came out that he has had a Nazi totenkopf tattoo on his chest for approximately the past two decades. Platner responded by claiming he had no idea as to the origin of the symbol and having it covered up soon after the news of it broke.

Many of his erstwhile backers on the activist Left have since expressed skepticism about Platner’s claims and have shifted their support to other candidates. After looking into his background a bit, I share the skepticism. (Moreover, evidence has emerged that he was well aware of its symbolism. But back to my skepticism.)

First, the guy has been at times dabbling in left-wing causes ever since his High School years, when he protested against George W. Bush’s Iraq War, and was voted “most likely to start a revolution” by his peers.

Yet, despite his knowledge of how the ruling class was willing to abuse military power, he chose to enlist in that very same military. He attended college after serving three deployments in Iraq… then rejoined the military, this time as part of the Maryland Army National Guard, and served an additional deployment in Afghanistan. After that stint ended, he topped it all off by serving as a Blackwater mercenary in Afghanistan. Then it was back to private life and dabbling in left-wing causes. Eventually he gets approached by activists who want him to become a Senate candidate.

How likely is it that someone with as much exposure to politics, particularly left-wing politics (of which anti-fascism is part) as Platner has had, would continue to remain ignorant for so long of the totenkopf and its symbolism? Not very likely, in my view.

It is certainly possible that his story of getting it in Croatia by choosing it off the wall of a tattoo parlour is accurate. That country has a disturbing fascist past it has never come to a reckoning with. It is the one-time home of the Ustaše, a fascist regime infamous for its brutality. (The Ustaše concentration camp of Jasenovac was even worse than the Nazi concentration camps.) Franjo Tuđman, president of Croatia from 1990 to 1999, was a Holocaust denier who wrote antisemitic propaganda that tried to blame the crimes of the Ustaše on the Jews.

But I digress. To reiterate, it just beggars the imagination that he was unaware of the symbol’s meaning until only recently, and there is already evidence that he is lying and was well aware of its origin and meaning.

This is not because he’s a committed Nazi, but because he’s not a committed leftist or liberal. He’s an amoral adventurer and maybe by this point a conman, too. He’ll play around with a variety of ideologies and careers without firmly believing in any of them. Wants to have an adventure as an antiwar activist in High School and has it. Wants to have adventures as first a soldier and then a mercenary and has them.

Now, after having the idea floated by him, it is time for an adventure in Senatorial politics. Because of his past adventures in Left causes, running on the left comes natural to him.

That is, until he’s in office, gets a little bored, and it’s time for other adventures. I could easily see him getting frustrated with the Democratic Party (it’s a frustrating organization), resigning from that party and becoming an independent, and drifting firmly into the MAGA orbit. That may seem like a big leap, but is it, really, for someone who went from demonstrating against U.S. imperialism to signing up to fight in the very same imperialist military whose invasion he so recently protested?

The guy could easily become Fetterman 2.0, that is. Or worse. Imagine Fetterman but instead of weak-willed appeasement he enthusiastically starts backing all of Stephen Miller’s worst ideas.

And can we cut the crap about purity tests? Yes, what I am advocating here is in a sense a purity test, in that it sets out some standards and finds Platner wanting in that regard. There’s this thing called balance: it’s wrong to demand perfection of fallible humans, but it is also wrong to say that there ought to be no standards whatsoever.

If the story arc of Platner’s life was from committed young right-winger from a right-wing family, to enthusiastic military volunteer ready to prove his patriotism, to disillusionment at what he saw U.S. imperialism doing, to regret at having what he realized was Nazi symbolism tattooed on his body (followed by having it promptly covered up or removed), to a post-military career as a Left activist, I would be incredibly enthusiastic about his campaign. A lot of what he is saying is absolutely spot-on, and I love that he pulls no punches while saying it. That he made mistakes earlier in his life I would not hold against him, because he learned from those mistakes.

In this case, however, the story arc of his life points to quite a different path, one that raises very real questions about his character.

It’s not as if there is nobody else running in the primary, and the filing deadline has not even passed yet. Choose someone else to run against Collins.

Who Is 50501?

Published at 14:43 on 25 October 2025

This is an important question to ask because it has real bearing for the continued existence of political freedom in the USA. (50501 is the organization behind the two waves of “No Kings” protests in the USA.)

As I have written previously, the answer as to whether or not te USA remains a relatively free country depends largely on whether or not a “none of the above” mass opposition movement, not explicitly linked with either the Democratic Party establishment or the radical Left subculture, emerges. So: does 50501 appear to be such a movement?

The answer: apparently yes. I have not found much at all credibly linking 50501’s top leadership (such as it is, the group seems to be quite informal) to the Democratic Party establishment.

Yes, I am sure one can find examples of Democratic politicians endorsing or appearing at No Kings rallies. So what. That is irrelevant to my claim, which is, to reiterate, about that group’s top leadership, such as it is, who are not Democratic Party bigwigs.

The biggest link seems to be between 50501 and the Bernie Sanders campaigns. Kay Evert from the Atlanta area seems prominent.

Bernie Sanders is not a career Democrat (he is an independent who caucuses with the Democrats), and when he was a member of a political party, it was with first a small socialist party and then another small, generically progressive party, both unique to Vermont.

In fact Democratic Party establishment generally does not like Bernie Sanders very much. It’s why they put their finger on the scale in favour of Hillary Clinton in 2016, and a big part of why career Democratic Party candidates united against Sanders in 2020.

Even the right-wing Influence Watch organization, who I am sure would love to deligitamize 50501 as much as they can, just does not have much on establishment Democrat links to 50501 as of this time.

Perhaps a greater worry is how timid the 50501 actions have been, given what is happening. A healthy democracy would have grassroots movements basically shutting down business as usual in response to something like a Trump regime. Business as usual has been shut down in several European democracies in recent years over scandals far less serious. It is not hard, in fact, to find anarchists griping about this very thing.

50501 would counter that anything more aggressive would probably alienate many Americans. And they are probably correct about this. But this ends up damning the American public for its generally low morals and standards, since, to reiterate, a healthy democracy would have a much stronger political immune response happening.

What it all boils down to, I think, is reason for a little — but only a little — optimism. It is a positive sign that a “none of the above” movement might actually be emerging, but we need a lot more than what we have seen so far, and we need it stat.

How Much the Democrats Suck: An Example

Published at 16:48 on 8 October 2025

If you want a quick little example of just how badly the Democrats collectively suck, watch the first minute and 10 seconds of this.

Senator Durbin starts out by making feeble complaining noises about a National Guard “deployment.” No, you stupid Dick. It’s an invasion. Trump is ordering troops to invade Chicago. Learn to say it: invasion. That’s what Republicans call it when immigrants (i.e. civilians, not even military personnel on an official mission) cross the US/Mexico border illegally.

By contrast, Pam Bondi acts like she actually wants to fight for what her side wants. She goes on counterattack and does not pull any punches.

The biggest problem with the Democrats is that they seldom behave as if they actually believe in anything. Anything, that is, except bringing metaphorical knives to gun fights. (Butter knives at that, wouldn’t want to accidentally draw blood, now would we?) That, they seemingly believe in with a passion that knows no bounds. And even an ongoing transition to fascist authoritarianism is apparently not enough to prompt a recalibration of their strategies.

What’s even worse is that so few apparently see it. After Durbin bombed so badly, the Democratic Party echo chamber was full of praise for his purported “confrontation” with Bondi. I am not making this up. Feed “Durbin grills Bondi” into your search engine of choice if you don’t believe me. Which all goes to further prove my point about the overall general nature of the Democrats.

Yes, there are exceptions to the rule (I would count Illinois governor J.B. Pritzker among them). The problem is not the exceptions, it is the rule. Until the pathetic, half-hearted Milquetoasts that dominate the party either find a spine or are replaced (or the party itself is replaced), the problem will persist.

And until that happens, the Republicans are merely acting rationally when they act the way they do. If your so-called opposition is too pathetic to actually fight you in a meaningful way, why not mostly ignore their feeble bleatings? Why not kick them around? Why not fully and forcefully advocate for what you want? Only makes sense.