Scientific Computing

Git file mode permissions

In certain situations, there can be nuisance Git dirty repo messages like:

old mode 100755
new mode 100644

The root cause of this false dirty Git status is loss of fidelity of the executable file mode bit. This can occur in situations including:

  • Using WSL Git on a native Windows filesystem or vice versa
  • Linux HPC where files are shared between users

Workaround this ambiguous executable filemode bit for each Git client by executing within the Git repository:

git config core.filemode false

Extracting raw images from PDF

Use Poppler to extract the original high-resolution images from the PDF. This generally yields better quality images than screenshoting Note: only raster images can be exported with Poppler tools.


List all PDF images:

pdfimages -list in.pdf

Extract PDF images from all pages, dumping all images in mydoc.pdf to the same directory. Filenames start with out-. There might be a lot of images.

pdfimages -all in.pdf out

Extract PDF images from specific pages: example is for page 3 only:

pdfimages -all -f 3 -l 3 in.pdf out
-f
first page to extract
-l
last page to extract

Install Poppler:

  • Linux: apt install poppler-utils
  • macOS / Linux (Homebrew): brew install poppler
  • Windows: use WSL poppler

Related: extracting a page(s) from PDF

PDF extracte or combine pages

The free Poppler library includes command line tools that can easily extract pages from a PDF file, or combine pages from multiple PDF files into one PDF file. To do so with Adobe Acrobat or FoxIt generally requires a paid license, but Poppler is a free open-source library.

Extracting page(s) from a PDF into a series of separate PDF files is done with pdfseparate. For example, extract pages 2 to 4 from “in.pdf” to files “out-2.pdf”, “out-3.pdf” and “out-4.pdf” using Poppler:

pdfseparate -f 2 -l 4 in.pdf out-%d.pdf

Combining multiple PDF files into one PDF file is done with pdfunite. For example, combine “in1.pdf”, “in2.pdf” and “in3.pdf” into “out.pdf” using Poppler:

pdfunite in-1.pdf in-2.pdf in-3.pdf out.pdf

Poppler is installed by:

  • Linux: apt install poppler-utils
  • macOS: brew install poppler
  • Windows: use WSL poppler

Related: extract raw full-quality images from PDF

Live Sports Radio low-band VHF FM Audio

The company Live Sports Radio has been using low-band (channel 2-5) VHF TV channels for no-delay live FM broadcasts within sports areas. They have been issued hundreds of STAs (Special Temporary Authorizations) by the FCC under FRN 0017507716 to operate on these channels, which are normally reserved for television. The broadcasts are intended to be received by fans in stadiums and arenas, providing live commentary and updates during sporting events. They generally use separate video (to tell people how to tune in) and audio (the actual sports broadcast) channels, with the audio being transmitted as analog FM compatible with broadcast receivers capable of tuning.

Wide-band multi-digital decode chips like the NXP TEF6688 cost about $5 in production quantities and radios containing the TEF6686 retail for around $70, covering the 65 - 108 MHz range plus extensive shortwave and mediumwave AM coverage. This type of chip is too expensive for a give-away promotion radio, so less expensive receivers, using chips like the RDA5807 covering 50 MHz to 108 MHz would be used. Off the shelf radios selling in the $10 range cover 64 MHz to 108 MHz, and with slight customization I believe the vendor could obtain $5 radios covering 50 MHz to 108 MHz, which would be ideal for this application.

The ERP of the transmissions is typically STA authorized at 5 watts. They have been specified to use the Trival AD-44/CW-AH2 which is quite inefficient at these frequencies and only rated for 10 watts input power. They should consider using a more efficient transmit antenna.

Qi 2.2 charging performance

Qi 2.2 or Qi2 25W finally makes wireless charging universal for supported phones with Magnetic Power Profile (MPP). For phones / devices having built in MPP magnets - or a case with magnets - the alignment issues are solved, and the 25 watt charging speed is fast enough to remove most need for plug-in charging of phones. The Google Pixel 11, iPhone 17, and similar flagship phones natively support Qi2 25W, which allows true corded-like charging speeds with a robust magnetic interface. Qi 1.x has been widely available for over a decade, and has long been plagued in practical use with problems associated with a need for tight physical alignment, heat, and slow charging speeds. Note that while Qi2 25W devices are generally backward compatible, there are some older Qi 1.x devices including the Pixel Stand 2 that may not charge newer devices due to mechanical alignment issues.

The original 5 watt Qi was OK for overnight charging. USB-PD wired quick charging can yield charging in 30 minutes for 50%. Qi 1.3 Extended Power Profile (EPP) can yield 15 watt charge with appropriate devices and a 30 watt USB-PD power adapter. 15 to 25 watts is close enough to wired USB-PD, useful for top-off charging. Having adequate USB-PD input power (e.g. 30 watt wall power USB-PD adapter) to the Qi wireless charger is vital to meet full power charging specs.

