Saturday, September 11, 2021

The Bible is OG Open Source

Ah, evening time of yet another day. What shall I write about?

I finished reading After the Absolute: The Inner Teachings of Richard Rose by David Gold, and Bart Marshall. It is thought-provoking, but in a ``here's a negative example'' sense. Did Gold achieve the enlightened state that was indicated in the early chapters when he first met Rose? Close, but not quite---he did receive hints about what the Absolute might look like, but either through being unready or unable to express it in words, it comes out as being incomplete. More importantly, while the book is subtitled ``The Inner Teachings of Richard Rose'', it must be understood in context that it is one person's understanding of what Rose was trying to tell him. The book references The Albigen Papers by Richard Rose, which is the first set of papers published by Rose about his philosophical findings, which as a primary source may be better for understanding purposes than the secondary one that is After the Absolute.

It did get me thinking though, in a good way. Gold in the book is very similar to MT in the flesh in terms of an internal struggle between finding meaning in life, and having skills that society may find useful that can offer an attractive pay-off. What is different is that Gold in the book is using esoteric practices from a mystic to seemingly find his way to spirituality, but MT is relying on the more mainstream-y teachings of the Christ and His disciples to find his way. Third person naming nonsense aside, I believe and think that there are many important lessons that can be learnt from the Bible, and considering that it has many adherents, has a slightly lower chance of ``going off the rails'' as compared to a truly esoteric system. In addition, the basic premise behind Christ's teachings guarantees strongly that faith in [the Triune] God alone was sufficient for the salvation of the soul, which means that soul-death is averted. What remains then is how one nurtures the soul (ours, as well as other believers') through the mortal living that we all must go through.

That said though, despite there being ``one'' Bible (the one is loose here because some might argue that the different translations ought to be counted differently for a variety of reasons), somehow there are seemingly many different interpretations of it all by large enough groups of people to splinter off into their own sects and denominations. It's a little... confusing, to put it mildly. However, having the source texts available makes it much easier for one to discover the truth for oneself---ironically, the Bible can be considered as the original ``open source'' movement. Sure, there can be many forks (translations) to suit different purposes, but with modern communication technology, it is possible to quickly cross-reference among the versions with application of textual analysis in context to figure out what the true meaning is.

This differs greatly from esoteric systems, since most of those systems feature writings/teachings that are secret in nature. The problem with secrecy is that there is no way of ensuring that the transmission of said knowledge has not been corrupted over the generations, or if they were even coherent/correct in the first place. Esoteric systems are also very personality tied, with their survival and propagation strongly correlating to the individual person's charisma alone. To be fair, Jesus Christ Himself is also a pretty charismatic dude, but His teachings were not really hidden away like some kind of secret---one of the tenets of the Great Commission from Him is to spread the good news to people, to let them know that salvation of their souls from death is already at hand, as the Messiah has already come and died for their sins, and will return again, as long as they believe that Jesus is their personal saviour.

Again, open source principles at play here.

Anyway, getting back to After the Absolute. I would say that it is an interesting book on one person's journey of learning how to see reality beyond what I have been calling the shared hallucination of value within the material world. I might want to read The Albigen Papers just to put whatever Gold wrote into perspective, and possibly carry out some kind of comparison against the Bible in terms of the lessons found (considering that God is Creator of all, I expect Rose's words to be a different projection of the same reality that the Bible is trying to express and teach).

It's really funny how the old B3 grade from my `O'-Level English Literature becomes relevant in my life again. Coincidence, or providence?

You decide.

Smaller Distribution File for the Compiled pbarwin.cpp

Just a quick update.

I've changed the way I built pbarwin.cpp for creation into a usable binary to reduce the number of distributed DLL files to just one cygwin1.dll. This helps with the licensing terms which refer to what can/cannot be distributed.

It also reduces the file size of the ZIP archive that I created, which is a win.

The key idea was to statically link the dependency libraries. Doing that dumbly in g++ though meant an impressively large file [of 11+ MiB for a program of such little functionality], so there was a need to also tell the linker to strip the file down. Doing that led to a more palatable file size of less than 850 kiB.

Surprisingly, run-time doesn't seem to be affected based on my unrigorous testing.

That's all for this quick update. Till the next one.

Friday, September 10, 2021

Release of pbarwin.cpp With Showing Wear Level

I talked before about how the source for pbarwin.cpp was too long to dump out.

Well, that problem has been solved. I just released it on my website instead.

The last time I wrote about pbarwin.cpp, I talked about how I fixed the indicator mechanism as well as incorporated a run-time/charge-time estimator. This time, I added one final bit of information that I had been mulling about for a bit: an indication of the wear and tear of the batteries involved.

The idea here is that from the BATTERY_INFORMATION structure, one can use DesignedCapacity and compare it to FullChargedCapacity to determine the associated wear-and-tear from the difference between them. Since they are returned by the same API call per enumerated battery anyway, there is no added cost to obtain the information. The problem then reduced to how to present that information.

My initial idea was to provide a numerical output per battery to show the proportion of the full battery was available for use, modified by the existing gauge. So a battery with a full charge (i.e. 100%) with the FullChargedCapacity being 80% of the DesignedCapacity will be shown as [%%%]x0.8 in the output. The larger capacity gauge remained unchanged and showed the percentage that would be equivalent to what Windows reports.

But I didn't like it. It gave good information, but it was using up too much horizontal space for too little information. It also didn't translate well from a visualisation perspective because I was mixing a graphical gauge against a numerical one to make sense.

