nullptr is a better defined replacement for NULL in the
C++11 standard
in header <cstddef> and in the
C23 standard
in header <stddef.h>.
Include these system headers in source code to be platform independent.
Modern version of compilers such as GCC have been refining internal includes to have narrower include scope.
The basic structure for a rapidly updating animated plot with Matplotlib, without using
matplotlib.animation
is described below for imshow() and pcolormesh().
NOTE: matplotlib.pyplot.draw()
only takes effect on the CURRENT (most recently called) axes.
If updating multiple axes, call draw() after each set of axes is modified.
Both examples assume:
frommatplotlib.pyplotimport figure, draw, pause
# imgs is a N x X x Y image stackfg = figure()
ax = fg.gca()
If the pause() statement time is too small, Matplotlib may not update the plot at all.
Consider your display may not be able to update faster than about pause(0.01).
Intel oneAPI 2023 provides GNU-like and MSVC-like
compiler drivers
for Windows.
This is a good thing, but CMake had assumptions that only C++ compiler driver icpx OR icx would be present.
CMake 3.25.2
fixed
oneAPI 2023 compiler detection on Windows.
Long term, GNU-like
support for Windows
may also come.
Until you update CMake, you can workaround this issue of C++ oneAPI compiler detection on Windows by configuring the CMake project like:
Numerous programs can write data in
VTK file formats
accessible from VTK-compatible programs such as ParaView.
One of these format is “.vtu”.
Adaptive Mesh Refinement (AMR) library
ForestClaw
has its own routines to write VTK data.
The base 2D VTK writing is done in “forestclaw/src/patches/clawpatch/fclaw2d_clawpatch_output_vtk.c”.
The function “fclaw2d_vtk_write_header()” writes the XML header for
UnstructuredGrid.
Visual Studio executables built in Debug mode by default pop up
modal
debug windows if an unhandled exception occurs.
This can be annoying to developers particularly when unit testing a project.
On remote systems, modal windows can become a real issue if the modal window is accidentally off-screen.
In such cases it is sometimes hard to get the modal window back to the main desktop to be closed.
Adding a few lines of code to the C++ program works around this issue by redirecting the error text to stderr console and not popping up the modal window.
_CrtSetReportMode keeps the model window from appearing.
_CrtSetReportFile redirects the message text to stderr so that the message can be diagnosed.
This is also relevant to continuous integration systems such as GitHub Actions, which may hang with an unrealized modal dialog otherwise.
Visual Studio can detect memory leaks in programs with
_CrtDumpMemoryLeaks.
This minimal example doesn’t do the printout.
Using these checks requires the project is build in Debug mode.
More complete working
minimal example
that prints the memory diagnostics with Visual Studio.
On Linux, Valgrind can be used to detect memory leaks.
Numerous other free memory checkers are available and work with CMake CTest frontend.
#ifdef _MSC_VER
#include<crtdbg.h>#endif
intmain(void){
char* c
c = malloc( 100 );
// unfreed memory, a deliberate leak
// near the end of the function to be checked
#ifdef _MSC_VER
_CrtDumpMemoryLeaks();
#endif
return0;
}
Matplotlib on any platform can use FFmpeg, Avconv or Mencoder to directly write lossy or lossless compressed movies created from sequences of plots.
Instead of creating hundreds of PNGs, or skipping plots and missing details, Matplotlib movies of a large sequence of plots is highly effective for many processes that evolve across time and/or space.
In matplotlib_writeavi.py,
just four added lines of code do the AVI writing.
First line tells Matplotlib to use
FFmpeg.
Second line tells Matplotlib to make a lossless FFV1 video at 15 frames/sec.
One can optionally use codec='mpeg4', but lossy encoding can wash out details of plots.
Third line says to use 100 DPI (smaller DPI–smaller file and movie size).
The macOS terminal defaults to UTF8.
When SSHing into a macOS computer from a non-macOS computer, or any computer with a different locale, there may be problems running programs on the remote where locale is important.
For example, a Linux system with “C” locale may cause .zip archive extraction on remote macOS to fail like:
Pathname cannot be converted from UTF-8 to current locale.
Locally on the macOS computer (or using Remote Desktop over SSH), check locale with:
Python packaging can be described in pyproject.toml alone per PEP 621.
These packages are installable in live developer mode:
python -m pip install -e .
Or via PyPI like any other Python package.
It can be most effective to put all project configuration, including Python package prerequisites in pyproject.toml alone as a single source of truth.
pyproject.toml is human-readable and machine-parseable without first installing the package.
Putting all package metadata into pyproject.toml instead of setup.py gives benefits including:
reproducible results
security risk mitigation
dynamic prerequisite tree based on Python version etc.
static or dynamic package version
This is an example of a minimal pyproject.toml that works all alone, no other metadata files required, except perhaps MANIFEST.in for advanced cases.
The __version__ is contained in file mypkg/__init__.py as Python code: