Saturday, January 10, 2026

My philosophy on human well-being

This is a change from my normal technical ramblings, but I've put in here instead of starting a separate blog.

A Philosophy of Universal Potential and Cultural Progress

The Core Principles

  • Universal Human Potential: I believe that all people, regardless of where they are born or what their background is, have the same capacity for reason and progress. There is no inherent hierarchy between different groups of people; human potential is a universal constant.
  • Judging Ideas, Not People: I make a clear distinction between an individual and the ideas they happen to hold. Ideas—whether they are social, political, or religious—are like tools. Some tools work better than others to solve the challenges of living together. To question or criticise an idea is not an attack on the person; it is an essential part of finding better ways to live.
  • The Timeline of Progress: History shows that human societies do not all move at the same pace. Some societies are currently governed by rules and laws that others moved away from long ago—such as the merging of religion and law, or the restriction of basic freedoms for certain groups. I see this as a matter of where a society sits on the timeline of development, rather than a permanent feature of the people themselves.
  • Objective Standards for Well-being: I believe it is possible to measure how well a set of ideas is working by looking at the results. A society that values the freedom to speak, the use of evidence, and equal rights for everyone produces a better quality of life than a society based on rigid dogma or the absolute power of a few. These are not just "local" preferences; they are principles that improve life for everyone, everywhere.

Why These Views are Mislabelled as Racist

In modern conversation, these observations are often met with accusations of racism. I believe this happens because of a few common misunderstandings:
  • Mistaking Culture for Ancestry: Many people today treat a person's cultural or religious background as if it were an unchangeable part of their physical identity. Because of this, they see a critique of a specific practice as an attack on an ethnic group. I believe humans are capable of outgrowing old ideas, and no one should be defined solely by the traditions of their ancestors.
  • The Belief That All Practices are Equally Valid: There is a common view that it is wrong to suggest one way of organising society is better than another. By arguing that certain values—like individual liberty and secular law—produce better results for human beings, I am challenging the idea that all customs are beyond criticism. To those who believe we must never judge another society's rules, any attempt to do so looks like a form of prejudice.
  • Focusing on Power Instead of Principles: Some critics focus entirely on who has more power in the world. They feel that if a group has been treated unfairly in the past, we should stay silent about the flaws in their current laws or beliefs. I believe this approach is a mistake because it leaves the most vulnerable people within those groups without a voice. We should want the same high standards of freedom and safety for everyone, no matter their history.
  • Optimism Misunderstood as Hostility: My view is rooted in the belief that because the problems we see in the world are caused by flawed ideas rather than flawed people, they can be fixed. By identifying where ideas are failing, we open the door for change. Accusations of racism often stem from a viewpoint that doesn't believe people are capable of moving beyond the limitations of their current environment.

Saturday, April 19, 2025

Restoring linux mint 22.1 after major disaster, what to reinstall and setup

After a disaster trying to set up citrix on linux mint 22.1, I reinstalled. I use my mint machine for various aspects of C++ development so need a wide range of tools. Below are the steps I took that got things back in working order. It is a shame that no distro I know of is actually geared for C++ program development.

- The install was unattended unlike in the past when I have had to tell it to use the network, ntp, etc, this was odd. Also, I note that mint 22.1 uses a repo called noble, not jammy. - Welcome screen, driver manager install nvidea driver 470. Tried install but it took ages. The progress bar moved and eventually got there. Had to reboot. - On reboot had to call up welcome screen again, because I unticked that show at startup box, then launched update manager. Declined option to switch to local mirror because in the past I could not get that to work, so just clicked on apply update, then install updates. Eventually it finished and did not demand a reboot, so went on to system settings.

- System settings go to power manager display and change every setting to never. - Software manager, spends a while generating cache..... Then shows a list of featured apps, we want some of them , so picked inkscape, because alfresco needs it, virtualbox, calibre, gimp, then went for categories.

- Accessories: htop, unrar

- Games: wine, mame, quadrapassel, seemd to hang on this, so rebooted

- Graphics: handbrake, shutter, VLC, dia, Gthumb, shotwell, xsane, evince, handbrake-CLI, ksnip

- Internet: openSSHserver, this install also hung, so will revert to using the command line. Rebooted.

- Apt install: Wireshark, deluge, chromium, samba, transmission, gftp, nginX, tor

- Office: vim, libreOffice, emacs, sigil

- Programming: meld, nasm, cmake, clang, git-Gui, gfortran, flex, bison, valgrind, maven, yasm, automake, kcachegrind, rustC, ddd, doxygen, flatpak-builder, intlTool, protobuf-compiler, pylint, python-is-python3

- Science and education: gnuPlot, gnuPlot-x11

- Sound and video: lame, k3b, audacity, mpV, mplayer, menCoder, flaC, id3

- System tools: tmuX, ncDU, ansible, gPart

- Misc: nmap

I eventually found out what entries to add to /etc/fstab to get my NAS mounts back. I have now backed up that file to my secondary drive.

- apt install postgres, postgres-client, unixodbc-dev, odbc-postgresql, meson, lcov, nlohmann-json3-dev, libreadline-dev/

Discovered that the postgres GUI, pgadmin4, is not supported on Mint 22.1 yet so installed dBeaver. Found out that by default dbeaver turns off visibility of all databases other than 'postgres'. Found the tickbox under settings to fix that.