And so I went back to the metaphorical drawing board and rethought things a little.

I settled upon the idea of adjusting the gauge itself to show all the different capacities. The idea is that the whole gauge would use DesignedCapacity (since DesignedCapacity ought to be the largest value that the battery can be in), then FullChargedCapacity is a fraction of DesignedCapacity to form an ``inner'' gauge, followed by using Capacity from BATTERY_STATUS structure to fill up the gauge.

That was the easy part.

The difficult part was how to figure out what to pad the decreased gauge bar with. My original concept was to just drop the right gauge end character `]'. But it looked bad. I mean, [%%%%%%%%]]] just looks wrong. I didn't want to use the character for the ``empty'' part of the gauge (`-'), and played around with other characters before settling on `:'. I liked how it looked. I also adjusted the per-battery miniature battery to span 5 spaces instead of 3, so that the wear level can go at 20% levels instead of the much larger 33%.

Anyway, here's how it looks like now:
As I mentioned earlier, I released the source on my website, and also included a convenience package which included the Cygwin DLLs. I had tried to recompile it for Windows using Visual Studio, but I immediately ran into yet another Windows fuckery---windows.h redefines max() using a pre-processor macro.

🤦‍♂️

The fix, mercifully, was simple. Shove the line #define NOMINMAX before including windows.h. This means that the magic incantation needed is now:
#define NOMINMAX
#include <windows.h>
#include <winbase.h>
#include <Setupapi.h>

#define INITGUID
#include <guiddef.h>
#include <devguid.h>
#include <BatClass.h>
I also had to resolve a linker issue, but the details on how to do so can be seen in my website.

What was funny was that the ``native'' compilation of pbarwin.cpp did lead to a smaller file (about 19 kiB compared to the 190+ kiB one from Cygwin), but it ran about an order of magnitude slower in comparison (about 110+ ms versus the 40 ms).

And so, I think I might have run out of things to update pbarwin.cpp. I mean, I could start taking into account other factors like CriticalBias, DefaultAlert1, and DefaultAlert2. But they aren't as useful, really.

------

In other news, I've started reading After the Absolute: The Inner Teachings of Richard Rose by David Gold, and Bart Marshall as well. It's too early to tell if it will be a thought-provoking read yet, but early indicators are good.

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

Thursday, September 09, 2021

No Thoughts; Head Empty

Just an obligatory entry to keep up the streak.

It was a quiet day that just passed. I didn't worry myself with thinking about the corrupted world and the uncertain future. I chopped trees in Minecraft, started reading The Best of BYTE: Two Decades on the Leading Edge edited by Jay Ranade, and Alan Nash, and had some Mee Rebus for an early meal, watching various Hololive-EN videos in the background at 2× speed.

Now I'm waiting for Reine's birthday stream to start.

That is all. Till the next update.

Wednesday, September 08, 2021

Words That Work

I completed reading Words That Work: It’s Not What You Say, It’s What People Hear by Dr Frank Luntz earlier today. It is an interesting book, to say the least, since it can be read in one of two ways; either as an exposé for a spin doctor, or as a much needed supplement for effective communication, right next to the manual for good technical writing.

It also confirms what I have eventually discovered on my own throughout my working life, though I cast it on slightly different terms.

The subtitle of the book succinctly summarises the main point of the book:
It's not what you say, it's what people hear.
My own version of a similar lesson is that one needs to speak things using the context and framework of whoever is listening to get the point across. So when speaking with a business development manager, technical merit means nothing compared to how it affects costs and revenue; similarly when talking to the more academic types, it is less about whether something is practical now, but whether something has eventual practicality, with novelty being the key focus in the short term.

It's one of the things that I taught my intern back in the day as well, using a more extreme example: just because someone doesn't speak the same language as you doesn't mean that the person is a dummy, conversely if one's mastery of the language being used in communication isn't fluent enough, people will assume that one is a dummy and have nothing useful to say.

Language is needed only because we need to share our ideas with other people. Well, not just language really; language alone allows transmission of information, but it still requires an agreed upon logic system in order to convince someone else of the information that is being transmitted.

Words That Work focuses more on how certain choices of words can make/break one's intent, with examples largely drawn from the corporate and political fields where the author is active in. We can call it spin, euphemism, obfuscation, or even manipulation, but those are largely projections of our own morals upon what is essentially about effective information transmittal.

In many ways, a successful communication of a piece of information can be argued to as something that may change a person's mind on something, since it can be positively seen as a means of updating the inner set of facts/evidence to correct any existing opinion that was less well-informed. As sleazy as some of the most effective users may be, I cannot deny that the principles thus outlined within Words That Work are sound.

At some fundamental level, as long as one isn't outright telling an untruth, any other form of expressing a particular attribute/situation with words necessarily chooses a certain context/framework to project it in. Some contexts are more positive in nature, while others are more negative, and it really behooves the person doing the communication to choose the one that best encompasses what he/she wants the outcome to be.

On the receiving end of it all though, knowing that anyone who seeks to communicate often has reasons to want to communicate, and knowing how they might choose certain words can provide one with more insight to the true intent and to determine if it is truly an attempt to inform using a context that is best suited for comprehension, or if it is an attempt to sow fear, uncertainty, and doubt.

