Fortran has a long legacy of preprocessing systems, reaching back at least to the 1970s when C was not yet widely known.
I would argue that modern Fortran ≥ 2008 has eliminated most preprocessors use cases.
It’s usually much cleaner and quicker (build/runtime) to use Fortran submodule to switch functionality such as
MKL vs. Atlas vs. Netlib Lapack
using CMake, for example.
Numerous Python preprocessors have arisen (and sunk) along with the usual C/C++-based preprocessors.
The only thing we use preprocessors for is very simple single-line statements, where adding a submodule would be significantly more cumbersome than a one-liner preprocessor statement.
Historically, very elaborate Fortran preprocessors were developed such that they nearly became a language unto themselves.
A few quick start tips for using
EZNEC
antenna design software for yagi antennas.
This is assuming a yagi antenna for 440 MHz band.
Ground: start with “free space”. If the antenna model is too close to the ground, the simulation can be unrealistic. Once satisfied in free space, consider real ground (non-free space)
Number of segments: suggest 5 per wire, with free EZNEC license
Number of yagi elements: 3..5 elements are possible with free EZNEC at 440 MHz.
CMake by default searches for shared libs before static libs.
Sometimes a project needs to specifically link external or internal static libs, even if shared libs are present.
A simple cross-platform way to do this is to set
CMAKE_FIND_LIBRARY_SUFFIXES
before any find_library() or find_package():
set(CMAKE_FIND_LIBRARY_SUFFIXES.a.lib)
This takes advantage of de facto static library extensions for macOS, Windows and Linux, using CMake system variables.
The default values for CMAKE_FIND_LIBRARY_SUFFIXES are set by (depending on platform and compiler) CMake
Reading RINEX files in Python or other languages historically required compiling or buying complex software.
The
GeoRINEX
Python 3 program and library to be used with RINEX OBS and NAV files, including Hatanaka compressed files or other compression wrappers like ZIP.
GeoRINEX can even read only every N seconds from a RINEX file with option georinex.load(..., interval=N).
This greatly speeds up reading where coarser time intervals than the RINEX file provides is needed.
GeoRINEX uses performance-oriented techniques to read RINEX files at speeds approaching compiled languages, using Pure Python + Numpy and Xarray for metadata rich results.
If you use GNSS and RINEX in your work, you may like
GeoRINEX
for Python 3.
For those dual-booting Windows and Linux, it’s useful to disable Windows Fast startup so that you can access the Windows partition from Linux.
Disabling Fast Boot may add a few seconds to boot time.
When you shutdown your PC, Fast Boot actually reboots and then hibernates.
This locks the Windows partition so that Linux can’t access it.
Disable Fast Boot:
⊞+rpowercfg.cpl → “Choose what the power button does”.
We typically disable hibernate as well to save on SSD wear.
Disable fast boot
BitLocker and dual-booting: If BitLocker is enabled, Linux cannot access the Windows partition.
Fast Boot SSD wear: Fast Boot just like hibernate increases solid state drive (SSD) wear, since you are dumping an image ~ RAM size to disk on each Fast Boot shutdown.
Python users typically use a non-system Python distribution such as Miniconda.
Python distributions typically allow easy switching of Python version.
Where Linux system Python must be used, the default Python version can be switched persistently with update-alternatives.
Update-alternatives without sudo: a one-time setup.
Configure shell to use ~/.local/bin instead of system-wide /usr as follows:
mkdir ~/.local/bin
Add to ~/.profile:
exportPATH="$HOME/.local/bin:$PATH"
Enable switching Python default between Python versions with these one-time commands: