Showing posts with label pictures. Show all posts
Showing posts with label pictures. Show all posts

Wednesday, October 07, 2026

``Darkness Will Fade Away...''

Back in June, I wondered if IRyS's sololive had a cinema live-viewing.

Yes, there was! And I was there!
I ran out of leave for this year, having taken the remaining of them for these two months' of Fridays for AFE JB rehearsals, but had some off-in-lieu from the Astana work trip that I could expend.

Best use of 1/2-day off-in-lieu in a damn while.

I love IRyS's singing, and she sang a whole damn lot throughout the concert yesterday. It was banger after banger after banger---you can catch the free preview on YouTube:

Yes, she looks sexy, but that's not the point! The singing is absolute fire, and that was what really drew me to her all those years ago when she first made her debut as the first EN member after the hololive -Myth- ladies.

I had a great time, even though it was a Tuesday, and I had to take a bus down towards the city even as it is getting locked down in preparation for the F1 Night Race.

The best part was when she sang the final song for the night, Caesura of Despair. All night, she was swapping between her 3D concert outfits, but for this, she went back to her default outfit, and with that, a whole montage of five years of singing and other streaming activities.
It was powerfully moving---I cried. This was a girl whom I had watch through the years, and had cumulated into this sololive.

Ina and Kiara's concert didn't evoke as strong feelings as IRyS's for some reason. Maybe it's because IRyS was in many ways more orphaned than the other girls in the overall hololive scene---she debuted solo originally as a VSinger in the English branch, but that eventually went away. The original Project: HOPE VSinger project went away when the original director was ousted due to... shall we say unlikeability by the talents. Then there was a period where IRyS's original design had to be redone to better fit the live2D aesthetic necessary as a VTuber and later on, 3D models. And being a solo debutante meant that for quite a while, her place among the hololive EN ladies had been fluid, good in the sense of expanded horizons, but bad in the sense of a lack of a ``generation'' to consistently have support for.

It took her a while to get to here today. While she's not as OG as the hololive -Myth- ladies, she was the in-between before hololive -Council- was a thing. Eventually, she found her place among all the friends, even creating stronger links with the JP holomems.

And she has won the heart of the IRyStocracts with her great singing, YabaIRyS tendencies, and general goofiness that made her endearing; diva-esque singing without being an insufferable diva.

I don't think I feel qualified enough to heap on more praises on IRyS. Suffice to say, that concert was magical in a different way from Drawn to Dawn and Serendipity.

Now, allow me to re-listen to her music once again, and re-live what I saw last evening. Till the next update.

Monday, December 29, 2025

Comically Oversized Apple

I ventured farther than ``downstairs'' today. All in the search for this:
Okay, I did more than just look for a comically oversized apple, but one of the goals was to find the comically oversized apple. It's sort of a nostalgia trip---a core memory I had from way back when was that I won something, and Mr Lin Min asked what I wanted as a prize, and I said ``a large apple'', and he fuckin' delivered. I think it was just a ``regular'' fuji apple instead of the ironically named ``red delicious'', but when one's a wee kid, that apple is comically oversized, and I remembered grinning like an idiot at it for quite a few days before finally eating it.

------

It has been a while since I last stepped onto the famous Orchard Road in SIN City. Now, to be fair, the road itself is not too shabby---five-metre wide sidewalks that allow a good amount of walking without getting run into by people [for the most part], and the remnants of 2025's Christmas decorations still lining the one direction road itself.

But Orchard Road the metonym never really sat well with me. It is the epitome of profligate consumerism, with brand names dotting every possible retail space as idolatory shrines, with their cult-like worshippers in the rattiest clothing flocking eagerly to suck on the teat of the mighty brand by buying whatever over-priced campy knick-knack that is on sale.

``MT, don't you buy really expensive shit too?''

Well... yes. Just not in the form of jewellery, watches, handbags, clothing and the like. I mean, I can make the argument of utility here, but realistically, I'm just not a fan of these crazy brand name things. Especially not after a certain conglomeration effectively controls the seemingly disparate brands. To be fair, there are also other such conglomerates, but this one is just a bit too easy to remember.

In other words, the exclusivity that people are seeking through these brand names are effectively a sham. But then again, the people who end up buying these items don't want something so exclusive that no one knows that they have just spent ${large-number}-dollars on the thing.

A-hem. Anyway, Orchard Road. Good walk from Orchard Station all the way to Dhoby Ghaut Station. The trip to Orchard Station involved navigating the cluster-fuck that is now happening at Ang Mo Kio Station due to its expansion into an interchange for the CRL. The route from the bus stop to the station isn't complicated, but the fools who walk the narrow pathways... Mein Gott!---absolute cunts they are. Sauntering in the middle of the fucking pathway, walking two/three abreast over a space that is no larger than two metres; it's enough to piss me off.

Since they didn't give a damn about others, I decided to return the favour Exodus/Hammurabi's Code style. But to explain that requires a small divergence into something a little off-tangent.

I used to walk like a normal person, you know, arms swinging to the front and back. Then I smacked someone on the rear swing at some point, and reduced it to just from the neutral to the front, with the added benefit of not giving someone behind a free arm to lever into a lock. Then at some point between 2019 and now, the sheer number of people being packed into a unit square of fixed dimensions went up, and coincidentally, the idea of personal space/courtesy went down. That's when I started to switch over to the so-called ``interview stance'' when I don't have my backpack in front, which has one's hands between the belt and the chest, front facing, neutral, but ready to move where necessary. From this position, if something/someone stupid comes in, I can at least parry off and/or guard. With my backpack in front, I don't usually have to do weird things like that, but instead just touch my opposite shoulder with my hand to create a nice elbow lead for anyone who wants to push themselves into my backpack-leading front.

For the purposes of the story though, the backpack is where it ought to be (i.e. behind), and I'm just walking. I raised a guard, and just walked through the space without losing momentum. I think I heard swearing, but I had my noise-cancelling earphones, and had already walked on, including crossing the road.

``MT, couldn't you just say `excuse me' like a civilised person?''

I could. But no one is listening to anyone anyway, and I've also gotten to the point in my life where I realise that if no one else gives any fucks, then I'd be a monkey's uncle if I abode by the same.

AAaaaaaaaaanyway, Orchard Road. Nice walk. I went into Ngee Ann City for a spell, and had lunch out at OrchardGateway on a whim. Hopped on the NEL for one stop to Clarke Quay Station to swing by the Don Don Donki there to get the comically oversized apple, and other supplies. And yes, it included some Nikka Black Deep Blend Whisky, which is damn strong (or I'm getting damn weak only chugging parallel imported Jack Daniel's).

------

In other news, I found myself playing Mad Max on Steam. It's... under-rated, for sure. It has that Borderlands vibe with Batman: Arkham Asylum combat mechanics. I'm still in the early game, but it has gotten me hooked.

I think that's about it for now. Till the next update, I suppose.

Oh, and that comically oversized apple? It's really too much apple for one person at one sitting. Also, I think it might actually be a Hokuto.

Monday, July 28, 2025

First Win in Hades

I feel rotten. A damn headache has been throbbing on and off over the weekend, and I feel rotten about it. Damnation!

Recently, I finished reading Ouran High School Host Club. I think that the manga is much stronger than the anime. The dynamics of Tamaki with his family (father, and grandmother) are much more complex than whatever was portrayed in the anime. I call this the ``Hellsing effect''---where the anime is called into production before the manga has its main story arcs fully resolved, leading to some make-believe storylines just so that the anime can end its run at the correct episode count. The most blatant of this is the comparison of the Hellsing anime against the newer Hellsing OVA---``Incognito'' as the big bad in the anime made no sense to the narrative build up as compared to the final near-pornographic bloodfest showdown between the Major and Sir Integra Hellsing, as their underlings thrash London to fight the war that the washed up ghoul-Nazis of the Major had planned for fifty plus years after the second world war.

``But MT, the source material is almost always richer than the adaptation.''

Yes, that's the point. Which is why we should not be in a rush to make adaptations of stories without knowing how the major arcs' trajectories are heading. I'm not saying that the adaptors are bad---I'm saying that without having the original creator's direction, there will be a jarring change in direction when the plot holes from unresolved story arcs start showing up. Sometimes, even if the original creator is involved, they may not even know where they are heading since they are ``making things up as they go along'' at times (recall that much of the serialised works are paid by some set contract period, in which case the stories need to be crafted at a consistent-enough pace, with sufficient material to ``keep on going'' for the length of the contract). But at least the original creator's general direction can be sought and the plot holes may be resolved amicably within the adaptation.

Ouran High School Host Club is definitely a romantic-comedy, kind of like Kimagure Orange Road, but unlike the latter, I could actually stomach the former without going through hiatuses from reading. I think it's because of the near-surreal comedy that comes from the over-the-top nature of the clash between the high-class society of Ouran High School and the ``commoners' common sense'' deadpan nature of Haruhi/Ranka---it definitely feels more funny than jealousy inducing, even when Hikaru/Kaoru were showing actual jealousy against Tamaki.

All in all, I like the manga. And thanks to Eirian-VI, I can now tackle the offline version of Questionable Content, all 5.6k pages of them as at the crawl. I'm saying this now because The Adventures of Dr McNinja is no longer available at its original form due to the site being attacked. I have my own offline copy (of course), but for those who want to read this masterpiece of 2010s webcomic storytelling, a kind soul has uploaded it to The Internet Archive.

In short, what I mean is this: if there's something on the 'net that you enjoy, and would like to revisit it again in the future, there is no shame to find a way to make a copy of it. Because the adage of ``what goes on the 'net stays there forever'' is patently false.

``MT, what about DRM?''

Heh. What is morally/ethically the right thing to do sometimes has no support in law---in which case the law is not just and needs to be amended. The law is a set of rules that a particular society has agreed to abide by, and if they are created by humans, they can be amended by humans. Whereas morality and ethics are based on stronger absolute values that may only be judged by God---no one save God can change them.

------

I talked about Juufuutei Raden's Guide for Pixel Museum in a post from last month, and I am proud to say that I have finally finished all the 300+ puzzles. The nonogram puzzles were fun, but I preferred those that were associated with the artifacts than the ones that were part of Raden's memories---the former had interesting patterns, while the latter, being some selected part of some pictures that depicted an event Raden was in, seemed to be simpler ones based around basic geometric patterns instead.

So effectively, the memories section felt like filler, and the game would be stronger if they were taken out. But then again, taking them out might reduce the effect of the game as a soft introduction for the casual nonogram lover to the very learned/cultured (literally, not the ironic form of ``cultured'') VTuber that is Juufuutei Raden.

Overall, still loved the game, and am glad that I finished all the puzzles.

------

Ah Hades. I last talked about it nearer the start of the month, and I'm proud to announce my first win of the game.
It took me 60 previous runs to get my first win on the 61st, and it was with a weapon that I never thought I could ever win easily with (the Bow).

I was expecting my first win to be with the Spear---ah well.

The Bow was not easy to fight with---there was long-ish charge time before the attack can be made, and the AOE was quite shit. The damage from the Bow was also bad (but not as terrible as the Rifle I mean Exagryph I mean Adamant Rail). What made this win possible was largely through the power of the RNGod.

Heartbreak Strike gave me more damage with Weak as a curse, which was cool.

Explosive Shot changed the single-shot into a small AOE, but it slowed down the charging rate. This was rectified somewhat with Swift Strike that added back 30% attack rate.

Companion Battie helped me save one Death Defiance that I was about to lose at the boss fight of Elysium (that 2.5k damage against the solo Theseus meant that I could finish him off with one more shot even as my HP was inching to 0).

I could consistently best the Furies (bosses of the first biome of Tartarus), reaching near consistency against Lernie (boss of the second biome of Asphodel), and am inconsistent with Theseus and Asterius (bosses of the third biome of Elysium). Big bossman Hades (boss of Styx) was always hard, and I was only starting to reach his second stage.

