Language Selection

English French German Italian Portuguese Spanish

Programming Leftovers

Filed under
Development
  • 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

Android Leftovers

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. Read more

Kubernetes Leftovers

  • Graceful Node Shutdown Goes Beta

    Graceful node shutdown, beta in 1.21, enables kubelet to gracefully evict pods during a node shutdown. Kubernetes is a distributed system and as such we need to be prepared for inevitable failures — nodes will fail, containers might crash or be restarted, and - ideally - your workloads will be able to withstand these catastrophic events. One of the common classes of issues are workload failures on node shutdown or restart. The best practice prior to bringing your node down is to safely drain and cordon your node. This will ensure that all pods running on this node can safely be evicted. An eviction will ensure your pods can follow the expected pod termination lifecycle meaning receiving a SIGTERM in your container and/or running preStopHooks. Prior to Kubernetes 1.20 (when graceful node shutdown was introduced as an alpha feature), safe node draining was not easy: it required users to manually take action and drain the node beforehand. If someone or something shut down your node without draining it first, most likely your pods would not be safely evicted from your node and shutdown abruptly. Other services talking to those pods might see errors due to the pods exiting abruptly. Some examples of this situation may be caused by a reboot due to security patches or preemption of short lived cloud compute instances.

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