Fiji / ImageJ cannot directly read Cinepak codec video files.
Convert from Cinepak to popular video formats using FFmpeg.
This conversion can be done on the command line as in this article, via an
FFmpeg import plugin.
Motion JPEG is widely-compatible with video players including ImageJ.
ffmpeg -i old.avi -c:v mjpeg -q:v 1 out.avi
Uncompressed AVI output file size could be a factor of 10 larger than the Cinepak version.
By definition, every video player should be able to play uncompressed AVI–including ImageJ.
ffmpeg -i old.avi -c:v rawvideo out.avi
Lossless FFV1 preserves the original video quality with lossless compression.
Many video players can handle FFV1 AVI video.
ffmpeg -i old.avi -c:v ffv1 out.avi
The advantage of using a
PNG image stack
comes in frame-by-frame analysis of the video.
Consider converting video to HDF5 using
dmcutils/avi2hdf5.py
for analysis purposes.
Windows Subsystem for Linux (WSL) uses
VHDX
files to store each distribution’s filesystem.
Over time these disk images grow in size as files are added and deleted.
However, the space used by deleted files is not automatically reclaimed, leading to larger disk images than necessary.
There is a
PowerShell script
to automatically compact WSL VHDX files that works with any of the Windows release levels (including Home).
The
jpegtran
command line tool allows lossless transformations on JPEG images, including rotation, cropping, and flipping.
This is particularly useful when you want to modify JPEG images without re-encoding them, which can lead to quality loss.
Example: lossless clockwise 90 degree rotation of a JPEG image “input.jpg” and save the result to file “output.jpg”:
WiFi
captive portals
and public networks often block outbound network port traffic.
Sometimes even VPNs are blocked.
Often only ports 80 (HTTP) and 443 (HTTPS) are allowed.
To quickly determine if outbound network ports are blocked, portquiz.net is a useful free service.
Using Python automates this process for multiple ports concurrently using concurrent.futures.ThreadPoolExecutor threads or asyncio.
We provide an
example
of each method in short scripts.
The examples shows that Asyncio using Semaphore with AIOHTTP can be faster than ThreadPoolExecutor with urllib.request.
Solutions to blocked ports for SSH include using
SSH ProxyJump
with an intermediate TRUSTED server on an allowed port.
Some remote SSH systems actually require this, where they the desired server has only LAN access, and a gateway SSH server with no privileges is used as the SSH ProxyJump by network design.
The ultimate workaround would be a mobile hotspot (different network).
If using a GUI, the --shell-escape option may need to be added.
In TeXmaker / TeXstudio, under “Options → Configure → Commands” add --shell-escape right after the compiler executable like xelatex --shell-escape or pdflatex --shell-escape or latexmk --shell-escape.
If “pygmentize” isn’t found, under TeXstudio Preferences → Build, check Show Advanced Options in the lower left checkbox and set Additional Search Paths → Commmands ($PATH) to the directory containing “pygmentize”, e.g. /opt/homebrew/bin on macOS with Homebrew or whatever directory comes up for which pygmentize in a Terminal.
In general operation systems set a limit to the number of open files per process.
A “file” might be a regular file, a socket, a pipe, etc.
When a Python program exceeds this limit, it raises exception:
OSError: [Errno 24] Too many open files
Such issues might tend to arise with highly concurrent applications as enabled by asyncio or higher-level libraries.
Resolving such asyncio concurrency issues generally involves asyncio
primitives
like
asyncio.Semaphore.
Implementing asyncio libraries correctly is so
non-trivial
that using higher-level libraries that implement such concurrency control
correctly
can be a better idea.
It’s important to go beyond toy examples and consider
real-world
concurrent Python usage patterns.
Certain projects with legacy build systems like Make or Autotools or in general may specify to build with flags like “-fPIC” for position independent code (PIC) on Linux systems.
Consider not forcing these flags in CMake projects if there isn’t a specific known need, to let users and consuming projects decide whether they need PIC or not.
When PIC is needed, do like:
Since CMake 3.13 was released in 2018, a more elegant two-step CMake build process is available with the simple syntax
cmake -B ./build
cmake --build ./build
The CMake configure command
with the “-B” option generates the build system files in the specified build directory.
It’s best to build out-of-source in general, so we specify a separate “./build” directory here.
The
cmake –build
build command executes the build tool configured for the project, e.g. Make, Ninja, MSBuild, etc.
The “./” can be omitted, we only include it here for clarity.
We keep seeing even the largest OEMs using the
old-fashioned
three-step process.
Check your projects’ example and docs to update them to the less-confusing and compact two-step CMake build process.
In CMake projects (or other build systems) it’s more robust to detect compiler features rather than make brittle, difficult to maintain nested if / elseif logic trees based on compiler vendor and version.
There are edge cases where if() statements to work around known compiler bugs are necessary, but where we can, we use compiler feature checks instead.
Each compiler vendor such as
AppleClang,
GNU
GCC,
LLVM Clang,
typically publishes
tables
of compiler features vs. language standard support in their documentation.
These tables might not cover every aspect of feature support, or the project invocation of that support may trigger bugs in specific compiler versions.
Then, either hard-coded build system logic or preferably configure-time feature detection is needed.
An
example
using
check_source_compiles
in a CMake project requires C11 variable length arrays.
The CMakeLists.txt would look like:
include(CheckSourceCompiles)set(CMAKE_C_STANDARD11)set(CMAKE_C_STANDARD_REQUIREDON)# so that check_source_compiles sets the correct language standard
set(CMAKE_TRY_COMPILE_TARGET_TYPESTATIC_LIBRARY)# save link time, only compile is needed
check_source_compiles(C"int main(void){
for (int i = 1; i < 5; i++){
int a[i];
}
return 0;
}"c11vla)if(NOTc11vla)# fatal error or disable feature using C11 VLA
endif()add_executable(c11demodemo.c)
project('c11vla_demo','c',default_options:['c_std=c11'])c11_vla=meson.get_compiler('c').compiles(required:true,name:'c11_vla','int main(void){ for (int i = 1; i < 5; i++){ int a[i]; } return 0; }')
12.5 kHz channel spacing is
permitted
in certain cases by the FCC in VHF marine radio.
Despite
experiments
demonstrating the practicality of using 12.5 kHz channel spacing on VHF marine radio, currently available radios and practice appear to remain at +/- 5 kHz deviation and 25 kHz channel spacing.
Unlike the vocal
controversy around 1969 over narrowbanding
VHF marine radio from +/- 15 kHz deviation to +/- 5 kHz deviation, there appears to be little controversy over channel spacing.