The true MVP for the win is Smoldering Air with Aphrodite's Aid. This combination allowed me to spam Aphrodite's Aid consistently about once every 5 s, and the Charm that comes from the boon effectively interrupts Hades' laser attacks. That gave me more opportunities to land hits more often, needing 3/4 less hits than without the effects of Explosive Shot, and avoid damage as I fumble my way through.

And as you can tell in the screenshot of the victory, I got through the barest of my skin right there.

Honourable mention goes to Festive Fog boosted by Scintillating Feast---it added some additional AOE, and gave enough curses with Weak to allow Privileged Status to proc, giving an additional 40% of damage.

To think that I was contemplating whether to turn on God Mode for that 20% damage reduction that would increase by 2 percentage points for each death... there's no real penalty for using God Mode, but it does store the records separately from non-God Mode. I think I'm fine without God Mode, as shown through this first win. I did a meme run with all the Pact of Punishment conditions at Max, and didn't survive for more than one chamber. Bummer. I suppose it's back to the regular mode for now.

This first win is also special because I think this is the first time I actually had a successful run of some rogue-lite in a long while. I don't usually do well in rogue-lites because they tend to get a tad twitchy, and my reflexes are no longer what they were. Meta-progression in Hades is fun compared to say Rogue Legacy because it is so much easier to control, particularly with the meta-progression currency being separate and persistent as compared to in-run currency for in-run progression items.

And now, another 9 more wins to unlock the rest of the story. đź’€

------

I wrote a new short story over at my prose blog, and I think that it caught some aspects of a narrative that I was hallucinating about that day. Not sure if it truly achieved what I wanted to say, but I think it is good that I'm writing things other than work reports, slide decks, and rants out here.

I suppose that's about it for now. July is fast reaching an end, and soon, it will be August with all the craziness that the appraisal period brings.

Oh and SIN city celebrates its GOTH BIRTHDAY.

...

I mean 60TH BIRTHDAY. Who the hell capitalises the ordinal suffix letters?

Till the next update.

Tuesday, April 22, 2025

Arakawa Under the Bridge My Dress-Up Darling

surreal
Having an oddly dreamlike quality
That's what Arakawa Under the Bridge is cited as in Wikipedia, though technically it is a surreal comedy.

I marathoned the last twenty-five chapters last night, and I feel wistful. But I am ahead of myself.

Arakawa Under the Bridge brings back memories of a bygone past. The first time I heard of this was near the end of my PhD-turned-Masters programme out in UIUC. I was hanging out with Alisa and loliponi, and she invited me to watch this anime with them. I liked the premise---it had that kind of whimsical quality that I enjoyed. We didn't manage to finish the season (or did we?), but I knew that whatever it was, it was not the end of the story, and I just had to know how it turned out, what with all the world-building.

Fast forward about a decade and change later, and here I am, finally reading the manga that inspired it all.

I like Arakawa Under the Bridge. It has that balance between slice-of-life (love it!), surrealism (confused but normalised in my head), with eventual resolutions that make one question whether the surrealism was only because I had chosen to view the manga for the most part from the lens of a normal person. The resolution of all the major events and plot points was satisfactory given the ludicrity of the initial premise, and it does serve as a warm and fuzzy ending that made me yearn for someone like a Nino in my life, as opposed to the flawed real people where one can never tell when they will take the love and trust you eventually feel comfortable enough to yield and throw it back in your face like some cosmic joke, making you question whether you can trust anyone that deeply ever again.

Totally not projecting. Absolutely not. No way. Nuh-uh.

Arakawa Under the Bridge---it's been out long enough. Here's the loveliest coloured 2-page spread that I absolutely love:
If you have no idea who everyone is, don't fret: go read it here.

------

Another manga series that I had finished reading recently (for a very loose definition of ``recently'') is My Dress-Up Darling. I love love love Marin Kitagawa's smile---just look at the cover in the manga's Wikipedia page. And just in case you think this is only possible for a drawn character, think again:

That's the singer of the anime theme cosplaying as Marin. And she has the same damn smile too!

And no, I didn't follow the anime, nor do I have any intention to. These days, I find that the manga of an anime series tends to be a much better read/expenditure of my time.

I bring up My Dress-Up Darling here because of its apparently abrupt conclusion, where there seem to be new story arcs that are being set up that can easily bring on more adventures for Marin and Wakana. Real world issues on the mangaka's health/schedule aside, I think that for slice-of-life type stories, there's hardly ever a good place to stop, for the simple reason that life simply doesn't just stop there once an arc is over. It just keeps on going, with new arcs slipstreaming in even as other story arcs are resolved.

At some point, the creator of the slice-of-life needs to decide when they are done with the stories they want to tell. And in this case, moving on from the confession in the penultimate chapter into a time-skip where Marin and Wakana are married, with a hint of how their lives are successful and still wonderful together feels like the right kind of end for a slice-of-life.

Yes, there are new big story arcs that never got ``resolved'' (did they ever find out that it was Marin who was Haniel?), side characters whose stories seemed to have gone nowhere (but they are side characters?), and it did feel rushed. But I think it is important to trust in the creative process---not everything must follow a standardised template. The templates are just guides---once one has mastered the lessons on what the guides are trying to teach, it is time to ditch them and find one's own creative voice.

I know I hardly ever talk about manga and what-not, or even review books that I read in general, but I suppose some of these things have created enough of a disturbance/resonance that I feel like saying something about it.

Till the next update then.

Friday, February 14, 2025

Ally

Looking at the world over the past few days, it made me wonder: what counts as an ally?

Traditionally, there are two main ways for establishing an alliance:
  1. Shared interests;
  2. Shared ethno-cultural history.
As far as I can tell, for the most part of history, that of shared interests was the dominant factor towards how two or more entities declare themselves as allies. It is only after a certain semblence of peace has settled in that the idea of a shared ethno-cultural history become a viable means of establishing an alliance.

The reason why I am bringing this up because we are fast approaching a turning point in modern world history where peace may be more fleeting than anyone is willing to admit. The key reason I think that is leading us down this path is a confluence of two occurrences: that of the rise of ``leaders'' who think that they can exploit the complacence and lethargy derived from seeing nearly fifty plus years of peace to amass ever-greater amounts of [political] power, and the general malaise that comes from a population where the majority's biggest concerns aren't necessarily about bread-and-butter issues, but on when they can get their next luxury kick fix.

That of exploitative ``leaders'' amassing power to exact their own will to their own benefit is something that is likely to be talked to death by this point. But the malaise of people---that is something that is unironically new. The echo chambers that made some groups of people think that the highly vocal minority are the majority are the same ones that make the people believe that ``someone'' is out there who are going to ``do the right thing to save them''. Ironically, in the old days where communication channels were less ubiquitous, the grassroots movement was likely to be much stronger, as seen by the sheer mass of the organised movements to protest (both peacefully and violently) against the injustices of the day.

Sure, we still have organised movement now, but the scale and the ferocity aren't as they were before. Perhaps the affluence of the middle class has made that level of society feel like that they have much more to lose should they choose to go against the authoritative figures who are dealing out the injustice; this is more so the case when taking into consideration the near elimination of pseudonymity through nearly twenty years of ``social media''.

Or maybe things haven't gotten to the point where the mob finally acknowledges that they truly have nothing else to lose, and therefore they might as well give 'em hell before their lives are absolutely wrecked.

And perhaps a miracle might happen then.

But what do I know, being the armchair ``analyst'' I am?

------

Today's a break day for me. 2025--02 doesn't have any public holidays, and so I just picked some middle-of-the-month Friday to enact my own kind of break day.

I got back into Minecraft, having updated my long-running single player world to 1.21.4, which has a lot of new things for a ``minor version'' update from the 1.20 series.

To be fair, 1.21.4 had been out for quite a while, and it was only in the recent week that I updated to that version. The main reason is that comment I just made: for a ``minor version'' update, there was just too many new things going on under the hood, to the point that some of my favourite Minecraft mods like Fabulously Optimise, Nautilus3D, and even minihud/malilib are barely keeping up.

It reminds me too much of how the Java version worked out. At some point, the major version was so stagnated while the minor version number was racing on to the point that they just dropped the major version number and rebranded the entire thing by the minor version number, which led to nonsense like J2SE 1.4 that is then followed by J2SE 5.

Minecraft version updates aside, I continued with the reworking of my Nether Hub. The rework involved expanding the size of the Nether Hub to fit all the rail-lines on a single expanded floor, and to re-arrange the rail-lines such that they are pointing closer to the actual direction of the destination as opposed to whatever spaghetti nonsense that I had with the two-storey organically mushed together set up.

One of the things that I was wrestling with was the viability to build ``diagonal rails''. Part of the reason why the current Nether Hub rail system is such a mess is because I didn't have a good way of building ``diagonal rails''.

Well, I finally figured it out.

So, the basic diagonal looks like this:
The blocks are staggered out in a regular 45° angle, and the regular rails will automatically align themselves. My nether rails are lined with glass blocks on the side to prevent getting smacked by ghasts due to line of sight, but I cannot do that in this diagonal set up---the corner will literally clip into the minecart as it is going through and end up losing all speed. Glass panes work well, but they didn't connect ``diagonally'' with the blocks making the floor, so I extended out the floor with iron bars, and then have the glass panes sit on them.

That first diagonal was unpowered---momentum and the powered rail before and after the diagonal was enough to keep the minecart moving. I can't just add powered rails to the diagonal due to one particular quirk of Minecraft rails---the powered ones cannot ``bend'' left or right 90° the way the regular rails do.

For the short distance earlier, it was not a problem. But to have an extended diagonal rail without powered rails is just not a good idea. And there's the whole lighting problem---the regular orthogonal rails just had torches on the walls (appearing left when heading towards the Nether Hub, and appearing on the right otherwise). Glass panes solved the diagonal connection problem, but they cannot accept torches.

