# NeXtMidas 4.1.4 Release Notes

(We are currently keeping this series JDK 8 to JDK latest compliant by adding a preprocessing step to builds that swaps code based on the JDK compiler. This series may still drop JDK 8 support, but currently supports JDK 8u312+.)

NeXtMidas SYS Option Tree Tested on: (tests with Java 8, 11, 17, 21, and 22)
OS Version | Platform | Native Compiler(1)(2)(3) (SYS Option tree) | Web Browser (WebStart)
--- | --- | --- | ---
CentOS 7.9 | Linux (x86_64) | gcc 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022 | Firefox 115.10.0esr (64-bit) with IcedTea-Web 1.8.3
RHEL 8.10 | Linux (x86_64) | gcc 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023, 2024 |
RHEL 9.4 | Linux (x86_64) | gcc 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023, 2024 |
Windows 10 | Windows (x86_64) | pre-compiled DLLs (MinGW64 gcc 12.2.0) |
Fedora 40 | Linux (x86_64) | gcc 14.1.1 |
Debian 11.9 | Linux (x86_64) | gcc 10.2.1 |
XBC And NeXtOpt Tested on: (XBC - Allows running of X-Midas Fortran/C++ primitives in NeXtMidas) (NeXtOpt - NeXtMidas as an option tree for X-Midas) (tests with Java 8, 11, 17, 21, and 22)
OS Version | Platform | X-Midas Mode | C/C++ Compiler(1)(2)(3) | Fortran Compiler(2)(3)
CentOS 7u9 | Linux (x86_64) | NeXtOpt (X-Midas 5.9.5) | gcc 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022 | gfc with DEC FORTRAN ext. 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022
NeXtOpt (X-Midas 5.8.1)4 | gcc 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022 | gfc with DEC FORTRAN ext. 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022
NeXtOpt (X-Midas 5.6.3) | gcc 4.8.5 / Intel 2019, 2020, 2021 | gfc with DEC FORTRAN ext. 4.8.5 / Intel 2019, 2020, 2021
XBC ("64Bit") | gcc 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022 | gfc with DEC FORTRAN ext. 4.8.5 / Intel 2019, 2020, 2021, 2022 / Intel LLVM 2022
RHEL 8u10 | Linux (x86_64) | NeXtOpt (X-Midas 5.9.5) | gcc 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023, 2024 | gfortran 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023, 2024
NeXtOpt (X-Midas 5.8.1)4 | gcc 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023 | gfortran 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023
NeXtOpt (X-Midas 5.6.3) | gcc 8.5.0 / Intel 2021 | gfortran 8.5.0 / Intel 2021
XBC ("64Bit") | gcc 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023, 2024 | gfortran 8.5.0 / Intel 2021, 2022, 2023 / Intel LLVM 2022, 2023, 2024
RHEL 9u4 | Linux (x86_64) | NeXtOpt (X-Midas 5.9.5) | gcc 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023, 2024 | gfortran 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023, 2024
NeXtOpt (X-Midas 5.8.1)4 | gcc 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023 | gfortran 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023
XBC ("64Bit") | gcc 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023, 2024 | gfortran 11.4.1 / Intel 2022, 2023 / Intel LLVM 2022, 2023, 2024
Fedora 40 | Linux (x86_64) | XBC ("64Bit") | gcc 14.1.1 | gfortran 14.1.1
(1) $NM_CC and $NM_CXX were set to point to the Intel C/C++ compiler (icc/icpc or icx/icpx), where applicable. (2) Intel 2020 and earlier refers to Intel Parallel Studios, whereas Intel 2021 and later refers to Intel oneAPI. (3) Intel refers to the default ifort/icc/icpc compilers, whereas Intel LLVM refers to the ifx/icx/icpx compilers. (4) To test NeXtOpt with the Intel LLVM Fortran compiler IFX, the second debug build in $XMDISK/xm/MidasMakefile.in was commented out before building X-Midas.

