Linux Revisited 2023

I bought a PC in the Summer of 2022 after 15 years, with the intention to run Linux on a separate SSD. The hardware being secure boot capable with Microsoft Windows 11 OS and having an NVIDIA graphics card, narrowed the choice of Linux distribution literally to what “sort of works” in that combination, as I write this in early 2023.

I started with the üniversal choice – Ubuntu seemed to install fine including the proprietary NVIDIA drivers with secure boot, but wouldn’t boot up post install. Pop!_OS was pretty much the same except it did not support secure boot.

Fedora Linux showed the most promise, but it was after weeks of struggling that the Arch Linux wiki helped me wrangle a display from the graphical login manager. Rocky Linux and RHEL were a smoother experience save the suffocating dearth of basic software.

I have maintained since my first experience with Red Hat Linux in 1999, that Linux (distributions), and by extension Android, is a hack job. The fragmentation in Linux led me to FreeBSD (for servers) twenty years ago. For a hot backup OS I have a perfected Windows 11 Pro image on the original SSD, that accesses the same external NAS data as the Linux install.

Should I profess my love?

If a person is clearly available and has not explicitly excluded you as a potential suitor, then conventional wisdom suggests, of course! The worst answer you can get for asking is, “No”, and as such you’d be no worse off than having not asked. That is simply not the case in many situations, because one is obviously not hitting on a stranger when professing one’s love – and as such risks jeopardising their existing relationship with this person.

So, well, “No”, and possibly they then immaturely go off and tell everyone that you hit on them (adding in whatever to make you sound creepy) and to avoid you. In any event, there’s a more evolved reason than rejection, shaming and embarrassment to keep one’s feelings to oneself.

It’s about not burdening another person to carry the weight of your feelings for them just so you can get it off your chest; when there are clear indicators that this person would not, for whatever reason, be interested, able or willing to reciprocate. If you know it would not change a thing except the satisfaction of having vented, but with the possibility of losing the proverbial bird in hand.

PC vs Mac

My biggest argument in switching to a Mac 15 years ago was that I would rather be hardware-constrained by Apple than software-constrained by Microsoft. A lot has changed with Macs, starting with the T2 chip post-2015, to on-device scanning of images in 2021. Plus forced obsolescence of software, and with Apple Silicon, missing macOS features on Intel hardware. I am now both hardware and software constrained by Apple.

The last straw was when, as per my previous post on this subject —

I would be dependent on Apple to release parts to me at their discretion and have to needlessly suffer downtime

Mac vs PC

Apple in its high-handedness, refused to replace my Watch battery since they require that the watch battery be down to 79% of its charging capacity to authorize a battery replacement.

The cost of Apple hardware apart, macOS holds not much appeal.

Ownership
I would literally rather run Windows 11 on a Mac than macOS on a PC, considering how much slack Microsoft has recently allowed in activating Windows, thereby ensuring a user’s data isn’t held ransom if one is offline. In contrast, many essential third-party macOS apps have adopted subscription and online authentication to login to local apps, preventing or limiting their offline use.

Usability
macOS Messages and Mail show no contact names without native CardDAV support, but at least with Windows it can be hacked in to perform relatively flawlessly. Mail app activity never ceases when one or more non-Exchange Microsoft accounts are added, and it’s been that way since Mac OS X Snow Leopard. Since then, Windows OS has evolved more into what Mac OS X Tiger and Leopard used to be; “it just works”.

Reliability
The infamous BSOD (Blue Screen of Death) or STOP error seems rarer on Windows, than a kernel panic on macOS since Catalina, and the odds of the latter seem to go up with additional processor cores. Sleep mode that Windows 98 never woke from is a thing of the past, whereas its the Mac Pro with macOS Big Sur that doesn’t automatically sleep when ‘Power Nap’ is disabled.

Performance
Mac Pro hardware feels underpowered or not as optimized, from how slow Finder is at file operations over the network (NFS and especially SMB) compared to Windows Explorer. Add to that, both 3 x 3 MIMO 802.11ac on the Intel Mac Pro and 2 x 2 MIMO 802.11ax on the Apple M1 Pro MacBook Pro far underperform my Dell PC “Killer WiFi” 2 x 2 MIMO 802.11ax. Apple Remote Desktop or Screen Sharing too refreshes slower and has poorer graphics quality over 2.5 Gbps wired Ethernet versus Microsoft Remote Desktop over 5 GHz WiFi 6, each accessed over 5 GHz WiFi 6 using their respective clients.

Recovery
I no longer find my previous issue of having to reinstall and reconfigure the operating system, updates and applications from scratch a deal breaker in choosing Windows OS. All considered, disk imaging is the least painful and bulletproof [backup and] restore strategy for any modern OS.

Reactive TV Lights

Ambilight just too expensive or not cutting it for you? Same. I did it myself, and like most of my projects it involves a Raspberry Pi.

Here’s what you’ll need for my setup:

  • Raspberry Pi 4B
  • Pimoroni Mote LED Kit
  • 4K HDMI Splitter
  • HDMI-to-USB 3.0 Capture Card
  • Lots of USB outlets and cables, some included and some not.

I used HyperBian, which is basically Raspbian pre-flashed with Hyperion. This handy image does 90% of the work, so take a moment to appreciate how much you don’t have to do.

Note: Python 2.x has been deprecated and I have therefore updated the scripts/syntax to reflected that as needed.

I’m not gonna mention the parts that are standard, like setting up Mote lights. I will go over the wiring though:

Media > Splitter > HDMI Capture Card > Pi > TV

First, follow these instructions. I’ve listed the relevant portions below as well.

sudo apt-get install python3-dev python3-pip
sudo pip3 install twisted
sudo pip3 install pyserial mote numpygit clone https://github.com/PaulWebster/artnet-unicorn-hat.git
cd artnet-unicorn-hat
sudo nano artnet-server.service
sudo cp artnet-unicorn-hat-mote/artnet-server.service
  /lib/systemd/system/artnet-server.service
sudo systemctl enable artnet-server
sudo systemctl start artnet-server

Before copying over artnet-server.service, modify it with nano, make sure the path to the script matches where it is on your installation.

For me, I had to change the user folder from “osmc” to “pi”. If you try to start or enable the service you’ll probably get the following error:

[Unit]
Description = Artnet/OPC/FadeCandy Server - control of LEDs

[Service]
Type = idle
ExecStart = /usr/bin/python3 /home/osmc/artnet-server.py

[Install]
WantedBy = multi-user.target

Original error was: libf77blas.so.3: cannot open shared object file: No such file or directory.

This can be easily fixed by running the following command:

sudo apt-get install libatlas-base-dev

Go to Hyperion Dashboard. It should be localhost:8090 from your Pi. Set the Capture Input to the USB device detected (the capture card), and the LED output format to “fadecandy”. Set the number of pixels to “64”. Save the settings and everything should work! Don’t forget to configure your lighting orientation to match the placement of your lights!

Build an Autonomous Unmanned Aerial Vehicle

Earlier this year, I set my heart on building a drone that can fly itself. I know I’m not the best pilot, so I wanted something that could more-or-less take care of things on its own. It was (and is) a very long road, which started with me buying a Raspberry Pi 4B.

Since then, I’ve constructed a vehicle that can hold an extremely steady position a few feet above the ground. That’s about the extent of its autopilot so far, but that is a remarkable thing in itself. Your standard remote-control quadcopters may be able to “stabilize” themselves in the air, but they have no idea where they are in relation to the world around them and therefore can’t “stand still”. If the wind blows them, they’ll drift unless the pilot intervenes. It may sound like a small difference but it’s much more substantial when you’re working with precise movement in an area full of obstacles.

Let me also take a moment to say that if anyone reading this is encountering issues with any of the parts or workflows mentioned below, leave a comment and I’ll be happy to help out. So, let me list off the salient components of my project (which I’ve christened W.A.T.N.E. — in honour of the character Mark Watney from the novel The Martian by Andy Weir.

  • The Frame – DJI Flame Wheel F450 ARF Kit. It came with motors, electronic speed controllers (ESCs), a sturdy set of arms, and a top plate + bottom plate.
  • The Flight Controller – Navio2. Most people opt to buy a standalone FC and connect a “companion computer” (usually an SBC like a Raspberry Pi or Nvidia Jetson Nano) over UART. I operated through the path of least resistance and got what I knew best: a Raspberry Pi Hat. RPi Hats are basically daughter boards that connect to the GPIO pins on the Pi and give it extended functionality. In this case, it’s giving my model 4B the capability to be an integrated 2-in-1 flight controller and Linux companion computer. I’ll talk more about the implications of that later, but please do read what I have to say before you invest in a Navio2 or any other FC that runs off the Linux stack.
  • Cellular Uplink: Netgear 340U USB LTE Modem. A rare find and a royal pain to configure for Linux, but I got there in the end.
  • Tracking: Intel RealSense T265 Tracking Camera. (Tests are underway to implement this device for precision landing.)
  • Obstacle Avoidance: Intel RealSense D435i Depth Camera.
  • Intelligent Object Recognition: Intel Neural Compute Stick 2 (not currently set up).
  • Radio Receiver: FrSky R9
  • Radio Transmitter: FrSky Taranis Lite with R9M ACCESS (long-range module).
  • FrSky SBEC
  • PiJuice UPS/Power Management Hat
  • 4S Li-Po High-Discharge Power Cell
  • Lots of cables, wires, connectors, Flex Tape, and hair ties.

I’ll be honest with you, I had little to no clue what I was doing when I started. My dad, who is an Internet Pioneer that founded this blog several years before my birth, raised me with an intermediate understanding of computers. However, this was hitherto my first foray into the world of UNIX commands. I familiarized myself with syntax by messing around with online examples aimed at kids. Like most things, you’ll find that the most intuitive way to learn coding is with the materials aimed at kids. I started off with Scratch by MIT just a few months after its release over a decade and a half ago.

When I thought I was ready to take on the big project (I was woefully misguided, but if I had known what I was in for I may not have started at all), I ordered the frame kit. That was my big initial commitment to the project. Assembling it was easy enough, once I got used to the soldering iron. You only need it for fusing the ESC cables to the bottom-plate. Pretty much everything else is plug-in if you play your cards right.

It’s not hard to build a quadcopter. We live in a blessed era of over-information, we need only have the skill to discern the pertinent from the irrelevant.

  1. Flash an SD card with Emlid Raspbian. You’re stuck with their distro because the Navio2 needs a custom kernel.
  2. Assemble the frame kit. Only put the propellers on when you’re ready to fly it but make sure you know which props go on which motors.
  3. Assemble your Big Brain Module, in my case it’s a Pi and two hats. Oh, and put that SD card in there too.
  4. Connect the ESC wires to the servo rail, and the Navio2 Power Module to the port on the back-right corner of the FC. WARNING: I hate to be the guy to tell you that the boogeyman is gonna get you if you don’t eat your vegetables, but if you don’t follow the wiring diagram exactly, your drone will keep flipping when you try to take off and you’ll never know why. Trust me.
  5. Connect the power module to the flight battery. I mean, you can do it just to make sure power goes through it but all the motors will do is beep at you in a distressed fashion until it gets a data input. Maybe just leave it disconnected for now.
  6. Connect the power module to the bottom-plate. I use XT60 connectors and I had to solder an XT60 connector to my bottom-plate for the power running to the motors.
  7. Connect the radio to the port on the servo rail marked “1”. it’s the column of pins reserved for the only radio so don’t put your motors or anything else there.

That’s it for hardware, assuming everything was done right the first time. A lot of this stuff is trial and error, as it has been since time immemorial. Remember that everything you do is a result of the culmination of thousands of years of societal and technological research and infrastructure. We stand on the shoulders of giants, all of us. We are nothing without the efforts of our predecessors and keeping that in mind seems to temper me when my patience runs thin.

So far, I’ve described how to build something theoretically capable of flight. There’s not much to do software-wise, just some basic calibration done through the ground control application. I use QGroundControl but if you use Windows I’ve heard Mission Planner is way better.

If you configured everything right, you have yourself a remote control quadcopter. It should arm in stabilize mode even without a GPS lock (don’t get me started on GPS just yet).

In the next post I’ll go over all the tweaks and tricks I’ve done to make it do more than just be an RC toy.

Self Help

I’ve always been into optimizing so self improvement came naturally. I’ve listened to practically every opinion and doctrine, and you know that when you’ve heard more or less the same things in rotation over and over from self help gurus.

A friend once told me that I already had all the answers I needed. That was a wonderful revelation. We do indeed tend to discount our own counsel.

So after years and years of searching for more and having nobody come up with anything noteworthy I knew it was time to stop listening to everyone because they have nothing left to contribute.

My take away is:

  • Stop being a lifelong learner. Decide how much knowledge is enough. Then start integrating what you’ve learnt.
  • Listen to yourself, logically. Not self-indulgently. What you really want. You knew when you were 10 – they say go for what you wanted at that age. Likely because people reprioritize, losing sight of and forgetting what really makes them happy, instead pursuing their corrupt ideas thereof.
  • Have a sense of causality. It usually follows recognizing that one has agency, the privilege of choice, and the exercise of those choices causes outcomes for ourselves and others, both positive and negative.

25 Years and Browsing

My first single page site hosted on AngelFire, a free web host circa 1996, was launched this day 25 years ago, incidentally on World Health Day.

It was the starter web site of Eskay Business Service Centre (EBS), a family business providing executive suites and virtual office services. Business web sites being uncommon at the time, site visitors expecting an IT professional with specialized tools were surprised to learn that I was the Director of EBS and had authored the site in raw HTML using a plain text editor.

Keeping up with web browser technologies to provide an optimal experience became a thing of the past with content management systems so now we can focus on quality content rather than design and compatibility. Though I’m surprised that to this day there is no standardization of the favicon across devices and operating systems, which is why I present to you an all-new favicon set optimized for specific devices as a tribute to the past and in celebration of 25 years.

bajaj.com is 23

bajaj.com now 23 has gone through several technology changes since its humble beginnings in 1997, as an information portal about the family. Here’s an overview for a journey through time for those that missed it:

  • A throwback to the InterNIC and Network Solutions era, registrations used to be $100 USD for 2 years.
  • This site was initially hosted on shared servers, moved to self-hosted, then developed into a blog circa April 2008.
  • The hardware and software that it has continuously run the longest on (from December 2004 to April 2019) is a Dell PowerEdge 700 with an Intel Pentium IV processor running WordPress on FreeBSD.
  • It built equity in terms of listings on portal sites, search engine popularity and links from other sites, that briefly attracted advertising in 2009.
  • The site is additionally accessible over an IPv6-only network.
  • Currently (since April 2019) it remains self-hosted on a Synology DS 1019+ and supports HTTP/2.

Self Love

My journey into self love has been life changing.

It began with being made to realize that I was bestowing the kind of love, care, attention and benevolence I’ve always craved, on people I love, as an attempt in satisfying my own need for affection. That’s what I learnt growing up, to go out of your way to help people who have not had your advantages in life. “Be generous with your time and energy”, they said.

I might be famished by the time I get to the tenth person and still be wondering why I keep getting hungrier. Which then begs the question as to how can I ever hope to have a full stomach if every time I am hungry, I feed a loved one? The answer is likely rooted in my belief that, “love begets love”; but that led me to become emotionally depleted.

I received this feedback when I shared my thoughts, and that finally got me unstuck —

You are just desperate for company, love and for your loneliness to go away so you give a lot of what you need because that’s your perspective, and you give it because you think that’s what everyone needs too
But you don’t get it back
Because the truth is that’s not what everyone needs
Or wants

Wow, time to reevaluate my beliefs and the saying, “Do unto others…”. What am I doing unto myself? Everything in excess is poison, even giving of myself to the point that my emotional investment breaks my bank when I feel it has not earned me so much as positive inter-personal relationships, let alone appreciation or kindness. The emotional starvation albeit coupled with the satiation of fulfilment from having been kind is not sustainable. In that regard, I decided to do —

  • only that which makes me feel good about myself
    Reducing investing in people, especially those that don’t bring value to my life, and housekeeping the mean-spirited that bring me down.
  • in only as much measure as I can emotionally afford
    Not over-stretching myself in time, effort and money as these are all means of getting emotionally invested. It’s easier investing from my emotional petty cash followed up with deleting the transaction details, such as the “send and forget” strategy I use for e-mail (viz. deleting the message from my sent mail so I forget having sent it before it gets committed to long-term memory) . I’m not expecting one to be beholden to me in any event, but it eliminates the anticipation of common decency which I might never get, and can thus move on with my life.
  • unto myself as I would do unto others
    Which is, to protect, nurture and pay heed to the needs of my inner child like a loving, caring, affectionate and doting parent.

Which then begs the question, is that the right thing to do? My go to is this blog post from which I have derived that right and wrong are societal constructs whose definitions are constantly changing, so I am not afraid or embarrassed to follow my internal compass. When I brought this up, I was asked with good reason, “But isn’t embarrassment a reflection of social constructs, rather than good or bad?” Fortunately I’m privileged enough to be a free spirit.

So armed with recent beliefs that —

  • doing what pleases me seems to be the only “right” thing to do, if my other beliefs are true that
  • the purpose of life is to be happy, considering
  • life is random and
  • the only consequences in life are those that we wittingly or unwittingly bring upon ourselves through our exercise of our power of choice,

I have decided to not be collateral damage in another person’s story.

You may be justified in feeling hard done by, especially if you have done things for others that don’t seem appreciated, but don’t waste time brooding about it. You are captain of your ship of fate, so it’s your responsibility if you’ve been sailing off course.

Good vs. Evil

To understand morality, a baseline must be established. Humans in their natural state are neither good nor evil, but that doesn’t mean that “regular humans” wouldn’t perceive some of those neutral actions as ‘evil’. For example, a toddler in kindergarten who has not been taught manners will take toys from another child without asking, as this is the way of the wild. People would interpret the action of “stealing” the toy as evil, but that is just because they have already been conditioned by society. The alpha-wolf gets to eat first because it is stronger. It is capable of taking the food from the weaker wolves. Toddlers are, in a way, animals. If left to their own devices without intervention from authority figures, toddlers will eventually form a hierarchy of sorts, the strongest child having all the toys and food it wants. On another hand, primates kept in captivity have shown signs of humanity after being surrounded by “properly conditioned”, normal humans. Wolves are not evil for asserting dominance based on strength, nor can unconditioned humans be considered so. Upbringing is the conditioning humans go through. During the upbringing, basic moral grounds are set. The conscience is brought about, and children are taught fundamental differences between right and wrong. Studies have shown that the conscience and all moral thought is cemented before the age of five. If a child is not taught the fundamental differences between right and wrong during that time, they will be generally considered evil by society.

How, then, can one truly tell what is good and just? Steve Taylor, Ph.D. defines it as “‘a lack of self-centeredness. It means the ability to empathize with other people, to feel compassion for them, and to put their needs before your own. It means, if necessary, sacrificing your own wellbeing for the sake of others’. It means benevolence, altruism and selflessness, and self-sacrifice towards a greater cause – all qualities which stem from a sense of empathy. It means being able to see beyond the superficial difference of race, gender, or nationality and relate to a common human essence beneath them.” (Taylor) Continuing on Dr. Taylor’s train of thought, the character known as the Doctor from the TV series Doctor Who recently said, “hate is always foolish, and love is always wise.” (Moffat)

Taylor, Steve. “The Real Meaning of ‘Good’ and ‘Evil’.” 2013. Psychology Today.