AutoCAD 2-D libre
alternatives
are available for Linux, macOS and Windows.
They generally require retraining for users coming from AutoCAD.
Libre 2-D AutoCAD-like choices include FreeCAD, QCAD and LibreCAD.
FreeCAD is 3-D parametric modeling akin to SolidWorks that can
import DXF or DWG.
QCAD has distinct paid vs. Community Edition
features
include DWG and DXF read / write.
LibreCAD can read / write DXF and read DWG.
The free-to-use
Nvidia HPC SDK
offers possible speed improvements and
CUDA Fortran.
A typical reason for using Nvidia HPC SDK is the Cuda GPU features.
Nvidia HPC compilers support C11, C++23, and partial Fortran 2008 including submodule and error stop.
To use newer languages standard features ensure the underlying GCC toolchain is set to a new-enough compiler as per Nvidia HPC SDK documentation.
The compiler path can be determined on RHEL-like Linux distros like:
scl enable gcc-toolset-12 "dirname $(which g++)"
If using a
CMake toolchain file,
instead of CXXFLAGS environment variable, one can set
The MSVC compiler needs the /utf-8 flag when UTF-8 strings are in the source file.
If not specified, too many bytes are assigned to each character, leading to incorrect string lengths.
This will lead to failures with string width conversions such as
WideCharToMultiByte.
Windows Intel oneAPI compiler didn’t need the /utf-8 flag when tested.
Matlab version upgrade can be initiated from the system Terminal or from the
Matlab Help menu.
Running the upgrade or Add-On install requires a graphical connection to the computer (Remote Desktop, VNC, or similar).
The bell icon on the upper right corner of the Matlab Desktop typically shows when a Matlab update is available.
To force checking for install, even if the bell is not showing an update, under the Matlab binary directory look for “MathWorksUpdateInstaller”
Matlab
Add-On Explorer
is normally launched from the Matlab Desktop.
The Add-On Explorer requires a graphical connection.
To launch Add-On explorer from the Matlab binary directory look for executable “AddOnInstaller”
Generating a range of datetime data is a common data analysis and simulation task across programming languages.
Matlab and GNU Octave can also generate datetime vectors.
CMake 3.32 enables
CMAKE_LINK_WARNING_AS_ERROR
boolean option sets most compilers to error if a compile warning occurs, which is generally a good setting for CI systems.
target_link_libraries()
can use a LINKER: prefix to abstract options.
CTest
–interactive-debug-mode
is particularly useful on Windows to enable debug dumps and error popup windows.
CMake
3.31
warns if cmake_minimum_required() is
< 3.10.
TLS ≥ 1.2 is required by default for internet operations e.g. file(DOWNLOAD), ExternalProject, FetchContent, and similar.
file(ARCHIVE_CREATE)
gained a long-needed WORKING_DIRECTORY parameter that is essentially necessary to avoid machine-specific paths being embedded in the archive.
CMAKE_LINK_LIBRARIES_STRATEGY
allows specifying a strategy for ordering target direct link dependencies.
CMake
3.30
adds C++26 support.
CMAKE_TLS_VERIFY
environment variable was added to set TLS verification (true, false).
CMake 3.31 defaults CMAKE_TLS_VERIFY to on, where previously it was off.
CMake
3.29
adds
cmake_language(EXIT code)
to exit CMake script mode with a specific return code.
This is useful when using CMake as a platform-agnostic scripting language instead of shell script.
Environment variable
CMAKE_INSTALL_PREFIX
is used to set the default install prefix across projects–it can be overridden as typical by cmake -DCMAKE_INSTALL_PREFIX= option.
Target property
TEST_LAUNCHER
allows specifying a test launcher.
For MPI program this allows deduplicating or making more programmatic test runner scripts.
Linker information variables including
CMAKE__COMPILER_LINKER_ID
have been added to allow programmatic logic like setting target_link_options() based on the particular linker.
CMake
3.28
changes PATH behavior for
Windows find_{library,path,file}()
to no longer search PATH.
This may break some projects that rely on PATH for finding libraries.
The MSYS2-distributed CMake is patched to include PATH like earlier CMake, which can be confusing for CI etc. not using MSYS CMake with that patch.
Windows CI/user may need to specify CMAKE_PREFIX_PATH like
Support for C++20 modules is considerably improved and most users will want at least CMake 3.28 to make C++ modules usable.
Generator expressions $<IF> $<AND> $<OR> now short circuit.
Test properties now have a DIRECTORY parameter, useful for setting test parameters from the project’s top level CMakeLists.txt.
CMake 3.28.4 fixed a long-standing bug in Ninja Fortran targets that use include statements.
Optimizing compilers may enable
strict aliasing.
For a wide variety of existing projects, strict aliasing provides additional optimization.
For some projects, such as
MUMPS,
memory leaks have been observed that are resolved by disabling strict aliasing using GCC flag “-fno-strict-aliasing”.
Compilers with ability to switch on / off strict aliasing include:
Zstd is an open file compression
standard.
Zstd has become widely used and is incorporated in the
Linux kernel
and GCC.
We use Zstd for data archiving particularly for large files where size and speed are a concern.
CMake supports Zstd compression throughout, including
file(ARCHIVE_CREATE)
and
file(ARCHIVE_EXTRACT).
Zstd is
vendored
into CMake, so there is no need to worry about system shared libraries for Zstd.
file(ARCHIVE_CREATE ... WORKING_DIRECTORY ...) is necessary to avoid system-specific relative path issues.
In Matlab,
fitsread
is used to read specific frame(s) from a FITS file.
That is, you can read frames one at a time from a large multi-frame FITS file in MATLAB.
This avoids overwhelming RAM or taking an excessive time to load just one or a few image frames from a FITS file.
Example: sequentially read and plot each frame of a 4096-frame FITS file, with each frame being 256 x 256 pixels.
for i = 1:4096 currFrame = fitsread('myFile.fits', PixelRegion={[1256],[1256],i}); imagesc(currFrame) pause(0.05)end
GNU Octave FITS reading is done with the
cfitsio
package using a
similar API.