But I came up with an idea, and this is how it looked like:
I used a redstone block (I'm lazy) every 8-ish blocks along the orthogonal axis and a powered rail to give that kick. It breaks the 45° to something that is more akin to 44-ish°, but it does allow for a very extended run at a speed higher than the orthogonal (~11 blocks/s vs ~8 blocks/s). In a similar vein, every 8-ish blocks along the orthogonal axis have a lighting block (Jack-o-lanterns in my case), and these are interleaved.

Even when the diagonal rails were running through self-dug tunnels like in the picture, it was still necessary to put up the glass panes to take away potential spawn spots---otherwise the zombie pigmenpiglins will start to spawn, and then walk around, blocking the minecart's movement.

And that's about it. The next part requires a diagonal rail, but there's also a height-level difference---I'm wondering if I can find a way to mix these three-axes changes at once.

Till the next update.

Saturday, February 01, 2025

Eirian-VI is Here!

Eirian-VI has arrived.

After about two weeks, my Kindle Colorsoft has finally made its way to SIN city, as have all the other things that I had purchased on either amazon.com or amazon.sg.

And lemme tell you, Eirian-VI is gorgeous.
So, using SCP Series 4 volume 1 as a sample, you can tell that the colours are there, and are fairly soft/subtle. While most people complain (and also have pictures!) about how the Colorsoft was ``blue-er'' than previous black and white Kindles, you can tell that it isn't so in this case---that's because I can tune the ``warmth'' slider to make it as red as I want to. To be fair, this is at warmth level 3 on colour level standard (as opposed to vivid), compared against to zero warmth change in Eirian-V.

Do I have complaints? Just one---colour is only available on ``native'' Kindle file types, which in this case is Mobi. I only realised it when I tried loading up a PDF that is scanned (and with colours), and it showed only the regular monochrome set up.

Is that a deal breaker? Not really... I am completely fine with reading most of my material in black and white anyway, and thanks to Calibre, conversion of the PDF to Mobi is but a click or two away.

Not ideal, but a perfectly serviceable solution.

That yellow line thing that many are complaining about? I do not see it, so it's fine.

And that's a wrap for now. Till the next update.

Monday, September 02, 2024

Part Two of Pain: Done

Ah... Monday. And tomorrow I have to be on course for two days to officially learn the ropes of proper goal setting and appraisal for my people (it's basically SMART).

But for today, or whatever is left of today, I get to chill due to being on leave.

Yesterday saw the successful staging of the concert with King's Flute Choir at Esplanade Recital Studio. That is actually the first time that I was playing at the Esplanade complex, and while I have explored much of the publicly accessible areas on my various ``annual pilgrimages'' to the place, I was simply not prepared for the warren of mazes that comprise the back stage.

Entry is naturally controlled---a performer's pass needed to be obtained from the security office (main from the B1 parking area, or the satellite one opposite from Marina Square). Once inside, it was just corridors upon corridors of rooms, equipment, and signage pointing to places. The first floor was largely towards the main concert hall, and since I entered through the main back stage door, I had to filter my way back towards Lift CH 3, where the Recital Studio can be reached on the second floor.

It was a real doozy in the beginning, but I soon got the hang of it.

The performers' rooms were spartan and utilitarian---dressing tables with mirrors that had strong lights that could be used to assist in make up, attached combination toilet/shower room, and even self-serviced combination lock lockers for any other things that one might want locked away. I spent much of the time outside of sound check and the actual performance in one of the rooms, just chilling, or working on some of the more difficult parts on Davie, sharing the room with fellow contrabass flautist, the double bassist, the harpist, and a few other low flute folks.

That is, until we started getting exiles from the other performers' room, mostly to escape the piccolos that were doing much of the same last-minute practices that I was doing. It's understandable, and in between their own practices and my general pre-performance ``any more work I am going to put in is going to do fuck-all'' attitude, I shot the breeze with some of my fellow performers.

The concert went through as well as it could, despite my own bumbling here and there (I'd like to think I cover it well enough that I was tolerated due to being one of only a few low flute players). GY and a few folks from TGCO were there to watch, and they all had a good time, with GY particularly impressed at the quality of the musicians (as it should be---the core players are actual professionals). I caught up with the TGCO folks after the concert for drinks at Harry's, while GY had to run off, while suggesting that we catch up again some time later.

Davie did well---I think that I definitely need to level up more as the player. I've had low flutes on hand for 8 years, ever since I first got hold of Mio, but I don't think that I had really put in a serious effort to develop my low flute techniques more strongly, mostly because I never had the need to play it ``big'' (like in a flute choir) before. Much of the time, it was mostly playing melody lines an octave lower, or that one time I was covering for the cello, which explains my rudimentary control over Davie and Mio.

But the key thing to note is that for bass (and later on, contrabass) flutes in the flute choir setting, that pesky low-C is used way more often than might be expected. And this is something that I haven't really been working on, which prompted my earlier comment of needing to put in serious effort to develop my low flute techniques more strongly. The use of the low-C was so often that I had to abandon the use of the Oval-8 splints on my right pinky, just to avoid the problem of numbness that I got the first time I was drilling through Ruslan and Ludmilla and William Tell. The Oval-8 splint did its job of holding back the hyperextension of the proximal interphalangeal joint of my right pinky, but due to the sheer amount of force I was pushing through holding the low-C due to poor technique (and a bit of imperfect maintenance of Davie due to no COA done since purchase), the splint was crushing my nerve in my finger, causing the finger tip to be tingly for days after.

So, no Oval-8 splints. But the irony of course is that with more strength in the pinky (through drilling on the difficult parts in the pieces), the less the hyperextension becomes a problem because of the increased tension forces of the muscle that pulls the finger closed.

I'll probably send Davie in for COA at Windworks when they have an open slot.

------

So that was yesterday. What about today?

Well, I paid good money for 120 min of getting beaten up in a controlled manner to remove the pain that has been plaguing me for the whole month (I went for a 2-hour massage).

My left shoulder was shot (my posterior deltoid was messed up), and my lumbar triangle was giving me random-ass pains (probable erector spinae strain, with possible strain in one of the deeper gluteus muscles). The masseuse beat the shit knots out of my muscles, with greater focus on the shoulders, but with good enough focus on the back muscles and lumbar triangle that after the session, I only had the ``good'' sore with no remnants of the original pain.

And anyone who claims that they can go through a massage sleeping... is probably lying or have told the masseuse to go easy on them.

For me, massages have always been an uncompromising assault on the knots in my muscles through skilled application of force and pressure. That kind of force application does not cause damage to me in any way, but it does trigger a sensory overload that is either ``sour'' or ``pain'', where the ``pain'' here isn't the kind you get from banging a body part on a hard object, but the kind of resistant pain a bundle of highly tensioned relaxed muscles pushes against the force that is meant to forcefully relax them. I am actively awake and completely aware of what is going on, controlling my breathing to go with whatever the masseuse is currently working on, to ensure that the misfiring sensation of ``sour'' and ``pain'' from my nerves do not weaken my resolve in allowing the tensed relaxed muscles to be treated.

And then I had a nap or two in between, with some diet-defying choice of food to reward myself for no good reason.

In the meanwhile though, I am totally not addicted to shapez 2. Definitely not. Here's a screenshot of the ``Operator Level'', a sort of long-term measurement of the staged cumulative production of various milestone shapes.
See? Totally not addicted. I absolutely did not set up my factories, and then kept the game running in the background to amass the numbers needed. I also did not rework some of the larger space-platform machines I designed to improve the production efficiency to ensure that I could fully stack up the space belts to deliver the full 180×12/min rate of shapes.

------

With all that, part two of pain is also done.

Part three is coming up soon, and hopefully I also have good news for that when the time comes.

Meanwhile, that's all I have for now. Till the next update.

Wednesday, August 16, 2023

Counter Tweaking 5×10 and Font Releases

I think by now, a theme be emerging, especially those who have been reading my blog entries.

I mentioned before on how I didn't manage to do the counter tweaking I did for my 7×13 font for my 5×10 font, and how I have no plans for it?

Well, I've gone done it.
I was not wrong before---tweaking the counter the same way that I did for my 7×13 font did look like crap because of the much smaller horizontal extent. The trick then was to be more careful in choice, and tweak no more than one of the junctions. As for b and d, I didn't even bother to do anything with them, which gives enough variation to make things look interesting and sufficiently different.

And speaking of tweaking, I finally decided to just release my pixel fonts for download at my personal domain. I've re-organised that ``computer stuff'' page a little, creating a new section for these pixel fonts, and putting my old console slim font in it as well.

Naturally, both the featured fonts have their associated glyph sheets, while I didn't bother for the console slim font because the code page that it supports (code page 858) isn't really well supported in not the [Linux] console. I did try to set it up as a Windows font the way I did for 5×10 and 7×13, but it was poor, so I've put it aside for now.

I think that's all I care to write about for now. I'm tired, even after having just taken a mid-lengthed break of nearly a week.

Till the next update then.

Thursday, August 10, 2023

Counter Tweaking

Ah Thursday, the day after National Day, and when I'm [still] on leave.

What a day.

First off, after ranting past stupid o'clock and crashing out shortly after, I found myself awake at 1000hrs later in the morning. Some time was spent catching up on the ESA Summer 2023 VODs, before I worked a little bit more on my 7×13 bitmap font.

``MT, didn't you say last time you were basically done?''

So I did, sort of. There was one last tweak that I was considering, and it involved how the counters were presented in characters like abdgpq. If you looked closely at the [corrected] character map from the previous post, you'll find that the counters of such characters can be roughly described as having parallel lines connected up with the vertical spans where they exist, as opposed to a more rounded feel the way one might normally print it out.

It's a minor shift of literally two pixels, but I think it was important, partly because of how Atkinson Hyperlegible shows how such rounded off counters do present a clearer profile that can be more strongly differentiated from the capital equivalents. I did the change, tested it out, and liked what I saw:
It's subtle, but it does look much nicer and less synthetic. I am thinking about doing something similar for the 5×10 font, but smaller horizontal extent used to define the counter made the application of the same pixel trick did not work as well, if at all. So no plans for that for now.

Apart from tweaking my 7×13 font yet again, I also got more runs in for Halls of Torment, unlocking even more characters, and having enough progression in the meta that my toons do not generally die easily any more.

I also made some progression in Shadow of the Tomb Raider, with the in-game progression estimate hitting 90%.

Hmm... I think that's about it for now. I'll probably go do one more run of Halls of Torment, then turn in for the night---I've got places I need to be tomorrow, and I really don't want to run around half-cocked/asleep.

Till the next update then.

Wednesday, July 26, 2023

Tweaks and Adjustments to 5×10 and 7×13 Bitmap Fonts

Oof, that took me a while, but I think that I'm much more satisfied with what I have now than before.

Continuing what I began back in the day for the 5×10 bitmap font, with a more recent set up with the 7×13 bitmap font, comes a new iteration of both bitmapped fonts.

The gist for this iterative update is about following fixing the fonts to fit some of the readability requirements that Atkinson Hyperlegible and Intel One Mono Typeface have stipulated.

``But MT, you're trying to do readability adjustments, on fonts that are so small that everyone (who isn't you) who sees it complains about it?''

Yeah... shut up. (=

Without ado, I'll just unceremoniously put in the 5×10 font here:
And here is the 7×13 one:
And of course, after doing this for a while, it is only now that I realise that the mapping of the grid to the glyphs displayed [under CP-1252] is wrong---all the ``funny'' whitespace/undefined glyphs remain undisplayed.

🤦

I'm keeping the original versions as uploaded above just so that it is easier to visually/automatically do a comparison between the new and old forms.

So anyway, here's the corrected versions for 5×10:
And here's the corrected version for 7×13:
The main changes on the ASCII portion of the fonts is is about fixing how the 8 looks to make it more distinct from B, and adjusting how { and } looks so that they are super distinct from the other three types of enclosing parentheses/brackets/``angle'' brackets. There were also some alignment problems earlier that I corrected in this round. I also did a sweep on the upper-ASCII portions, just to make sure that they are sort-of consistent and less broken (see character 0xf7 for the 5×10 font, and characters 0xa9, 0xae for the 7×13 font).

Overall, I'm quite pleased with the result. The next step is figuring out how to generate the associated fonts so that they are usable in Xfce.

Till the next update.

Wednesday, July 19, 2023

7×13 Font?

This entry is an extension to a theme that I started from some time ago about bitmap fonts.

So, if you recall, I recently got ahold of Eileen-III. With her 2560×1600 resolution on a 16″ screen, using the 5×10 fonts is a great way to migraine central.

I had been using Unifont adjusted to be monospace-friendly set to scale down from the default 8×16 to 7×13 just so that I can have at least 81×2=162 horizontal characters under a half-screen set up (the math works out to be 1280/162∼7.9=7 pels per character width).

It worked fine, but man it looked ugly. This is generally true for regular vector fonts when we scale it down to the point the mechnical scaling/anti-aliasing starts to destroy the font due to how there is no good way for the text renderers to correctly position pixel-equivalents at pixel scale without losing contrast. When the width of a stroke is down to the width of a single pixel, contrast starts taking on a much outsized role, and that's why some of the best small/tiny fonts are hand-crafted instead of relying on auto-scaling via math.

And in this case, the Unifont version is just ugly.
Just look at it: broken 0 and }, X and Y are suddenly spouting umlauts, and all the glyphs that are supposed to be round at the x-height have a sharp corner or two.

Since I was sick of it, I started to look at the small stash of hand-crafted bitmap fonts that I had lying around. The 6×11 font looked pretty good for the display set up that Eileen-III had, but there was just not enough spacing in it. On a lower resolution (but with comparable physical dimensions) display, a single pixel space was adequate, but for the particular display that Eileen-III had, it was just too small.

So, starting with the 6×11, I expanded it to 7×13 by adding one more column of blank pixels on the left, thus centering all the glyphs (the original 6 pel width used only the first 5 pixel columns for the glyph art work), and added two more rows of blank pixels on the top. I then tweaked some of the oddities that I missed from the 6×11 font, including adjusting how my 6 and 9 look, as well as adjusting the positions of the different types of brackets/pseudo brackets to better fit the larger cell. I also adjusted the overall shape of the glyphs to better match my 5×10 font, in the sense that they looked much closer to how I would envision a good high-resolution super-scaling of my 5×10 font to 7×13 would look like. And here it is:
There are still some things that I could tweak more still, but I think it is excellent for now.

There was one negative side effect of using this 7×13 bitmap font instead of the weirdly scaled down Unifont---CJK characters under this font look much worse than that of Unifont. Unifont will scale its 16×16 CJK fonts to fit into 13×13, which looks remarkably good considering that its complexity meant that any form of approximation looked better than the approximation one saw with the simpler Latin-1 glyphs.

With this font, the CJK characters made the text renderer pull up some other fallback vector font, which again had weird (in this case, worse) scaling and contrast issues that made them illegible.

Is this a problem? Yes. Is this a big problem? Eh... not really. I don't usually need to operate on stuff with CJK when I'm using my ``optimised'' text mode---at that point I will literally pull out my full-scale Unifont set up instead (i.e. 8×16 for single characters, and 16×16 for CJK characters).

And that's it for this post. Till the next one then.

Sunday, May 07, 2023

NieR: Automata and ESV-KJV-CUV

And here we go, Sunday once more. The week flitted on by, hardly registering more than a blip in my psyche.

Why so? Who knows...

Anyway, I finally finished NieR: Automata. It was a nice romp, a little less punishing than the likes of the Devil May Cry series, but it does leave behind that strange aftertaste of existential dread. I'll be honest, this is not the first time that I had seen the gameplay of NieR: Automata---it shows up on and off for GDQ and ESA events. Even Ina played this ``live'' without speedrunning it.

So I'm no stranger to the main storyline. But that doesn't mean that there is no effect on me.

The existence of the androids... was predicated upon a lie. They were supposed to be there to help win the planet back for the humans in exile from the rampaging machines, but the truth is, gur uhznaf unir orra rkgvapg sbe n srj gubhfnaq lrnef, naq gur gehr ernfba sbe gur naqebvqf' rkvfgrapr vf gb tngure rabhtu qngn gb perngr na ribyirq irefvba bs gurzfryirf va n gjvfgrq sbez bs frys-crecrghngvba. Vg vf abg vebal gung bar bs punenpgref vf anzrq Cnfpny, nsgre gur jntre gung ur znqr nobhg orggvat ba Tbq'f rkvfgrapr.

All I know is that there are things that I don't know, and if I were to strictly go with a Bayesian interpretation, then it would make more sense to bet with the majority, even for things that we do not necessarily have proof for/against, especially for outcomes that we have no way of knowing beforehand.

That's what one would normally call ``faith''.

But back to NieR: Automata. It's a fun game, though the colour scheme is kinda drab and clinical. The only places where there was more colour was in the amusement park, and even then it was still dreary. Combat was heavier on the button-mashing, and that includes dodging. I didn't like the hacking parts, since it involved playing some neutered version of a bullet-hell, but it was still alright.

And that's one more game completed. I wonder what I would like to work through next. Maybe Fallout: New Vegas before I completely lose the plot? Or perhaps something more narrative-heavy, like Disco Elysium or Grim Fandango?

Who knows?

------

In other news, I created a new monster. I took the book-summaries from NKJV, the text, footnotes, and section annotations from ESV, and combined them with the text of KJV and CUV to create a three-column ESV-KJV-CUV parallel text Bible with NKJV summaries per book.

``MT, why do you need to do this?!''

So, here's the thing. I prefer NKJV's presentation of the usual two-column with centre reference set-up. But PPCC has switched over to ESV as being the primary preaching Bible version from KJV (note that it's not the new version). ESV is fine, but the version I have is not in a nice 2-column format---I rectified this previously, and created a 2-column ESV with NKJV summaries. For some verses though, KJV presents a more poetic form, and the KJV I had was... well just see for yourself. I didn't want to cross-reference between these two documents through swapping to and fro the PDF readers, and thus decided to combine them into one, which I did through extending on my previous work.

Then of course, CUV had to come into the picture. It is the official Chinese version that PPCC uses for the Chinese congregation, and frankly, I've always felt that there were many times when the Chinese translation of something ended up being more elucidative than expected.

But doing Chinese (or CJK in general, really) in LaTeX was a pain. It involved the following:
  • Using the CJK LaTeX package;
  • Preparing the magic environment of \begin{CJK}{UTF8}{gkai}{...}\end{CJK};
  • Realising that creating too many of those CJK environments consumes all available memory in LaTeX, causing a crash;
  • Wrestling with the multicol package to create 3 parallel columns, but not letting any longer column to overflow into the next and screw everything up (I just used set up of \begin{multicols}{3}[some_title][1.5in] ... to give enough end space to avoid this altogether).
But it was all done. Here's how the three columns look like, citing from John 3:16--21:
And that's about it I suppose. I now know how to incorporate large amounts of Chinese writing into LaTeX.

And with that, I conclude this entry. Till the next update.

Monday, April 03, 2023

Stella [Nagahara]

It has been a while since the last entry. Things are progressing well enough in life, and I thank the Lord for that. That said though, with this month (and thus the second quarter) finally starting, the road ahead is likely to see even more things that are happening that will strain and stress every fabric of my being.

But first, for something happy. After thinking and saving for nearly eight years, I finally got ahold of a Nagahara MINI in African blackwood, with the basic M1 headjoint.
I call her ``Stella [Nagahara]'', named after Stella Chang, better known as 张清芳, a Taiwanese songstress active in the 1980s/1990s who is well-known for her clear vocals and ability to hit the high notes. She is contemporaneous with Teresa Teng, but I decided to name my new MINI after her instead of Teresa because I find that Stella uses high notes more frequently than Teresa does, and that they always sound so clear.

That's what my MINI's timbre is like.

I will just copy wholesale what I had written in my email correspondence with Nagahara Flutes:
In terms of first impressions for the sound, it sits between the conical bore set up of a regular piccolo, and the cylindrical bore set up of the all-metal ``marching'' piccolo. For the repertoire I play (more relating to the Chinese orchestra than regular piccolo/flute music), it is of the right timbre. The added range on the low side definitely helps, though I definitely need to get used to the different resistance needed for the high notes -- almost all my flutes (used generally here to include the piccolo and dizi) vent out much earlier than the extended tube. General responsiveness across the three main registers are quite high, and the mechanisms were nimble enough to make me forget that I was playing a keyed flute as opposed to the simple one often found in the dizi (my primary instrument).
After taking Stella into rehearsal on Saturday, I have a bit more to add: she can really go high without sounding shrill, hitting concert C8 and C♯8 quite nicely, and not displaying any of the usual problems of intonation for piccolo with respect to the concert B7 note.

I would say that Master Kanichi Nagahara has achieved his exact aim of making a miniature flute with the MINI, as opposed to ``just'' a piccolo with extensions for concert C♯5, C5, and B4. The resistance (used here as a catch-all for amount of effort required to change the embouchure + air stream to sound a note at mf) is very consistent, similar to that of my S.O.S., which shares a similar geometry as it is an Armstrong 204 that has a cylindrical body bore. It is actually easier to play on Stella than the equivalent G ć˘†ç¬› for the same set of high notes, but this is hardly new since almost all piccolos play easier for the high notes once one goes beyond concert C6.

``But MT, why did you suddenly decide to pull the trigger and buy now? I thought you were `scouting around to learn more on getting a better piccolo'. What changed?''

It's hard to really say what was the big trigger. Part of it was definitely about the recollection of a statement that Sean made some time back about how Kanichi isn't exactly getting any younger, and my realisation that throughout these eight years, there was still only Nagahara Flutes that made an instrument just like the MINI. My shopping list did posit the option of either the MINI or the Braun ``small flute''. I had tried the Braun small flute and liked it, but it went down to concert C4 only. It's subtle, but if I really wanted a viable option to cover the 梆笛 range comfortably, it had to go do the concert B4 (this is the lowest note of the lowest dizi that ``counts'' as a 梆笛---the E ć˘†ç¬›).

And thank the Lord for that quick thought of just pulling the trigger---I initiated the email conversation near the end of February 2023, and managed to commit to an order before the most recent price revision that saw an increase in prices across the board.

That said, I should really remove all the other piccolo options now that I have my End Piccolo, but I'll just leave them there for now as a record of high-end piccolo makers/marks.

------

With the something happy said, we'll progress to something a bit more serious. After two plus years of following Christ, and a year and change after baptism, it's finally time to actually serve instead of just being served. I don't have the kind of easy-friendliness that many long-time Christians have (I wonder if I still have trauma that I haven't sorted out, or if I'm just not good enough yet), and therefore can serve only in capacities that deal with people but in an abstract way. I have indicated interest in serving the music ministry at church, and will be going for a simple audition and a chat with the deacon in charge soon. I did send the music ministry folks my battered-ass performance resume---I'm no professional by any measure, and much of my experience comes from the Chinese orchestra tradition at an amateur level.

If God is willing, I will pass the audition and serve as a musician in the music ministry. That's the least that I can do to contribute back to the church community, seeing that I'm not good/willing to work with children, not friendly enough to be part of the greeters' ministry, and not street-wise/savvy enough to support any of the many professional skills-related ministries (why would the church want a computer scientist who has machine learning background serve using the aforementioned ``professional skill''?).

I could write more, but I suppose some 900+ words are sufficient for now. Till the next update then.

Saturday, October 22, 2022

lang-aware Domain

Yeah yeah, I know. No word from me for a while, and then suddenly two posts in quick order.

🤷‍♂️

I finished reading The Sandman series once again. The last time I read it was back nearly 10 years ago, from way back when. To say that The Sandman was influential to me is an understatement---I have previously written about how Death of the Endless is my handphone wallpaper, as evidenced from 2015, and once again in 2013. That was roughly when I started to fear less about Death and think of Death not necessarily as a cute goth chick, but as an inevitable old friend who will come visit in time to come.

Dream though, he's too bloody moody in his Morpheus aspect. Reading the CBRs in the full glory of my vertical monitor is a much different feel from reading it off the puny tablets and even punier phone.

But I didn't come here to write about reading The Sandman, and catching up on Komi Can't Communicate (till Chapter 376) and One-Punch Man (till Chapter 172), though they are tangentially related.

I recently updated the Unifont version from 13.0.04 to the more recent 15.0.01. While doing that, I observed that I was having a Variant Chinese character problem (this is where the tangential relatedness occurs).

First, have a look at this simulated screenshot (font used is Unifont):
Look carefully at the third CJK character after the punctuation parentheses in the second line for each (underlined in red).

Do you see a difference?

You should. The first one is the 素 glyph, rendered in 素 in Chinese, and then later on, rendered in 素 in Japanese. They are of the same Unicode codepoint---32032---but have different forms as determined solely by the context of the language that is used.

If you do not or cannot see a difference in what I wrote in this entry (as opposed to the screenshot), it is likely that you are viewing this on a set up that do not have the correct fallback fonts installed, leading to some strange glyph being rendered instead.

In any case, the screenshot shows the outcome of the quality of life improvement I did. In updating my hosted copy of Unifont, I also uploaded another version of Unifont that is tuned for Japanese text. I also replaced the TrueType format with the OpenType format where applicable, solely to transfer less bytes overall when these fallback versions of the fonts are used to handle combining character algorithms (about 4.8 MiB compared to around 15 MiB).

Now that the outcome is demonstrated, let me talk about what exactly I did.

I went through my entire website and added lang attributes to all text fragments that deviate from standard English. For each of the lang attributes used, I defined a list of fonts (most likely to appear on the Big 3 operating systems) and styles to best represent it. These included:
  • ``fonipa'' for International Phonetic Alphabet;
  • ``zh-Latn'' for the romanised pinyin (think dizi and the like);
  • ``zh'' for regular Chinese; and
  • ``ja'' for Japanese.
These language tags also allow anyone else who have different settings for rendering different languages (see this old rant about CJK font sizes).

I know that it is a short blurb of what I did, but it involved quite a bit of digging and updating through all the files. But all of these are worth it as it helps improve the readability of my personal domain.

And that's about all I want to talk about for this for now, I suppose.

Till the next update.

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.