Personally, I don't really like to have all my writing to be of the form that reeks of spin---much of the world is complex, and trying to simplify them just to get the right sound bite might be too much to ask for. There are some forms of writing that ought to be at that level of simplicity, the so-called ``high-level concept to obtain buy-in'' type of writing. But beyond that, specific procedural details do matter, and need to be articulated as such. In literary writing too, brevity might convey the action better, but not all literary writing is about the action alone---sometimes it is about the nuances and subtlety of the inner state.

In short, there's a place for each type of register of writing, and it is important for us to learn them all, including knowing when to apply which.

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

[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.

Tuesday, September 07, 2021

A Prayer for My End

Dear Father in heaven, hallowed be your name. Your kingdom come, your will be done. When it is my time to go, I pray that it will be swift and painless for me---the living dead can mourn and fight over my mortal remains and possessions while I move on towards your heavenly kingdom as the faithful are wont to do.

Amen.

Monday, September 06, 2021

Minecraft

If you're looking for some deep entry today, well, too bad---no deep insight of any sort today.

I built a 2.7k+ block railway bridge from my base in Minecraft westwards towards the Deep Ocean biome with the intention of building a mob farm, and doing some other exploration. I've been playing Minecraft single player on and off for a long time, but this was the first time that I had built something that used rail mechanics. I play on a local server, spending most of my time in survival, but with some creative liberties just to improve my quality of life and have fun instead of tedium, like not having my inventory dropped on death, or low-key aesthetic choices like block-lighting sources (Jack o'Lantern) for safety, and sand for smelting into glass for use to seal off the lava in the underground to form lava ceilings/floors as I dig out a 3-block high layer out. Other than that, everything else are from regular mining/smelting/farming activities.

I had recently migrated my Mojang account for Minecraft off to the Microsoft one, and it was... annoying, to say the least. I really don't like having so many things that are getting tied to specific [e-mail] accounts of one company---it concentrates risk into one place, and considering just how nonchalant many of these companies are in the way they handle false positives of whatever their fraud-detection algorithms go, I feel justifiably worried.

I mean, why should my single-player game behaviour be tied to some other multi-player game, or more drastically, why should a false report from fraud in a multi-player game penalise me through removing access to all of my single-player games, or to even up the ant&eactue; even more, removing access to software tools that are not game related that were mercilessly tied to the same account? It's definitely a worse form of justice than whatever we get from the regular governmental kind because such private and proprietary systems are a law unto themselves that have, so far, resisted attempts to be controlled by the lawful government.

I'm not saying that I want to be have all kinds of rules crammed down my throat. I'm saying that between facing enforcement from an entity that is unaccountable by virtue of being a private platform versus one that at least has a social contract agreed to by the electoral population, I would rather take the second over the first.

It's scary because more than ever almost everything that is of value that we use these days are no longer hours---that rental mentality has gotten itself much more deeply embedded within our consciousness over time. No longer do we ``own'' our things---almost everything is a rental. It's easy to see this for digital goods like e-books, videos, music, and games, but it is also catching up with the durable goods as well; the more ``smart'' that durable good is, the more likely that it will operate under a rental model.

Like why does my refrigerator need access to the 'net for? ``Internet of Things'' for my refrigerator to auto-stock up on things via delivery as a possible use case? ``Firmware updates'' for my refrigerator?? Why would my refrigerator, the product of more than seventy years of innovative life time, suddenly need the control mechanism of its being, i.e. the ``firmware'', to be updated? It is as though when we shove the ``smart'' moniker on a durable good, it suddenly loses all its operational stability from the days before it got ``smart'', and requires even more kid's gloves to handle.

That isn't progress. That is regress.

That's part of why I want out of the Infocomm Technology industry. We are peddling all manners of snake oil to everyone. There aren't many things that are done that actually improve life-styles---if anything, every new ``innovation'' increases the number of shackles we are slapping on ourselves to be further tied to the corporations. I love computer science, but I hate how the power of automated reasoning (and automated actuation from the mechatronics counterparts) gets abused to enslave humanity once more.

It's like that apocryphal story of the capitalist who was talking to the fisherman who was returning from his fishing with a bucket of fish, whistling a tune while looking at the sunset. The capitalist was talking about how the fisherman was wasting his potential, and how the latter should fish beyond what he needed so that he could buy more boats to fish, then form a company to run a fleet of fishing boats to make more money, so that in the end, he could just relax. To the gradiose statement made by the capitalist, the fisherman merely replied ``Isn't that what I am doing now?''

Some might think me nuts to suddenly decide to follow in the path of Jesus as a believer. But Jesus never tried to sell me snake oil, telling me to enslave myself to make a lot of money so that I can retire in comfort. Hell, even God in the Old Testament made it clear that even when He was providing [manna], each should get only what they need and no more, even actively punishing those who disobeyed. Work still needs to be done to earn one's keep---it is just good for society in general. But to be overworked, and have a lifestyle whose upkeep requires ever increasing amounts of resources to maintain... that's just Not Right.

That's enough out of this windbag for now. Maybe I'll play another couple of maps from Serious Sam 3: Before the First Encounter after my shower, or maybe more digging in Minecraft while watching some Hololive videos on YouTube in the background---I haven't decided which yet. Till the next update.

Sunday, September 05, 2021

Moving from Evil to Good

Ideally, be not evil---be good instead.