#### Online Documentation

- `Via Web Browser: $NMROOT/htdocs/help/index.html
  (Now includes the NeXtMidas Training Class and an updated version of the NeXtMidas User's Guide.)`

#### Java 11 Migration

- Later Java versions are having significant API changes between releases. This is making it impossible to have efficient code that works at all Java versions 8 and up. We are also aware that due to the major changes, including the dropping of WebStart in JDK 11, that many users are still running on Java 8. This series may transition to only JDK11+ support, but we are trying to keep this series JDK 8u312+ compatible by adding a preprocessing step to builds that swaps code based on the JDK compiler.

#### What Might Break (Changes in Behavior)

BaseFile/DataFile | - | DataFile constructors have been fixed so that when KeepCase is passed in as a flag, the constructor honors it. The bigger change in progress is that a bug in Java usage, where a quoted all upper case filename is automatically lower cased is being addressed by distiguishing between Java (including OS command usage) and traditional Midas usage (from a macro or nM> prompt). Due to limits in how NeXtMidas RESULTS are handled and the macro language, the legacy/correct behavior for traditional Midas usage is for all upper case file names that make it to this BaseFile (and its child classes) to be assumed to be all lower case. The new default for Java API usage (and OS usage) will be for file name casing to be honored.
CHECKAUTHORIZATION | - | PLEASE INFORM the NeXtMidas team if you are using this command. Usage to perform the actual queries is now limited due to REST attribute services going to a more complex query mechanism. Use this with caution! This command, especially the REST query based portion, may be deprecated in the near future, unless we hear it is still useful.
DATABASE (NMDB) | - | Upgrading to an hsqldb jar that does not have a vulnerability now has the result sets coming back first row first (rather than last). It also causes a divide by zero exception on queries such as: select distinct round(id/0.1,2) as ...., where select distinct round(id/1e-1,2) as ... still works. The code has been adjusted to support getCSV() returning values in legacy order. A static setter can be used to get the new natural behavior. IMPORTANT: Since the hsqldb jar is only used for automated testing, we are only including the JDK11+ version of the jar. We anticipate removing the jar all together when we start the 43x series, as having it bloats the baseline and increases the risk of releases having a CVE.
DATALIST/DataFile | - | listElements(double,int,String,int) has been updated to use different API which allows a scalar separator to be specified for listing type 1000 and default elements. The default scalar separator was ',', but as of NeXtMidas 4.1.2, it is '|'. To change this delineator, use the static setter DataFile.setScalarSeparator(String).
LayerWMS | - | wms_coor_sys.xml has been updated to prefer the newer EPSG:4326 Coordinate Reference System over the older CRS:84.
MApplet | - | Applet support is being dropped from the 41x series, since Java has marked Applets as deprecated for removal. Though the direct dependencies have been removed in 4.1.0, extra code clean up will be done in future releases.
PLOT/ALL | - | PLOT/ALL of a 1000 file will automatically prescale the data, as the purpose of the /ALL switch was that all the data would be rendered within the plot bounds. Without this fix, some of the 1000 data can end up beyond plot bounds, without the user realizing it. The only reason this is listed in the What Might Break is that prescaling does add a small amount of overhead.
SSLUtilities.verifyGroupProject and SSLUtilities.verifyUserAttribute | - | These methods were intended for use by CHECKAUTHORIZATION, rather than direct usage. As mentioned with the CHECKAUTHORIZATION command, these are beyond useful life as REST attribute services are going to a more complex query mechanism. Please let the NeXtMidas team know if you have an application where they are useful, as the plan is to deprecate these methods.
Time | - | Times greater than one day and less than or equal to one year have been displayed in 1950 time formats. As of 4.1.2, times greater than one day and less than or equal to one year are displayed in relative time formats, such as 'DDD:HH:mm:ss.SSS' for STD and ACQ times, as well as 'sec_in_year' for EPOCH times.

