Showing posts with label eileen-ii. Show all posts
Showing posts with label eileen-ii. Show all posts

Friday, June 30, 2023

Eileen-III

Alright, it's been a while. Time to write something here.

So, Eileen-II has more or less run her course. It's not that she has broken down, but let's face it---I didn't plonk down serious cash all those years ago ``just'' to use her for web-browsing only.

It has been about the games; it has always been about the games. This time though, there was no COVID-19 lock down to justify getting yet another laptop form-factor, but it was basically a simpler statement: space is premium that is worth paying extra for.

I could rebuild Elysie-II completely, but where would I put her? I've more or less compacted myself into a single room of my childhood apartment home, as things got a little weird with the whole ``study room'' affair, and my general dislike of basically occupying ``public space'' by sleeping in the living room. The day that I discovered that I didn't really need the high-powered ceiling fan in the living room to cool me off was the day that I decided to set up base in the bedroom that I had once shared with my sister before she moved out after getting married, some four to five years ago. I don't remember if I wrote anything about that entire set up phase, but the gist of it was a complete rework of the bedroom---all my books were finally unwrapped and sorted out into the massive shelf that houses that and more.

But that's history. I'm here to talk about Eileen-III.

Eileen-III is an Alienware m16 R1, with an Intel i9-13900HX (24-core (8 P-cores and 16 E-cores), 36 MB cache, up to 5.40 GHz with Turbo Boost), 64 GB DDR5 RAM at 4800 MHz, and an Nvidia GeForce RTX 4090 16 GB GDDR6 discrete graphics card. Her screen is 16″ (2560×1600) with a refresh rate of 240 Hz with G-SYNC, and her storage are 2× 2 TB M.2 PCIe NVMe SSDs in RAID-0 configuration.

In short, she's an absolute beast. Her graphics card is equivalent to the desktop version of the RTX 3080 Ti, but with less power consumption and no over-sized form factor, and her CPU is also doing much, much more while consuming much, much less power.

She also has 4 cooling fans, which is 2 more than what most laptops will have. For operating such a machine in a non-air-conditioned place in SIN city the way I am, having excellent cooling cannot be overstated.

She's superlative to Eileen-II in almost any way, though the keyboard layout is a bit janky---the right shift key does not fully extend to the bottom of the enter key, with the up-arrow key occupying that last sliver. The reason for this jank is the decision to create a new right column of convenience keys for the volume up, down, mute, and microphone mute buttons. They made it such that the right arrow key is now part of that column, instead of being flush with the rest of the main typing area.

It's not bad per se, but considering how the keyboard layouts of my as at then two most commonly used machines' layout are exactly the same as what I had described, the muscle memory kept screwing the crap out of it.

And oh, I had to run Windows 11 for Eileen-III---it was the only [gaming] operating system that could ``understand'' and therefore properly schedule tasks for the heterogenous CPU set up with the P-cores and E-cores.

So, how does she perform?

Like a damn dream. Seriously. Cyberpunk 2077 running at 2560×1600 at an average of 110+ fps. My ``industrial complex'' of farms in Minecraft (link is to the old version) with all the bells and whistles of full-shadow shaders was performing at least 50% better in terms of frames per second than when it was running on Eileen-II (there was severe lag that dropped things to around 40 fps), considering also that we are rendering things at 2560×1600 instead of 1920×1080, a good 97.5% more pixels to draw.

And Grim Dawn did not have a moment of lag while rendering all the fancy effects when procc-ing things.

In short, Eileen-III is a true beast.

Am I happy with the upgrade? Hell yes. It married super-powered graphics power, with fantastic memory/general processing power, with tiny pixels, while keeping the keyboard at a comfortable enough temperature. What's there to not like?

Alright, I think I've gushed enough for now. Yesterday was the public holiday, and today was an additional leave day that I took to just sit around and do nothing.

Till next time.

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.

Tuesday, May 31, 2022

Messin' With the CSS to Flex

Last chance to squeeze in an entry before 2022-05 closes ``forever''.

I managed to tweak my personal web site to make it behave a little less stupidly when displaying it in a browser window that is more landscape oriented. The old behaviour limits the width to 740 px, but I used some media queries to allow the width to scale larger proportionately as the browser's width gets past 970 px, with a hard limit of 1920 px for the sole reason that I think a single-line paragraph looks really stupid.

I've also messed around with using the flex display to fit my figures, and to adjust my footer to not require the messiness that is the float display.

On the whole, I'm satisfied with the results, even though I still think that 740 px for the given font size is roughly the sweet spot for on-screen reading. But then again, not everyone uses the implicit screen-split that I do through the Windows-Left and Windows-Right key commands.

And before I post this and restart Eileen-II due to some software update, I just want to point out that the weather in SIN city is atrociously hot and humid. It is so hot and humid that the interior wall temperature at night is a blistering 32 °C.

Just let that sink in for a moment.

Anyway, that's all I have for this entry. May is about done, June is coming up, and before I know it, 2022 will come to an end and there's next year to... look forward to?

Till the next update.

Friday, May 27, 2022

My Typical Day is Boring

It's yet another Friday.

I don't really have much to say. I mean, what is there to say? I wake up at 0500hrs in the morning, spend some time with God, catch up on the news over the RSS feed, do the short set of exercises from The Hacker's Diet to maintain my muscle mass, take a cold shower, brush my teeth, chug a cup of weak instant coffee to take my antihistamine, head into my room to check out other news sources online (hello /., and Reddit), start getting dressed by 0610hrs, leave the apartment by 0625hrs, take the bus between 0630hrs to 0645hrs (napping for the first 20 min and then proceeding with reading), change to the next bus at around 0730hrs to 0745hrs (mostly reading), alight at the bus stop between 0800hrs to 0810hrs, march up the hill and set up my work laptop between 0810hrs to 0825hrs while making my next mug of coffee, work till 1130hrs, hide somewhere far from my work space for one hour (spent mostly reading, unless I feel knackered, in which case I'd begin with a short nap of 15 min), make my last mug of coffee before continuing my next bout of work till 1750hrs, do my daily document back up, lock away everything except the LAN cable and monitor into the puny pedestal drawer, leave by 1815hrs, hop on the bus en route to Harbourfront (reading all the way), decide to have dinner there or otherwise, and eventually make my way home by 2030hrs, shower, chill in front of Eileen-II either reading or doing something in Minecraft or write some program or write something else (like a blog entry) or catching up on more news while simultaneously watching/listening to Hololive archives at speeds between 2.0× to 3.0× depending on the streamer and content, grab my other antihistamine and a multivitamin pill by 2330hrs, set up my mattress on the floor, set my alarm to 0500hrs the next day (0515hrs on the device, because I purposely run it 15 min faster than real-time), spend some time with God while in seiza, do my squats, do my hamstring and adductor stretches, do my crunches, then crash out by 0000hrs.

That is literally my typical day. There is hardly time for anything or anyone else.

Is this living? I don't know... what is living for a middle-aged Asian man in Singapore with a middle-of-the-line income like me anyway?

🤷‍♂️

If you know the answer, do write a comment and let me know. Because I really don't know.

------

SumatraPDF recently updated to v3.4.1 (as at writing). While it supposed to have improved features from the updated components, I do not recommend its widespread use just yet. There are two deal-breakers for me that preclude its use:
  1. The F12 key to show the bookmark side panel has bad focus after, which means that after showing the bookmark side panel, one can no longer press F12 to toggle the side panel away again. As noted in the link, it will be addressed in the next release, either v3.4.2, or the pre-release of v3.5.
  2. The removal of FontName and FontSize options (compare the help file on settings for v3.3.1 against the one for v3.4.1). It's a deal breaker because the default font for Ebooks (that I can't seem to change/patch directly) is Georgia, while my preferred reading font these days is Atkinson Hyperlegible just for the much better readability. I'm not a fan of the E-book format (i.e. Mobi or EPUB) that isn't PDF anyway, but the SCP Foundation tomes are necessarily in those formats due to the sheer size and unwieldiness otherwise. Reading these 3k+ pages with Georgia instead of Atkinson Hyperlegible is eye-strain city, and is a hard-pass from me.
