Saturday, October 08, 2022

AI Art?

Ah, October, the oddly named tenth month of the year. Probably the month where the on-rush of inertia towards the end of this year and the start of the next is the strongest. After the last entry involving tiny fonts, I didn't really feel a need to say anything. Until now.

The recent release of DALL·E for unfettered public use combined with how an artist winning top honours at a fine arts competition with AI generated image has fanned flames of arguments for and against the recognition of AI generated images as art.

I won't list the arguments down here, but instead share my perspective on this and on related aspects of this in general.

See, scientific and technological progress leaves an indelible mark on the overall psyche of the human race. In many cases, the belief that something is possible has proven to be enough of an impetus to drive someone to make that belief a reality. If they can explain it, we get new science. If they can replicate it consistently, we get new technology. In that sense, the progress of science and technology cannot be halted.

In the case of having faster computational hardware, or the ability to make more money with less labour in the world of manufacturing and business, almost everyone is in agreement that such progress is beneficial. And the near optimism of the ingenuity of humanity to solve problems in the future (especially the problems that the solutions of today have created) creates this self-feeding and self-expanding loop of advancement.

Due to the generally dehumanised aspects of manufacturing, business, and computation, most people do not see a threat of sorts. There were once those who fought against the rise of the machines in industrialisation, but their fight was more about how the former labourers were ill-treated in the rise of higher productivity tools than how the tools were of higher productivity, despite their group (the ``Luddites'') being used these days to mean an opposition to industrialisation/automation.

So, why the brouhaha over AI generated images as art?

It's not just an issue about labour the way the original Luddites were fighting against (though I suspect that this will eventually become the real argument in time to come), but it seems to, at some level, impinge upon what some claim to be a quality of what is essentially human---art. ``Art'' is a loaded term, and with the post-modern movement being a thing, is even more loaded than ever before.

At the risk of oversimplification, ``art'' can be thought of as the outcome from the sum total of an expression of qualities that have not been adequately expressed/explained in a quantitative manner that permits a consistently deterministic and predictable outcome. You know, the thematic opposite of ``science''.

Art is older than science---we have been expressing/creating things long before we knew how to characterise, explain, and replicate them at scale. Despite all the new gadgets that we have created over time, art still exists, though to be fair, art has also evolved.

Evolved to make use of the newest gadgets to assist in the expression.

Finger painting was among the first forms of visual art. Then different pigments were discovered, and other media to use them were also created. Art evolved from depicting the past to depicting the future, from symbolisms of reality to abstractions to hyper-realism, from the still to the animated to full multimedia extravaganza---you name it, art has and will continue to explore it.

AI generated images is just another gadget that is created that incumbents have not gotten used to. After all, no one seems to bat an eyelid when the ``clone stamp'' is used in art, or even more dumbly, when three-point perspective is used---both of the cited examples are gadgets/technological tools that artists have accepted as part of their toolkit of expression.

AI generated images are going to be that, eventually. There is no running away from it, and I am sure that many artists know this.

But what they are angry about is the same as what the Luddites are angry about back in the day: the ill-treatment of the specialists of the art by the Johnny-come-lately wielders of the latest geegaw brashly proclaiming deceptively that they were also artists without acknowledging that their apparent powers came about through the use of a new high-productivity tool as opposed to walking the hard path that the specialists of old used to get to where they were.

Thus, it is about the deception that are ruffling the feathers of the naysayers against AI generated images as art, and not necessarily the AI itself. There are some arguments about how the AI model is somehow stealing intellectual property through amassing the images of artists to train from, but I do not see how this argument can be fought comfortably, considering that even the regular training of a human artist involves studying the artwork of other artists.

As someone from tech-land, I want to point out that the representation of something does not make it that something, i.e. ``a map is not the territory''. If the representation used in the AI model is a literal copy of the image, then there are strong grounds for how the AI model is truly a copying-plagiarist. However, if the representation used is an abstracted form of the image, then the argument is severely weakened---even in the case of human-land, when an artist is sued for copyright infringement through what is claimed to be a derivative work, the burden of proof for the actual copying aspect is subtle enough that a lawsuit in front of a judge is needed to sort it out, because factors other than the representation in the head of the allegedly infringing artist will come into play to determine culpability.

There may be strong arguments about attribution of the training data source images, especially if they are digital in nature, mostly because in the land of the discrete, a map of the territory is the cheapest when it can be a literal copy of the territory itself. For the confused, this means that if I want a ``map'' (i.e. representation) of the digital ``territory'' (say an image, or a video, or even a plain text document), it will cost me negligible amounts to simply copy bit-for-bit of the digital ``territory'' than to re-create a ``map'' of it (through transcoding for example).

Other than that though, it is probably best to dissuade deception by making it clear when a work is made from these AI tools, at least until their use are so ubiquitous that it seems a bit silly to do so (no one ever declares their use of three-point perspective for example).

And when will that be? Who knows... I've written a fairly long and rambling post, and it is time to head back into Minecraft to prepare the perimeter for my traditional stone brick castle.

Till the next update then.

Friday, September 23, 2022

Prototype 5×10 Font Arrives!

Ooo... buckle up. This is a sequel to Stupid O'Clock is the Font of Stupidity.

Our sequel begins where the math was grokked. To wit:
For those, I can bring the terminal screen to use the full extent of the 1920 horizontal pixels. Easy. And without going that far, Vim has no text decoration that eats up cells, which gives us the full 80 characters (I refuse to use line numbers on the side of the simple reason that the ruler in my status already shows the line number of the cursor). Zipf's Law suggests that very long lines are rare, and thus as long as I can find a font for my terminal emulator to handle about 161 characters for half the screen (math says that each character needs to have about 1920/2/161=5.962 pixels), I'm gold.
That 6×11 font that I put together is displayed here:
In comparison, this is the 6×10 font of Opti Small:
Thus, the last time we ended that post, it was decided that I would stick with Opti Small because I figured that interpreting the width of 5.962 pixels as 6 pixels was good enough to support the vertical split screen with the 80-character line length limit.

Well, after nearly a week of using that set up, the answer was a resounding no.

Even a simple vertical split would leave one screen be good at showing only 79 characters for some reason, and with the word-delimiter soft-wrapping option that I use in Vim, it made everything very misleading.

Thus I had to choose the next best width, that of 5 pixels. There were, unfortunately, some problems. I mentioned in my previous post that CG Mono had some problems. Specifically, this was what I said:
It was fine, but still looked a bit off because the `>' glyph was bogus---it lacked the crispness that came from bitmap fonts, and looked like some other font was chosen to render it instead.
More specifically, this is how CG Mono looks like when it is at 7pt (or 6×10):
Notice that weirdness in the `>' glyph---I didn't do anything. All the screenshots are directly taken from whatever was rendered in mintty.

