Thought So
Published at 10:19 on 12 November 2023
It turns out that there was in fact a Ukrainian connection to the pipeline sabotage. Which of course is no surprise.
Musings of an anarchist misfit
Published at 10:19 on 12 November 2023
It turns out that there was in fact a Ukrainian connection to the pipeline sabotage. Which of course is no surprise.
Published at 21:35 on 10 November 2023
Well, too bad. Why did I type this post? Why are you reading it? Why the sudden interest in the Israel/Palestine conflict? It’s been ongoing for decades, you know. There have been Palestinian initiatives to attract attention to their grievances by nonviolent means (diplomacy and protests) all along. Yet they’ve been ignored, in favour of focusing on (let me check my recent political posts here) the Russia/Ukraine war, US domestic politics, and Canadian domestic politics.
Face it: violence worked in ways that nonviolence failed to work. And such it has long been in the Israel/Palestine conflict. How many of you have heard of Bil’in? It’s a Palestinian village in the West Bank whose inhabitants attempted to use nonviolent tactics to draw attention to their grievances. But you’ve probably never heard of them, because the Western media preferred to cover those Palestinians who were employing violent tactics at the same time.
Yes, let’s talk some about Gandhi and MLK:
Nonviolence can work… if the right preconditions for it to work exist. Ignoring the valid grievances of a people when they are not using violence is the exact opposite of those conditions.
Yes, they were.
Then again, nothing that Hamas did on October 7th in southern Israel hadn’t already been done much earlier by Zionists in Deir Yassin.
And no, this doesn’t justify what happened last month. See General Principle No. 1 above. But it does help put recent events into more historical context (No. 3). And again, why am I typing this and why do you find it of enough interest to read (No. 2)?
To reiterate, in any protracted conflict, you will be able to find no end of great wrongs and moral outrages done by either side to the other.
Given the nasty, messy history of the region (particularly since the dawn of the 20th century), and given the mutual mistrust and hostility amongst the people living there, a prompt outbreak of peace and justice is probably too much to wish for.
Instead, the focus should be to de-escalate. Expect imperfection. Expect recurring outbreaks of violence. But at least try to organize the playing field so that the natural tendency is for there to be less, not more, retaliation and counter-retaliation over time.
Right now, the West is shovelling massive amounts of military aid at Ukraine, because Russia invaded and Ukraine is trying to repel the invaders. So far, so good: the invaders, by virtue of invading, demonstrated that they wanted a war. And now they have one.
But, Ukraine has been warned countless times by its benefactors not to ever use this war as an excuse for counter-invading and trying to expand its national territory at Russia’s expense (General Principle No. 1 again). Some attacks against Russian territory are to be expected, but these should be limited to degrading Russia’s ability to continue occupying parts of Ukraine. Attempts on Ukraine’s part to colonize parts of Russia are unacceptable.
So when Hamas invaded Israel, it was only to be expected that Israel would deploy its military to subdue and expel the invaders and re-secure its borders. Hamas, by virtue of invading, demonstrated they wanted a war — and now they have one.
But, that should not map into Israel having any right to colonize and control Palestinian territory. Right now, that is exactly want Israel is attempting to do.
Any realistic assessment of Israel’s history of invading and occupying chunks of its neighbours will indicate that Israel does not exactly have a good track record here. This is the case even when assessing the record solely by measuring Israeli national security. Israel occupied Gaza before, yet here we are again. Israel’s occupation of the West Bank continues to breed enmity. The enmity inspired by both occupations helped to create Hamas. Israel’s past occupations of Lebanon served to breed anti-Israel sentiment out of which Hezbollah arose. Then Israel attacked Lebanon in part to retaliate against Hezbollah, and when the dust settled Hezbollah emerged even stronger than before.
Anyhow, now that Hamas has been ejected from Israeli territory, the focus should be on restraining Israel.
Published at 22:10 on 8 November 2023
Why did Hamas stage their attacks on the 7th of last month?
What first comes to mind are the standard reasons for any Palestinian attack on Israel. They lost their homeland, resent having lost it, and Israel is a huge part of the reason they lost it. Pretty much any people in their situation would contain at least a few individuals who feel motivated to launch attacks. But that’s unsatisfactory, as it fails to explain the exceptional viciousness of the attacks. So perhaps a better question would be: why did Hamas just take their attacks on Israel to an entirely new level?
Three main reasons come to mind:
What’s interesting is that the final one applies to Israel as well. The October attacks have been called Israel’s 9/11, and Israel has invaded Gaza without much of a firm plan for what happens next, much like the USA charged into Afghanistan and Iraq in the wake of 9/11. Not much reason to expect things to go much better for Israel than they did for the USA, either. Or, for that matter, much better than they did when Israel pulverized Lebanon in July 2006. When the dust settled, Hezbollah, the enemy being retaliated against, was stronger than ever.
As to what to do about the current situation, that comes in the next post.
Published at 18:52 on 7 November 2023
Initially, I thought they had been, simply because the attacks make so little sense from a strategic point of view. (Israel is by far the most militarily powerful country in the region. Hamas is comparatively a military pipsqueak. As such, there was a pretty obvious foreseeable aftermath to the attack: basically what we are seeing now.)
Then I shifted to a model based on mutual misunderstanding coupled with a desire on Hamas’ part to acquire hostages to use as bargaining chips for negotiating prisoner releases. Basically, Israel misunderstood Hamas, was not expecting Hamas to attack and had scaled back border defences, while Hamas misunderstood Israel, was unaware of this, and believed they had to hit very hard in order to have any reasonable chance of scoring any hostages from their more powerful opponent. Hamas was not expecting to overwhelm Israeli defences, had no contingency plans for what to do if they did, and then latent hatred manifested in mostly unplanned attacks and violence against civilians.
The above has the advantage of helping to explain Israel’s intelligence failure. If it was Hamas’ idea all along, and had been planned solely inside Hamas, it becomes easier to conceal those plans. Plans hatched in, say, Iran and communicated to Hamas have many more chances to be discovered by Israeli spies than completely internal ones.
But recently, reports have been circulating in the media that Hamas was planning this sort of murderous mayhem all along. But what is curious about these is their provenance: they come from sources other than the Israeli military. This struck me as strange, because the Israeli military were ones who initially responded to repel the invaders, meaning they are the ones most likely to discover such documents on the bodies of their enemies.
Plus, if such documents are found, it is in Israel’s interest to publicize them. I will also note that faking such documents where none exist is not in Israel’s interest: any such lies will soon be detected by independent experts, causing them to serve the exact opposite purpose of the intended one. (What is known to have happened is bad enough, and there is no need to embellish on it. Instead of instilling sympathy for Israel, the result will be to expose Israel as a dishonest nation.) Tellingly, official IDF sources always refused to confirm the rumours (later shown to be false) of as many as 40 babies being beheaded en masse by Hamas.
Well, at least one official press release does mention such documents. It is surprising that more prominence has not been given to this on Israel’s part (it would make great propaganda), but it does really seem likely that at least some of the pogroms were planned in advance.
I do think that the overall scope of them was significantly larger than planned, because I find it hard to believe that Hamas expected border security to be as weak as it was. But, to reiterate, at least some deliberate butchering of civilians was probably always at least part of the intent.
Which, once again, raises the puzzle of whether or not any external power put Hamas up to it all. My guess is: probably not. The reason is, to reiterate, the intelligence failure leading up to the attacks. I find it highly implausible that, if this was being coordinated from abroad, all three of: Israeli intelligence, US intelligence, and the intelligence agencies of third parties such as the non-US Five Eyes countries all would have missed it. (On the latter part, anything that significant would have been shared with the USA, which would have in turn passed it on to Israel in some form.)
The next question then is: Why? Why would Hamas do that, particularly given that the expected response would be, to reiterate, something very much like what we are seeing right now? That is a subject for a future post.
Published at 23:22 on 27 October 2023
It is a known bug. The workaround is to use fontspec to invoke the feature manually, e.g.:
\fontspec{Baskerville}[Renderer=OpenType, RawFeature={+smcp;-liga}]
Ligature substitution should be disabled when using small caps because the two features tend to be incompatible.
Published at 18:03 on 22 October 2023
Python is already sitting at the top of the TIOBE Index of most popular programming languages, and has been for some time. And no wonder: it’s one of the best ones out there.
One big thing that stops it from being close to the best is that it has difficulty walking and chewing gum at the same time. In one project, this caused me no small amount of pain. It’s part of the reason I have used the Java virtual machine (usually via Kotlin, which is a more modern language than Java) on some of my projects.
Over the years, there have been numerous proposals to remove the global interpreter lock (GIL) from Python. These have generally gone nowhere, with the exception of the existence of Python versions that target the Java virtual machine and the .NET common language runtime*. There are a number of valid reasons for this.
But now, there is a very serious proposal to remove the GIL from the reference implementation, and the Python Steering Committee has indicated they will almost certainly accept it.
Once this happens, expect Python’s dominance to increase further.
* Alas, these implementations tend to lag (sometimes seriously) behind the reference implementation, plus they are not compatible with many of the third-party Python libraries out there. (The latter issue is also why it has been so difficult to remove the GIL, as doing so in ways that are both a) not ruinously inefficient and b) compatible with existing libraries has proven exceptionally difficult.)
Published at 15:27 on 21 October 2023
I held considerable hope for XeTeX (the modern-day TeX). Alas, while arguably better than Groff, it still leaves a lot to be desired in the font department.
Namely, while it can indeed load and use the same standard system fonts that all other programs can (a big win over classic TeX), its support for OpenType font features is quite limited and lacking. For instance, small capitals don’t work. I have tried to use them multiple ways, including directly via RawFeature=+smcp, and either nothing happens and I get normal mixed case, or I get a complaint that Font shape `TU/Baskerville(0)/m/sc' undefined and again I get normal mixed case.
I know the smcp (i.e. set lowercase input in small caps) feature is present in the font I am using, because I can use it from Libre Office. Apparently, XeTeX just doesn’t get enough use for this sort of thing to get adequately exercised. At this stage, I’m getting to the point of writing the TeX family of text formatters off as hopelessly yesteryear.
The feature works in some other fonts I have installed, so apparently it’s a bug that only affects certain cases. Unfortunately, one of those cases is in the font I most wish to use for this project.
And yes, I know I could extract the small caps myself and create an .otf file whose lowercase is small caps, and load that font. Well, eff that. Not having to do such awkward hackery was my whole motive for installing XeTeX in the first place. If you say your tool supports standard font files, it should support the standard features in those files directly.
It’s a disappointment, as the well-documented plain-text input of formatters like Groff and LaTeX make them quite useful for formatting automatically-generated output. Modern font support has long been, and apparently continues to be, their Achilles’ heel.
Published at 09:31 on 19 October 2023
The generally shambolic nature of the organization that is my soon-to-be ex-employer is best exemplified by two of their actions in the 24 hours since I submitted a letter of resignation.
They did not thank me for my advance notice, announce they were dismissing me immediately with severance pay equal to the amount of time between Tuesday and my stated departure day, relieve me of the building access card they had furnished me, and then proceed to escort me from the building. This is actually standard procedure at many high tech companies, particularly at ones that deal with anything of a sensitive nature. This employer deals largely in archiving the proprietary information of large financial firms, easily the most sensitive data of any employer (save a government contractor involved in plutonium production) that I have worked for!
Look, I am not going to steal or destroy anyone’s data. But they don’t know that for sure. The vast majority of acts of sabotage against businesses happens at the hand of disgruntled insiders. Competent businesses know that, and have policies for acting accordingly.
They asked me what of their property I had been given and to come up with a plan for returning it to them. That points to not having functional inventory control. The latter is Business Administration 101 sort of stuff. The first anecdote was no great surprise when it materialized (see immediately below). This one, however, was.
There is actually an inventory sticker on my laptop. I guess it was merely the self-directed action of a lone, competent systems administrator, who has by now departed the company.
When I started getting frustrated at what a strange and difficult workplace it was, one of the first rules I arrived at was to never assume any level of competence on their part, since the best explanation at the time for their observed characteristics was a organization-wide lack of basic competence. This has proved to be a very good guide for predicting their actions ever since the time I formulated the theory.
Published at 23:42 on 17 October 2023
They wanted me to agree to another unrealistic “Performance Improvement Plan.” Given that it was unrealistic, it would have been dishonest to agree to it. The main issue is a fundamental mismatch between what they need and what my skills are. So I am on my way out.
Published at 00:22 on 14 October 2023
Probably the textbook example of why Java sucks is the Log4Shell Bug in the log4j library.
It’s just a library and not part of the core Java language, but the core Java language really isn’t the problem. The problem is the dysfunctional culture that surrounds the language.
So the stock logging is both bloated and yet surprisingly limited in functionality, because that is the sort of code the Java community tends to produce. That creates the need for an expanded logging system. Since it fills a void, everyone uses it.
Since the community does not appreciate simplicity, what the hey, let’s stick a general-purpose templating language into the thing. The same community wrote that general-purpose templating language, so what the hey, let’s stick a shell escape with command-output substitution into the templating language. Both the general-purpose templating and the shell-escape feature of the templating are of course enabled by default, because what the hey, why not?
And suddenly, we have a logging library with a shell escape in it.
Just how bad this all is, is underscored by how it sat unnoticed for eight years before it started being exploited. That’s right, so few people actually used all this creeping feature-ism that it took nearly a decade for the vulnerability in it to be discovered!
Look, logging and templating are two different domains. Templating and launching commands in a subprocess are two different domains. A logging package has no business containing templating beyond approximately the String.format level. A templating package has no business containing general-purpose subprocess creation.
If you really have a need to generate a super-long, super-complex log message, long enough and complex enough to require a general-purpose templating system, you should probably rethink what you are doing. Log messages should be relatively short. Now, maybe your case is 1-in-1,000 to 1-in-1,000,000 special and there really is a good excuse for a long message. Maybe. Fine. Do it by hand. Pull in a templating library, use it to generate that message, and feed it to the logger. Don’t bloat up and complicate the code base for everyone else just because of your 1-in-1,000 (or more) special case.
Likewise, if you really need to substitute in the output from a system command into your template, use the subprocess-creation features of Java to run the command, collect its output, and feed it into the template. Again, a 1-in-1,000 (or more) special case, no need to clutter up the code base.
In short, it’s potentially dangerous. Make the programmer work a bit in order to do it. Not a whole lot (libraries should and do exist to make it easier), but a bit. Enough to get the programmer hopefully thinking about the consequences of the feature. Don’t just stick it in by default.
But who am I kidding? This is the Java community we are talking about. Too much can never be enough!