#### New Features Added

Intel oneAPI 2021 | - | As of 4.0.1, XBC and NeXtOpt have been tested with Intel oneAPI 2021. Intel oneAPI provides a free version of Intel that does not require a license to use it.
LIBNXM / Reduced Footprint Build Options | - | A number of reduced footprint build options are available as of 4.1.3. See our User's Guide for more information (links below work when docs are built). NXM With Fewer 3rd-Party Dependencies NXM Without Large DAT Files Library NeXtMidas (LIBNXM)
JDK Compiler based code | - | Due to the need to continue to support JDK 8, while also supporting the most current JDK, we are beginning to support very limited pre-compile code swapping based on a .jdk, .jdk## convention. This is done automatically and keeps users from needing to manually uncomment or comment out code to get efficient or fully functional behavior. As of NeXtMidas 4.1.1, the only code affected relates to logging using our LogUtilities/CallStackUtil code. To get full and efficient JDK9+ behavior required following directions in CallStackUtil.java and uncommenting and commenting out code. Even so, this still left users with a log message with a stacktrace. Advanced details: The minimal code that needs to be swapped is now in CallStackUtilSwap.jdk08 and CallStackUtilSwap.jdk. The .jdk08 indicates that version will be placed in CallStackUtilSwap.java when compiled with java versions up to 8. The .jdk indicates that version will be copied to the java file for all JDK versions beyond the latest ## (in .jdk##). This should largely be transparent to the user, both with traditional NextMidas builds and with Gradle builds.
New Commands | - | CHECKTIMEKEYWORDS;SYS - Visualization tool for diagnosing issues with uSec or TC high precision time codes
| - | WEBVNCSERVER;WEBVNC - An HTTP/1.1 server that proxys a VNC session to a HTML Canvas using noVNC. Automatically starts a vncserver and websocket proxy for each client. Since NeXtMidas 4.1.1.
New Option Tree | - | minio - New Initial MinIO Support Prototype Compile time dependency: minio jar (included) Run time dependencies: see minio_dependencies.txt S3 commands: S3GET, S3LS, S3PUT, S3RENAME, S3RM Limited NXM command support (NOOP and STATUS)
Libraries | - | DataFile - Better support for PLATINUM files. When PLATINUM files are used as input to a function (ex: FFT, not just STATUS/KEY) the default is now to use the NeXtMidas underlying libraries for PLAT2BLUE conversion to automatically convert PLATINUM Keywords to BLUE. A warning is issued when the PLATINUM file is missing keywords (as defined by the JICD 4.2 ICD). This default autoconversion of PLATINUM can be disabled globally or on a file by file bases. The previous behavior was to error out under these conditions.
| - | DataTypes New 'J' 12-bit packed Data Type was contributed by Jeff Schoen for 4.1.2 12-bit is primarily designed for data transfer and storage DataFile.write requires writes to be at even byte boundaries (ex: transfer lengths that are multiples of 2 for SJ data) Most commands, including PLOT, FFT, and WAVEFORM, are supported, but some require extra care when working with SJ. (ex: DATALIST number of columns should be a multiple of 2) When an 'I' value is placed in a 'J', the top 12 bits are saved
Gradle Support | - | Support has been added to convert NeXtMidas to a gradle directory structure and to publish artifacts to Nexus. Please find instructions located at $NMROOT/gradle/readme.txt
Midas versus Java usage detection | - | Support for detecting Midas versus Java usage is being phased in. The immediate need was for the casing for file names passed in in quotes via Java API to be honored, rather than having all upper case names automatically converted to all lower case names. There are other scenarios users have been experiencing where traditional Midas behavior conflicts with Java behavior. With many users running primarily as a Java Application, it is important for Java usage to be compatible with other Java code. For the 41x/42x series legacy behavior will continue to be the default. Starting with the 43x series auto-detection of Java versus Midas usage will be the default. NeXtMidas usage coming from a macro, nM>, or single-shot mode (nm ....) will be auto-detected as traditional Midas usage, where running a Java application from a main will be considered Java usage. As of 4.1.4 users can opt in to Java usage via the environmental variable NM_JAVA_MODE being set to "ON" or by setting needJavaBehavior() on their Midas instance.
Existing Commands | - | The list below contains NeXtMidas commands. Each command is listed with the new feature that has been added at the request of the user.
| - | CONVERT BLUE2JSON - Basic BLUE2JSON (similiar to BLUE2XML) support was added in NeXtMidas 4.1.1. Additionally, BLUE2JSON can have an OPTIONS={keyword_conversion_table} specified that allows mapping of the keywords to a nested JSON output. A limited number of conversion options (other than direct mappings) are also available. The options are similiar to those supported by KWCONV. Both of these are in a functional Beta stage. See the CONVERT explain file and FileUtil.java for more details. XML2TAB now has some support for handling dots in keys. The Table created is a provisional Table, with the +AllowDotsInKeys flag set. A warning is issued when the XML contained '.'s in keys and this type of Table is created. It is strongly recommended that the '.'s in the Table keys be replaced before serialization, otherwise the current default substitute in this case is ''. The nested key get via the key1.key2.key3 syntax does not work on these +AllowDotsInKeys Tables, but they are restricted to the access methods used by Java Maps.
| - | GCONTROL New TVAL .... /fmt="HH:MM:SS.SSSS" The HMS format now supports fractional seconds, where the number of franctional seconds is specified by the number of 'S' characters beyond the decimal place. See gcontrol.exp
| - | IF AEXISTS - Any type (file or directory) exists
| - | PLOT New LayerWMS GWC=true This WMS option enables GeoWebCache friendly settings, to allow cached results to be returned. (4.1.0) New WMS layer transitions can now be customized, allowing base layers to be automatically set based on the visible area of the map (zoom level). (4.1.0) New LayerWMS ByNameCRSs= is a shorter means of giving preference to a Coordinate Reference System (4.1.0) New LayerWMS RequestVersion This WMS option must be set before the URL is specified. LayerWMS defaults to preferring the latest WMS version supported (i.e. 1.3.0). This option allows an easy override to force a preference for version 1.1.1. (4.0.0) New Layer2D /CUTS switch allows a cross-section "cut" on piped data. (4.1.2) New LayerT5 ellipsoids can now be plotted as a wire cage. (4.1.3) New LayerT5 highlight and visibility filter support based on a Java Map containing key (field name) / value (Java Predicate) map. (4.1.3) New READOUTS include radius on IQ plots(4.1.4) New Time axis READOUTS will default to DateString, rather than Scientific E9 times. This is intended to make the readout human readable. To get old behavior add -DateString to remove this READOUT option (4.1.4) New LayerGeoJSON This new Layer adds support for plotting GeoJSON files with file extension .geojson (4.1.4)
| - | RMIF /STATEM enables state machine based message handling for NXM to NXM or NXM to M2K communication. rmif.for was not updated, so this switch should not be used for NXM to XM communication.