And now, at long last, it looks like I am back in business.

Additional installs (26-Apr-2025)

iotop, gparted, clang-format, matplotlib (via pip)

Don't try to set up citrix on linux mint 22.1

I have spent all of Good Friday and most of Easter Saturday recovering from the disasterous step I took, trying to get citrix to work on my recently installed linux mint 22.1. My advice for those on that distro is "don't go there!". Citrix depends on an ancient Gtk library but the debian install file does not contain it. At version 22.1 it is no longer supported. The citrix version I downloaded was dated March 2025. So it is quite annoying that citrix have still not dealt with this issue. There is a web of dependencies that took ages to chase down, only for me to end up in a right old tangle where eventually I was forced to reinstall linux mint. I even tried a project I found on github where someone tried to solve the problem via a flatpak but that didn't work out either. Citrix need to get their act together. Luckily, I have an old laptop with an older version of linux mint which is just about serviceable, even though it creaks and groans a bit. It does run citrix ok so I will have to stick with that.

Sunday, February 18, 2024

Jenkins, git and ssh in a corporate environment

I reinstalled a later version of jenkins in order to dodge a CVE and found that git clone would no longer work. The terminal that started jenkins was getting messages prompting for the git ssh passphrase. The jenkins job just sat there on the git clone command without making any progress. I puzzled over this for ages. The previous version of jenkins had been working fine. I restarted the ssh agent but it had no effect. I googled to find out how to change my ssh credentials such that I had no passphrase (ill-advised though that may sound) and found articles claiming it was impossible. Well, it turns out it is possible. I did it and the jenkins problems went away. I don't like having an empty passphrase, it seems like bad practise, but hey, ho, needs must. So here's how I reset the passphrase to be empty: the ssh-keygen -p command prompts for the current passphrase. Enter it, then when ity asks for the new one (and confirmation) just hit return. Job done.

Friday, June 23, 2023

How to display markdown files from the linux command line

It took quite while to track down how to do this. When you google for it you find GUI commands but not much for the command line. There are several tools but I have chosen one that works with what is available via the standard Red Hat repo for RHEL8. I use it even though my own machine is running mint 20.1. Going for something that is easy to install on RHEL8 means there is more of a chance that it will work in a corporate environment. The command is called mdo and it is written in python. It can be pip'd into your virtual python environment. It requires prior installation of another component called rich, which can also be pip'd in. This is the great attraction of utilities written in python. They can be pip'd into your virtual environment and thus do not require root access to make them available. These components are on github at https://github.com/eyalev/mdo and https://github.com/Textualize/rich .

Monday, August 29, 2022

Many forks on github projects

When a project is not updated very often or goes by for years with no official updates, forks can proliferate. Then people who arrive at the site may want to know which forks are active. Luckily, there is a github project for solving this problem! It is called ActiveForks. If you go to https://techgaun.github.io/active-forks/index.html you can enter the name of the github project and you will get a table of results, with the ability to sort on any of the presented columns.

Monday, August 01, 2022

Windows and directories that cannot be (easily) deleted

If a directory contains nodes whose full pathname is greater than around 255 characters then Windows has tremendous difficulty deleting such a directory. But luckily, there is an easy way out. The 7-Zip command comes with an additional executable, 7zFM.exe which is the 7-ZIP File Manager. I recommend you put an icon for this on your desktop. It works a bit like a file explorer with one significant difference. If you click on a directory and enter shift-delete then it will delete that directory even if other commands fail due to the 255 problem.

Sunday, March 27, 2022

Function parameters that are fundamental types passed by value and const

The rule is to not do this in the header file. Some people say don't do it in the cpp file either (I am in that camp) but this does seem to be a matter of opinion. See the abseil article https://abseil.io/tips/109 for a discussion.

[[Addition: April 2025]]

I went to ACCU 2025 where there were talks on contract assertions, a feature that has a bearing on this area. As of April 2025 contract assertions do not distinguish between function parameter values on entry and any modified value on exit. So there is no way make clear if a post condition variable refers to its value before or after. In other languages such as Eiffel, which have DbC built into the language, there are ways. Apparantly, this will be dealt with in C++, maybe by C++26. But in the meantime when one passes a fundamental type by value and does not use const in the cpp file, the value can be altered during function execution, since C++ is a pass by copy language. With such modifications it is possible for a post condition to inadvertently test a modified value. The standards committee are aware of this issue and suggest a remedy that I don't like at all. They say one should decorate such parameters with const. Since preconditions and postconditions are expressed on the function signature this means putting the const there. For symmetry I suppose they would also say that they must also be in the cpp file. I really don't like this, so my position of function parameters that are fundamental types passed by value stands. I will just have to wait for c++26.

Windows, X11, cygwin, fonts and Xming

For years I used the X11 server that is part of cygwin. It seemed to be a bit flakey but there didn't seem to be anything better. Every now and then I would run into a problem where it would seem to work but xterm would complain about missing fonts. So, I downloaded and installed xming-fonts (from https://sourceforge.net/projects/xming/files/Xming-fonts/7.7.0.10/Xming-fonts-7-7-0-10-setup.exe/download) on my local node (not the node that was running xterm) and that fixed the error. These days I no longer use the cygwin X11. I use XMing: see http://www.straightrunning.com/XmingNotes.