But sometimes that is not practical, because it involves too large a change to be acceptable. Hence Jesus' statement in Matthew 19:23--24 (ESV):
23 And Jesus said to his disciples, ``Truly, I say to you, only with difficulty will a rich person enter the kingdom of heaven. 24 Again I tell you, it is easier for a camel to go through the eye of a needle than for a rich person to enter the kingdom of God.''
But it is not completely hopeless, as even after that statement, Jesus follows up with pointing out that with God, all things are possible (Matthew 19:26).

But to put things into context, the rich person in the story was seeking for a definite ``almost instant gratification'' type answer after replying to Jesus on how he has been righteous enough thus far to follow the commandments that had been given since Moses' time. Since the question was posed in such a manner, the reply was just as straightforward: the ultimate pathway towards eternal life (or goodness in the face of God) is to walk away from the possessive ties of treasure of this world and follow Him into the next. What isn't obvious then is that the factor of time isn't taken into account, to a certain degree.

We easily interpret it as Jesus asking the rich man to dispose of all his possessions now to follow Jesus (who was then alive) due to the immediacy of the encounter, but as we now have the benefit of hindsight through access to the entirety of the Bible, we find that Jesus' explanation to the rich man is more of an instruction of the end-state while allowing us to be moulded over time by the Holy Spirit towards being more Christ-like in nature. In many ways, there seems to be an implicit acknowledgement that there is some internal personality inertia that needs to be overcome only with time and careful cultivation of the mind/heart that cannot be expedited. It is similar in substance to another non-biblical parable of a man asking a grandmaster how long it would take to master some skill, only to be told that it would take increasing amounts of time with increasing amounts of intensity as proposed by the man.

As a man of faith, I can see intuitively how Jesus' words make sense. As a man of science, I wonder: what is the nature of this internal resistance that can only be overcome through a measured application of effort over time? What are the mechanics that control this? Are these mechanics peculiar only for the mental system, or is it something that is more universally applicable to systems in general?

No answers, just questions for now.

But going back to the initial statement, it is always possible to move from evil to good, but the practicality of it has always been correlated to the amount of time that one puts into it. The longer the time frame, the less per-unit-time effort (or change) required. The total amount of change necessary to steer from evil to good is still the same, but the longer time frame introduces less strain into the behaviour of the system as compared to some kind of crash course. Being saved from God's eternal indifference is a one-time affair through the belief that Jesus is the Christ and is one's personal saviour, but living up to the standards of being God's child is always a work in progress as long as we are still living with our mortal coil.

I don't have anything else that I might want to add for now. So I will end here. 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.

Friday, September 03, 2021

Final Touches to pbarwin.cpp

The day's only half done, but I feel a little more accomplished than before. I took the battery information code that I put together yesterday and enhanced it a bit to use only one of the two APIs that I was using before (specifically just the one for enumerating battery devices), and to bring back some of the other features from aeons ago that involve generating estimates of time-left (while discharging) and time-to-go (while charging).

I also reworked the logic for various indicators, since I had access to individual battery information, thus allowing a better control over what to display. Specifically though, I was annoyed at the discrepancy that was showing up even in the screenshot from yesterday's post. With the better refinement, I think I have probably dealt with that discrepancy adequately.

And that's about it for this program for a while. It seems to me that during this entire sabbatical thus far, I have steadily fixed/updated the various tools that I have built over the years for whatever things I had. Non-exhaustively, I have:
  1. Changed layouts and updated the fonts for my blogs while making them mobile friendly;
  2. Update fonts and colour scheme for my personal information domain
  3. Fixed and updated navigation for the same;
  4. Set up a proper sitemap.xml generator for the same;
  5. Updated my build-to-publish processors for my website to also be faster;
  6. Created a tool that lists the number of pages among my e-books;
  7. Enhanced my reading list/read list estimators;
  8. Fixed auto-detection of terminal background colour to use the correct .vimrc settings;
  9. Fixed the typematic rate problem; and
  10. Sped up+enhanced the command line battery information.
I am naturally quite pleased with the productivity here. I still haven't done up the diagrams for the 笛子 Materials articles yet, but that's a different story for a different day.

All in all, a good sabbatical from the personal productivity front.

As for the introspection for the way forward, that one is a mixed bag so far. I learnt that I really didn't want to have children, and I am starting to wonder seriously if I am truly happier being single than if I were attached. I am also debating heavily internally about whether to continue the path of the corporate wage slave, or to be freer through bowing out of the rat race completely.

I have, at times, wondered to myself if I should give up on music-making as well. Even if I were talking about something community-based like serving in the music ministry, my staunch ``I'm not going to take a bloody certificate for music that I do as a hobby'' stance is going to disable me against the multitude of graded musicians and music degree holders. And going back to my roots of the community Chinese Orchestra, I don't even know if we are getting back together at all, seeing the lukewarm/cold response so far. At times I'm wondering if it is just an attempt to quietly let it die away amidst this convenient excuse of a pandemic restriction as our quiet community special interest group gets eclipsed by the better funded troupes with their professionally-led committees.

It's the start of the last third of my sabbatical. I will need to have some better answers than what I currently have right now, and I just wonder how I will get them. May God grant me wisdom to learn of what is to be done. Amen.

Thursday, September 02, 2021

On the sloc...

By the way, sloccount said that pbarwin.cpp was 189 sloc, compared to the 204 sloc for pbarwin.py. Note that the sloc unit here is based on physical source lines of code. Since it is physical lines of code, take it for what you will---the numbers are small enough to be within the margin of error anyway.