#### Known Third-Party Bugs and Limitations

The following are known third-party bugs and limitations that may cause problems for NeXtMidas users.

JDK 17.0.1 libsvml.so name conflict (JDK-8276025) | - | JDK 17.0.2 has fixed a 17.0.1 issue caused by Java adding a library with a name conflict with a common native library. 17.0.1 causes the XBC option tree build to fail with an UnsatisfiedLinkError.
OpenJDK 8 versions earlier than 1.8.0_312 are not supported | - | To avoid deprecation warnings about too weak of a signing certificate, the NeXtMidas self-sign certificates were updated to a standard that is not supported in earlier JDK 8 versions
Reflective Access JDK 9+ (warning) JDK17+ (error) | - | Warnings are thrown for illegal access using reflection in Java 9 and up and errors in JDK17 and up. When running from When the running via the NeXtMidas start script, the jvm options shown below are included and there are no warnings or errors. To bypass the warning/error, add this to the jvm runtime options: --add-opens java.logging/java.util.logging=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED For more information please visit Oracle JDK 14 Documentation
RHEL 8 GCC 8.5.0 | - | We have put in a workaround in rmif.for for a bug in the GCC FORTRAN compiler that comes with RHEL 8. This allows our NeXtOpt code to build and run, but please let us know if you experience any further issues building and running with this compiler. Fritz Reese has narrowed down this bug and states: The compiler crash (ICE) is triggered by STRUCTURE /PACKETSTRUCT/ having 8 fields followed by a UNION. When –fdec is combined with –finit-derived and –finit-local-zero, some code in the compiler creates a bad initializer for instances of PACKETSTRUCT which leads to invalid memory access. It turns out this happens because the routine that adds an element to the field initializer vector for unions uses an insidious macro which apparently modifies the vector pointer on resize; the default size of this vector is 8 elements, so upon adding the 9th field initializer the vector is resized by allocating a new vector, copying the elements over, freeing the old vector, and reassigning the pointer variable. Since the union routine took the vector pointer as an argument (by value), the caller’s vector pointer wasn’t updated after the resize, and therefore the caller’s idea of the vector was a pointer to freed memory. Chaos ensues later at random points in the compiler which deal with this initializer vector during optimization, finalization, etc... Unfortunately, because of the nature of this bug, subtle changes in how the compiler visits the initializer trees and how other memory is allocated can mask the bug, so there’s no guaranteed workaround other than to ensure there’s no union which is after the 2*8^n-th field (9th, 17th, etc…) in a structure.
VNC | - | It has been noted by users that NeXtMidas will not function in a VNC session if the -depth option is set to 32. 32 is an invalid color depth, valid -depth option settings are 8, 16, and 24. We recommend the default -depth setting of 16.