The only font that I had lying around that had 5 pixels of width was CG Mono at 6pt (or 5×9):
See, the problem with this font is that the parts where it is used most often (i.e. the characters between 0x20 to 0x7f) have instances where they are smushed into each other in the bid to preserve some of the fine detail (like the tines in `M', `w', and the like). Compare this against the sample of Opti Small above---Opti Small is so much more readable with the enforced vertical pixel of spacing.

The only problem was that Opti Small was not 5 pixels wide---it was 6.

And so, I decided to take Opti Small as the starting point, and make my own 5×10 font.

Why 5×10 and not 5×9 like the one in CG Mono? It's about the verticality (108 lines versus 120 lines) with the overall need for spacing, and the reduction of the number of dimensions of downsampling I needed to worry about (I only needed to eliminate one column of pixels as opposed to one column and one row of pixels).

The general observation here is that while the Opti Small font has each character sitting in a 6×10 cell, the actual character is designed to keep within a 5×7 grid, not counting descenders and ascenders. This means that Opti Small actually has a rough 3-pixel of whitespace that separates each line. Comparatively, CG Mono at 6pt (or 5×9) had only a 2-pixel of whitespace that separates each line. It doesn't sound like much, but at these scales, that's a huge difference between quickly deciphering what the character is from developing a headache.

Thus my real task is to approximate a 4×7 character out of the 5×7 that Opti Small uses. It was mostly quite straightforward---I followed these rules of thumb that I came up with:
  • Eliminate the third column of pixels if possible;
  • If a key feature of the glyph requires pixels in the centre, offset it such that we eliminate pixels to the left of it;
  • When in doubt, eyeball and trust what the eyeball says.
That led to this current version of my cobbled-together 5×10 font:
The eagle-eyed might ask: how did I manage to do this so fast considering that I had mentioned that I was test running the set up for the week before deciding to change things up more?

More pertinently, how did I begin with a bitmap of Opti Small that was accurate and without excessive amounts of labour?

The answer lies in FontForge, and the use of the BitmapFont section of the SFD file format. I loaded the .FON file of Opti Small into FontForge, and exported an SFD file. Then I extracted out the BitmapFont section, and wrote a simple parser in Python3 that looked out for each BDFChar command before using base64.a85decode() to decode the bitmap string and write it out in a file format that was compatible with Simon Tatham's font tools.

From that generated file, it was just a straightforward exercise in adjusting it so that it becomes a 5×10 font that I built into a .FON file, giving the result as shown above.

There are some things I'm still unhappy with this new 5×10 font, but it is mostly to do with the characters of the range 0x80 to 0xff, ranges that I rarely use. I suppose I could iteratively refine them over time.

One other thing that I forgot to mention is that in the bid to keep the vertical columns of whitespace to make individual character recognition easier, I had to decide how I was to deal with the ``high contrast'' tines that appear in glyphs like `M', `W', and the like. Using my experience of working in the text editor of the Pico-8 Fantasy Console, I've learnt of/and gotten used to the rather tiny and stylised font of the Pico-8---the idea of using thicker lines to represent implicit high-contrast vertical lines was no longer abhorrent.

And now, with a font that is 5 pixels wide, my half-screen set up permits 1920/2/5=192 characters across. It's wonderful. The ample amount of unused pixels in both the horizontal and vertical directions made reading with such a font surprisingly comfortable and no less different from reading something in Opti Small.

Will I be releasing this 5×10 font? I'm not sure. Like I said, there are still things that I need to tweak and fix. In addition, the original author of Opti Small, Nicolas Botti, left behind a little confusing bit of copyright:
Copyright: Nicolas Botti 2004. Use it, distribute it, change it.
I'm no lawyer, so I don't know how best to interpret this. I suppose it is fairly safe to release the 5×10 font, but it'll be ``when it's done'', perhaps even when I figured out how to generate a version of the font that can be directly used in the Linux terminal emulator in the desktop GUI.

Anyway, that's all I have for today. Till the next update then.

Friday, September 16, 2022

Stupid O'Clock is the Font of Stupidity. Who'd Thunk?

Man, I slept at 0230hrs this morning and woke up at 0825hrs.

The reason is quite banal---I was creating my own 6×11 bitmap font for use in my terminal emulator when I realised that the one I was using had a bad render of the `>' glyph. What ate much of the time was trying to figure out why the blazes my terminal emulator (mintty for the curious---it's from Cygwin) was still rendering that font as 6×13 instead.

Spoiler alert: semi-hidden option of AutoLeading was screwing up the vertical pixel count. 🤦‍♂️ But more on that later.

I need to begin the story where it will make more sense. I had thought long and hard, and have decided to move away from my default maximum character width of 76 characters for source files to that of 80 characters instead, especially for Python.

The reasons were as follows:
  1. That missing 4 characters was enough to cause an unnecessary break for a line that would fit exactly within 80 characters;
  2. By Zipf's Law, most of the code lines aren't ever going to be that long anyway, which means that it was usually safe to keep it at 80 characters as opposed to 76;
  3. My old comment on needing the extra columns to allow the additional decoration for TUI editors hasn't been applicable for more than two decades now.
By ``additional decoration'', I mean the following (text editor is Multi-Edit Lite running in DOSBox-X, originally shareware from Multi-Edit Software, but the company seems dead as at time of writing):
Notice how line-drawing characters are used to define the borders of the text window, together with the old school representation of scroll bars and the like? Those take up character cells, and with a starting point of 80, the left and right window edges immediately take it down to 78 characters being the maximum amount of visible text without scrolling. The 76 was derived from the observation that if one reaches the end of the line through any regular cursor movement, it will often end up one character beyond the last character, which can trigger a horizontal scroll.

In short, it is annoying to use the full complement of 80 characters, and it was better to use something like 76.

But I'm using Vim now---I've been using Vim for a long time now. That shouldn't matter any more.

The only thing that can matter is the idea of vertical split screens, either from looking at differences between two files, or three in the event of a three-way merge.

For those, I can bring the terminal screen to use the full extent of the 1920 horizontal pixels. Easy. And without going that far, Vim has no text decoration that eats up cells, which gives us the full 80 characters (I refuse to use line numbers on the side of the simple reason that the ruler in my status already shows the line number of the cursor). Zipf's Law suggests that very long lines are rare, and thus as long as I can find a font for my terminal emulator to handle about 161 characters for half the screen (math says that each character needs to have about 1920/2/161=5.962 pixels), I'm gold.

Vaguely, this means a font that has about 6 pixels of width. My go-to of Proggyfonts (or more specifically, Opti Small is already 6 pixels wide, but thanks to some fuckery from mintty, it looked off to me. That, and I wanted something that yielded more than 161 characters at the half-screen mark to have more room for other niceties.

I then started looking into using CG Mono instead. It was fine, but still looked a bit off because the `>' glyph was bogus---it lacked the crispness that came from bitmap fonts, and looked like some other font was chosen to render it instead.

Why? I don't know. Looking at it through FontForge showed nothing out of the ordinary. The time was about 2300hrs or so. And that's when I went to Simon Tatham's Fonts Page to grab his scripts and samples to build my own 6×11 font to fix this issue.

I completed the font, but when I tested it, it was... very off. The vertical extent as compared through the gridded version of MSPaint showed that it was consistently 2 pixels larger than what was stated. I read through Simon's code to see if he was doing anything strange, and found nothing.

It was then that I decided to go read the fine manual of mintty, to see if there was something I was missing.

Oh yeah, I was missing something all right---the completely inaccessible via configuration screen option of AutoLeading. It defaulted to 2 for some damn reason, and there was no way to change it in the pop-up configuration menu. Mangling the associated .minttyrc file allowed me to set it to 0, and everything worked well once more.

At that point, I switched away from CG Mono and back to my usual font, and it looks peachy.

🤦‍♂️

So what's the moral of the story then?

Don't do weird shit at stupid o'clock---one really ends up doing stupid things at stupid o'clock. I mean, redesigning an entire bitmap font when all that was needed was a tiny configuration change in some semi-obscure file? What an ``excellent'' use of 3 hours.

Till the next update.

Tuesday, September 13, 2022

I Can Haz Steam Deck Plz?

Okay, it's getting late, so I will keep this short.

This week is going to be a short week for me due to me taking leave on Friday for no other reason than to take a day off. After all, that's what paid time off or ``annual leave'' is for.

It's not a privilege but an entitlement. It's good to have a small break ever so often just to keep the burn-out monster at bay.

I'm waiting on the Steam Deck to be released in SIN city. So far, there is no indication that it will make its way here, though many signs are pointing towards that, considering how the availability blurb refers to Komodo making it available to South Korea, Taiwan, and Hong Kong, in addition to the originating country of Japan.

Okay, maybe not just SIN city, but SEA countries.

I'd love to have the Steam Deck. I used to have a Dingoo from way back when and enjoyed the times that I played it. It was mostly emulator-heavy, which was not a problem. Eventually I stopped playing on it because let's face it, many old games need to remain in the past because their interface was just atrocious as compared to what we have now, and that it was actually possible to exhaust the number of retro-games I wanted to play. I had to junk it a few months ago because the lithium battery pack was swollen.

But a Steam Deck? I can see myself playing/grinding games from my Steam library on it. The ability to carry a game's progress between systems over Steam is a big part of why the Steam Deck is so appealling despite my earlier lost of interest in the Dingoo. This means that I could [say] grind games of Binding of Isaac on either PC or the Steam Deck without worrying about having to replicate the feats to unlock features, nor do I have to worry about doing the synchronisation manually.

I'm not expecting to use the Steam Deck for long gaming periods---that's what Eileen-II is for, and also why I didn't get on board with the Nintendo portables, up to and including the Switch. Small 30-minute plays in commute are the most likely use cases---I can't keep reading forever. There are other handhelds similar to the Steam Deck (like the Aya Neo, or offerings from GPD), but they cost at least 50% more than the most pricey variant of the Steam Deck, and are Windows exclusive machines.

That latter part is a bit off-putting. For what is to be a dedicated gaming portable, running a two-ton gorilla like Windows as opposed to the gaming-centric SteamOS feels like a lot of the precious battery juice will get lost somewhere.

Anyway, as I said, this is short. Till the next time then.

Thursday, September 08, 2022

Consigning Ramblings to Records

To feel loved is something that comes naturally to humanity. Hell, even I cannot run away from it sometimes, as misanthropic as I claim to be.

But what does it mean to ``feel loved''? Is it the same as ``being loved''? Does ``feel loved'' actively require an other entity outside of the soul/consciousness that is currently piloting this meat body? Is it something purely bio-chemical that we attach more signficance to due to our insatiable need to derive meaning and symbology? If so, do animals other than humans ``feel loved'' as well?

I've been walking about the past couple of weeks in a semi-trance, in the sense that while I am fully aware and present wherever I am, I cannot help but notice that there is nothing inherently ``real'' about the world. All the physical sensations that we have, be they sight, sound, taste, and all others, are merely emergent behaviour built upon the interactions of unfathomably large numbers of primal components that are smaller than the atoms that we sort of understand.

Much of the world is emptiness, literally. Atomic structure itself is mostly space, though what is that space is something that I don't think we have an answer to. Feelings of friction, Newton's Third Law observations, and other human-scale phenomena are interactions of invisible electromagnetic fields as the atoms repel each other. Smaller-than-human-scale phenomenon that allow us to ``run'' a consciousness in the form of biochemistry is even more difficult to comprehend---stupendously large numbers of chemicals are synthesised, interacted with, and broken down, all without necessarily having awareness of the larger ``I'' that has emerged from their collective behaviour.

Where then does ``I'' begin? And if I cannot tell where ``I'' begins, where then can I start talking about ``feeling loved''?

God is unknowable because He isn't one of us even as we are made in the image of Him. Yet we are reminded to know God relationally, to bear in mind of His sovereign will over reality, of His Perfect Plan, and of His indescribable power in influencing and changing things according to the said Plan.

Is this what it means to ``feel loved''? That, despite how every other human may not give a rat's ass about us, we have a Creator God out there beyond our ken who made us through His cunning ways of manipulating extremely complex behavioural systems of remarkably simple axioms who cares enough about us that it does not matter if the rest of the world hates us.

Is ``feeling loved'' something that is bound by time, or in other words, is the existence of a specific direction of time necessary to allow one to ``feel loved''? Time is necessary for cause and effect---the very definition of cause and effect demands that a certain sequence occurs, and from such a sequence, a direction of time may be inferred.

If the house of God is beyond the observable universe, does it also mean that it has no direction of time the way we innately experience and ``know''? If so, when we are in the house of God in the end days, are we still loved, if ``feeling loved'' is indeed dependent on a cause and effect? We have hints in Scripture about the timeless nature of things, at least from the definition as derived from cause and effect, in that our salvation (and thus our reconnection with God the Father) comes not from works but from faith---it defies what we understand as a regular cause and effect.

If that is the purest and best form of love, does it mean that all other earthly emotions of ``feeling loved'' is just a shadow that we need to learn to disregard and discard?

The confused might ask ``MT, where are you going with this?''

And I reply, ``Like hell I know. Not every blog post is about making a point that makes sense.''

Till the next update.

Monday, September 05, 2022

Making the Common Word List Source Technically Correct at 95% by Mentions

Okay, I couldn't let it go. I mentioned about the true count being one processing step away from getting, and just did it. The true total mentions is 2.00T rounded off (or 1997515570677 versus the original 1991804657887) a difference of 5.71G (or 5710912790). This mass difference directly led to 2.23k words more than the original 26.8k words.

Will that make a noticeable difference? No clue because I'm too lazy to do a diff between the two top 95% words by total mentions and perform the necessary qualitative analysis---it's just not worth it.

I've updated the bit-array for the Bloom filter, and so things are more correct than before.

I've also added a couple of warnings for when the counting statistics yield something that may make all the estimated readability metrics even more suspect. In addition, I chased down the actual paper regarding the automated readability test, and realised that the Wikipedia article misrepresented it (the horrors!).

The actual links and what-not are updated on the readability test page itself.

Okay, that's about it. I've deliberately set this publishing time to be the next day to not overshadow the last entry's triumph.

Till the next update.

Sunday, September 04, 2022

Readability Test

Hoo-wee. Let's nerd out a little.

This online readability test has been a project that I have been working on and off for quite a while. While it is not something ground-breakingly new, it does get fed some rather beefy data to become the thing it is.

First off, let's get the big picture right. The tool implements three readability tests:
  1. Flesch reading ease;
  2. Flesch-Kincaid grade level; and
  3. Automated readability index.
The first two methods involve messing with word, sentence, and syllable counts, while the last involves only characters, words, and sentences.

I know that MSWord has such readability tests built in. However, I don't have MSWord accessible most of the time, so having a tool on my own is probably better.

Character counts, word counts, and sentence counts are lexicographically mechanical in nature---the heuristics for English (my primary language) are quite straightforward to use. The tricky one is syllable counting---coming with heuristics that can work for a large quantity of words is both challenging and time-consuming.

To deal with that in the laziest means possible, I decided to just build a simple linear model to handle it. In theory, I could just grab a list of words with their syllable counts and use that as is, but then you get faced with the word ``omphaloskepsis'' that is rare enough to not appear in the list and you are faced with the question of ``what's the syllable count of this word?''.

So some level of generalisability is necessary, and to do that, a model is needed.

Like any model, two big things need to be taken into account: ground truth and features. Roughly, we need ground truth to ``know'' what the mapping of word to syllable count (my learning problem) should be, while features are used to derive general properties of the word that may be generalisable to handle new unseen words.

I'll skip all the experimentation and just describe the stuff in point form.
  • The ground truth is derived from the CMU pronunciation dictionary, using a heuristic that maps one syllable count to one appearance of a vowel phoneme.
  • Features are binary (present or absent), no matter how represented they are.
  • I used skip-digrams as features: a skip-digram is a digram with a certain number of other characters (between 0 to 4) in between.
  • I used trigrams as features as well.
  • I used ``book-end'' features: it's a trigram made of the first character of the word, and the last two characters of the word.
  • I encoded the length of the word as a one-hot encoded feature for up to 10 characters, and one feature for words longer than 10 characters.
  • To ensure that the short words are generally more correct (most likely to be exceptions to any generalisable rule), I also added in a special short cut-off, storing words up to and including 4 characters as features.
  • The weight vector for the features are obtained through solving the system of linear equations using a sparse implementation of the least squares algorithm.
  • The final stored weight vector rounds off to 3 decimal places, and the final predicted syllable count from the model is rounded to nearest 1.
To use the model, I just created a JSON file of them, and made a small JavaScript interpreter to use that JSON data.

The final model took the 117k words extracted from the CMUdict dataset (~1.34M bytes) to the 473k bytes long JSON file. That's good enough I suppose.

The logistics of training the model was... funny. Due to the number of features involved (47.6k) and number of entries (117k), the matrix (5.57G entries, or about 44.6G bytes of memory for double-sized in dense mode) can only be solved using sparse linear algebra techniques. I can't run it in Cygwin due to the choice of library, but it can be run in Anaconda on Windows.

The only problem was that it was slow. Running it in a Xubuntu OS in VirtualBox was easily 3× faster.

Why? I have no idea. But it was done. And with only using 300M bytes of memory out of 2G bytes available too.

🤷‍♂️

So that solves the syllable count. Hurrah!

Well, that's not enough. If you've read the limitations of the measures, you'll realise that obscure words that happen to be short can break things. To deal with that, I decided to just add a list of discovered obscure words.

But it's quite nasty to add a list of obscure words to compare too---there are far too many of them. It's much easier to create a list of common words, and then report that a word is obscure if it does not appear in this list.

There are two issues to that approach:
  1. Where do I get such a word list?
  2. How do I store and search through such a word list in a way that is space and time time efficient?
Let's start with the second question since the answer is simpler: Bloom filters.

Put simply, Bloom filters implement a probabilistic data structure based around hashing and a fixed-sized bit array where the false negative rate is zero. The false positive rate can be set with a whole bunch of other parameters tuned to fit that---I think the linked to article does a better job to explain things.

So for my obscure words detector, I created a Bloom filter with false positive probability of 0.00001, or 1 in 100k. The resultant bit-array and support code in JavaScript to implement the data structure weighed in at around 217k bytes. All these without actually storing any of the words.

So how many words went in to this Bloom filter? About 26.8k words that constitute the top 95% of word uses.

Which brings us to the first question: where to get such a word list?

I only know one source for this: Google NGrams. More specifically, the 1gram dataset. I used the Google NGrams dataset before a long time ago to build some tetragrams as part of an evaluator for my experiments on automated cryptogram solvers, but the newest dataset (from 2020) has a slightly different data format.

No matter. Getting the data is easy. Processing the downloaded files yielded 79.1M ``words''. Dropping off all the specially marked words (hence the quotation marks) yielded 36.9M words. But that wasn't enough since this was case sensitive. One more round of processing yielded 29.0M case-insensitive words. This yielded a total mention of 1.99T mentions, of which I filtered off to the most popular words (by mention) that added up to 95% of the mentions (or about 1.89T mentions). This led to that 26.8k words, which sits at 216k bytes.

The more astute should realise that I should use a different sum total because of the ``minimum of 40 mentions to appear in the individual word list''. Yeah, but it's already done, and I am quite satisfied with the results, even though including those extra counts of ultra-obscure words will increase the number of frequently used words.

And so, we have the final result: the online Readability Test.

Phew, that's quite a big nerd out. The only other thing I want to add is the use of tqdm as a quick way to show progress in terms of total time, as well as the rate of processing in iterations per second, all while using unit scaling to show large numbers in nice SI-prefix notation.

Till the next update.

Saturday, August 27, 2022

Heyo Stupid O'Clock Ho!

Well well well... it's stupid o'clock. Has it really been this long since a stupid o'clock post?

I don't know... you tell me.

We are way past the halfway mark of 2022, and are rapidly heading towards its end and eventual start of 2023. I'm not really the type to do a mid-year review of the goings-on, but a stupid o'clock post has little holds barred.

Anyway, let's go back to some old topics: writing as catharsis.

I enjoy writing. Some see writing as a creative outlet, but I find that writing serves its purpose as a means for me to do a mental purge. Anything, be they related to work or personal issues, once committed to the metaphorical paper, becomes something that I have removed from the immediate working memory of my mind. Because of this phenomenon, I have a tendency to take indexing of my written items a little more seriously than most---if I do not index something, it will be lost to the ages.

Fiction is a little bit different in that there is an attempt to perform a reframing of something that I had experienced/read about into a situation where that said experience (vicarious or otherwise) can be somehow applied, while retaining the overall make-believe nature that is demanded of fictional works.

Strangely though, I find that I am preferring prose over poetry these days. Not sure why. Maybe it is connected to the whole lowered affect that I have about things? Poems have a tendency to relate more strongly towards that of song/music, and are usually powered/inspired by emotive moments.

These days, the only emotion I feel is just... is ``tired'' an emotion? Maybe the closest word is ``ennui'', though that ``dissatisfaction'' bit seems to be less apt in describing my true inner state. I want to claim that I am at peace with the world, but that isn't right---I still get riled up by some of the more blatant but obviously stupid things that I observe. Thoughts of death have come by at a much reduced frequency now, and I suspect that part of it is due to me being ``tricked'' into having responsibilities in the form of holding a job.

Speaking of jobs, hiring of extra help is always painful. Let's see what God wills for us. Many strange things are afoot, and I am not a liberty to discuss them anywhere. Needless to say, I am still preparing for the worst case scenario of having to tank everything, and that over-sized task is daunting, to say the least. If it does reach that point, there is a pretty large chance that I will just leave my current role when things go beyond what I can comfortably bear.

Let's hope it doesn't get to that point.

Emotions... I had an epiphany recently. I started cutting off more people whom I think are better to leave out of whatever is left of my sad life. Most of them, I've not spoken to in a decade; their lives have diverged greatly from mine, and being sober enough to realise that apart from that one very forced meet up, neither they nor I have bothered to keep in contact.

So I just felt it best to cut them off. They don't need to know what I am doing, and I don't care about how their children are growing up.

Then there are those who are loosely acquainted to me only through her. It's her social circle, not mine---without her as a catalyst, any relationship that I might have with them will not stand up to anything. No need to let them worry about any potential awkwardness---I didn't exist in their lives before she introduced them, and even after introduction I played little to no part in their lives thereafter.

So I just felt it best to cut them off. It's not like they would care about me anyway.

I picked up my dizi and played a little on it today. It was nothing serious, just a little noodling on a beidadi that required stretching of the fingers, even for someone like me. I guess that's an improvement over the whole sentiment of quitting music altogether. I did sort through my overly thick ``practice'' music folder to reduce its weight through careful selection of pieces that I wanted to work on, so that's also a great restart.

I finally completed AI: The Somnium Files, not-so-accidentally 100-percenting it. The story was a little more complex than any of the Zero Escape games, and the later puzzles could get frustrating at times, but I like the character development for the most part. A fun game.

Will I start on AI: THE SOMNIUM FILES---nirvanA Initiative? Eh, maybe not so soon. I feel a little gamed-out on the adventure visual novel puzzle genre of games. I might try to complete A Hat in Time (not 100-percenting it for sure), and get back to What the Golf? (unsure if I want to 100-percent it), with splatterings of rogue-likes in between (I'm staring at you, Jupiter Hell, Binding of Isaac: Rebirth, FTL, and Enter the Breach).

The weather for the past week has been unusually nice---lots of rain, not a lot of mugginess despite the humidity, and not a lot of crazy sunshine. Such weather conditions aren't likely to last anyway due to the whole convectional rain that SIN city has a tendency to undergo. Ah well.

I think that's enough of a brain dump for a stupid o'clock post. Till the next update then.

Tuesday, August 23, 2022

CSS User-defined Constants and Auto Font Size Scaling

Okay, the last post was quite negative and triggering, so let's change gears a little and talk about something different.

I've been tweaking my personal domain in the recent few days, partly to streamline a bit to make things more maintainable, and partly to fix some long-standing aesthetic issues.

One of the first things that I figured out is the use of CSS variables, or more specifically, the global ones. I use them not as variables, but as some kind of symbolic constant to keep those magic numbers away from appearing from within the CSS file itself. Some examples of the magic numbers that I magicked away include:
  • The basic indentation space;
  • Highlight colours of various sorts; and
  • Contrast colours of various sorts.
That made it much easier to set various HTML elements' properties in a more consistent manner.

The other thing that I was tweaking involved what I would call ``font size rescaling''. The problem I was facing was this: when I was using (say) <pre> tags to create ASCII art, they tend to stay more or less the same, until the browser window is sufficiently narrowed to the point that the original text extends out to scroll horizontally.

I fixed that issue (and the other one involving tables, most notoriously for my Instrument Range Visualiser) through auto-injected JavaScript that does funky-ass mathematics and DOM manipulation to sort-of achieve the effect of rescaling the font sizes so that things fit correctly.

That solution was very flaky, and did not solve the problem well. There were two reasons:
  1. Setting the minimum font size of the browser to anything other than 0 would screw things over---this was to be expected.
  2. All that DOM manipulation nonsense didn't sit right with me due to all the arbitrariness.
And that's where I learnt of the vw unit. Simply put, 1vw expands to 1% of the view port's width in pixels.

Combining that with the calc() function and the storage of variables in the :root element to be used as global variables allowed me to define a new scaling factor that is based on both the ``ideal'' width that I had defined, as well as the current width of the view port. That allowed me to eliminate all the funny JavaScript code that was doing the manipulation, and reduce everything down to just a few lines of CSS code.

There was still on technicality though---I didn't want to up-scale the fonts if the width of the view port exceeded my defined ``best fit'' design. This was easily solved through judicial application of the min() function, the original designed value, and the scaled version accordingly.

I liked the end result.

That's about it. Till the next update then.

Saturday, August 20, 2022

Vitriolic Catharsis

Warning, the kid gloves are off in this post. Go away if you don't want to be triggered.

Vg unf orra dhvgr fbzr gvzr, naq V unir orra nygreangvat orgjrra frrguvat va fvyrag natre naq dhvrg npprcgnapr bs jung unf unccrarq. V unir gevrq gb sbetvir, ohg V sbhaq vg ynpxvat. V unir gevrq gb sbetrg, ohg bayl gvzr pna cebivqr rabhtu qvfgnapr sbe vg gb jbex zber rssrpgviryl.

Gur natre vf ng gur ybff bs qernzf bs gur shgher. Gur gevttre vf fhecevfvatyl onany---gur nofbyhgr erzbiny bs nyy Tbbtyr qbphzragf gung jrer bapr funerq orsber nobhg ohpxrg yvfgf naq bgure funerq gubhtugf nobhg gur shgher gung jr jrer cynaavat gb unir gbtrgure.

V chg va guvatf gung V jnagrq gb qb jvgu ure nf cneg bs bhe ohpxrg yvfg, guvatf gung V crefbanyyl jbhyq jnag gb qb ng fbzr cbvag ohg arire ernyyl gubhtug zhpu nobhg gvyy fur pnzr vagb zl yvsr naq jr jrer ng n yriry gung V gubhtug jnf ernql gb urnq ba gb gur shgher gbtrgure.

Fur qryrgrq gur ragver qbphzrag. V arire unq gur punapr gb znxr n onpx-hc sbe vg---vg jnf n yvivat qbphzrag, V jnfa'g rkcrpgvat vg gb or tbar whfg yvxr gung gur zbzrag V npxabjyrqtrq erprvcg bs gur oernx-hc yrggre.

Shpx.

Juvyr gur zrgncubevpny ybff bs n shgher vf zber be yrff tbggra bire, gur npghny culfvpny ybff bs erpbeqf bs n funerq shgher sbe zr gb hagnatyr onpx gb jung jnf bevtvanyyl zvar naq jung jnfa'g vf jung znqr zr yncfr vagb natre rire fb bsgra.

Fbeel Ybeq, V pnaabg sbetvir---V npxabjyrqtr gung guvf jvyy or zl nyongebff sbe dhvgr fbzr gvzr gb pbzr. V fcrag zber guna svir lrnef jvgu guvf jbzna, gnxvat zl gvzr gb pnershyyl ohvyq hc gehfg jvgu ure, znxvat pbzcebzvfrf nybat gur jnl erfcbafvoyr nqhygf qb gb erfbyir ceboyrzf. Jr obgu npxabjyrqtrq gung pbzzhavpngvba jnf xrl, naq V jnf qbvat zl orfg gb zrrg gubfr rkcrpgngvbaf nf orfg nf V pbhyq, xabjvat shyy jryy gung V jnf zber bs gur xvaq gb abg gnyx zhpu nobhg zlfrys va trareny, rira va fvghngvbaf jurer V xarj gung V pbhyq abg pbzzhavpngr jung V jnf srryvat---V fgvyy gevrq gb yrg ure xabj bs zl cerqvpnzrag.

Jung V tbg va erghea jnf zber guna whfg n fync va gur snpr, be n fgno va gur purfg. Vg jnf n evccvat bs gur ovg bs zl fbhy gung V unq funerq jvgu ure.

V qvqa'g whfg ybfr gur ybir bs zl yvsr gura; V ybfg n ovt puhax bs zlfrys nf jryy.

Gung shpxvat uheg.

Vg jnf bayl irel erpragyl gung V znantrq gb gnxr fgbpx bs whfg ubj zhpu qnzntr V jnf uvg jvgu.

Zl vagrerfg va zhfvp unf qebccrq gb cerpvcvgbhf yriryf, juvpu jnf abg urycrq ol gelvat pbaqvgvbaf gung PBIVQ-19 unf oebhtug nybat jvgu erfcrpg gb erurnefnyf naq cresbeznaprf. V qvqa'g rira jnag gb cvpx hc zl syhgr/qvmv/jungrire vafgehzrag gb cynl. V qvqa'g rira jnag gb jevgr nal zhfvp, naq gurer jrer gvzrf jurer V jnf gblvat jvgu gur vqrn bs fryyvat/qvfcbfvat nyy bs gur zhfvp vafgehzragf gung V unir.

Zl gnfgr va ivqrb tnzrf unir nyfb punatrq, juvyr zl vagrerfgf va gurz unir fgnegrq jnavat nf jryy. V nz nyfb fgnegvat gb trg jnel bs ernqvat, naq nz rira zber bs n fuhg-va guna orsber.

V cnff rnpu qnl nf vg vf. Vs gurer'f n gnfx gb or qbar, V pbzcyrgr vg jvgubhg srryvat zhpu. Znlor n fznyy frafr bs fngvfsnpgvba, ohg gung'f nobhg vg. Gurer vf ab bar gb funer zl qnl jvgu, naq V unir fgnegrq gb abg obgure jvgu jnagvat gb funer jung vf rssrpgviryl n ebhgvar qnl.

Gur hetr gb whfg vfbyngr naq xrrc va fgnfvf gb nibvq perngvat arj zrzbevrf naq trarengvat snyfr shgherf vf rire-vapernfvat. Bayl erfcbafvovyvgl unf xrcg zr sebz tbvat nyy-va ba guvf cngu.

V pna'g frrx uryc---jung xvaq bs uryc vf gurer gb or fbhtug? FVA pvgl unf fuvggl zragny urnygupner gb ortva jvgu, naq V senaxyl qb abg arrq gur fgvtzn va jung vf rffragvnyyl n tybevsvrq ``qrirybcrq'' pbhagel jvgu n fgebat qrirybcvat pbhagel zvaqfrg. Nf sne nf fbpvrgl vf pbaprearq, V'z fgvyy shapgvbany---jurgure be abg V nz shpxrq va gur urnq vf bs ab pbaprea gb fbpvrgl ng ynetr.

V qba'g rira jnag gb ratntr jvgu npdhnvagnaprf naq/be sevraqf gung zhpu, orpnhfr V xabj gung gurl pnaabg uryc zr, naq gung V qba'g jnag gb chyy gurz qbja gb zl yriry---gurl unir gurve bja snzvyvrf gb ybbx bhg sbe, naq gurl ner nyfb abg nqrdhngryl rdhvccrq gb uryc zr naljnl.

Orfvqrf, jnf V ernyyl ybbxvat sbe uryc sebz gurz?

V arire jnag gb pbagnpg ure ntnva---fur unf gnxra njnl zhpu bs jung znqr zr uhzna njnl sebz zr, nyy va ure frysvfu jnlf hfvat gur Ybeq'f anzr nf ure svt yrns. V bayl pbagnpgrq ure gung bar gvzr gb shysvyy n cebzvfr V znqr; V unir abg pbagnpgrq ure rire fvapr. Bu naq gur tnyy gb cersnpr n frrzvat bssre bs na byvir oenapu bs n pbssrr jvgu ``...vs lbh ner pbzsbegnoyr''.

Jryy, shpx gung. Shpx univat ure npgvbaf yvivat erag-serr va zl urnq nyy gurfr juvyr. Gung jnf gur ynfg wno gung V jbhyq rire gnxr sebz ure---ab zber.

Gurer. V'ir fcrjrq vg nyy bhg urer. Creuncf guvf jvyy uryc zr er-senzr guvatf zber pbzsbegnoyl naq svanyyl zbir gur shpx ba.

Midnight Locke

Man, I'm really getting old. Just past midnight and my eyes are barely able to keep themselves open.

So the weekend has arrived once again. Hurrah!

The past week has been a mixed bag. Lots of work was done, and I also made some headway in AI: The Somnium Files. I've also read some more books, including John Locke's Treatise of Civil Government and A Letter Concerning Toleration.

I would like to talk a little about Locke's work here, even as my mind slows down from the lateness and the exertions of the day.

Locke presents an interesting thesis with respect to ``Toleration'' which I find to be resonant with my own personal thoughts that can be summarised simply as a proverb:
What is good for the goose, is good for the gander.
Our behaviours in the cosmopolitan society need to take into account that we share living space with others who may not believe in the same things that we do. We know through our belief that they are wrong, but it is not our place to force them to conform to our beliefs, just as they know through their belief that we are wrong, and that it is not their place to force us to conform to their beliefs.

``MT, how can both of your beliefs can be simultaneously right and wrong?''

It's a belief---it's experiential, and deeply personal. It's an axiom within our own system of reasoning, something that is truthful on its own, a tautology. A base case in the inductive reasoning that we are wont to make. There are ways to test the extent of the truth of the belief, but eventually we run out of derived truths (i.e. theorems) and reach a set of statements that can only be described as belief.

We will only know who's wrong at the end. And it is not the end just yet.

Anyway, Locke's work here spends quite a bit of time talking about the role in which the civil government plays. And he quite rightly summarises it as being about the protection of one's possessions and property. Mind you, this is circal 17th century, nearly 70 years before the founding of the United States of America. This means that the possessions and properties being covered are that of the material and physical ones.

He states then that the civil government maintains and upholds laws that preserve the right of [material] property that people can hold, and has no jurisdiction over aspects involving the spiritual. Similarly, systems that deal with the spiritual have no jurisdiction over aspects of the material, especially since much of such doctrine either has nothing to say about it, or says something that makes sense for the time, but is of net harm to society in the now.

Locke's work spans 200 pages or so; any form of summary I can contrive will necessarily be insufficient and incomplete. But the point to be made here is that if we choose to live as a community, then the rules/laws that we as a community set ought to be even-handed for all the members of the community. Moreover, such rules/laws should strengthen one's freedom of choice, as opposed to strengthening coercion of the tyranny of the majority.

Reading all that just made me feel sad when I looked at the world today. Morality and ethics are considered liabilities, and the less that they can be bothered with, the better the overall outcome. All these just for the accruing of wealth and power in the fallen world. No wonder Scripture points out that it is impossible to serve both God and Mammon---one inevitably has to make the choice as no amount of finagling can change the fact that these two contraindicate each other.

Other than those observations, there is no other new point that I have not made before that I want to be making here---I just found it interesting that someone some three hundred years ago have made similar observations and statements as me so far in the future relative to him.

But let's divert away from civil government and go back to more godly matters---the overpowering sense of the ego trumping over doing what is pleasing to God.

There are many things that God declares as sin. Sadly, almost all of human behaviour is sinful in nature. And no, I'm not even thinking about the ``big sins'' that most people associate with immediately when ``sin'' is heard---I mean the ``tolerable sins'' in the sense of what Jerry Bridges wrote in Respectable Sins: Confronting the Sins We Tolerate. There is no one who has told a lie (white or otherwise), there is no one who hasn't forgiven someone, and there is definitely no one who doesn't give in to anger at some point. All these are sins---they seem tolerable and ``all natural'', but they are still sins nonetheless in the eyes of God.

``Who said that all these things are sins? This is human nature! It's normal variation of human behaviour!''

And that is why everyone of us needs a saviour to intercede on our behalf with God to forgive us our sins. The ``who'' here is God---God is perfect, God is ``good'' defined. But we have our own ego, our own free will. We defy God by trying to seek our own self-justification and self-identity away from God.

That whole self-identity and self-justification is the start of the long way down the path of sin among all the contentious issues that many modern-day Christians claim controversy over. We self-justify because we believe that we are more enlightened than those who came before us, and that our technological prowess can even defy God's power as well. Our hubris in medical technology has kept alive way more people that could be au naturale, and our development in information sciences allow us to collate, process, and promulgate data/knowledge in ways that seemingly beat that of the Bible, the earthly representation of the inspired Word of God. We rely heavily on our empiricism to prove many factual observations that seemingly mock and challenge God, and most show no respect to the Almighty.

With so much power, it is of little wonder that Man thinks of his own identity as being of paramount importance as compared to that of God---such pride is a great cause for much sin. And even among those who claim to be Christians, their arguments to justify the sinful actions that they take are no different from the biblical Pharisees' actions.

So what point am I making here?

Nothing more than just a small reminder to always take a few steps back to look at the bigger picture to understand things for what they are as opposed to getting some serious tunnel vision from parrotting the latest sound bite.

And with that, I'm spent and need to crash out before I burn out.

Till the next update.

Tuesday, August 09, 2022

Old Man Rant

Happy National Day I suppose?

Niceties aside, welcome to Tuesday in SIN city, which also happens to be a public holiday.

Bah... both attempts at openers ring hollow, because I really just want to mouth off on something completely unrelated to those two things.

So the thing about hitting middle-aged in life, and hitting ``lead engineer'' level in professional terms is the gradual realisation that these changes in epoch also mark the change between ``one who follows orders'' to ``one who decides the orders'', or to paraphrase, from being a mere follower to being a leader (not manager!). The unsubtle difference between a follower and a leader is that the follower is almost always assured of safety guide rails to keep them in spaces that are well-trodden, with mostly understood risks, and clearly defined activities that obviously needs doing with little to no argument, while the leader is often operating in a mostly unstructured space with some sense of a framework (moral, ethical, budgetary, woolly ``strategic concerns'') and a need to make decisions on how to carve out that safety space for his/her team of followers to operate in.

That last bit on decision making is truly what makes the role of a leader a more difficult one than a follower. Managers are not the same as leaders despite their equivalent superior status as compared to followers---while managers make decisions as well, often their decisions are more towards that of the management of people (hence ``managers''), and less about some of the harder abstract technical engineering parts. Leaders cannot operate alone inasmuch as managers cannot operate alone---both have their roles to play within an organisation, and they must communicate with each other to keep in sync on what they are doing so ensure that the net direction of the organisation is ``forwards in the direction of the organisation's vision''.

It's a tough role to play. The mentality required to be a leader is quite different from that of a follower. For the sake of proper debate/discussion to rationally determine the overall best outcome given the environment and resources available, a strong sense of rationality (i.e. objectively defensible decisions) is required, though a large part of the decision's progenition lies in the murky world of experience-driven intuition. The leader needs to have at least two minds at once---on the one hand, the need to have one foot within the technical engineering parts to ensure currency of knowledge to keep abreast of what is available in the field, and on the other hand, to have one foot firmly within one's experience to make sense of all the information that is coming in to continually update and strengthen the correctness of one's intution to avoid the dreaded ``analysis paralysis'' or its counterpart of ``extinct by instinct''.

Some say that leaders are born, not made. I say that the predilection towards being a leader is correlated with certain character traits, but there is definitely a path of training that can take such people and fashion them into future leaders. And funnily enough, it requires such people to learn to make decisions from as early an age as possible to increase the number of decisions (and associated consequences to learn from!) that they make so that they become effective leaders.

Am I a leader? Never thought of myself that way, though I will admit that I am thrusted into that position in almost everywhere I go. I suppose it's not that I am a leader-type, but that circumstances often end up with me being a strong candidate for taking on a leadership role.

The sooner I embrace this, the happier I will become as I continuously make decisions and learn of my consequences to further inform my future decisions. Can't keep resisting what keeps coming my way. I suppose God has His way of making us realise certain aspects of ourselves that becomes hard to dodge.

I mentioned two things though, so let's talk about being middle-aged in life. Being middle-aged shares similar trajectories as that of being ``lead engineer'' in professional terms in the sense that the number of frameworks that constrain and control us in life are much reduced. When younger, the education system acts as the safety guide rail of what is permissible; the discriminative (in the technical sense!) laws for minors act as society's trade off between punishing bad behaviour against the fact that younger members of society may not have a well-developed sense of ethics and control. As one steadily progresses in age, other forms of safety guide rails fall into place: student loans start to constrain one's decisions on what to study (need to get a good enough job after studies to pay back said loans), giving in to one's libido eventually leads to wed-lock that further constrains what one can do (generally don't do things that jeopardises the family), having children further guides one towards making decisions that prioritises the children/family over other activities that contribute less to personal values.

That's for normies. (=

For single middle-aged men like me, we... don't really have such constraints. By now, all student loans (and their equivalents like scholarship bonds and what-not) are settled, one's general career direction is more or less on a known trajectory (known does not mean permanent), and there's copious free time compared to those who are running their own families.

In a way, we are the free variables in the equations that govern society. This is a very strange but strong power. If we choose to, we can be movers and shakers of societies in ways that cannot be beat, because we can reduce the attack vector surface against ad hominem more readily than someone with a family in tow.

Or we can realise that the world's fucked because the vast majority of normies don't give too much of a shit of anything that is beyond a two-year time horizon and/or affects themselves or their immediate relatives and let them all face the consequences of their own hubris, leading to us just doing whatever the hell we want that makes us feel not-too-bad, and let the damned be damned.

I wonder where on the spectrum I am.

As to why this rant came about, check out this video from Veritasium about becoming an expert.

------

In other news, I've been experimenting with fail2ban, an intrusion detection system (IDS). It operates through analysing logs of several net-facing services, and then automatically manipulates the firewall rules to block/unblock IP addresses according to search patterns that are defined as ``bad behaviour''.

I was getting sick of watching my server logs being filled up with many exploit attempts. So it was time to experiment with this. As to which server this is running on, I'm not going to talk about it. Suffice to say, the list of IP addresses is steadily growing. Hopefully I don't have to worry about seeing these exploit log entries/attempts.

Till the next update.

Saturday, August 06, 2022

GI Tract, AI-Ball, and a Hat in Time

Feels good to be sitting in the seat with no fear of having to make a quick run to clear the deluge that might be hidden away within my colon.

The week came and went as a blur. It started about this time last weekend, when I was having the runs at roughly once per hour. I was... not expecting it. Saturday night's sleep was fitful at best---I was awakened by a super bloated abdomen and a strong urge to let out a deluge of fluids that had gathered within my colon at the rate of about once every one-and-a-half hours. I was running a low grade fever, and was giving my body enough time to actually incubate the SARS-CoV-2 (if it were present) so as to not waste the two complimentary ART kits from work. I ran a test on Sunday morning---negative, and was doing my darndest to take control of my wayward GI tract to the best I can.

My usual doctor was not open on Sundays. There were other clinics, but if I weren't COVID-19 positive, it was not worth it to bum-rush to those clinics, because they would be flooded with the others. This meant a risk of cross infection, something that I was less willing to accept considering that I have two more vulnerable people living with me.

So I tanked whatever it was on Sunday. I wanted to take another ART after twenty-four hours just to exclude a COVID-19 infection with stronger statistical power, and it all worked out well when I took the test again on Monday morning.

Negative. By then, my low grade fever was non-existent, so the likelihood of me actually contracting some variant of COVID-19 was made even lower.

And so, I finally managed to visit the doctor on Monday morning, and was promptly prescribed some medication to control the abdominal pain from the bloating, and to control the diarrhoea. This came with two days of medical leave to rest at home.

I slept for most of the two days. By Wednesday, I was feeling less uncomfortable as compared to the weekend prior, but was not confident of surviving a work day in the office with a total of nearly four hours of commute. Considering the limited amount of medication I was prescribed (three-ish days worth), I informed my reporting manager of my decision to work from home for the rest of the week and did so.

Thankfully, the heat situation was not as severe as a couple of weeks ago (where the UK was, incidentally, running a heat wave), and thus it was all tolerable. I had multiple long meetings on Thursday, but by then, I was well enough that the only problem that remained was largely the gassiness---I was not having frequent diarrhoea, though the stool was still watery. It wasn't until Friday evening that the situation changed from watery stools to the opposite of constipation from a week's diet of low fibre, no dairy, high soup meals.

The doctor said it might be food poisoning or something viral in nature. There were two likely candidates that caused this: the laksa soup yong tau foo that I had in Fusionopolis on Friday evening for dinner, or the large ice-blended hazelnut coffee I bought from the bubble tea shop in my neighbourhood.

My money's on the hazelnut coffee for a couple of reasons: I don't know how long they have kept the hazelnut coffee mix (bubble tea shops don't move coffee as fast as tea), and I don't know the state of the ice used.

Anyway, I'm just thankful that I have healed over sufficiently. I had seen Brian's comment earlier, but it was also at when I am writing this entry, so I did not say anything. Thanks Brian for your well wishes!

------

In other belated news, I've completed all three Zero Escape games that I referred to about a month ago. I'm currently starting on AI: The Somnium Files, while also playing the base game of A Hat in Time, a 3D platformer similar to Psychonauts 2, the last 3D platformer that had played a few months ago.

Some time in between the Zero Escape games and the recent two games I'm playing, I put down some serious money to get the Xbox Elite Wireless Controller Series 2 to replace my Logitech F310 Gamepad.

``Why MT, why? Comparing SGD249.90 to SGD35.00, it's a solid the price!''

It's probably closer to 8× if inflation is taken into account, but that's okay. I can list the following reasons why I wanted to get the new controller:
  1. Adjustable triggers (i.e. RT and LT). My biggest complaint about my old controller was that the triggers required a good amount of pull before it registers. I hate that so much. I prefer the L2/R2 buttons that the PS controllers had---literally a button as opposed to a trigger. Or ``hair-trigger'' as they call it. The new controller allows me to do this.
  2. Wirelessness. One less USB port to mess around with. In this hot and humid weather that is in SIN city, the less physical contact required, the more likely a connection is going to hold. The new controller can use Bluetooth.
  3. Left thumbstick being higher and forward (just compare the pictures and you'll see what I mean). This is a minor detail, but it feels less crunky than having both thumbs squished near the centre of the controller.
  4. Stability from mass. The new controller has a higher mass (and better ergonomics), and just feels better when playing with it.
Yes, I'm aware that there have been various reports of complaints on the build quality and what-not, but come on... All those features that the new controller has over the old fully justifies the 8× price increase.

I would have gotten the regular Xbox Wireless Controller if not for the fact that the trigger distance was not adjustable, and that it required AA batteries. Like... no. I don't want to be scrounging for the AA batteries... that shit's expensive and hard to find these days.

And that's about it for now, I suppose. Probably the only other thing I would add before publishing this post is that I am going to be on leave on Monday, in addition to the public holiday on Tuesday that is National Day.

It's just a long weekend to do whatever I want. Most probably sleeping, if I'm not playing AI: The Somnium Files or the base game of A Hat in Time. I keep saying ``base game'' because I have not and will not buy the DLC expansions for it.

That's it. Till the next update then.

Monday, August 01, 2022

Unplanned and Short

This is unplanned and short. I'm down with either food poisoning or gastroenteritis. COVID-19 is still being dodged so far, and I'm just letting God decide if I'm to get hit with that ever.

Gur nahf ernyyl qvfyvxrf qvfpunetvat infg nzbhagf bs syhvqf rirel pbhcyr bs ubhef---gunaxf gb zbqrea zrqvpvar, gur serdhrapl vf abj erqhprq gb rirel sbhe ubhef.

It will take another day or two before things get to normal.

Urgh. What a way to start the new month.

Till the next update.

Wednesday, July 20, 2022

Another Graduation in Hololive, and Other Odds & Ends

Tsukumo Sana of Hololive -Council- is graduating on Jul 31. It is a piece of news that has been out slightly more than a week ago today.

That's the first graduation from anyone in the Hololive English branch.

There's a sense of loss, and a sense of gladness from having had the chance to watch her streams ever so often.

Thought it was important to note this, considering that this time-ish last year, Kiryu Coco done her final stream in her persona.

------

It's been a rough week. Work required me to put together a presentation to brief a mixed audience, and it was quite tricky to get it just right. The presentation is tomorrow afternoon, and it will be the first time in a long while that I did some public presentation.

Here's a prayer to God for a successful briefing, for I have done all that I can, and everything else is up to Him.

My skin's been flaring up in rashes as the weather heats up with increased humidity. That definitely did not do me any favours.

------

I've completed two thirds of the Zero Escape series, leaving only Zero Time Dilemma to go. I like the series---the story may be a bit kooky, but come on, I can't keep reading Planning Algorithms all day without an outlet to relax from all the heavy math, right?

Anyway, this entry is quite incoherent; I am well aware of that. Just felt like dumping out some things that are in my head without necessarily trying to make any points.

Till the next update.

Sunday, July 10, 2022

Long Weekend Rant

It's a long weekend. While most started theirs on Saturday (to segue into Monday), mine began on Friday.

Because I chose to take a leave day to make it go for a full four days instead of ``just'' the three.

And why would I do that, one might wonder.

A good question that, unfortunately, I have no answer to. I just felt that it was necessary to take that extra day, and so I took it.

Was it worth that one-day of paid time off? Well... it's already accounted for (otherwise it won't be called ``paid time off''), and since I have no intention to travel during these few years, it will always be worth it.

Contrary to popular belief, single people do have their own lives to lead too, even if their lives do not revolve around running after their own children, or trying to pamper some significant other.

There is nothing inherently valueless doing something that one likes that does not harm/involve others, even if it is way off what is mainstream and/or considered acceptable.

Anyone who is trying to force their own interpretation of what is right upon others is a giant asshole. And yes, this statement is directed also to those who claim to be followers of Christ as well.

Not referencing Roe v Wade and/or 377A in SIN city in particular, I am just tired of hearing any particular groups of people who follow this pattern:
  1. Claim that a certain behaviour is prescribed by their rule book (be it Scripture or something else);
  2. Declare that anything that falls outside of said prescription is heretical;
  3. Persecute others whose faith does not include said rule book for not following the prescribed behaviour;
  4. ...while hypocritically not following their own rule book properly.
No one is the lord of anyone else out here in the Fallen World... it doesn't matter what one's faith and creed is.

The rules that one believes in are only applicable to oneself because of one's faith---it is therefore important for the one who believes to fulfill the requirements of those rules. It is not the case that one's belief in a certain set of rules gives them the power and automatic right to force others to subscribe to the same beliefs through enforcing these rules from faith/belief on others. It sickens me to a great degree whenever I hear of people claiming that this is the way to bring more of the unsaved towards Christ (obviously this comment is only targetted at those who use the Lord's name to justify their heinous actions).

Last I checked from Scripture, Jesus didn't tell us to drag people kicking and screaming towards believing in Him as their saviour. In fact, there is a strong sense of the Great Commission being the spreading of the gospel of salvation through the birth, death, and resurrection of Jesus, and letting the Holy Spirit sort out the individual's eventual spiritual alignment towards something that is more pleasing to God.

And the last I checked Scripture, God did not make Man to be a mindless follower---Man has the ability to think and decide whether to worship God or to reject God, either action having their own consequences.

So why do we still have such coercive behaviours, many of which are proclaimed to be of divine inspiration in the name of God?

The easiest and probably most correct answer is to refer to the point that Man is a sinful creature, always being tempted by his own desires, and not keeping his life centred around that of God. As long as the flesh remains, we will forever be sinners---it takes time and effort for our fleshly selves to allow the Holy Spirit to guide us towards godliness.

The problem with this easy and most correct answer is that it relies heavily on the reader agreeing with the tenets of my faith, a tall order to ask for.

Which is why secularity is a thing that was eventually borne out of the old theocratic institutions. It is not that God's Word is wrong, but that we try too hard to directly transpose first century writings from a culturally homogenous set up of God's chosen people to the twenty-first century cosmopolitan diversity that globalisation and hyper-connectedness brings, and this is not even counting the inevitable corruption from incumbency and personal interests of the human executors.

All words as recorded are to communicate the same fundamental principles to the people whom the words are written for, and to take such words two thousand years later at face value is disingenious. Scripture is literal and inerrant---it is written and inspired by God, but is penned down by Man. God is unknowable; His reality is also unknowable. Therefore His Word should be taken as God trying to dumb things down to a level that allows us to understand, without dumbing it down too much that it is wrong. Reality isn't a bag of words---reality just is, inasmuch as God is just I AM. Thus, any sequence of words that claims to describe reality necessarily is incomplete in some manner, and will require interpretation.

It is that gap of interpretation that gave theocratic systems of ruling people the opportunity to corrupt the teachings and twist things that can benefit them carnally. It did not help that much of the world was illiterate, which gave the clerics a monopoly of the actual reading (and thus interpretation) of Scripture.

Secularity tries to attain some form of unity through reducing the errors that are possible from interpretation by relying on objectively measurable outcomes, in the hopes that using something objective allows any doubters to simply pull up their measurement tools and measure reality accordingly, with no need to agree upon the tenets of someone else's faith. My acceptance of God and someone else's rejection of God does not change the mass of one kilogram of sugar, because, nor does it change the generally objective principle of ``killing another person without provocation is not acceptable''.

The devil, as they always say, is in the details. It is one thing for one to keep to the rules of one's faith strictly, and it is another to force someone else who doesn't believe/care about one's faith to do the same---while it seems like a good idea because we are making people follow what we know to be right, it is A Bad Thing.

Because if ``we'' can force others to follow ``our'' rules/interpretations because ``we'' are currently in power, then it sets a precedent for ``they'' whom do not agree with ``our'' rules/interpretations to force ``us'' to follow ``their'' rules/interpretations when ``they'' come to power. Human power plays are always dynamic, and there is never any way of knowing if any group will suddenly gain power through happenstance (or God's Will).

Comparing that against keeping it generally at the lowest common denominator (or what we call more ``universal'' principles), I'd take the latter as it is the most fair for all of us, even though we are pretty sure that the other side is wrong [for the sole reason that they do not follow our faith]. An uneasy truce in a way, but it at least provides a social contract that allows for an objectively better outcome of the society on the whole without having to fight against the mass that is cosmopolitan diversity.

Does this nullify the various positions on modern day problems that our faith ``demands'' that we take? No, it doesn't---the secularity rules give us the right to police ourselves more harshly on our own if we choose to do so, and it protects us from being policed by others whose faith we do not follow. Short of evicting all who do not follow our faith, this is the next best thing that allows us freedom of faith, and freedom of association.

If we were alone, we can do whatever we want. Unfortunately for all, we live in a society, and as long as we are living in a society, we will undoubtedly have to interact with many other people, and not all of them are ``like'' us. The objectiveness that undergirds the concept of secularity then is the way to protect us from them (inasmuch as it is a way of protecting them from us) by forcing communication to be on terms that can be verified with a framework based on falsifiability.

So, what's the point of writing all these?

What's the point of existing on earth?

Till the next update.

Sunday, July 03, 2022

Energy Vampirism, Ko'an, Spike Chunsoft, HoloCure

It's July now, isn't it?

How time flies. More than half-way through the year, and by extension, more than half way through my new-ish life.

Many things have remained the same, but some things have changed quite drastically.

That ``middle age'' is really catching up with me. I have the zeal of being twenty-five, but with the weariness of being forty-five (despite having an age that is somewhere between these two). ``Can do'' spirit becomes ``is it really an `ought to do' '' one, and me-time overrides many other things.

I don't activate brain cells unless I absolutely have to, preferring to just keep quiet for the most part. Because at the end of the day, all I am looking for is a peace of mind to catch up on sleep, as opposed to being absolutely right.

Heard of the phrase ``energy vampire''? Neither have I till recently. And something about reading 'net-based definitions of it bothers me to a certain degree.

The word ``intense''. Or the fact that talking with me can be draining, because I am ``intense''.

That is not a word I used to describe myself. That is a word used by others.

As far as I know, that is not exactly a good word. It means I'm an asshole.

And now I'm an asshole armed with the righteousness of Christ since I have publicly declared myself to be a follower of Christ. How much bigger of a sanctimonious bastard can I get?

The answer, surprisingly enough, is no. As in, I don't even want to talk any more.

No talking implies no need for conversations. No need for conversations means no more chances of ``intense'' ones.

I'm just realising that there is really little to no need to talk to anyone anymore, unless absolutely necessary. This is not because I'm holier than thou art, but more like everyone talks past everyone else these days anyway.

Attention spans are short, everyone wants to catch up with the latest and most fashionable---and many people live in pretend worlds [that they didn't create] anyway.

I don't live much in pretend worlds, or rather, I live in different pretend worlds. As a middle aged man, there is a decreasing compulsion within to conform.

I am no longer bound by the rules of the school, and society's rules are generally quite permissive, as long as one isn't out to ``stir trouble''. For authorities, this usually equates to taking steps to organise people along some cause; it matters little if it is for or against the status quo---any form of organisation is a cause for alarm as it threatens the primacy of the ruling elite. Which explains why there has always been attempts to pit different [under] classes of people against each other to divert their attentions away from the real problems of the world.

Anyway, living in different pretend worlds. Flying solo has its own strange set of consequences. My time and effort is no longer revolving around working out good consensus and compromises with another thinking person, and more importantly, I do not have to think about working around the third party people around that other person that is deemed important. Some days I do wish that I were more conventional so as to blend in, but I quickly disabuse myself of that on realisation just how absolutely boring I would be, and more importantly, how bound I would be to the invisible shackles that prevent each of us from living our best lives.

It also helps(?) that my skin is having a flare up during this period once more, due to I-really-don't-know situations. The easiest is to blame the weather conditions, but somehow I don't think that it is the full story. There are certain compulsions involved that need to be tackled that aren't fully explainable through the use of the hot weather---it's one thing to have a flare up of inflamed skin, it's another to be picking at said skin's vesicles to break them and make it all worse.

Oh... too graphic? Too bad... this is the reality. Finger tips are affected by it, making typing full of nuisances, and playing on my dizi downright hazardous, which explains my no show for nearly a month.

Corporeal issues aside, a thought came to mind [again]---I remember some quotation about how someone was mumbling at why is the night sky full of darkness if the entire universe is full of stars in every direction.

Much to my embarrassment, the simple answer to that only reached me recently: the entire universe is full of stars in every direction (see Hubble Deep Field), but they are separated by space and time, i.e. they don't all appear and go away at once.

So obvious, yet I didn't get it till now. How embarrassing.

In other observations, knowledge, Zen, and ko'an---simply put, we often create a strong equivalence between reality and knowledge through the use of words. It's a powerful concept, don't get me wrong, but it isn't necessarily sufficient---there are certain parts of reality that holds that cannot be expressed as words. The paradox is that if I can describe it in words, then it is not a part of reality that cannot be described by words.

More importantly, we have no guarantees that it can be described by countably infinite number of words either. Because no matter how big the [observable] universe is, it is still represented as a finitely over-large number [representing the state], not a countably infinite one, mostly because our laws of physics have a clear starting point, and a clear ``as at''-type rolling ending point.

That's probably the best working definition of the unknowable that I can come up with. And ko'an are meant to force Zen practitioners to break away from that strong equivalence of knowledge of truth/reality with the expressing of them using human defined concepts of words.

------

In Minecraft, I've built yet another sandstone pyramid covered with smooth quartz stairs to remove mob spawns. The base of this pyramid is a square of more than 120 blocks per side (it extends 60 blocks from the base of the four-deep iron-block pyramid used to host 4 beacons). The terracing works at three blocks rise per one block run, which leads to a height of nearly 200 blocks above sea-level.

No pictures of it this time though... lazy. It used up quite a bit (but not all!) of the material that I obtained clearing out the desert that the pyramid is now sitting on. I exhausted all the smooth quartz blocks I had, and resorted to quasi-creative mode shenanigans to give myself the rest needed to finish it all up.

In non-Minecraft games, I've been slowly playing WHAT THE GOLF?, and started on Zero Escape: The Nonary Games (Nine Hours, Nine Persons, Nine Doors (999)) of the Team Zero Escape Bundle, which has all three Zero Escape games and the AI: The Somnium Files on sale at the time of writing.

Why the sudden interest in these Spike Chunsoft games?

Okay, backtrack a little. I like puzzle games, though once they start to get too taxing I have a tendency to drop them. Puzzle games have a kind of fun that tickles the right spots when applied at the right times. These games in the bundle, while being ``Visual Novels'' as a major genre, have strong puzzle elements within them that are similar to the escape room genre of games. Those are fun---a digital version of real world puzzle manipulation.

I learnt of these series of games from Pavolia Reine's channel:Those are very fun watches, and I watched them long enough ago that I don't remember much about them now.

Which makes now the perfect time to pick them up (at a discount!) to play them for myself to relive the experience.

And that's happening because a new game has just been recently released: AI: THE SOMNIUM FILES---nirvanA Initiative, that Reine is also playing.

A happy confluence of incidents.

A new fan-made off-shoot of Vampire Survivors and Magic Survival featuring Hololive Productions characters is also made available: HoloCure. I've not played it yet, but have seen many of the Hololive Production VTubers playing them. It looks fun, has its own mechanics that differ from either Vampire Survivors and Magic Survival (both of which I play quite often to kill time when I just want something more brain dead than reading), but I don't think I will play it. Not because I think that it is bad, but that I uh... have enough of such games in the genre to keep me occupied.

And so there. July begins, and I have lots of stuff to report, not all good, and not all bad. Till the next update then.