Scientific Computing

WMIC.exe removed from Windows

Starting with Windows 25H2, WMIC.exe (Windows Management Instrumentation Command-line) has been removed from the operating system. Microsoft recommends using PowerShell cmdlets for managing and querying system information instead. There is a migration guide available to help users transition from WMIC to PowerShell cmdlets that invoke WMI.

There are a lot of .bat batch scripts and .ps1 PowerShell scripts that use WMIC.exe, but they can be updated to use PowerShell cmdlets instead.

CMake / Meson force shared library

Build systems like CMake and Meson have specific syntax and variables to manage shared library creation and linking. By default, CMake builds static libraries, but this can be changed by setting the BUILD_SHARED_LIBS variable to ON or by setting the SHARED type option of the add_library() command.

To use C, C++, Fortran, etc. library binaries from Python, shared libraries are required to load the compiled code at runtime in Python. Of course, the Python code must be configured to match the symbols in the shared library.


Meson builds shared libraries by default, but this can be changed by setting the default_library option to static in project() or by the shared_library() function.

Strip geotag location from photos

Strip most EXIF and IPTC headers from image:

exiftool -all= -photoshop:all= myphoto.jpg

A copy of the image _original is kept. The image is not recompressed so image quality is not affected.


Compare the metadata present on old and cleaned images using ImageMagick:

magick identify -verbose myphoto.jpg

magick identify -verbose myphoto.jpg_original

Not all headers can be removed, but it usually works.


Install Exiftool:

  • Linux: apt install libimage-exiftool-perl
  • macOS: brew install exiftool
  • Windows installer

Hugo page content variables

Hugo content Markdown files cannot use Hugo variables directly. The way to access variables (including site parameters, data sources, and front matter) from content Markdown files is to use Hugo shortcodes or to use a custom template for those content pages. However, areas inside code fences cannot use shortcodes. What I wanted to do was make examples of code inside code fences used on several pages on my site update with a version number. However, I don’t currently see a feasible way to do this with Hugo that wouldn’t be overly specific to the particular set of examples. It’s OK, I wanted to note this limitation I ran into. An alternative is to use find/replace across files like “sed” or the VSCode GUI.

Install Zello app on Linux

Note: In general, Windows apps frequently update and may break WINE compatibility. This article is a snapshot of what worked at the time of writing.

Check the Zello WINE database for the latest compatibility information.


Zello allows prompt voice push-to-talk group communications worldwide. Zello provides free access for personal use. The push-to-talk audio is shared simultaneously in a “channel” using internet-connected phones, tablets, computers and Zello WiFi walkie-talkies. For those accessing Zello from a computer, the Zello Windows program works from Linux using WINE. Zello requires an internet connection to work.

To use Zello from Linux:

Download Zello for Windows PC. Install Zello with WINE:

wine ZelloDispatchSetup.exe

This creates a Zello icon to launch the Zello app in Linux.

Optionally, start Zello from the Terminal by making a script “zello.sh” like:

#!/bin/sh

wine "$HOME/.wine/drive_c/Program Files/Zello/Zello.exe"

Related: Speaker-mic for mobile phone PTT apps

GNSS-SDR on Windows

To run Linux programs on a Windows computer, normally Windows Subsystem from Linux (built into Windows by Microsoft) is generally the best / most performant way to run most Linux programs, especially programs relevant to data processing and geospace science in general.

The WSL Install Guide notes from Windows Terminal:

wsl --install

That will install Ubuntu. After a few minutes the Ubuntu WSL install will be complete. From Windows terminal type:

wsl

to start Ubuntu.

From there type

sudo apt install gnss-sdr

That installs numerous packages needed to run GNSS-SDR.

Then proceed to the first-run examples.

When building GNSS-SDR and examples, don’t worry about CMake warnings about missing packages, as long as the project builds.

macOS Network Interface priority order

The macOS network interface priority order determines which network interface (like WiFi, Ethernet, etc.) the system uses first when multiple interfaces are available. Set this priority order through the System Preferences or via the command line:

List all network services in priority order:

networksetup -listallnetworkservices

Set the network interface priority order with:

networksetup -ordernetworkservices "Service1" "Service2" ...

Replace "Service1", "Service2", etc., with the actual network service names.


Regarding WiFi SSID priority, macOS automatically scores based on several factors, including the user manually selecting a WiFi network.

GitHub Actions with Windows Subsystem for Linux

The setup-wsl GitHub Action configures WSLv2 environment in Windows GitHub Actions runners. This allows testing certain quirks and corner cases one might encounter when running software on Windows Subsystem for Linux. For scientific computing Windows users, WSL is often the best way to run computational software on Windows, including software using performance code for GPU and MPI. An example WSL workflow that is more advanced illustrates how to use the wSL filesystem and that $GITHUB_ENV is not available, but env: parameters are.

Apple Silicon virtual machines

Native virtualization has a “guest” OS with the same CPU architecture as the “host” physical CPU. Non-native emulation generally runs slower than native virtualization. Non-native virtualization means a host computer (such as Apple Silicon) can emulate any supported CPU architecture. Apple Silicon is ARM64, but with virtualization such as UTM / QEMU the Apple Silicon CPU can emulate ARM32, x86_64, MIPS, RISC-V, PowerPC, and more within the container.

QEMU emulator is available on Homebrew for Apple Silicon and can (slowly) emulate a different CPU architecture or run native architecture at nearly full performance. UTM is a containerized emulation based off of QEMU for iOS and macOS–like QEMU, the same CPU architecture is virtualized at near full performance, while non-native virtualization is emulated with slower performance. When creating a new virtual machine in UTM, the first questions include whether the VM will be virtualized (native) or emulated (non-native) and the CPU architecture. UTM works with native virtualized Windows for ARM, Linux, and emulates many architectures, even old PowerPC macOS guest images.

VirtualBox is an open-source native virtualization application that generally targets x86_64 CPUs. VirtualBox for Apple Silicon is available.


Commercial paid Apple Silicon virtualization: these native virtualization applications are not open-source. They run native virtual machines on Apple Silicon including Windows for ARM.

  • Parallels is paid-only software
  • VMWare Fusion is paid software, but has a no-cost personal-use license for home users.