#### Known Issues

StateVector | - | The CubicHermite (the default in NeXtMidas 3.2) and QuinticHermite (optional in NeXtMidas 3.3) interpolation options do not appear to be working properly, particularly at the first and second derivative. At this time it has not been confirmed if the issue is due to a bug in the interpolator or just the results from using bad test data (i.e. sv1.prm which came from X-Midas). This affects both the StateVector library and the SVINTERP function in CONVERT which uses it. The suggested work-around is to use the Linear interpolation option until this issue is resolved.
CALL | - | A SUBROUTINE does not have limited scope, scope is the same as procedure.
CONVERT | - | Tables created by the XML2TBL function may appear to "drop entries" when dereferenced. Since XML2TBL is deprecated, this will not be fixed, use the XML2TAB in place of XML2TBL.
GCONTROL | - | Some controls do not support headless mode.
LIST2 | - | The table for a /LEGACY select message may contain "extra" fields.
| - | Row/cell selection is undefined when listing a pipe.
| - | Type 2000 files with very large frame size may not load properly.
NeXtOpt | - | NeXtMidas commands run from inside an X-Midas macro (specifically when using PIPE or XPIPE) may exit prematurely. For example a NeXtMidas intrinsic run from the INITIALENTRY of a controls section can cause the pipe to stop prematurely.
| - | May get warnings about problems mapping to the messages section if the X-Midas message queue is not up.
XBC | - | XBC does not support running two copies of the same command simultaneously.
| - | Do NOT use "-check all" with the Intel compliers because some of the legacy fortran libraries make assumptions that are incompatible with "-check all" causing unnecessary aborts (SEGFAULT).

#### Bugs Fixed

All NeXtMidas issues and enhancements are tracked using a bug tracker/database. GForge DR number is included for all customer-submitted bugs. GForge entries are listed "n/a" for bugs that are duplicates or internal use.