I didn't set it up in my Cygwin environment; instead, I had fired up my Ubuntu Server virtual machine and just run it from there. I didn't have time to do it earlier because I was rushing off to meet up with YT.

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

Command Line Battery Information Finally Returns!

Well, I'm on a roll. Ever since I wrote that short program that auto-resets my typematic rates via Win32 API, I felt this urge to do something similar for a long-standing problem. But before I get into that, let me go back a few steps.

If you'd look carefully at this ancient entry from 2007, you would find that there's a weird cyan-coloured line in the console box in the lower left corner. That cyan-coloured line is the command-line output of the battery status of the laptop that I am running on. I find it necessary to have something like this for the simple reason that my taskbar is always hidden up in the top, which means that the notification area's battery information hardly ever shows up.

Combine that with me using console screens in near-full screen most of the time, its clear that I don't really get to see the battery status (or the time, for that matter, which explains the whole showing of the local time in rule aspect of my .vimrc file).

In the old days [in Cygwin], I could easily access battery information through the /proc/acpi/battery path, and parsing the information there using Python2 to generate what I wanted. This had two big advantages:
  1. Ease of access of information without doing strange things; and
  2. General portabiliity across both Cygwin and regular Linux.
Those were important back in the days where I dual-booted between Windows XP and Linux (Slackware).

The portability aspect diminished over time as I reached into the era of Windows 7 due to the use of virtual machines to run the Linux environments that I needed to get work done. It also coincided eventually with the removal of the /proc/acpi/battery interface in Cygwin, which gave me the problem of how to get the battery information to generate that information bar.

The answer was to use the wmic command, specifically the incantation:
wmic Path Win32_Battery
This incantation is a Windows-only way of obtaining all battery information within the system to stdout, after which it was just a case of parsing the returned text to generate what I needed. Since it still involved parsing of text, I used Python2 (and after that, Python3 since Python2 was no longer supported past 2020-01-01), with the difference that I would use a system fork() to execute the wmic incantation to receive its stdout process to operate on.

It worked. Sort of, in the correctness kind of way.

Truth is, it was slow as hell.

Since I was doing this every time the command prompt shows up, the noticeable delay was getting annoying. To be fair, it wasn't showing a multi-second delay, but it was definitely of the right order of magnitude to feel sluggish. Recall from yesterday's entry that 250 ms is sluggish in my book, that was definitely a no-go.

For the longest time then I had just turned off that functionality. It annoyed me of course. There was only one way to solve this, and it was to write an actual program using the Win32 API to do the query and output it all out without having to undergo all these crazy overheads of fork()-ing and then parsing [unnecessary] text when everything can be obtained in the compact binary way.

To me, using Win32 API used to mean ``install the gargantuan nonsense that is Microsoft Visual Studio, and go through the messy-ass process of defining an entire project just to compile one file''. But after yesterday's experience, I found that I could get away with it by just using g++ on Cygwin, with the Win32 API headers/libraries installed of course.

Unlike the FilterKeys code yesterday, this one is not that straightforward enough that I could just dump the source here. Briefly, I will describe what was needed:
  1. For general battery information (needed for the overall battery status), the GetSystemPowerStatus() API was all that was needed, and this one is easy.
  2. To get the individual battery information, it requires a messy-ass enumeration of the battery-class of devices with a lot of associated dereferencing. The general skeleton can be found in this MSDN documentation.
  3. The documentation is incomplete though, since it doesn't specify what headers are needed. On Cygwin, it turns out that one would need the following incantation to work:
    #include <windows.h>
    #include <winbase.h>
    #include <Setupapi.h>
    
    #define INITGUID
    #include <guiddef.h>
    #include <devguid.h>
    #include <BatClass.h>
    Don't question it---I spent time figuring this nonsense out from source-delving and what-not.
  4. Finally, the compilation process requires the linking of an additional library, the incantation being:
    g++ pbwarwin.cpp -lsetupapi
    Compare this to the FilterKeys code yesterday that didn't need anything extra.
And with that, I finished writing the program and did a quick test.
That's a one-sample estimate here, 220 ms for the wmic fork version in Python3 versus the 47 ms in this C++ program. That's nearly 5× faster, and even lower in latency than the 188 ms delay for my typematic rate.

