# Programming Leftovers

Filed under
• ##### Testing 4x4 matrix inversion precision

It is extremely rare that a hobby software project of mine gets completed, but now it has happened. Behold! Fourbyfour!

Have you ever had to implement a mathematical algorithm, say, matrix inversion? You want it to be fast and measuring the speed is fairly simple, right. But what about correctness? Or precision? Behavior around inputs that are on the edge? You can hand-pick a few example inputs, put those into your test suite, and verify the result is what you expect. If you do not pick only trivial inputs, this is usually enough to guarantee your algorithm does not have fundamental mistakes. But what about those almost invalid inputs, can you trust your algorithm to not go haywire on them? How close to invalid can your inputs be before things break down? Does your algorithm know when it stops working and tell you?

Inverting a square matrix requires that the inverse matrix exists to begin with. Matrices that do not mathematically have an inverse matrix are called singular. Can your matrix inversion algorithm tell you when you are trying to invert a matrix that cannot be inverted, or does it just give you a bad result pretending it is ok?

Working with computers often means working with floating-point numbers. With floating-point, the usual mathematics is not enough, it can actually break down. You calculate something and the result a computer gives you is total nonsense, like 1+2=2 in spirit. In the case of matrix inversion, it's not enough that the input matrix is not singular mathematically, it needs to be "nice enough" numerically as well. How do you test your matrix inversion algorithm with this in mind?

These questions I tried to answer with Fourbyfour. The README has the links to the sub-pages discussing how I solved this, so I will not repeat it here. However, as the TL;DR, if there is one thing you should remember, it is this:

• ##### Getting started with COBOL development on Fedora Linux 33

Though its popularity has waned, COBOL is still powering business critical operations within many major organizations. As the need to update, upgrade and troubleshoot these applications grows, so may the demand for anyone with COBOL development knowledge.

Fedora 33 represents an excellent platform for COBOL development.
This article will detail how to install and configure tools, as well as compile and run a COBOL program.

• ##### 3 Excellent Free Books to Learn about ClojureScript

ClojureScript is a compiler for Clojure that targets JavaScript. It emits JavaScript code which is compatible with the advanced compilation mode of the Google Closure optimizing compiler.

Clojure is a dialect of the Lisp programming language. It’s a well-rounded language. It offers broad library support and runs on multiple operating systems. Clojure is a dynamic functional general purpose programming language that runs on the Java platform, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multi-threaded programming. Clojure features a rich set of immutable, persistent data structures, first-class functions and dynamic typing. Clojure programs are composed of expressions and written in terms of abstractions.

• ##### ISO 8601: the better date format

If you haven’t been living under a rock, you’ve probably heard that there are different date formats in the world such as the American one (mm/dd/yyyy) and the European one (dd.mm.yyyy). If you’re smart enough, you’ve probably also noticed that the American one makes no sense and is just awful. A simple conclusion that many people draw out of this is that the European format is the best one, however I don’t think this is true. If you’re one of these people who think so, I’m here to (hopefully) change your mind by introducing you to a lesser-known date format called ISO 8601.

## More in Tux Machines

### Security Leftovers

• ##### Security updates for Wednesday

Security updates have been issued by Debian (firefox-esr, php-pear, wordpress, and zabbix), Oracle (java-1.8.0-openjdk and java-11-openjdk), Red Hat (java-1.8.0-openjdk, java-11-openjdk, kernel, and kpatch-patch), Scientific Linux (java-1.8.0-openjdk and java-11-openjdk), Slackware (seamonkey), SUSE (apache-commons-io, ImageMagick, kvm, ruby2.5, and sudo), and Ubuntu (edk2, libcaca, ntp, and ruby2.3, ruby2.5, ruby2.7).

• ##### Google Chrome Receives Security Fix Update for Windows, Mac, Linux Devices

Google has released a update for its Chrome browser on Windows, Mac, and Linux that brings a total of seven security fixes. The list of fixes include one for a zero-day vulnerability that was exploited in the wild. The updated Chrome browser will be rolled out over the coming days, Google said in an advisory. Users are recommended to install the update as early as it reaches their devices. The search giant also credited and rewarded external security researchers who reported the vulnerabilities. The updated Chrome browser carries version 90.0.4430.85, according to the advisory released by Google through a blog post. The update is compatible with Windows, Mac, and Linux devices. In terms of security fixes, Google has detailed five of the seven highly critical vulnerabilities that are addressed by the update. The first is recorded as CVE-2021-21222 that is a heap buffer overflow in the V8 JavaScript engine, while the second one is noted under CVE-2021-21223 and is an integer overflow in Mojo interface.

• ##### antiX: New builds of 4.4 and 4.9 kernels

New builds of 4.4 and 4.9 kernels should now be available in the repos. Newly named to 4.4.0-264 and 4.9.0-264 to avoid the libc6 message ‘Your kernel version indicates a revision number of 255 or greater’

### Ubuntu 21.04 Server Performance Offering Nice Gains For AMD EPYC 7003 Series

Tomorrow's release of Ubuntu 21.04 is exciting on the desktop for Wayland by default in supported configurations and many other package updates and enhancements. But even for being a non-LTS release if you are interested in running Ubuntu Server there are some performance improvements to enjoy with newer platforms. Here is a look at the AMD EPYC 7003 "Milan" performance across Ubuntu 20.04 LTS, 20.10, and 21.04 with an AMD EPYC 7763 Supermicro server. With newer hardware, generally the newer the Linux distribution means better performance and support. It shouldn't come as much of a surprise although doesn't always hold true when sometimes there are regressions and other changes that end up lowering the performance in the name of security or other factors. But in any case with Ubuntu 21.04 on AMD EPYC 7003 series hardware we are seeing some nice performance gains to enjoy with this latest Linux distribution release.

### Kubernetes Leftovers

• ##### Kubernetes dockershim to live on

When Kubernetes 1.23 is released towards the end of 2021, it will no longer include dockershim. This program enables you to use the Docker containerd container runtime within Kubernetes. Unfortunately, Docker was never designed to be embedded inside Kubernetes, and it's incompatible with Kubernetes' Container Runtime Interface (CRI). The fix was for dockershim to bridge the gap between Docker's containerd and CRI. Maintaining dockershim, however, was a pain so Kubernetes started depreciating it. Mirantis, which now owns the Docker program, will continue to support dockershim in Docker Engine and Mirantis Container Runtime with Kubernetes.

• ##### Hypergiant and SUSE RGS, taking Kubernetes to the final frontier

Hypergiant Industries focuses on solving humanity’s most challenging problems by delivering best in class artificial intelligence solutions and products in a host of sectors, including space science and exploration. Hypergiant’s SUSE RGS (Rancher Government Solutions)-supported SatelliteONE mission is on track to achieve the impossible in the most hostile environment of all – putting K3s to work in orbit on military satellites, for the very first time.