Bugs Fixed in Release 4.1.4 (24 Jun 2024)
JIRA Issue | GForge DR | Description
NXM-3415 | 829578-22 | Feature locations are not correct in geodetic view
NXM-3664 | 833158-22 | Need more time format control on gcontrol TVAL
NXM-3679 | 833887-22 | Support for GEO Json
NXM-3774 | 835955-22 | Nextmidas should add support for minio storage (starter option tree)
NXM-3790 | 890666-21 | JSONUtilities.toJSON() needs to handle the most common cases more efficiently
NXM-3892 | 837769-22 | keyword TGET does not work on platinum 2 file
NXM-3912 | 838110-22 | GCONTROL FILE bug causing file names to be subject to 10 character limit
NXM-3940 | 838900-22 | GWidget NullPointerException at rundown
NXM-3981 | 838931-22 | Map margin and bounds wrong after DRAGBOX zoom
NXM-4044 | 839834-22 | DATABASE hsqldb.jar has CVE and is not needed by baseline code
NXM-4048 | 839723-22 | PLOT/ALL of 1000 file only showing portion of data (basic fix is in)
NXM-4053 | 896645-21 | NeXtMidas release packages should have release version that does not include dependency jars
NXM-4065 | 839998-22 | PLOT readout should include radius on IQ plots
NXM-4095 | 840134-22 | PLOT: time axes readouts should default to date string
NXM-4097 | 840203-22 | BaseFile creates filename with wrong casing (partial)
NXM-4099 | 840227-22 | DataFile constructors ignoring file naming flag
Bugs Fixed in Release 4.1.3 (12 Dec 2023)
JIRA Issue | GForge DR | Description
NXM-3622 | 882570-21 | GeodeticUtil.getCountryInfo results are not even close
NXM-3630 | 832824-22 | Layer KML popup doesn't display HTML descriptions correctly or set the right size
NXM-3652 | 833550-22 | Don't reset zoom when layers come and go
NXM-3671 | 833792-22 | Thin DataFile needed
NXM-3785 | 836266-22 | Midas File Transfer (MFTP) broken by JDK 17
NXM-3821 | 836903-22 | PLOT: comes up zoomed in when outer limits are set, but not view limits
NXM-3835 | 836824-22 | HTTPSERV behavior does not match intended or documented behavior
NXM-3838 | 836851-22 | CallStackUtil JDK9+ version NullPointerException
NXM-3857 | 837174-22 | IF is missing the ability to check if a File (file or directory) exists
NXM-3858 | 837254-22 | Y Cut does not work on pipe data
NXM-3860 | 837255-22 | nmbat is missing Bash support
NXM-3870 | 837678-22 | NotSerializableException thrown when try to serialize classes that implement Serializable
NXM-3871 | 891836-21 | Basic BLUE2JSON Support (completed)
NXM-3872 | 891850-21 | BLUE2JSON should support a conversion table allowing simple mappings and conversions (completed)
NXM-3886 | 892166-21 | Support for CTF RHEL 9 Upgrade
NXM-3893 | 837770-22 | IOResource error in handling Resource Group case
NXM-3900 | 837912-22 | panel: NullPointerException when deleting Pane with null panel
NXM-3910 | 893421-21 | LayerT5 should support points that are symbols/icons
NXM-3914 | 893422-21 | Filters and highlights should have separate APIs
NXM-3926 | 893420-21 | Point accessor functions return incorrect position values for non-geodetic data
NXM-3934 | 838323-22 | Support for 3D ellipsoids
NXM-3972 | 837770-22 | TIMECODE is not correctly propagated when a file has timecode, time hack keywords and xstart
NXM-3980 | 838858-22 | Need updated packages due to IAVA alerts
NXM-3984 | 894700-21 | SSLUtilities/CHECKAUTHORIZATION need updating
NXM-3990 | 839039-22 | LayerKML popup has Lat and Lon reversed
Bugs Fixed in Release 4.1.2 (06 Jun 2023)
JIRA Issue | GForge DR | Description
NXM-3547 | 831582-22 | Remove all applet support from NXM 3.9.x series
NXM-3567 | 832027-22 | X Cut Does not work on pipe data
NXM-3629 | 832822-22 | Clear max points causes drawing problem
NXM-3675 | 884739-21 | MapKBT/KeyValuePairSupport throwing NullPointerException
NXM-3689 | 889478-21 | LayerDrawable/LayerT5 needs to consider points deselected when layers are hidden or closed
NXM-3778 | 888145-21 | MPlot.drawCone / GeodeticUtil.computeConeLLA(..) issue - optimize fix and make usable by both
NXM-3780 | 836095-22 | NXM builds need to set a status code
NXM-3781 | 889232-21 | RMIF window resynch logic - needs state machine logic - additional fix
NXM-3783 | 889475-21 | GeodeticUtil.insidePolygon 3.8.1 speed regression
NXM-3787 | 836090-22 | Need better support for Blue 2.0 (platinum) - handle additional Platinum keywords
NXM-3814 | 836763-22 | NFileResource.open bad file descriptor check
NXM-3820 | 836902-22 | PLOT: Readout on axis tries to draw even when turned off
NXM-3831 | 836776-22 | NeXtMidas needs to support applications being accessible via a client’s web browser
NXM-3844 | 837016-22 | HPAGE needs to make request header information available to applications
NXM-3846 | 837029-22 | PLOT: zooming in after scrolling on large files broken
NXM-3847 | 837031-22 | PLOT: needs to be able to pan beyond bounds without scrollbar slider disappearing
NXM-3849 | 837056-22 | Time: the relative time limit of 24 hours needs expanding to 1 year
NXM-3862 | 892743-21 | LayerT5: needs ability to filter tracks based on point metadata
NXM-3878 | 837563-22 | Convert NM Map Transition to Zoom Level
NXM-3894 | 837772-22 | 12-bit integer Midas Data Type needed
NXM-3910 | 893421-21 | LayerT5 should support points that are symbols/icons
NXM-3916 | 893172-21 | Bundle-RequiredExecutionEnvironment should add Java 11/17 in SYS's manifest.mf
NXM-3919 | 893387-21 | unable to run sourcesdds to remove/strip SDDS packet headers
NXM-3927 | 893417-21 | Range adjustments work incorrectly for non-geodetic data
NXM-3934 | 838323-22 | Support for 3D ellipsoids (beta version)
Bugs Fixed in Release 4.1.1 (12 Dec 2022)
JIRA Issue | GForge DR | Description
NXM-3661 | 833723-22 | Errors should be marked as ERROR when building
NXM-3701 | 834383-22 | true and false are valid fill values LayerKML
NXM-3715 | 834630-22 | Table not parsing correctly
NXM-3777 | 888144-21 | GeodeticUtil.computeConeLLA(..) issue
NXM-3758 | 835796-22 | JsonUtilities.fromJSON (Class type, CharSequence json) not returning Table
NXM-3772 | 835926-22 | Convert from XML to table does not handle periods
NXM-3786 | 889366-21 | Junit 4.12 needs upgrading to 4.13.1 at minimum
NXM-3787 | 836090-22 | Need better support for Blue 2.0 (platinum)
NXM-3831 | 836776-22 | NeXtMidas needs to support applications being accessible via a client’s web browser (beta version)
NXM-3832 | 890621-21 | CallStackUtil log is confusing
NXM-3871 | 891836-21 | Basic BLUE2JSON Support (beta version)
NXM-3872 | 891850-21 | BLUE2JSON should support a conversion table allowing simple mappings and conversions (beta version)
Bugs Fixed in Release 4.1.0 (06 Jun 2022)
JIRA Issue | GForge DR | Description
NXM-3547 | 831582-22 | Remove all applet support (partial - direct Applet dependencies have been removed)
NXM-3575 | 881437-21 | Support for CTF RHEL8/Centos8 Platform (limited support of building NeXtOpt & XBC with RHEL 8 compilers, due to ICE)
NXM-3615 | 832531-22 | Panning past international date in LatLonContinuous missing scroll bar
NXM-3628 | 832820-22 | Point readout should update
NXM-3636 | 833117-22 | ability to detect/analyze timeline/time hack validity
NXM-3648 | 833548-22 | Feature Text Overlap
NXM-3651 | 833574-22 | PLOT regression breaks the rendering of large 2000 files
NXM-3669 | 834685-22 | File that NXM plot will not plot but XPLOT will
NXM-3681 | 834149-22 | Multiline text on feature
NXM-3726 | 834922-22 | Handle WMS layer transitions
NXM-3743 | 835448-22 | LayerWMS needs better means of limiting CRSs
NXM-3744 | 835447-22 | LayerWMS tiled map drawn in wrong location
NXM-3747 | 835449-22 | LayerWMS/MPlot brightness adjustment makes map panning very slow and jerky
NXM-3781 | 889232-21 | RMIF window resynch logic - needs state machine logic
NXM-3794 | 836287-22 | Invalid keyword block not detected by keywords command
NXM-3807 | 836480-22 | Optimize WMS tile query boundaries using layer information - GeoWebCache support