Needless to say, I am pleased as punch at the success. In terms of stupid line count (I don't have sloccount set up heere), they are roughly the same at around 260+ lines, but the overheads are completely different, which result in this much improvement. There is also a subtle improvement here in the new C++ code: it generates detailed battery information for exactly the number of batteries that are present in the system, unlike the old version where I had to make some assumptions and hope for the best since there was no indication on the number of available batteries based only on the wmic output.

And so, I can now merrily have my battery information back. 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 31, 2021

SMS Musing #15

In response to a Facebook post asking about opinions on musical instruments made in China on the Flute Forum:
Which country a flute is made matters less compared to the quality control (consistency of output) and standards of said quality control ("student" grade versus "concert" grade). We use brand names as a proxy to determine these factors, because the well-known brands have an established track record.

Well-known brands can still produce duds, though that is likely to be less likely than some brand that is lesser known. Remember also that all well-known brands have started their lives once upon a time as an unknown one.

The only sure way to know if a flute works well or not is to play it for oneself. Trade shows are a way for the companies to showcase their best work. If one is looking for a steady supply of instruments, then it is almost necessary to visit the factories themselves to determine the two aspects of quality control I talked earlier before making a decision.

For musical instruments using more organic components (like wood, or animal skins) the question is more layered. It is less about it being made in a country and more about the ambient temperature/climate of the factory of origin. Organic materials are a bit more dynamic than metals, and can be affected quite drastically in their preparation and treatment in manufacturing. In these cases, the quality of control aspect extends deeper into the material supplier as well.

It's turning into an essay here, so I shall stop for now. 😅 I'm not here to defend nor denigrate "made in China" instruments, but want to advocate a more informed decision making process as opposed to relying too heavily on mental shortcuts that uses stereotypes.

Monday, August 30, 2021

``Renewable'' Rant?

Everything is ``renewable'' in the sense that for most things at the energy level that we can operate in, the conservation of mass (both in macro-scale and in sub-atomic scale) holds. Now, whether it is ``renewable'' at the time scale of the human being/race though, that's a completely different story altogether.

The thing is, the matter that make up everything that we possess have more or less existed since the formation of the earth---what has changed in between the aeons is the arrangement of them within the space-time dimension. Low-levels of energy are often stored in the form of chemical bonds between the atoms in molecules, and much of life on Earth is based on manipulating these chemical bonds to release energy to create other chemical bonds to adjust the underlying arrangement of atoms within the molecules to achieve various outcomes which can include things like locomotion or even reproduction.

Generating ``arrangements'' is an intrinsically mathematical way of creating complexity. It is how we take the two elements of 0 and 1 to generate first the countably infinite, and with careful reasoning, to an uncountably infinite. The universe is basically mathematics applied over an extreme space-time-energy scale, and we are the product from all that, as is our predecessors, and our postdecessors.

In the grand scheme of things, we are nothing. So even if the Earth raises its temperature by another 10°C, or if the days grow longer due to the slowing down of the rotation of the planet, it literally does not matter---all the matter that has existed will still exist, with the only difference that the arrangements that are more meta-stable will be different from the ones that are currently meta-stable. This is just a infinitesimal sample of how the large-scale universe operates, and it really drives home the level of awe one should have for the One God who created it all---literally unknowable by us.

But back to the topic. ``Renewable''. As I said before, everything is ``renewable'', but not everything is ``renewable'' at a time-scale (and with intermediate states of system-transition) that is favourable to humanity. Science and engineering are literal baby-steps towards understanding how the bigger Earth system works, and we are always prematurely optimising via exploiting whatever limited science that we have at hand to gain that advantage. That's why we have things like asbestos, leaded petrol, chloro-fluoro-carbon coolants, and tritium, all of which were heavily exploited within years of their discovery before the detrimental aspects of their [uncontrolled] use surfaced. I don't mean that because of that, we should stop all forms of science/engineering, but rather, I say that since we have now more or less overcome the basic problems of survival, we should be a little more careful in terms of how we choose to affect our environment in general, with an overall sense of leaving enough of it unchanged for our future generations of humans to live in.

The tendency of using science and engineering to fix things has always been to add more things rather than to remove, which explains the strong inertia by large corporations that have largely benefitted from all that ``new'' added stuff. In many ways, capitalism has always been more of adding new things than actually solving anything---the answer to a problem is not to do less of an existing [money-making] activity, but to do more of something that seemingly mitigates the problem away. Synthetic plastics from the complex hydro-carbons from fossil fuels were seen as more hygienic and longer-lasting versions of their ``organic'' counterparts of wood/paper, and yet it is this longer-lasting property that is currently causing a lot of the harm, due to the general incompatibility between long-lasting and feeding the consumerism that enables capitalism to flourish the way it is.

Why bother fixing something when it is much easier to toss it out and buy a newer version that is usually more improved than the old?

For those that are more sentimental in nature (i.e. whose value isn't necessarily from use-value alone but from some intangible prescribed emotional value) like musical instruments, nothing seems to beat the more traditional ways of doing things, albeit with improvements that come from more precise tool control. At the industrial scale though, sentimentality means nothing---it's all about whether it is cheaper to use/fix an existing machine/process, or to replace it with a new one. The largest consumers of a lot of the plastics aren't necessarily by the end-consumers (though they definitely contribute via their consumption), but are likely the many intermediaries that are involved in industry. To the industries, plastics are seen as consumables of production---to be used once and then discarded, either because it is cheaper to do so, or because regulation demands so.

Thus comes the paradox of using a largely cheap by ``non-renewable'' resource over a less cheap ``renewable'' one.

Would the situation be better if it were centrally planned as opposed to being left to the devices of the hidden hand of the market? Well, it will only be better if we know more about the ramifications/consequences, and no one has a good grasp of that since foresight is always orders of magnitude harder than hindsight. It is effectively a toss-up---on some matters, centralised planning can help, but on many, the interlocking sub-systems are too enmeshed that it becomes too complex to have a simple input/output relationship drawn up to allow proper dictation of a centralised authority. History will support that through the many instances when centralised planning was more effective and when that was more destructive as compared to a lassez-faire market-based attitude.

If both major principles of organisation are not perfect, then are we doomed? Maybe.

Only the future will tell.

Sunday, August 29, 2021

Cleaning My Old Clocky

I've owned a clocky alarm clock since 2009. It's my favourite alarm clock, not because it can run about when triggered, but because it has a nice, loud, pseudo-random alarm, and uses 24-hour time for both display and setting of the alarm, without any other cluttering display elements. Each function also has its own dedicated button (alarm on/off, ``roll off'' on/off, snooze, hour advance, minute advance, alarm set, time set) without any silly touch screen mechanics. It's all digital, which makes setting things precisely that much easier as well.

It does run on 4× AAA batteries, but that's not really a problem. Each set of batteries last about a year or so---I didn't keep track of it because it is that infrequent that I need to change the batteries. There is a ``low-battery'' indicator that will inform me when it is about time to change the batteries, so it really isn't an issue.

I recently took apart my clocky alarm clock to clean it up. I've not cleaned the poor bugger for more than a decade, and the amount of dust and dirt built up is just... horrible. I did try to clean it every now and then when I was way put off, but without taking things apart, there were just too many strange places of dust gathering that could not be cleaned. I also screwed up one of the more recent cleaning steps by using 70% isopropyl alcohol to clean the window, and somehow it leaked through the adhesive and caused the interior to fog up, making it impossible to read the display without triggering the lighting mechanism via the snooze button. That was not ideal, and so I had to take it apart to remove that plastic window so that I can see the display again.

The first obstruction to taking it apart was that the four cross-head screws were covered up by a plastic screw cover that, over the years, had been shoved in deep. There was no way to non-destructively remove them, and so, they were destructively removed via drilling. For more details on the guts, consider checking out this page from Instructables.com.

Once that was done, everything else was much more straightforward to handle. I don't have any ``before'' pictures (those are too horrific to share), but here is a fully-assembled ``after'' picture.
Yes, the wheels are no longer pristine white, as is all the other plastic parts, but what can I say about a device that literally travelled with me throughout the world over the past 12 years?

Discolouration issues aside, the only other complaint I have after such a long operation time is that it has started to gain time at the rate of about 1 minute every couple of months or so. It's not that big a deal (I set my alarm clock to run 15 minutes ahead of local time anyway), but it is something that I need to remember to check on every now and then. That is just a good habit anyway for any time-keeping device that doesn't synchronise itself against the GPS constellation or the Network Time Protocol (NTP).

There aren't many electronics that last as long and remain as useful as my beloved alarm clock. Here's to another decade of wonderful operation.

Till the next update.

Saturday, August 28, 2021

The Rules of the Internet

It's 2021, or rather, nearing the end of 2021. I've lived on the 'net for years now, and after mulling over all the nonsense that I had been observing that had been driving me somewhat nuts, I went back to my old roots to revisit The Rules of the Internet. I'll duplicate the current version here for records purposes:
  1. Don't f**k with cats.
  2. You don't talk about /b/.
  3. You DON'T talk about /b/.
  4. We are Anonymous.
  5. We are legion.
  6. We do not forgive, we do not forget.
  7. /b/ is not your personal army.
  8. No matter how much you love debating, keep in mind that no one on the Internet debates. Instead they mock your intelligence as well as your parents.
  9. Anonymous can be a horrible, senseless, uncaring monster.
  10. Anonymous is still able to deliver.
  11. There are no real rules about posting.
  12. There are no real rules about moderation either---enjoy your ban.
  13. Anything you say can and will be used against you.
  14. Anything you say can and will be turned into something else.
  15. Do not argue with trolls---it means they win.
  16. The harder you try, the harder you will fail.
  17. If you fail in epic proportions, it may just become a winning failure.
  18. Every win fails eventually.
  19. Everything that can be labelled can be hated.
  20. The more you hate it, the stronger it gets.
  21. Nothing is to be taken seriously.
  22. Pictures or it didn't happen.
  23. Original content is original only for a few seconds before it's no longer original. Every post is always a repost of a repost.
  24. On the Internet men are men, women are also men, and kids are undercover FBI agents.
  25. Girls do not exist on the Internet.
  26. You must have pictures to prove your statements; anything can be explained with a picture.
  27. Lurk more---it's never enough.
  28. If it exists, there is porn of it. No exceptions.
  29. If there is no porn of it, porn will be made of it.
  30. No matter what it is, it is somebody's fetish.
  31. No matter how fucked up it is, there is always worse than what you just saw.
  32. No real limits of any kind apply here---not even the sky.
  33. CAPS LOCK IS CRUISE CONTROL FOR COOL
  34. EVEN WITH CRUISE CONTROL YOU STILL HAVE TO STEER
  35. Desu isn't funny. Seriously guys. It's worse than Chuck Norris jokes.
  36. Nothing is Sacred.
  37. The more beautiful and pure a thing is---the more satisfying it is to corrupt it.
  38. If it exists, there is a version of it for your fandom... and it has a wiki and possibly a tabletop version with a theme song performed by a Vocaloid.
  39. If there is not, there will be.
  40. The Internet is SERIOUS FUCKING BUSINESS.
  41. The only good hentai is Yuri, that's how the Internet works. Only exception may be Vanilla.
  42. The pool is always closed.
  43. You cannot divide by zero (just because the calculator says so).
  44. A Crossover, no matter how improbable, will eventually happen in Fan Art, Fan Fiction, or official release material, often through fanfiction of it.
  45. Chuck Norris is the exception, no exceptions.
  46. It has been cracked and pirated. You can find anything if you look long enough.
  47. For every given male character, there is a female version of that character (and vice-versa). And there is always porn of that character.
  48. If it exists, there's an AU of it.
  49. If there isn't, there will be.
  50. Everything has a fandom, everything.
  51. 90% of fanfiction is the stuff of nightmares.
  52. If a song exists, there's a Megalovania version of it.
  53. The Internet makes you stupid.
I remember up to Rule 63 (though Rule 0 seems new to me), the stuff after that is too new to me from circa 2007, especially since Undertale (the source game for Megalovania) only came out 2015, being in development from 2013 till then.

As flippant and strange as the rules sound, I think they are surprisingly relevant even in today's context of ``curated'' social media. The rules epitomise the concept of how not knowing history has a way of making the same mistakes from then repeat themselves. The platform in which the interactions take place may be different, the people interacting may not be technology nerds the way the old 'net was, but the basic principles of the interactions are still the same.

But who am I kidding? Newfags aren't going to look at The Rules of the Internet---each of them is too busy trying to repost the repost to win imaginary points and be the hippest most up-to-date totally non-mainstream popular person.

Yeah, this isn't good content for a blog entry, but I just want to have a copy of The Rules so that I can refer back to it for later discussion.

Till the next update.

Friday, August 27, 2021

SMS Musing #14

While dining out alone:
With much of the world staying connected through electronic networks, I wonder sometimes how hard it can get to voluntarily fall off it. I don't mean it in the sense of "going off-the-grid" in a prepper sort of way, but more like, how easy it is to "delete Facebook" and stay away from voluntary electronic networks. This means that those "not compulsory but you will totally suffer otherwise" government-related electronic networks don't count. Maybe it is really easy to do so... but the ramifications... I'm not so sure about that.

Will I ever be missed if I'm gone?

Thursday, August 26, 2021

Off Tangent?

There is often a slight difference of mentality between writing a blog entry in the morning, and one that is nearer the end of the day. The morning entries have a tendency to be based on a whim/fancy that was struck during the hours of sleep, while that of the evening is after a whole day of exertions. To me, morning entries have a tendency to be more abstract and ``large scale'' in nature, with little to no direct relationship with the happenings of the world, while the evening entries tend to be inspired by the goings on that I had experienced throughout the day.

Considering that I am currently still on sabbatical, much of what I am thinking are based on what I have been reading and am already mulling over, as opposed to actually being reflective of what has happened. Because let's face it, when one is spending most of one's time at home looking metaphorically out of the window, there really isn't much of the outside world that affects one directly. The number of interactions with people are few, and even if there were, they had a tendency to be much more muted in affect. Besides, as time goes by, the state of my being on sabbatical and how the rest of the world isn't means that a divergent of general interests and behaviour is already taking place.

If I keep up this sabbatical for another year, it could well be the case that I might be a total and absolute hermit. At this point, I cannot convince myself that it is not that appealling an idea to pursue.

Extended sabbatical... isn't it just another way of saying ``early retirement''? Considering that my current ``goal'' is to merely outlive my parents before I set my on/off switch permanently to ``off'', it might well be the case that it is a worthy goal to pursue.

Realistically though, I will still need to get some kind of job to pay the bills. This isn't the era where hard work will grant one with the means of living a stress-free life ``in the future''---the old pension schemes that promoted that idea had been scrapped within the past thirty years once employers/corporations start realising that people are living, on average, twenty years longer than they were ``supposed'' to, which, as a result, confirmed that the predicted spending required to fulfil pension requirements was never going to be enough, more so if they expected to leverage on the future contributions of future workers to feed into the pension to pay off the current pensioners.

Sadly, the numbers will never match up for the simple reason that every economic system currently in operation is based solely on the assumption of growth. There are the usual platitudes on why it is believable: technology is always ``improving'' the way we can do more with less, there will always be cheap workers available for the parts that we cannot automate away, and more work is being done to ``value add'' to products beyond mere manufacturing.

Unfortunately, they are all wrong.

With much more at stake, technology is mostly in the ``exploit'' phase as opposed to the ``explore'' phase. There's a tendency to see more of the same, but ``at scale'' as opposed to something truly new/extraordinary that changes the way we do things for the better. The internal combustion engine, for example, is still going to be around for quite a while, no matter what they say about electrification, as long as last-mile electricity distribution isn't improved upon. Fiat money will still be primal no matter what the crypto-currency enthusiasts say.

The game of cheap workers have been one of arbitrage; it's actually symptomatic of the entire theory of economic systems. The basic premise here is that of exploiting competitive advantage in order to secure higher profits (not just revenue). The only ``small'' catch is that for certain types of competitive advantages (specifically that of labour), the margins will decrease the more they are exploited as the associated cost of living increases as the quality of life improves. In short, there will come a time when all places offer equally expensive labour. Labour is expensive because their replacement tends to take a while and have interesting scaling issues unrelated to just the quantity---the quality (available skills and competency) of the said labour counts as well. There isn't an economic system that prioritises self-sustenance and balance---and it isn't obvious how one can be created as such since all we have known over the past two hundred years of human history is growth, growth, and growth [in human population].

``Value adding'' to products after manufacturing is a bit difficult to understand, for the simple reason that it is likely to be a multi-dimensional manifold with many possible local optima. The objective of the game then is to identify enough of these local optima to provide the ``value add'', while using the least amount of resources. Put in more lay-terms, it means that one needs to identify and corner the market where the consumers in it want to consume the very services that one can produce, amidst a large and not-globally-well-understood needs space. It ends up with fragmentation, really. Think of it as the ``artisanal'' phase of service. Maybe at some point enough similarity of service requirements may be found to automate away, but there is still that intangible aspect of service that makes such automated means less welcome as compared to a real person.

Where was I again? Eh... it doesn't matter. Got my daily rant out of the way.

Off to something else then. Till the next update.