The closer the phone (thinner the case) and better aligned the phone is, the faster and cooler it will charge. If the device is getting too hot, it will backoff the charge rate to maintain appropriate temperature. The thermal insulating effect of the phone case retains extra heat from charging.

Fortran MPI on Windows

MPI on Windows with C and Fortran is best accomplished with Windows Subsystem for Linux (WSL) using OpenMPI or MPICH, which gives full performance MPI. For x86_64 CPUs, Intel MPI library has full MPI support including the Fortran “mpi_f08” interface.

Using WSL to use MPI on Windows is especially important for ARM64 CPUs, which are not supported by Microsoft MS-MPI at the time of writing. We use WSL on Windows for MPI because the “mpi_f08” interface is not yet natively available on Windows via Microsoft MS-MPI whether with or without MSYS2. Neither OpenMPI or MPICH is buildable or available with native Windows.

To install Microsoft MPI on an x86_64 CPU machine, one can use the Windows Package Manager (winget) to install MS-MPI:

winget search Microsoft.msmpi

The MSYS2 MS-MPI library can be installed from the MSYS2 Terminal:

pacman -S mingw-w64-ucrt-x86_64-msmpi

Upon installing or updating Intel oneAPI compilers and libraries on Windows, you may experience CMake failing to find MPI for MinGW. This happens because Intel compilers put Intel MPI on the system PATH. Fix this by removing Intel MPI from the system PATH and use the Intel Compiler shell instead, which provides all the needed directories.

Identify Raspberry Pi hardware from Terminal

Especially for remote Raspberry Pis or those embedded inside a housing, it is useful to identify the hardware identity from the Terminal:

cat /sys/firmware/devicetree/base/model

Raspberry Pi 3 Model B Rev 1.2

cat /proc/cpuinfo | grep Model

Model : Raspberry Pi 3 Model B Rev 1.2

To further distill which hardware revision (like 3B vs. 3B+), manufacturer, RAM, etc. use this table from Raspberry Pi documentation to decode.

cat /proc/cpuinfo | grep Revision

Kill (force end) a program in Windows Terminal

On Linux or macOS one can kill (force end) a program in Terminal by program name using the pkill command. Windows users can similarly kill a program in Windows Terminal by program name using the taskkill command. For example, suppose that Notepad is so locked up that even using Task Manager to end the program doesn’t work - or a non-GUI way of killing a program is desired. From Windows Terminal force end a program by name like:

taskkill /IM notepad.exe

Similar to “pkill” that sends SIGTERM by default on Unix-like systems, the taskkill command above sends a request to the program to terminate gracefully. If the program does not respond, the “/F” option of “taskkill” can be used to force end a program:

taskkill /F /IM notepad.exe

This is similar to a Unix-like system SIGKILL “-9” signal, which can be sent to a program using the “pkill” command like:

pkill -9 notepad

Lower power microwave ovens can be better

Microwave oven power levels are often prominently displayed, along with their cooking volume. However, larger volume means a larger exterior case, which can waste counter space. Many people are using microwaves for a far smaller volume of food than the maximum capacity, which can lead to uneven cooking. It’s quite important to use “power level” appropriate for the type of cooking being done - reheating vs. defrosting vs. cooking frozen foods, etc. The downsides of higher power (1000 watt plus) microwave ovens include:

  • non-inverter microwave ovens are only on-off to modulate power level, and the “on” portion can be so intense that it can overcook or dry out food, especially when reheating or defrosting.
  • many people do not use the “power level” setting, and the default high power setting is way too intense for refrigerator reheating or defrosting.

A lower power say 0.7 cubic foot microwave oven with 700 watts of power can be far better suited for countertop use. For those users who don’t use the “power level” setting, 700 watts full power is like a 63% power setting of a 1100 watt inverter microwave oven, which is a more reasonable power level for reheating. It’s still beneficial to use power level setting on a 700 watt oven.

Apple Studio Display diagnose Thunderbolt connection

The Apple Studio Display has an onboard CPU with upgradable firmware and uses a Thunderbolt connection from the computer. The 2022 first generation Apple Studio Display uses Thunderbolt 3, and the 2026 second generation Apple Studio Display uses Thunderbolt 5. If Thunderbolt connection isn’t available (due to the computer or cable) then the Studio Display falls back to DisplayPort mode, which lacks features like wake from sleep.

Querying the display Thunderbolt connection is distinct but straightforward across operating systems:

Windows

Get-PnpDevice -PresentOnly | Where-Object { $_.FriendlyName -match 'Thunderbolt|USB4' } | Format-Table Status, Class, FriendlyName, InstanceId -AutoSize

The first generation Apple Studio Display will have a FriendlyName like “Thunderbolt 3(TM) Router, Apple Inc. - Studio Display”

macOS

system_profiler SPThunderboltDataType | grep -A 20 -i "Studio Display"

The Studio display should show up detailing the Thunderbolt connection.

Linux

The bolt utility is available on many desktop Linux distros:

boltctl list -a

and similar should show Thunderbolt-connected display. Alternative:

lspci | grep -iE 'thunderbolt'