#### Deprecated Functionality

The following functionality has been deprecated and will be removed from future versions:

Command | Deprecated Item | Replacement | Deprecated Since
PLOT | ZOOM and DRAGBOX messages accessed with msg.data(0), msg.data(1), etc. | Use msg.data.xmin, msg.data.xmax, etc. | 2.3.0
STATISTICS | IMEAN= | MEAN= (contains real and imaginary values, see explain file) | 2.3.0
CONVERT | The XML2TBL and TBL2XML functions. | Use XML2TAB and TAB2XML. | 2.5.0
UPDATE | Command dictionary entries without '*' denoting minimum allowable abbreviation. | Include a '*' at the end of the command name in the dictionary if no abbreviation is allowed, otherwise note abbreviation as desired. | 2.5.0
TextFile | Automatic enabling of NOABORT flag. | Use NOABORT or FORCEABORT flags as required. | 2.5.0
TextFile | Automatic conversion of INOUT flag to OUTPUT when file not found. | Use INOUT or OUTPUT flags as required. | 2.5.0
Results | Use of A: with results. | Use S:, behavior of A: will change in future releases. | 2.5.2
DataFile | Use of CREATOR= main header keyword. | Use IO= and VER= keywords. | 2.5.3
public fields in baseline classes | All public fields in classes in option trees (SYS, DSP, UCL, etc.) included in the baseline (e.g. nxm.sys.lib.BaseFile, nxm.sys.lib.DataFile, nxm.sys.lib.Shell, etc.) have always been meant for read-only and/or internal use only. Some fields may transition to protected or private in favor of the get/set methods as early as 3.9.0. | Use appropriate public get/set methods. | 3.5.1
PLOT | All public fields in nxm.sys.prim.plot, nxm.sys.libg.MPlot, nxm.sys.libg.Layer* (e.g. Layer1D, Layer2D, etc.) have always been meant for internal use only. Most will transition to protected access but will still be for internal use only. | Use appropriate public get/set methods. | 3.5.1
As of release 2.2.0 LIST is considered to be an "End of Life" primitive. The LIST primitive is scheduled for replacement by LIST2 in future releases.
See $NMROOT/htdocs/api/sys/deprecated-list.html for a list of deprecated library methods.

Deprecated functionality will continue to function for one year or two stable releases after first being marked as deprecated, but its use may result in a deprecation warning (either at compile time or run time). After one year, any deprecated functionality is subject to removal.
(Back to Release Notes Summary)