Hopefully these will be resolved eventually.

In other news, Frescobaldi finally released a Windows build for v3.2, some 22 days after the Linux builds were released.

``MT, I thought you worked with Linux? What's with the Windows daddy-o?''

Linux is for work stuff---for not-work stuff, I use a mix of Windows+Cygwin to get things done, with a side of Linux command-line from a VM when there is absolutely no other [easy] way of doing it.

That said though, Frescobaldi in the new 22.04 LTS release of Ubuntu is broken for the same reason why v3.2 exists---Frescobaldi v3.1.3 cannot run with the Python 3.10 interpreter due to some increased strictness involving types (see Issue #1433 for an example of the class of errors). I'm not sure when the package maintainer will fix this, but that also slows/stops me from setting up a 22.04 update on machines under my control.

Anyway, that's it. It's 2315hrs as I write this sentence, and I'm just going to push this out and call it a night.

Till the next update, whenever it might be.

Sunday, May 08, 2022

Uncharacterised Restlessness and a Mob Farm Fix

A certain restlessness is within me that I cannot describe because I cannot characterise the why.

The weekend has come, and is almost gone. I spent yesterday in a type of mental fog, just sitting in front of Eileen-II in a mostly ``head empty, no thoughts'' sort of way. Just thinking back to what I did right now, I realise that I cannot remember anything about it. Evening church service was attended, and rehearsals at TGCO were done, and the day ended.

Today, I spent the morning finishing up the bible study that was due later on in the week, and then just sat there for quite a while just stoning listlessly. I tried a bit of Hyper Light Drifter, but my heart really wasn't in it. I will say that it does play a little like another game that I had completed before, namely Hob, the last game by Runic Games, the makers of Torchlight and Torchlight II, two of my favourite games for quite a while. It's mostly wordless, with an almost minimalistic aesthetic to it.

What I did do was to tweak my mob farm once more. The previous upgrade I did for it had a major issue: while the dual layers gave more space for mobs to spawn, the alternating checker board pattern, combined with the use of slabs to prevent the spawning of hole-clogging spiders meant that after running the farm for long enough, mobs were being trapped on top of these slabs while being blocked by the full-sized blocks in the second level. This meant that eventually, the mobs would all be trapped instead of fall freely down the delivery shaft, leading to the mob cap being reached while not having any mobs for annihilation at the AFK area.

🤦‍♂️

That was bad, of course. The fix I did was to tear out both levels, clear out the mob collection floor of water, and rebuild them to use the more traditional four water-channel mob farm schema. The idea is to have four 2-wide water channels with a single source block on the farthest end to push mobs that fall into them down the shaft. Spawning platforms are built in the quadrants created by the water channels. I built the second layer above it using slabs set in the upper half of the height, with an additional platform over the central drop shaft to prevent mobs that spawned on the second floor from getting too much fall damage from direct fall. I wired up the red stone lamps that I ran on the outside of the second layer previously such that when I pulled the lever to turn on the maintenance lights for the first layer, it also turned on the second one. ``Maintenance mode'' was basically activated through turning on the red stone lamps to light the interior, followed by me falling straight into the ocean to put about 128+ blocks difference to force a de-spawning of all the existing mobs. This would clear out the spawn chambers, allowing safe entry for maintenance.

Anyway, I had to do some adjustments. In order to build the water channels, and to make it a little more spider-clog proof, I had to raise the effective height by one block, which mean that I had to raise the floor of the drop shaft by one block also to ensure that fall damage was insufficient to kill any mobs that fell. That was quite easy to enact---I just shifted the apparatus up by one block while adding another layer of hoppers. There was some minor tweaking of the surrounding access point to make it easy to still reach in to whack at the mobs' feet, but it was just using stairs correctly.

After all those changes, the mob farm was tested, and I'm happy to report that it works well. The spawn rate does feel high enough, and it had the advantage of also allowing spiders to fall to the auto-kill lava layer as well. This meant that I could harvest string for free, or have spider eyes if I decide to do some manual killing. To be had though, spider mobs are still quite rare when it comes to falling through the drop shaft---this is purely due to the passive mob farm design. I was contemplating if I should build an active mob farm design instead, but did not follow through because it involved an almost completely inverted design (the AFK spot is above the body of the mob farm). It was way to drastic for something that I absolutely didn't really need to have in the most efficient ways since I am playing my map as a mostly Survival mode, switching over to Creative mode once in a while to handle stuff that would be fun but would require too much busy work [that I didn't feel like engaging in] to get.

Having the working canal-design mob farm with spiders meant that I did not have to build that other spider-only mob farm next to it. I spent some time taking that edifice down to reclaim the materials, and it was nice.

------

Today's Mother's Day. I had pre-ordered 4× regular-sized pizzas from the venerable Canadian 2-for-1 Pizza to celebrate the occasion with family at home. As stated in their story, they have been around since 1995 in SIN city, which translates to being around during much of my teenage years and into my adult ones. Their pizzas are delicious, and are good value for money most of the time. We always love their pizzas.

I also liked their new ordering system. Throughout the years, I have experienced about 3  of their systems. The first was the usual hotline method with their catchy number, namely 241--0--241 (before 2002), and then 6--241--0--241, all the while referring to their menu which someone would have lying about as a pamphlet/flyer. Then there was the time when they were using Foodpanda to handle their orders. And now, it was back to using their own internal system.

As long as they don't stoop to demanding that I install some weird-ass app on my phone (or elsewehere) just to order pizza, I figure that I'll continue to support them. They are my go-to for home delivery pizza after all.

Anyway I'm beat. I should go get a shower and then prepare to turn in for the night. The long weekend week is segueing into a more regular work-week, and there are things that are coming this week that does require some level of concentration that I may not be looking forward to. The things we do to earn our coin.

On another note, the sheer stupidity of this new plan of effectively holding citizens hostage to the government through only issuing digital certificates of birth and death is something that I cannot comprehend. The excuse that was put up sounds great in theory---everything is authenticated and directly from source, reducing data loss/theft, where ``...government agencies and private entities, such as industry associations and financial institutions, can use QR codes included on all digital certificates to verify their authenticity''.

But I take offense to that. Here's why. The servers that control access to these digital data are government owned, and by virtue of the design of information systems, any access of them via URLs (implied through the QR code) will be logged. This means that if someone were to be doing any sort of business with any entity that requires the use of the birth certificate (there are very few reasons for these, the most prominent being emigration), the SIN city government will know about it, whether they ought to know it or not. Sure they can say things like the law exists to protect the information and not for surveillence of the citizenry... but we all know that laws are only as good as they are actively enforced, and even then, laws can and are often changed. See also the latest brouhaha over the US Supreme Court and Roe v. Wade.

People will also throw about the ``I have nothing to hide from the government, so why should I care about this?'' excuse to claim that I am over-reacting.

In an extreme scenario, anyone whom the government has a beef with and needing asylum elsewhere can, in theory, be fucked over by having the access to the digital version blocked through a ``technical issue'', real or manufactured, i.e. the said person can be made into an unperson with no effort on the part of the government. This is undesirable for individual liberties. It does not matter if you have ``nothing to hide''---in the face of power, if any one of us in the minority is not safe, then none of us are safe for the sole reason that we will never know when we might end up being in the minority.

A more prosaic scenario is that the reliance of a highly complex and expensive device like a laptop or mobile phone with associated high dependencies of network connection and associated working infrastructure is just begging to be taken down---all the benefits of centralisation are also weaknesses in times where these very documents are needed the most, in crises where complex supply chains and infocomm infrastructures are strained to their limits. It also places an undue amount of pressure on the economically less able to pay more indirect taxes through having to fund for all these devices/services just to exercise their rights and privileges as citizens. That is not right either.

It is also much easier [relatively speaking] to preserve a physical document over a digital one. The skeptical can be asked to do a simple exercise: can you easily retrieve the file that you saved into your 3½ ″ floppy disk? And no, this is not a fake problem---``bit rot'' is a real issue for modern day archivists who are trying to preserve the digital history. The rule allows people to download the digital certificate for safe-keeping in their physical device, but considering how the average person operates, the digital copy is bound to end up in some third-party cloud storage provider...

...which totally nullifies all the argument about having a centralised system for security purposes.

🤦‍♂️🤦‍♂️🤦‍♂️

This does not affect me directly---I'm so old that my birth certificate will never be affected by this new rule. But it does make me think even harder of having a child in the first place, not that I want to have children.

Each day that passes by just keeps reinforcing the fallenness of this world, and how we are all really just slaves. The only difference is that the figleaf that was keeping us from this realisation is starting to get increasingly transparent the more the polities start applying their traditional skulduggery using infocomm technology.

*sigh*

Till the next update.

Friday, November 12, 2021

Is It Still a ``Sushi Meal'' If 60% Was Sashimi?

To say that I went to get sushi isn't technically correct, considering that more than 60% of what I got from Ichiban Sushi was sashimi in nature. But yes, I had sushi today to satisfy that craving.

I also found the anchovy chilli paste at Fairprice @ Kang Kar Mall. Paul had gifted a bottle to me last Saturday, and by today, it is already three quarters gone. And so, I needed replacements.

Progression through Cthulhu Saves the World is back to roughly where my aborted first play through had left off, with the exception that I probably had grinded my characters' levels a little bit more than what I was doing before.

My Logitech F310 Gamepad was suffering intermittent connection problems with Eileen-II. I verified that the USB port was working, so it had to be the contact of the USB connector of the F310 that was at fault.

*sigh*

Welcome to living in SIN city, where oxidisation/sulfurisation of all sorts is the norm, thanks to high humidity and high air pollution from vehicles and even from our friendly neighourhood slash-and-burn farmers. The solution was from a can of the 3M Quick Drying Contact Cleaner 16-102. It is basically an aerosol solvent that works very well at removing the oxide layers on the electrical contacts, without much fuss. I would get Isopropyl 90%, but that shit is as rare as unicorns out here. As what GY has mentioned, 3M products might be pricier, but they sure know their chemistry well.

Every 3M product that I have used so far has exceeded expectations on performance.

Am I shilling? No... they pay me absolutely negative dollars to speak well of them (for the slow, it means I paid for my own product and am not sponsored). But I like calling it as I see it, and I see a good product that fulfils what I need, and then some.

I'm also just pass the halfway point of 25/50 ways to die. Slowly but surely I will complete this NaNoWriMo novel... even if it means busting the 50k words limit.

And now, I'm spent. I think I'm going to turn in ``early''---it is, at least, earlier than when I had been sleeping at recently.

Till the next update.

Thursday, November 11, 2021

Like She Was New!

What an eventful day.

The Dell on-site engineer came down to replace the fan and heatsink assembly, and I learnt a few things.
  1. Dust was the true killer;
  2. The heat pipes ran keyboard side up, in total inversion from most other systems, explaining the finger frying;
  3. The fans were really integrated with the heat sinks;
  4. The replacement of this assembly was as good as having a repaste job;
  5. Most of the upper half of the flat-laying part of Eileen-II are just vents, so air blowing through all of them has no risk of clogging the way old laptops were; and
  6. Daughter boards everywhere despite the motherboard being more complicated than I had ever seen.
The dust was of a very uniform fineness that looked awfully like the kind of concrete dust one would see from a construction site, and not the kind of skin-dust that is the more normal.

Armed with the new knowledge and assurance from the on-site engineer, I now have a better way of preventing all that weird frictional vibration thing from fans that were dust-imbalanced.

The difference was pretty dramatic, before and after the assembly change. I am getting 40--46× multipliers even on full load with the PROCHOT limit of 83°C that I had set. The idle temperature is now roughly 40°C at an ambient temperature of about 27°C, which is about 4--7°C lower than before.

There was little throttling when I was running Minecraft at 32 chunk rendering distance (just for fun), and the lag spikes that I was seeing before even with Iris Shaders (on 12 chunks rendering) was much lower.

It's like Eileen-II was brand new all over again. And now, to monitor things before I confirm the closure of the ticket.

------

I also managed to set up a servicing date next week for Aurelia, my artisan-quality concert flute. She's doing well, just that she has missed her annual Clean, Oil, and Adjust (COA) session. I was tempted to bring S.O.S. and maybe Azumi down too, but I just wanted to keep it simple. Those two (and maybe Picc) can go for their COA next year instead.

I might need to bring Davie down for a look-see by Sean though... one of the pads looked like its bladder had ripped. Still need to arrange a date with him for that.

If you are bloody confused, do not be afraid.

I can't believe that Aurelia is already 2 years old, and that Azumi has been with me for more than a decade. Time does seem to fly along.

------

I'm thinking I might want to go for some sushi tomorrow for late lunch/early dinner; I've been craving for sushi for a while, so it might be time to satisfy that craving.

NaNoWriMo has been going well; I've already busted the 25k milestone, and have ``only'' written 23/50 ways to die. It's very cathartic despite its macabre nature; it really puts things into perspective.

Anyway, that's about it for now. Ironically, I am in the middle of replaying Cthulhu Saves the World, which does not need the higher powered computational powers that the refreshed heat sink+fan assembly provides.

Till the next update.

Tuesday, November 09, 2021

Fast and Pretty Minecraft Is Possible

There's something about Minecraft that makes it quite relaxing, especially in survival single player. Physics is a thing, one can play as normal as possible, and can switch over to something less onerous should the whim come on.

I spent time extending my nether rail to have a more direct route to the Blaze spawner. At the same time, I used the new location in the nether that I connected to to open a new overworld portal to somewhere unknown and unexplored. Those are fun.

What was truly fun was testing out Iris Shaders with Complementary Shaders for Minecraft release 1.17.1.

Originally, I ran in vanilla, but never got performance beyond a slightly better potato PC despite Eileen-II's specifications. It did not help that some changes to the rendering was done that led to a slow down.

Then I got Optifine---that improved the performance. Then I fell into the shaders rabbit-hole and ended up with Complementary Shaders after testing several others. It performed well unless the dynamic shadows was turned on, at which point the frame rate tanked---mind you, this is an NVIDIA RTX 2070 Super we are talking about here.

My workaround then was to turn off the dynamic shadows. It looked pretty, but had passable frame rates with some lag spike here and there.

I have heard of Iris Shaders and an associated alternative Minecraft rendering engine that was newer and ``better'' than Optifine called Sodium. I didn't try it till today.

My goodness. What a game changer.

Dynamic shadows was running in Complementary Shaders, and yet the performance was still acceptable at a render distance of 12 chunks (I've given up on using 16 chunks in general, Optifine or Iris Shaders).

Only catch was that the glass blocks did not link up seamlessly, but that is really quite minor.

Pretty world and better than vanilla performance, what's there to not like?

That's all for this entry. Till the next update.

Saturday, October 30, 2021

Meeting My Daily Writing Requirements

I filed a support request regarding the fan vibration. The sound was getting bad---it had scraping elements in it, and was triggering at random moments as well. Terrifying. It'll be a while before they will get back to me though, considering that it is a weekend after all.

I hope that they can replace fan assembly so that new bearings and other good stuff are in place.

An Ethic for Christians and Other Aliens in a Strange Land by William Stringfellow is starting to get more interesting. It covers largely Revelation from the Bible, and uses it as a way of talking about Christian ethics while still living in this fallen world [of Babylon]. This is in contrast with the more predictive nature of God's Prophetic Blueprint by Dr Bob Shelton. I don't think that either is ``a more correct interpretation'' than the other, mostly because Revelation itself has strong eschatological components to it that is less ``targetted'' like the epistles that make up most of the New Testament, but also because each uses slightly different approaches that come to conclusions that are broadly in agreement (as they should be since they are sourcing from the same Bible). But I will defer discussion till after I've finished An Ethic for Christians and Other Aliens in a Strange Land.

Tomorrow will be the last day before NaNoWriMo kicks in. I think I'll watch me some Jump King gameplay by Calliope Mori while going ham with Serious Sam 3: BFE and watching the temperature settings---I've had to lie Eileen-II flat on the desk without the support struts because I didn't want to risk more excessive vibrations. I had taken apart the back cover again this morning and added more vaseline as lube---it seemed to work well as an interim measure, as long as it doesn't dry up. I think the vibration problem came back since the last application because I was running the fans at full speed for most of yesterday, figuring out that I could probably try to get more cooling going just so that I can squeeze out more turbo boosted frequencies for longer.

Ah well. Stupid lousy hot and humid weather that is SIN city. Can't do much about that.

Till tomorrow's update then.

Friday, October 29, 2021

Micro-update

No words today to spare. Saving them up for when NaNoWriMo begins.

Only thing I would say is, the fan in Eileen-II was acting up again, and I re-applied as much Vaseline as I could squeeze with a toothpick. It seems to work well so far, even when running under the ``Full Power'' profile that basically pushed the fan speeds to 100%.

I'm going to take a shower and then turn in for the night. The day has been quite long. Till the next update then.

Thursday, October 14, 2021

Manipulating Pixels

Ah, Thursday.

The weather is still nut-so, but what can I do about it? Anyway, the weather has been bad enough that I had to bring out the four laptop ``leg'' stands. I had put those away for quite a while because the angle that I was using them that allowed a better channeling of wind (tilted away from me) was screwing my wrists. The ``as-designed'' angle was really to have the laptop tilting towards me, with the rear raised higher than the front, but the problem with that was that the fan on the right side of Eileen-II would randomly sound like it was rubbing on something bad, causing some scary sounding vibrations.

Previously when those vibrations came about, I would hastily suspend Eileen-II before opening up the back cover, and try to clean out the dust. Then it got a little bit more frequent than expected, but I realised that if I left it alone for a while, the fan would eventually slow down/stop, and the next time it restarted, the vibrations would be gone.

Well, today the vibrations happened again. I was annoyed enough that I took apart the back cover and stared at the fan again. Back in the day, I would take the fan out from the casing and lubricate the moving parts, but the way Eileen-II was set up, it was very risky to take the fan out completely. But I realised that there was just enough leeway to get some lubricant in, which I did, carefully. My lubricant of choice was, of course, Vaseline, mostly because it is non-conductive. I slipped some of it in, and after putting things back together and setting up the legs ``as-designed'', there hasn't been any major vibration incident.

A win, perhaps?

Anyway, it was comfortable enough to type on, and I worked a little on LED2-20. I got the right-rectangle (rectangle with edges parallel to the screen edges) intersection sub-routine working, and with that, managed to get the ``put sprite anywhere on screen'' sub-routine working. The problem that I had to solve was that the built-in PUT graphics statement automatically fails if any part of the bitmap image exceeds the boundaries of the screen. This means that, for example, if I have a 16×16 sprite, I cannot use PUT with the upper left corner being at (−10,−10). But in LED2-20 (and other games), we should expect ``partial'' sprites to appear on screen for that immersion. My solution to this was to grab the reduced sized bitmap (and mask) on the fly and use that with QuickBASIC's internal PUT statement.

It works well enough. I did switch up the way I separated out the cases though, relying on error-trapping to handle the cases where the more time-consuming bitmap handling was required while avoiding the cycles spent on validation checking before using the PUT graphics statement in the beginning. This can be quite a time saver in the long run when considering just how often we are drawing sprites on the screen.

So at this point, keyboard handling, and basic sprite/background renderer (the background renderer is similar to the sprite handler, but without the mask) are done. I'll probably need to worry about pixel-perfect collision testing next, or think about the game data structures that I need---either way is fine.

------

In Minecraft, I dug out another row of rocks from my mine, and built a glass enclosure for my bees and flowers. I had to do that second bit because the damn bees kept on disappearing. They first disappeared because they kept on running into my lava wall (I removed that), and then they probably disappeared because they wandered too far off from my service platform and didn't return or something.

Anyway, that's about all I want to talk about for now. Till the next update.

Sunday, October 10, 2021

Machiavellian

It's a little late, but here's a short one.

The past few days of ridiculous heat continued in the morning, with the interior ambient temperature hovering near 30°C at around 1000hrs local time. Then it decided to rain hard twice.

The interior ambient temperature now is still about 29°C. Remember what I mentioned about humidity and wind? Well, I think that the humidity is a little lowered, so despite the lack of wind and still-ridiculous interior ambient temperature, it actually feels sort of cooler now.

I read a couple more volumes of KonoSuba. I think I can probably finish the entire series by tomorrow. I did spend the early morning reading a few more articles from The Best of BYTE: Two Decades on the Leading Edge, again tapping into the natural light from the sun to assist in the reading off the dead-tree book. It's still largely a passive-entertainment sort of day for me, so nothing that involved heavy [intellectual] lifting was needed.

I did update Eileen-II through the support assistant software that comes with her though. This included the side-loading of the new BIOS firmware, an always harrowing experience---if you brick that, you brick the whole machine with little to no hope of recovering.

In other more current-affairs type news, the ``conscientious objectors'' to vaccination against COVID-19 (or was it vaccination in general?) have raised their collective heckles against the new rules that were released yesterday, claiming that the decisions discriminated against those who were unvaccinated.

Well, no shit, Sherlock. All decisions are discriminatory in nature, with the only question on whether that discrimination along the decision boundary was morally/ethically/socially acceptable or not. And in this particular instance, it is, with the addition of some heavy-duty science in demonstrating that the vaccinated, if they do get hit with COVID-19, do tend to get less dangerous symptoms than those who are not.

I had mentioned in meatspace many times that the true way out of perpetual lock-downs from a pandemic is to have it burn through an entire population, an outcome that was unthinkable before vaccines were available, but is now plausible once vaccines are available. The only reason why we can't say things like that is because of how brutally inhumane it sounds despite it being the eventual outcome that every society needs to get through in order to be ``COVID-resilient''. This is doubly true for politicians because anyone who says this out loud will be committing political suicide through a demonstration of anti-empathy of a rather personal nature, which brings the message of how they are not really ``representing'' the voters in the starkest most inhuman sort of way.

But, just because no politican can say this out loud doesn't mean that they cannot pursue it as part of an exit strategy. And the latest adjustments of restrictions can be seen as subtly moving towards that end-state. Of course, they will not allow it to burn through the population completely out of control---overwhelming the public healthcare system is always a legitimate concern---but through what they hope to be a controlled release.

I suppose this might be the new modus operandi of the government of SIN city---instead of strong-arming people with heavy-handed laws, they just make things super annoying and rage-inducing for those who refuse to comply, maliciously or otherwise. But to be fair, this modus operandi doesn't seem to be generally applied---it seems to only be for actions that tend to affect a larger number of people at once. In situations where the target group is small, the old heavy-handed ways seem to be preferred. Which makes sense in the Machiavellian sort of way.

Anyway, I see myself staying home still for this week (other than the usual Saturday worship service at church). I don't need to go anywhere specifically, but I do like to head out to a nice place to sit, drink/eat, and read. I can do that safely from home, but after a while it probably feels nice to just head out for a change of scenery.

I think I'll stop about here for now. I might want to go cycling for a bit tomorrow---my mind's not made up just yet. Gotta get more of that kind of care-free fun going before my sabbatical comes to an end, where I need to snap back to what society expects/demands from me.

Till the next update.

Thursday, October 07, 2021

Matinee

A week of passivity, it seems to be.

More reading from The Best of BYTE: Two Decades on the Leading Edge, and more volumes of KonoSuba (『この素晴らしい世界に祝福を!』) read, even as I have various cached Hololive videos running in the background.

I am also thinking about writing a locally-run RSS aggregator service as a way of ensuring that I am not beholden to my cell-phone when it comes to following up on news. I find that ever since I've gone on the hermit life, I haven't really been looking at my cellphone much, and as a result, have not really looked at the associated RSS reader output. This is a little problematic not because I then become less aware of world news (look, there really isn't anything good in world news these days anyway), but that it is affecting my ability to respond to the new direction of the group study that is happening in my care group.

Since I'm staring at Eileen-II most of the time anyway, having my own RSS reader is probably the best option.

There are probably many nice RSS aggregators out there, but ever since the killing of the default RSS reader on the smartphone, I have started to get rather wary of relying on services out of my control for anything that I care enough about. I am using some kind of third-party RSS reader on my phone that is thankfully not completely screwed up, but being tethered to my phone is one of those things I don't like. Part of the reason is that transferring information out of that infernal device is usually non-trivial, as compared to the many options I have on a PC.

Anyway, that's about all I really want to talk about. Skin's been acting up a little, and the ``drying up'' of the random splotches of rash on my torso can sometimes be itching a little too much to ignore completely. Maybe it is due to the return of the hot weather---I don't know. What I do know is that the town council has again decided to have landscapers lob fertiliser into the cross-patterned grass patches that grew in between the laid out concrete that made up the parking lots again.

🤦‍♂️

Till the next update.

Thursday, September 23, 2021

Maybe It's Time to Retro Program

You know, all these nostalgia of computing feelings have started to manifest itself into some kind of idea in my head. But hold on to that thought for the moment.

Here are some screen shots of an old, old game that I wrote back in the day using QuickBASIC: LED(II). What is LED(II)? It's the second program after the first (now lost) one called LED, which was a circle-shooting game using a circle cross hair controlled with the keyboard over a screen. And why is that called LED? I don't know, my best guess was that it was just some quick random-ish of text when I had to quickly save the file in the old 8.3 format... I did eventually backronym it as ``Legendary Enemy Destroyer'' for LED(II). In the header information in the source file, I even had this back story written:
The Legendary Enemy Destroyer (LED) of Earth is on a hunt, to hone its skills. Little did it know that at the very moment, waves of extraterrestrial objects come hurtling towards Earth. The nations are caught with their pants down, and so it's all up to LED to deal with the invasion.

You are the LED. Using the keyboard, you control the LED's direction of movement, acceleration and weapons. The LED has an arsenal of powerful energy based weapons, but choose the most efficient one for use.

Survive the waves to save Earth from impending doom.

Good luck!
Eh, the story's corny, but that's fifteen-year-old me talking. I'm gonna give past-me some slack.

Anyway, here's the title screen:
Here's a typical ``wave'':
And here's the game over screen on dying:
It's a very simple 320×200×16-colour game that mimics the side-scrolling things, except it was done by a fifteen-year-old me during my spare time. The old program logs said that I started on the sources for LED(II) in 2000-03-05, and finished the first playable version in 2000-03-15, followed by on-and-off changes and updates up to 2000-12-30. The next time that I updated it on and off was in the later half of 2002, and added some super minor cheats into the source while attempting to tweak it to work better with faster machines.

Man, so many things that were wrong are wrong. For instance, see how the sprites are drawn on screen? The short answer is that I was using XOR mode for ease of ``non-destructive'' sprite drawing. Confused? Here's a screenshot of the relevant statement in the QBasic help file:
The correct way is to use two bitmaps---one bitmap for the bitmask to AND with what is on the screen to leave background pixels intact while wiping out pixels that need to be overwritten with those of the sprite, before applying the sprite itself with an OR command. In addition to that obvious problem, there was the other issue of using busy waiting in various forms to simulate appropriate amounts of delay (one was brain-dead do-nothing counter loop, the other was a slightly less brain-dead polling-loop on the TIMER value, which returns the current time of day in seconds with resolution no better than 18.2-1 s (courtesy of the IBM PC clock standard of 18.2 Hz), and a laggy-as-hell handling of input commands because it uses INKEY$ in the delay-driven polling instead of relying on something that was more event-driven.

🤦‍♂️

In short, it was a flaming pile of horribly patched code.

QBasic actually has a pretty useful set of event-driven mechanisms. Some examples include:
  1. ON ERROR GOTO line: used for error handling (I've used this before);
  2. ON COM(n) GOSUB line: for characters that are received from the communications port n (I've not used this ever);
  3. ON KEY(n) GOSUB line: for keystrokes on key n (I've not used this, even though it is interrupt driven!);
  4. ON PEN GOSUB line: lightpen related activity (I've never seen/use one);
  5. ON PLAY(n) GOSUB line: interrupts when the background music buffer has less than n notes in it (I used it in LED(II) for the sound effects);
  6. ON STRIG(n) GOSUB line: activity on joystick trigger n (I've never had a joystick, so I didn't use this); and
  7. ON TIMER(n) GOSUB line: triggers when n seconds have passed since the enabling of the event.
All the ON event GOSUB line statements define the handler when the event in question occurs, with the actual enabling of the event trapping itself triggered with an event ON, queued with event STOP, and completely ignored with event OFF. Since they are effectively interrupt driven, they are likely to be more responsive than the messy-ass main-loop that I had been approximating before.

I think I didn't use them for a couple of reasons. Firstly, I wasn't really familiar with the event-driven paradigm when I was fifteen---recall that I had only written programs for solving algorithmic problems in competitive programming, and even then, it only started when I was thirteen. It was not like those who taught me did any form of ``serious'' programming that would use such paradigms in the first place. ``Event-driven'' without having any GUI elements is something that one is more likely to see when writing servers (I wrote my first server program using the interrupt-like event-driven loop only when I was in university), and not in such console-driven programs. Secondly, there was also a purity-issue at some level: each of the event-driven definitions were more tied to ``old'' BASIC where the target of the GOSUB was a line number or a label, which was something that I didn't understand/like since I was exposed to the newer modular-styled SUB and FUNCTION in QBasic, compared to the ``assembly''-styled linenumber/label sub-routines. It didn't make sense in my head then, and so I avoided it, and explored the complicated world that was returned strings in INKEY$ for keys that were outside of the regular printable characters (like the function keys, and the very important arrow keys). The QBasic help file contained a list of keyboard scan codes that were to be used with the ON KEY(n) GOSUB line statement, but to me then, it seemed irrelevant since I thought that I needed to write a customised assembly-based keyboard handler to use these ``raw'' codes.

Well, it's more than twenty years later. I feel like I can do a much better job than fifteen-year-old me using the same tools, and I think I will actually go about doing it.

In fact, I might see if I can do it in regular QBasic instead of QuickBASIC, keeping the source code small enough to fit into one file (as opposed to the current 2-file monstrosity just to ensure that it can be compiled). Let's see if twenty years of experience can make a difference given the same tools.

Now, going back to the initial statement of nostalgia computing feelings, the thought came to mind. Why not do retro-programming for fun? I mean, there are hobbyists who are building custom ROMs for old game consoles that they grew up with that they loved, while I grew up with MS-DOS and loved it through and through. So why not go back to that as a hobby, building new things using the old tools, especially since now I have the means of publishing what I had done.

I mean, people have made ``fantasy'' virtual machines like the pico-8 which has severe limitations to spur creativity. The venerable IBM PC with its 640 kiB limit is no pico-8, but it is a beloved platform that I am quite intimately aware of, spending my formative years poking at it. Compare that to my beefy modern machine of Eileen-II (32 GiB RAM with 6 Hyperthreaded Cores at a base clock speed of 2.6 GHz means that I can shove 32k memory-instances of the IBM PC, running at least 104× faster than the maximum speed of the 80286), it is as good as being a fantasy machine anyway, since it is very unlikely to have real hardware for it. I mean, I am using DOSBox to run the original LED(II) to get those screenshots.

Right now, I'm thinking that when I release these retro-programs, I might just build them into the traditional DOS executables, relying on DOSBox to supply the emulation layer. If things are in QBasic/QuickBASIC though, I can have the option of using QB64 or FreeBASIC to build something that can run natively in uhhh... Windows, Linux, MacOS.

Screw that, I think I'll just release it for DOS. Windows/Linux builds, I can probably test and might do so for my own personal edification, but I have no way of testing MacOS builds. Moreover, it feels less retro if I'm doing this, and it is likely to eat a stupid amount of space on the web server just to hold on to these files (a quick manual conversion of the original QuickBASIC sources of LED(II) to compile in QB64 yielded a file that was 2.68 MiB large, compared to 151 kiB from the native QuickBASIC compiler).

Between QB64 and FreeBASIC, I've used FreeBASIC before, specifically to build a Windows version of my take of the ``Matrix digital rain'', which itself is an adaptation of my DOS text-mode version of the same thing. I liked that program because it used various VGA routines to change the font and the colour palette to fit the ``Matrix digital rain'', without ever running off into graphics mode. I used it to generate some of the special effects that were needed in the ``scholar's film'' that we needed to create back in the day for the scholarship presentation ceremony.

Ah... so much nostalgia.

Anyway, this entry is getting too damn long. I'll stop here, and go mess more with Minecraft. I've been to the End, demolished a small End City for all the Purpur Blocks, found the End Ship, grabbed the Elytra and Dragon Head there, and amassed some awesome Shulker Boxes that I had sorted out earlier today.

Till the next update.

Wednesday, September 08, 2021

[Not-so] Stupid O'Clock

Ah... it's stupid o'clock once more.

I had slept almost immediately after my last post, and have woken up about fifteen to thirty minutes earlier in a bit of a sweat with little to no feeling of wanting to get back to sleep immediately, and so, we have this entry.

Anyway, yesterday late afternoon I finally headed out to my favourite bar out in Tai Seng. Thanks to updates to the latest control measures in COVID-19 (in general), combined with a change in the store manager since the last one had moved on to a different place more than a month ago, things felt different even though things were kind of still the same.

The owner of the franchise was not there---I think he's busy with another new bar that he had set up a while back---and so I lost my ``regular patron'' status.

It wasn't too bad though. I was treated well enough like the rest of the other customers, a hallmark of consistent enough customer service. The only difference from losing my ``regular patron'' status was that I had to call for an additional pint of Guinness every time I ran out.

It was an afternoon/evening that was well-spent. I completed the dead-tree version of Computational Geometry in C (2nd Edition) by Joseph O'Rourke, as well as the week's issue of The Economist, the latter of which was, ironically enough, something that I had been failing to do throughout much of this sabbatical. Part of the problem was that periodicals like The Economist were never made available on the desktop version of the Kindle reader, and seeing that I was not commuting nor dining outside as much, I hardly pull out any of my portable Kindle readers---I do most of my reading on the large vertical monitor that I hooked Eileen-II up with instead.

A shame. I wonder what was the rationale for that. I mean, even graphic novels that were purchased over at the Kindle store could be opened on the desktop reader, which makes the whole ``but mah piracy!'' points moot. Maybe it's just some kind of legal agreement that Amazon had to make with the larger periodical providers to have the former act as sellers for the latter---by only limiting it to portable versions of the Kindle program, the distribution of such periodicals cannot then compete with any other desktop version (including behind-the-paywall web browser ones) that their originators might have. The smaller and more niched magazines are probably swept up among the agreements and thus suffer a similar fate.

That aside, I find that as I am getting older and drinking less, my tolerance to that intoxicant is waning. The wane isn't in the sense that I get face-down wasted when drinking them, it's more like my body's ability to recover from it is weakening. Hangover headaches are stronger and come earlier, and it takes a while to clear them up, even with suitable painkillers and remedies (caution: never take whatever you call Paracetamol with alcohol: it can cause liver damage). Since the processing of alcohol in the body requires metabolism processes to occur, my conclusion is that my metabolic rate has decreased due to the age that I am in.

It's not a bad thing. It's just a thing that I need to be aware of. As long as I'm just drinking in a social context (i.e. not bingeing to drown my sorrows), it'll be fine.

Huh, it started raining outside. That could explain the whole sweatiness that I was feeling earlier, having not felt that before under similar room conditions---must've been the saturation of the relative humidity.

Anyway, for a stupid o'clock post, it's not as introspective as to be expected, and reads more like a regular one. Take it for what it might mean.

I'm gonna head back to sleep and wake up at a more normal hour. Till the next update.

Saturday, September 04, 2021

Fixing Bits of pbarwin.cpp

I got to test out pbarwin.cpp on Edythe-III and found a couple of interesting side cases. The key difference between Edythe-III and Eileen-II is that the former has two batteries while the latter doesn't. That introduces issues like whether the battery enumeration will show the missing battery (it does), and what happens with respect to the different charging. I had anticipated some of these issues before hand and wrote up the mitigation, but nothing beats actually testing it on a true situation.

I had to fix one of the indicator mechanisms that I was using for the ``small battery gauge''. Here's a ghetto-photo version of how it looks like after fixing:
The original way did not show any of the filled out bar if there were any such indicators, which made it quite confusing to determine in this case which battery is being charged, and at what level it was on. While fixing that, I managed to update my source code to use std::fill() over the ghetto-C way of using a for-loop to fill it up (the ``hardcore-C'' way is to use memset()).

Going back to the ghetto-picture, let me highlight the changes. I added the indicator sigils for the small battery gauge: `>' is for charging, `!' is for critical status, and `?' is for unknown status. I also have a contextual output of hhh:mm:ss that shows either the estimated time left to fully charge the current battery, or the estimated battery life left for battery discharge. It becomes ---:--:-- if the batteries are not charging/discharging, and if it is running on AC power. That was a feature that I didn't update into pbarwin.py that I could somewhat more easily pull off now.

That's about it for now. Till the next update.

Wednesday, September 01, 2021

Typematic Rates

Okay, let's talk a bit about typematic rates.

The idea of a typematic rate is simple: when a key is pressed and held, there exists some amount of delay after registering the first key-down event before the operating system decides that the key is considered to be held and should emit the same key code repeatedly at a given rate. The most obvious manners in which this shows up is from using the arrow keys to navigate through a document, or to move the cursor/caret back and forth horizontally through a line of text, or to delete/backspace through a whole bunch of text.

Or if one uses the keyboard to play computer games, any form of keyboard-related navigation will reveal this behaviour as well.

With that out of the way, let's talk about how these two parameters (delay, repeat-rate) can be adjusted.

In the old days of DOS, one would use the mode command in the form of
mode con rate=32 delay=1
to set the keyboard repeat rate to the highest value [of 32] with the lowest delay [of 1]. The rate is given in units of characters-per-second, or just Hertz (Hz), while the delay is provided in units of 0.25 s. So the most rapid that the keyboard can go is 32 Hz (31.25 ms) with an initial delay of 0.25 s (250 ms).

When Windows came about, there was a new keyboard repeat rate/delay control mechanism. This can be easily reached through Windows+R, followed by typing ``control keyboard'' in the ensuing box. This will bring up the ``Keyboard Properties'' dialog box, where the typematic rate is to be set under the ``Speed'' tab. Instead of hard numbers like the mode command, we get sliders that state delays from ``Long'' to ``Short'', and then ``Slow'' to ``Fast''. A cursory search did not reveal any information about any exact numbers here, but considering how the values seem to mimic the range of the old mode command, I will assume that they are similar. I will get to why I believe so in a bit.

Anyway, eventually though, even the fastest settings that were available felt sluggish to me, and I don't mean it just in the ``repeated key hold'' sort of way. Even regular typing was starting to feel sluggish, and this is after applying the ``performance tweak'' (deselecting ``Animate controls and elements inside windows'' under the ``Visual Effects'' tab from the ``Performance Options'' window that is called from the ``Settings'' button under the ``Advanced'' tab of the ``System Properties'' window) to force the newest versions of Microsoft Office to not fuck around with the apparent cursor speed with their ``smooth animation'' bullshit that completely deconstructed the responsiveness of cursor movement. Maybe it is because my typematic rate has increased, or maybe it is due to the higher refresh rate of the screens that I am working on, but no matter the reason, the 32 Hz (31.25 ms) repeat rate with 250 ms delay was no longer cutting it.

I had to go faster. But how?

Salvation came from a completely unexpected source: FilterKeys. Traditionally, this is one of those options that any person who games will want to look at immediately because of the triggering shortcut: holding the shift key for 8 s, an action that will often happen when one is trying to run for long periods of time in an FPS. FilterKeys when activated normally are bad for the reason that they tend to drop extra keystrokes as part of their accessibility slant---it allows people who have unsteady typing to have longer delays in between the emission of key code events to allow their slower finger movements to not generate spurious characters especially in typing.

But FilterKeys have a dark secret: they actually provide a means to fine-tune keyboard-related settings down to millisecond precision. And because of that, I have been using the following registry tweak to obtain my favoured typing rate:
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\Accessibility\Keyboard Response]
"AutoRepeatDelay"="188"
"AutoRepeatRate"="10"
"BounceTime"="0"
"DelayBeforeAcceptance"="0"
"Flags"="59"
"Last BounceKey Setting"=dword:00000000
"Last Valid Delay"=dword:00000000
"Last Valid Repeat"=dword:00000000
"Last Valid Wait"=dword:000003e8
The delay is now set to 188 ms instead of the 250 ms lowest value available, while the repeat rate is set to being every 10 ms (100 Hz) as opposed to being every 31.25 ms (32 Hz); a 25% shorter delay with slightly more than 3× the repeat rate---this is extremely noticeable. It really makes my typing much more comfortable than before.

That would have been the end of the story for today's post, except for one thing: there were some games on Steam that mysteriously destroy my keyboard settings after I exit out of the game. I could restore the typematic rate, but it would require me to log out and back in again to effect the changes that were in the Windows Registry. The notorious game that kept giving me this problem was N++. It was very problematic because I liked to play N++ in short bursts instead of having a long marathon session as a means of relaxing in between through a paradoxical hyper-concentration process on something completely unrelated. It started to get old each time this happened, and eventually I was annoyed enough that I uninstalled it from Edythe-III and never installed it on Eileen-II at all.

Unfortunately, my favourite game, Jupiter Hell started showing similar symptoms recently. I didn't want to have it go the way N++ did, and wondered if there was a more direct way of making the change happen without having to log out and back in again. It led me to the SystemParametersInfoA() Windows API using SPI_GETFILTERKEYS/SPI_SETFILTERKEYS with associated information set in the FILTERKEYS C-struct. I wrote a simple bit of C++ code and compiled it with g++ in Cygwin, where I had my Win32 API headers installed. The first thing I did was to use SPI_GETFILTERKEYS to probe and output the information for FilterKeys both before running Jupiter Hell and after to see if my hypothesis was true.
And yes, the probe program proved that the FilterKeys settings were nuked after running.

I brought it up to Kornel, and we had a discussion about it. Turns out that the upstream library used to support the changing of keyboard typematic rate from within Jupiter Hell did not actually preserve the original settings due to various technical reasons, and there were some strange Windows-based fuckery that would randomly trigger off the keyboard-related accessibility options. There was no obviously elegant way of solving this in a portable fashion in time for the full release, and a quick fix which nuked all accessibility options was done to ensure that most people would not be affected by it.

Converting the probe program into one that would set the values that I wanted was quite straightforward---the only thing left was to see if the changes would stick. I mean, it's so straightforward that I can put the code (with my personal settings as talked about earlier) here:
#include <windows.h>
#include <winuser.h>

#include <iostream>

int main(void) {
  FILTERKEYS filterKeys;
  BOOL fResult;

  filterKeys.cbSize = sizeof(FILTERKEYS);
  filterKeys.dwFlags = 59;
  filterKeys.iWaitMSec = 0;
  filterKeys.iDelayMSec = 188;
  filterKeys.iRepeatMSec = 10;
  filterKeys.iBounceMSec = 0;

  fResult = SystemParametersInfoA(SPI_SETFILTERKEYS, 
      sizeof(FILTERKEYS), &filterKeys, SPIF_SENDCHANGE);
  if (fResult) {
    std::cout << "Success." << std::endl;
  } else {
    std::cout << "Failed." << std::endl;
  }

  return 0;
}
I compiled it, ran it, and double checked with my probe program. It works perfectly.

So now I have a perfectly working workaround to handle this issue without having to do the log out/in dance. And so, N++ has been installed on Eileen-II now.

I think that's all I have for today. Till the next update.

Tuesday, August 17, 2021

Dust and Fine Ash Everywhere

So, I'm running a headache now. Not sure why, not sure how.

But I've gotta write an entry for today to keep that streak going. So here goes.

I bought the HATTEFJÄLL office chair back in March. And it was only yesterday that I realise the back of the chair had five different height levels that could be triggered through a ratchetting process that involved lifting and releasing it. It was in the manual---but somehow, I think I didn't remember that bit at all.

That would explain why I was feeling really strange back discomfort, and why I could suddenly rest my head on the top of the back-rest.

🤦‍♂️

I was working on Eileen-II today when I started to hear some crazy mid-frequency vibration. There were only two things that moved within Eileen-II---either the left fan, or the right fan. I was afraid that something bad would happen, and so I quickly powered down and unplugged everything, before bringing out my screw driver to open up the rear.

As expected, there was fine dust on the fans. They were not clogging them to the point of non-movement, but since these fans were super efficient, any amount of disruption of their balance would cause loud and unnecessary vibrations. I cleaned it up with some cotton buds and isopropyl alcohol and put everything back together. Eileen-II has been operating really quietly ever since.

This was not the first time that such dust caused the vibrations. I think the last time that I had to clean things out was maybe about 6 months ago, while it took nearly eight months before I had to do that before.

I think there were two big contributions to this slightly more frequent occurrence:
  1. There has been more construction-related things, as well as more incense burning as somehow some folks decided to set up some altar at the void deck under my block that wasn't previously there before. That latter meant that there were now three incense burners diagonally opposite from my window which were used to burn incense into some fine ash that would eventually blow into my room, as is the concrete dust from all the drilling. All these would eventually make their way into the fans through normal operation.
  2. I keep switching out between placing Eileen-II flat on the table, and on legs, using the latter for all the situations where I would not be typing for an extended period. All that means that there was always movement which angled the fans in one way or another, which led to the layer of fine ash/dust getting more jostled about. That jostling could create the situation where some of the dust falls just in the wrong angle and upset the balance of the fan blades, giving that awful vibration noise.
There really isn't much I can do about all these---even when I was rocking a desktop, dust was always a problem. I can't stop people from burning all sorts of incense, and I do not know why people are suddenly setting up random altars at the void deck when there had been none over the past thirty years. I don't even know how such altars are allowed to exist in a common area that is not a designated Residents' Corner. I don't even want to get into the whole spiel of why people think it is a great idea to burn all sorts of incense that smoke like crazy immediately under an apartment block, where the wind will blow the smoke into the apartments themselves.

All I know is, my eyes are drying up, my nose is shot, I have a headache, and my laptop's fans were clogged with dust/ash that had to be cleaned out.

Till the next update.

Saturday, August 14, 2021

A Manual Would Have Saved Me 6 Months of Time

I managed to play with a cat within the past day or so.

All's well with the world.

------

In other news, I've been an idiot. I kept on complaining about how Eileen-II was always running too bloody hot. I started with undervolting (correct thing to do, though the undervolt offset was best applied uniformly across all applicable components instead of just the CPU for stability reasons), then started messing with the Turboboost ratios at 100% load (sketchy) while keeping an eye on the temperature, then messed with EPP values which lowered the temperature but introduced lag spikes/stuttering from sudden downclocks, before starting to use the alarm function in Throttlestop to trigger a much cooler profile setting while simultaneously using the original (but undervolted) turbo-ratio options.

Mind you, I was trying my hardest to ensure that the sustained temperature did not heat up the keyboard to an uncomfortable level. That was empirically determined to be about 85°C two months ago.

After one bloody big round, I just realised this little item hiding in the corner of the Options screen:
Oh my, what is this I see? PROCHOT Offset?

That's the bloody option to set the temperature threshold from which the CPU will auto thermal throttle. In this case, it is technically the number of degrees Celsius lower than 100°C that the processor is allowed to reach before it will be forced to thermal throttle.

🤦‍♂️

That would have solved all my stupid problems without doing so much crazy stuff.

Anyway, after discovering that, I applied it, and did some additional adjustments and associated testing of the parameters:
  1. From experience, the PROCHOT value does trigger maximum sensed values about 7°C higher than the actual threshold(!), so for the default value of 100°C, HWiNFO64 does show a maximum CPU package temperature of 107°C; I'm not sure why this is so. Thus, the PROCHOT Offset is set to 20, which is equivalent to saying ``throttle if we exceed 80°C''. Empirical evidence shows that the 10-minute average of 500 ms temperature samples were steady at around 80°C, with very rare spikes of 87°C as predicted.
  2. I've set the AC Timer Resolution to 1.00 ms so that the CPU can adjust its clock speed much faster to avoid triggering that higher-than-expected temperature. Since it only applies when plugged in, the cost is negligible.
  3. I am still using the Alarm (and by extension, the higher poll rate for Throttlestop). I did adjust the settings so that it will trigger off at temperatures at 90°C or higher, using a new setting that basically just disables Turboboosting to allow the CPU to cool down faster.
  4. I pushed the EPP down to 16 (instead of 32 as noted last time).
  5. Thermal Velocity Boost is completely disabled across all the profiles since there really isn't any thermal room for it; that way we don't waste time for the CPU logic to do crazy ramp ups only to ramp down before ramping up again.
The result of it all is much better average performance with much better thermal performance.

Man, just what have I been doing all these while?

In defense, it's not as though Throttlestop has a reference manual or something. The features may exist, but there is little to no explanation of what they do. Each time I make an update here about something else I did came about because I stumbled upon some forum post that described the feature with enough detail for me to learn how it affects both the temperature and the performance accordingly.

Now, the use of PROCHOT Offset means also that I can, in theory, run Eileen-II without using some standing legs. However, a test of running Grim Dawn while watching Ina's Minecraft stream in Waterfox showed that the 10-minute average of 500 ms Core ratio samples was around 19×, while doing the same with the standing legs for ventilation reached 24×. Note that while both numbers are much lower than the base ratio [of no more than 26×], the ventilation did improve the thermals enough to allow a 26% increase in clock speed. Of course, clock speed isn't everything (actual processing load is also as important), but empirically from within Grim Dawn, it was a difference of about 10--20 fps. So yes, the ventilation did make a substantial difference.

Alright, that's all for now. Till the next update.

Monday, August 09, 2021

Sometimes ``Default Setting'' is the Best Setting

Let's begin with a confession. I've been an idiot with regards to trying to control the thermals of Eileen-II. I had focused so much on the CPU side of things that I cleanly forgot about the GPU side of things, despite commenting before on how both those two share the same cooling system.

The thing is, I had tweaked too much of the Nvidia Control Panel settings to the point that the GPU was always running at maxed out clock speeds all the time, regardless of the associated workload. This is a terribly inefficient use of the available power into the system, and has a tendency to continuously generate excess heat that needs to be dissipated. The sad thing is that it is not as though those tweaks were improving the overall throughput of the rendering by much.

And so, I decided to reset all the settings to default and just tweak the FPS limiter to keep it at 142 fps (compared to 144 Hz screen refresh rate). I tried running Grim Dawn, Minecraft (with Optifine on default shaders), and Halo 4.

The thermals were significantly lower, with nearly the same performance as expected---we're talking about idle temperatures of 37--42°C (compared to the 50--60°C prior for the GPU), and 35--42°C for the CPU (compared to 50--70°C prior for the CPU). My first attempt prior to the default setting was to tweak the power management setting to adaptive while leaving all the other tweaked settings in place, but it ended with a hard crash---I was miffed and decided to apply the most reductionist thing I could think of, having remembered the observation that people have a tendency to want to add more [constraints] to improve something, instead of taking things away.

I had also turned off the Alienware overclocking [of the GPU]. That additional 50 MHz wasn't really going to help do much considering that the GPU clock rate could already peak out at 1.9k+ MHz without that over-clocking (while idling sedately at 300 MHz under a power-optimised setting).

The only draw back from the original 142 fps limitation was that when Grim Dawn's visuals got sufficiently hectic, there were some serious lag spikes that dropped the frame rate to about 40 fps---I mitigated that by setting the limitation to 164 fps to give enough head room to handle the spike better. My very first frame rate limitation was set to 288 fps, but I dropped it down to 142 fps to avoid having to use VSYNC, before switching to 200 fps. The final selection of 164 fps was the observation that for Grim Dawn, even the most sedate scenes didn't bust the 170 fps consistently; it was more like 165 fps or lower.

Setting the frame rate limit is important. For one, it avoids destroying GPUs through bad programming in game or bad components in GPU since it provides the final ``hard'' limit to prevent the scenario of unbounded workload application. For two, setting a frame rate limit higher than the screen refresh rate improves input latency since the input processing [that leads to the rendering of a frame] is more frequent, making any interaction register much quicker than otherwise. VSYNC isn't needed when the screen refresh rate is this high, because any tearing that may occur can happen only in the reciprocal of the refresh rate---so, for my 144 Hz refresh rate, the screen tear occurs for a duration of 7 ms, as compared to the 17 ms from a 60 Hz refresh rate. 7 ms is a really short amount of time, and in this case it is less than half the duration of the 17 ms that happens in a 60 Hz refresh rate screen, which is already considered a gold standard for console-gaming---it's basically negligible.

So with a sufficiently screen high refresh rate, VSYNC is basically obsolete, and with a powerful enough GPU, the latency can also be reduced through setting the effective computational frame rate higher than the screen refresh rate.

But back to thermals. I've not seen such low idling thermals on Eileen-II; I have seen something like that for the PC that I built for mum, but to be fair, a PC has much better cooling characteristics than a laptop even without any special effort to do so, simply because there is so much space for heat to move out by convection via the mass of air that can flow through.

I'd still float Eileen-II to improve air in-take when I am doing more heavy processor usage (like when gaming) though---it's just a good idea in general whether or not I have improved the thermals through not being an idiot.

------

Anyway, today is National Day. Yay. We remember SIN city's independence some fifty-six years ago. Everyone virtue-signals through their colourful patriotic display of wearing red and white (while not hanging out flags at their windows outside of their apartments), talk about how SIN city is awesome, and show off the little liberties that they have taken on this public holiday to celebrate the occasion.

And then when tomorrow comes, it's back to cussing out everyone else's stupidity, the confuddlement of policies, and the capitalistic tendencies of SIN city in lieu of taking care of its citizens.

That's all I have for now. Till the next update.