NeXtMidas 3.8.1 Release Notes

Changes between release 3.8.0 and 3.8.1 are listed in blue.

(This release requires Java 7 (or later) to build and run.)


NeXtMidas SYS Option Tree Tested on:
(All tests with Java 7 and Java 8, unless otherwise noted (1))
OS Version Platform Native Compiler(2)
(SYS Option tree)
Web Browser
(WebStart/Applet)
RHEL 5.11 Linux (x86_64) gcc 4.1.2 / Intel 11.1 / Intel 12.1 / Intel 13.1 Firefox 38.5.0
RHEL/CentOS 6.9 Linux (x86_64) gcc 4.4.7 / Intel 13.1 / Intel 14.0/ Intel 15.0 / Intel 16.0/ Intel 17.0 Firefox 52.4
RHEL/CentOS 7.5 Linux (x86_64) gcc 4.8.3 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0 Firefox 52.8
Windows 7 SP1 Windows (x86_64) pre-compiled DLLs (WinGW 5.3.0/gcc 4.9) IE 11.0.9 / Firefox 58.0
Windows 10 Pro Windows (x86_64) pre-compiled DLLs (WinGW 5.3.0/gcc 4.9) IE 11.0.45 / Firefox 58.0

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)
(All tests with Java 7, and Java 8, unless otherwise noted (1))
OS Version Platform X-Midas Mode C/C++ Compiler(2) Fortran Compiler
RHEL 5.11 Linux
(x86_64)
NeXtOpt (X-Midas 4.10.5) Intel 11.1 Intel 11.1
NeXtOpt (X-Midas 4.12.3) gcc 4.1.2 / Intel 12.1 Intel 12.1
NeXtOpt (X-Midas 4.14.0) Intel 13.1 Intel 13.1
XBC ("64Bit") gcc 4.1.2 / Intel 11.1 / Intel 12.1 / Intel 13.1 Intel 11.1 / Intel 12.1 /Intel 13.1
RHEL/CentOS 6.9 Linux
(x86_64)
NeXtOpt (X-Midas 4.12.3) Intel 13.1 / Intel 14.0 / Intel 15.0 Intel 13.1 / Intel 14.0 / Intel 15.0
NeXtOpt (X-Midas 4.14.0) Intel 14.0 / Intel 15.0 / Intel 16.0 Intel 14.0 / Intel 15.0 / Intel 16.0
NeXtOpt (X-Midas 4.15.0) Intel 16.0 / Intel 17.0 Intel 16.0 / Intel 17.0
XBC ("64Bit") gcc 4.4.7 / Intel 13.1 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0 Intel 13.1 / Intel 14.0 / Intel 15.0 / Intel 16.0 / Intel 17.0
RHEL/CentOS 7u5 Linux
(x86_64)
NeXtOpt (X-Midas 4.12.3) Intel 15.0 Intel 15.0
NeXtOpt (X-Midas 4.14.0) Intel 15.0 /Intel 16.0 / Intel 17.0 Intel 15.0 /Intel 16.0 / Intel 17.0
NeXtOpt (X-Midas 4.15.2) Intel 15.0 /Intel 16.0 / Intel 17.0 Intel 15.0 /Intel 16.0 / Intel 17.0
XBC ("64Bit") gcc 4.8.5 / Intel 15.0 / Intel 16.0 / Intel 17.0 Intel 15.0 / Intel 16.0 / Intel 17.0
(1) Platforms were tested on the latest versions of JDK 7 (7.0_80), JDK 8 (8.0_171), and JDK 9 (9.0.1). Note on JDK 9: There has been limited testing on Linux and not tested in Windows environment. See Known Third-Party Bugs to see why JDK 8u20 to 8u31 are not supported. The 64-bit version of Java should be used when running on a 64-bit system, the 32-bit JDK/JRE may not run properly on 64-bit systems without requiring additional compatibility libraries. All tests use the Java VM from Oracle (see http://java.oracle.com/).
(2) $NM_CC and $NM_CXX was set to point to the Intel C/C++ compiler (icc and icpc), where applicable.

Online Documentation

Java 7 Migration

What Might Break (Changes in Behavior)

BUILD - The default build.props, has merged all areas from build.codeareas.other back into build.codeareas.lib (they were separated in NeXtMidas 3.1.2 because SYS has lots of files to compile). SYS still continues to keep them separated. This is not expected to impact any users.
Data - In 3.7.1, Data(String) was fixed to only allocate the space actually needed for type 'A' data. The previous over-allocation of space may have masked Inadvertent buffer overruns. See DR# 859131-1 for additional details.
DataFile / TimeLine - In 3.7.3, as part of DR #823964-3, a similar fix was added for Blue microsecond timeline files, as for DataFile's containing Blue TC Keywords. If the Blue microsecond file does not have a timeline entry for the first element, but there is a valid TimeCode, then a timeline entry for the first element is created based on the timecode. A warning is issued, unless timeline entry error/warning messages are suppress via CoreIO.IOOptions.SuppressInvalidTimeLineEntryErrors.
DatagramData - In 3.7.2, DatagramData was added to the new NET Option Tree. The version in SYS is deprecated. All updates will be placed in the NET version. See DR# 822477-3 for additional details.
DataReader - In 3.7.2, nxm.audio.lib.DataReader was updated to depend on the new NET Option Tree copy of DatagramData. The AUDIO Option Tree now has a dependency on the NET Option Tree See DR# 822477-3 for additional details.
dgnetsend - In 3.7.2, dgnetsend was added to the new NET Option Tree. The version in SYS is deprecated. All updates will be placed in the NET version. See DR# 822477-3 for additional details.
GCONTROL - Since 3.7.1 during the time they are selected, items in a CHOICE will change to the foreground highlight color (even if the user has specified a specific color for that item). Prior to the fix for DR #853082-1 selected items in a CHOICE would not show as selected if any items in the CHOICE where previously set to color (whether by disabling an item or setting its color directly).
HttpResource - In 3.7.2, Web Start caching was disabled to work around a caching error where cached HTTP Partial Content (206) was returned when full content was requested. This can result in longer load times. See DR# 822867-3 for additional details.
- In 3.7.3, additional error checking was added for HTTP Partial Content responses. A MidasException will now be thrown if the start of the 'Content-Range' does not match the requested range.
IF/ASSERT - File equivalent checks via FEQ defaults to including size/length of data in comparison for IF and ASSERT commands. To revert to legacy behavior, use the "/L" modifier to limit length of binary or data comparison to size of shorter of the two input files to be explicit that a "truncated" data comparison is desired. See IF explain file and/or DR 840802-1 for details.
KeyObject - In 3.7.1, a new @KeyObjectNames annotation was introduced which defines an array of names by which a field or method may be referenced from the macro language. Some methods have had this annotation applied to clear up which method is called for a given abbreviation. See DR 852053-1 for more details.
NM MAKE CLEAN - Running 'nm make clean <opt>' from OS command prompt, no longer removes *.jar and *.zip files under the normal areas of an option tree (e.g. nmmake.clean.codeareas in build.props). It will continue to remove *.jar and *.zip from directories specified in nmmake.clean.locations (e.g. ${nmroot}/tools ${nmroot}/jars). This is not expected to impact any users.
PLOT/MPlot/Layer - NOAVERAGE was fixed to use the actual min/max over [AUTOL] frames. There was still a small exponential component to the previous calculation.
- Plot resizing maps was fixed so that the entire map (or zoomed in area of the map) continues to be displayed when the plot is resized. Previously resizing was based strictly on the x-axis, so resizing could cause the upper and lower portions of the map to be beyond the display area with no scroll bar for accessing those areas of the plot.
- Since 3.7.2, the default GRAPHICS mode has been switched to "SwingDB" from "SwingDB|RealTime". SwingDB is the graphics mode used by the majority of NeXtMidas users and is consistent with the Swing thread-safety conventions. The change to "SwingDB" also fixes a number of bugs related to refresh issues in the PLOT (see 851534-1, et. al). The "RealTime" GRAPHICS option indicates that PLOT should bypass the normal Swing thread-safety mechanisms and attempt to update the underlying graphics elements without waiting for the next graphics refresh; this option was implemented more than a decade ago when the graphics infrastructure had trouble keeping up with some of the real-time data streams in NeXtMidas. The modern graphics infrastructure does a much better job of keeping up with the real-time data streams in NeXtMidas rendering the old "RealTime" option obsolete. Since the "RealTime" option is fundamentally prone to refresh issues (due to the way it bypasses the Swing thread-safety mechanisms) its use is now deprecated.
- Since 3.8.1, the default GRAPHICS mode has been switched to full Swing (i.e. Swing|SwingDB|SwingWidgets|SwingPopups). The previous default Graphics mode resulted in interweaving AWT and Swing graphics and could cause a severe graphics sluggishness, especially with CentOS 7 over the PTC X11 Server graphics. Numerous smaller graphical issues needed to be addressed in order to fully support full Swing mode, which involved the handling of popups over MidasDisplays, proper handling of the JLayeredPanes needed to properly display Swing popups over Swing plots, and proper attaching of child macros.
Warnings have also now been added when a user overwrites the default plot option of O_DBUFFER (image double buffering), as this can also cause graphics to lock-up, especially over the PTC X/Server.
Also fixed, were the specifically CentOS 7 issues of the DRAGBOX not rendering while being drawn and of the plot axis readout text being cut off on plots without a panel.
SINKDG - In 3.7.2, sinkdg was added to the new NET Option Tree. The version in SYS is deprecated. All updates will be placed in the NET version. See DR# 822477-3 for additional details.
SOURCEDG - In 3.7.2, sourcedg was added to the new NET Option Tree. The version in SYS is deprecated. All updates will be placed in the NET version. See DR# 822477-3 for additional details.
TABLE - In 3.8.1, the table parsing has been fixed to be consistent in the way it handles whitespace. When there are tabs or spaces after equals signs or before commas, those are now trimmed out. To revert to legacy behavior, the table flag "DisableConsistentHandlingOfWhiteSpace" needs to be set. See DR-825104-3 for more details.
XGEOPLOT/LayerT5 - Setting Positions (pos or posp) using a table with only one or two of the LAT=, LON=, ALT= entries (i.e. {LON=2.0}) now only updates the value associated with the entry(ies) specified. Previously the unspecified entries were defaulted to 0, rather than defaulted to their current value. See DR 853357-1 for details.
- Points within a LayerT5 must be homogeneous (i.e. have the same components). Prior to 3.7.0, the LayerT5.setPoint method did not validate points set against the existing points for consistency. Since the displaying of points in LayerT5 is dependent on all points having the same components, the old behavior could cause both certain components to not be displayed while other components that were not intended were displayed with default values. Merging of points is allowed, but as of 3.7.0 adding or setting a point that inconsistent with existing points will cause an Exception. Note: If no points exists in the LayerT5, then the first point added will determine which components are active.
Web Start - In 3.7.2, Web Start caching was disabled to work around a caching error where cached HTTP Partial Content (206) was returned when full content was requested. See DR# 822867-3 for additional details.
Option Tree removed - Deprecated option tree that has been removed:
nxm.sys.mmpostlegacy -> removed in NeXtMidas 3.7.2
Classes removed - Deprecated classes that have been removed:
nxm.sys.inc.ExportsImage -> not used
nxm.sys.lib.DataPipe -> not used
nxm.sys.libg.ExportImage.DelayedMessageHandler -> not used
nxm.sys.libg.MTextArea -> use MJTextArea instead
nxm.sys.libg.MTextField -> use MJTextField instead
Methods/Fields removed - Deprecated methods/fields that have been removed/changed:
nxm.sys.intr.Build.AREA_LIST -> not used
nxm.sys.lib.CoreIO.recursiveDelete(File) -> use nxm.sys.lib.FileUtil.recursiveDelete(File) instead
nxm.sys.lib.Keywords.convertRep(byte, byte) -> use nxm.sys.lib.DataFile.convertHeaderRep(String) instead
nxm.sys.lib.NeXtMidas.setWinID(String) and clearPanel() -> use runCommand(String, MidasDisplay) instead
nxm.sys.lib.StringUtil.StringUtil() -> not used, meant to be private as all methods are static
nxm.sys.libg.ExportImage.exportFile(..) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.exportToFile(ExportsImage,String,String) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.export(..) -> use exportToFile(Component,String,String) instead
nxm.sys.libg.ExportImage.showOptionSet(...) -> not used
nxm.sys.libg.ExportImage.showTextEntry(...) -> not used
nxm.sys.libg.Layer2D.Layer2D(int, int) -> not used
nxm.sys.libg.Layer2D.isUseLocalZMin() -> use getUseLocalZMin() instead
nxm.sys.libg.Layer2D.isUseLocalZMax() -> use getUseLocalZMax() instead
nxm.sys.libg.Layer2D.useLocalZMin(boolean) -> use setUseLocalZMin(boolean) instead
nxm.sys.libg.Layer2D.useLocalZMax(boolean) -> use setUseLocalZMax(boolean) instead
nxm.sys.libg.Layer2D.useLocalZMin() -> use setUseLocalZMin(true) instead
nxm.sys.libg.Layer2D.useLocalZMax() -> use setUseLocalZMin(false) instead
nxm.sys.prim.plot.setCompression(String) -> use setRMIFCompression (String rmifCmp) instead
OptionTree.java - nxm.sys.lib.OptionTree - File[] getJarFiles(String opt) and hence String[] getJars(String opt) now includes jar files recursively in the jars area (e.g. it will follow symbolic links) of an option tree.
Table.java / Results.java - InternalUseOnly sub-class Results.Function moved to parent class as Table.Function. (Note this relates to the nxm.sys.lib.Results library that is used internally and does not affect the RESULTS command.)
Table.java / Results.java - Numerous methods in Table class now marked "final" to prevent incomplete overrides such as those that caused Bug 2929 (Bug 2929 was fixed in NeXtMidas 3.5.4).
Jar Files removed - The swing-layout-1.0.jar file was deprecated in NeXtMidas 3.3.0. It is no longer used by SYS and have been removed. Use standard Java 6 javax.swing.GroupLayout instead of org.jdesktop.layout.GroupLayout (they are the same, just in a different package).
Anyone with option trees that uses this JAR file can copy it from the NeXtMidas 3.6.x or prior and include them with their own option tree.
FILE/FileResource - IOExceptions that occur during file write or read operations will now be propagated, instead of the old behavior of these methods just returning -1 for an unsuccessful write or read. The new environment variable FileIONoAbort can be set to revert to the old behavior. See the ENVIRONMENT explain file and/or 841173-1 for more details.
SHELLGUI - As of 3.7.1, attempting to attach multiple SHELLGUIs to a shell is not longer allowed and will give a popup error. This was never really supported and resulted the original SHELLGUI being in a bad state.

New Features Added

Bash Support - Support using NeXtMidas from bash shell (i.e.: source $NMROOT/os/unix/nmstart.sh)
New Commands - CHECKAUTHORIZATION;SYS - Facilitates Attribute based Access Control
  - SSLCONFIGURE;SYS - Sets up Java SSL Context for either 2-way (Mutual Authentication) or 1-way authentication.
  - UPRIGHTSPECTRUM;DSP (Beta Version) - Uprights inverted data based either on the BLUE Keyword SNAP_SPECTRAL_SENSE, the Platinum Keyword DATA_INVERSION_FLAG or a /FORCEINVERSION switch. See explain file for more details.
Macro/Shell Enhancements - PATH: Jar files from "jar" area (i.e. directory) of an option tree are now included recursively (which allows symbolic links) when the option tree is added to the PATH.
  - OPTION,PATH - In 3.7.1, defined an auto-loading mechanism for finding option trees simply by their inclusion in the Java classpath. This makes use of the industry standard Java Service Provider Interface (SPI), but is not compatible with the current NeXtMidas (custom) build procedures; the changes proposed for DR 667842-19 will remove this limitation. This feature is also currently limited to option trees explicitly on the command-line classpath (-cp), due to issues with the OPTION command and underlying libraries. See DRs 855053-1, 855057-1, and 855059-1 for more details.
Libraries - Args - Since 3.7.1, added List type to replace the user casting an object to List.
  - BaseFile - nxm.sys.lib.BaseFile implements java.io.Closeable interface, allowing the NeXtMidas file types to be used within the try-with-resources statement introduced in Java 7.
  - DataFile - Since 3.7.1, full support was added for Type 6000 files. Previously Type 6000 subrecords where num_elts > 1 were written incorrectly. See DR 854385-1 for further details.
In 3.7.2, support was added for reading and writing high precision BLUE Time Code (TC) Keywords. The reading and writing of BLUE TC keywords will normally be based on their existence, but also can be forced with file qualifier "USEBLUETCTIMELINE", by using the CONVERT PLAT2BLUE, or setting IOOptions.PreferBlueTCTimeLine . See DR # 862236-1 for more details.
  - Feature - nxm.sys.lib.Feature.drawText(..) Implements DTAG that is dynamically centered in the visible part of the feature
  - FileUtil - nxm.sys.lib.FileUtil has a new makeSymLink() method that allows the creation of symbolic links using Java 7 API for supported platforms (such as Linux, Solaris, and Windows). This utility method has a fallback to creating a directory junction point in Windows 7+ since standard users normally don't have required privileges.
  - JarFile - nxm.sys.lib.JarFile.getDataTable(offset) now includes code signers of the jar file's in the "CODE_SIGNERS" entry.
  - KeyObject - In 3.7.1, a new @KeyObjectNames annotation was introduced which defines an array of names by which a field or method may be referenced from the macro language. This annotation overrides all of the automatic name generation code in KeyObject. A field or method annotated with an empty array CANNOT be accessed from the macro language.
  - NeXtMidas - Since 3.7.1, nxm.sys.lib.NeXtMidas has a new addOptionTreeFromClasspath() method that allows the user to register an option tree and add it to the classpath. This method currently limited to option trees explicitly on the command-line classpath (-cp) due to issues with the OPTION command and underlying libraries. See DRs 855053-1, 855057-1, and 855059-1 for more details.
  - SSLUtilities - nxm.sys.lib.SSLUtilities has static methods for initializing the Java SSLContext to allow either 1-Way or 2-Way SSL. It also has static methods to facilitate attribute based login based on the JSON response from a REST service containing user attributes. See class documentation for more details. (made public in 3.7.3)
+ Secure Jarsigning - Since 3.8.1 - Secure jarsigning is now supported. To securely sign a jar, the NeXtMidas JVM will use the currently loaded certificate. To load the jarsigning certificate into the JVM, please reference sslconfigure.exp
  - Table - nxm.sys.lib.Table has new fromOpalFile(..) methods to load Midas2K OPAL file into a Table.
+ Since 3.7.1, added List type to replace the user casting an object to List. (e.g. (List)tbl.getO("KEY") becomes tbl.getList("KEY"); ).
+ Since 3.7.3, added Table flag PERMIT_NULL which allows a true null value to be stored in compatible Table types. This is not intended for use from the macro language. (See the Table explain file and class documentation for more details.)
+ Since 3.8.0, added Table flag KEEP_JAVA_NUMERIC_TYPE which causes primitive numeric Table values to be stored as Java Numbers (i.e. in the matching wrapper class) and for Table values that are Java Numbers to be serialized with lower case types. Lower case numeric types are deserialized as Java Numbers by default. (See DR #872678-1 and class documentation for more details.)
+ Since 3.8.0, added Table flag SERIALIZE_WITH_ORIGINAL_FLAGS which causes the Tables to be serialized with the table's current flags (and does not add the DISABLE_ESCAPE_SEQUENCE flag). (See DR #872676-1 and class documentation for more details.)
  - TarFile - nxm.sys.lib.TarFile has new methods to create Tar Files and utility methods to get/set Tar File data (ex: getPadding(), setTime1970(long val) and setModeString(String str))
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 - New <Beta> Conversions: KWCONV Converts the incoming file's keywords to new keywords using the specified conversion table. PLAT2BLUE Converts the incoming file's Platinum keywords to the corresponding BLUE keywords (as defined by the JICD 4.2 ICD). See convert.exp or DR 850721-1 for details.
  - INCLUDE - Since 3.7.1, Using the INCLUDE <file>;<opt> will import a block of code from a test file into the current file from the specified option tree. The <area> of the option tree containing the file gets defaulted. [DEFAULT=MCR] See DR 815906-1 for more details/limitations.
  - LOG - New <Beta> NeXtMidas has the option to LOG NeXtMidas interactive commands (e.g. RESULTS, SAY, CALC/verbose, etc.) when the Midas to Java Logger is enabled.
  - PLOT - A Google style zoom is now available using the /USEMOUSEPOSITION switch. This switch is not compatible with MIMIC or with linked plots, as it only applies when the mouse is directly over the plot being zoomed. See the PLOT explain file for more details. (Since 3.8.1)
  - PLOT / GCONTROL - GMenus (including Plot's Features menu) now display a scrollbar and allow scrolling through menu items when there are too many items for them all to be displayed at once. See DR 815434-3 for details.
  - PLOT / GCONTROL - GValue now has the ability to right justify DVAL controls via a RIGHTJUSTIFY flag. See DR 839910-1 for details.
  - SOURCEDG - Since 3.8.1, sourcedg can now reorder out-of-order framed data. The new /OUTOFORDER switch uses information from valid ICE Headers to set header information in the output pipe. Note: Invalid ICE Headers are not supported and may result in a state that is not recoverable without restarting sourcedg. Missing data is filled either using auto-learned information on the amount of data per each packet in a frame and the packets per frame, or just based on the packets per frame. Time hacks are set based on the Y-Delta information gained by time stamps in the ICE Headers. Restarts based on frame size changes, X-Start changes, X-Delta changes, or large Y-Delta changes can be enabled via setting various restart tolerances.
The ICEPacketsCache utility class was added to support the reordering of PSD packets and is designed to be able to be used independently of sourcedg, though the code is currently ProvisionalUseOnly.
See the sourcedg explain file and the ICEPacketsCache javadocs for more information.
  - XGEOPLOT -T5LAYER Messages are now supported (ACTION=CREATE,DELETE, or COPY). This allows a LayerT5 to be created without a data file, as well as the copying and deletion of points. See XGEOPLOT explain file for details and/or DR 848243-1.
  - XGEOPLOT - Improved support for T5REC and T5TEXT Messages. These messages can now be used to add points to an empty LayerT5. Support for the modification of individual components, without the modification of related components was also improved (ex: can modify LAT without LON or ALT being affected). Also added the ability to set the modmask using a String by adding the option of a MODMASK= entry in the data table. See XGEOPLOT explain file for details and/or DR 853357-1.

Known Third-Party Bugs

The following are known third-party bugs and limitations that may cause problems for NeXtMidas users.
Java Plug-in 8, 7u60 to 7u75 - The Oracle Java plug-in (for running Applets) for Mozilla (Firefox) is broken in Java 8, 7u60, 7u65, 7u67, 7u71, 7u72, and 7u75 on RHEL/CentOS 5. Java 7u55 and prior are unaffected. It is fixed in Java 8u5 and Java 7u76. It affects BOTH 32-bit and 64-bit Java versions on RHEL 5. This is not an issue under RHEL/CentOS 6. See Java Bugs JDK-8047710 and JDK-8029314 JDK 8 / OEL 5.x: Java Plug-in needs libstdc++.so.6(GLIBCXX_3.4.9) for more information.
JDK 8u20 to 8u31 - The Java Development Kit 8u20, 8u25, and 8u31's javac has a bug that prevent it from being used to build/compile the NeXtMidas baseline. This is not an issue in JDK 8u11 and prior. It is fixed in JDK 8u40. This only affects build time, Java 8 can still be used for runtime. See Java Bugs JDK-8058511 and JDK-8062272 StackOverflowError at com.sun.tools.javac.code.Types.lub for more information.
OpenJDK - When using OpenJDK,some users have experienced minor graphical glitches in NeXtMidas GUIs, as well as issues with monospaced fonts not actually being monospaced (which is an issue when OpenJDK is coupled with certain installations of RHEL).
SOURCEDG
SINKDG
- SOURCEDG/SINKDG running on Red Hat Enterprise Linux 4 (RHEL4) and later with dual IPv4 and IPv6 network stacks may encounter BindExceptions and/or SocketTimeoutExceptions due to a bug in the IPv6 stack on RHEL4 (see Java Bugs 6347853 and 6218155). You can avoid this issue by forcing Java to use the IPv4 stack (just do a "setenv NM_USER_JVM_FLAGS -Djava.net.preferIPv4Stack=true" prior to running nmstart).
XBC - Building static libraries with both the -fPIC and -i-static flag is still "experimental" in the Intel 9.1/10.x/11.x Fortran compiler (see thread 30222879 on the "Intel Software Network Forums" for details). In practice, this only appears to affect users on 64-bit systems. As a work-around only builds on 32-bit machines include the "-i-static" flags in "ifort.comp.append.32bit" and "ifort.link.append.32bit" properties in $NMROOT/nxm/sys/cfg/build.props. On 64-bit platform, the compiler will default to dynamically linking the Intel runtime libraries, so users will need to run with the LD_LIBRARY_PATH environment set to include the Intel libraries installed location.
  - The Intel C/C++ prior to 11.1.059 (update 3) has a bug that causes the BUILD of C++ HOST primitives that access the Mu pointer to fail with an error message like: "(0): internal error: 0_1561 ... compilation aborted for $NMROOT/nxm/xbc/host/test_mu_okio.cc (code 4). ".
The Intel compiler has a bug in compiling code that access a thread local storage constant pointer (which is the definition of the Mu pointer). See Intel issue DPD200138828 at http://software.intel.com/en-us/articles/intel-professional-edition-compilers-111-fixes-list/. GCC does not have this bug. To workaround this Intel compiler bug (by not making the Mu a const pointer), define _WORKAROUND_INTEL_COMPILER_ERROR_0_1561 in your build.props (e.g. "native.lin.cflags.append=-D_WORKAROUND_INTEL_COMPILER_ERROR_0_1561") or directly in the C++ source file.
  - There is a known issue running OpenMP in NeXtMidas. To workaround uncomment additional properties [ifort.libs.dir] and [ifort.openmp.workaround] in the SYS build.props. [ifort.libs.dir] is the path to the Intel compiler directory. [ifort.openmp.workaround] appends the necessary flags to the compiler however the library reference must be adjusted to reflect the respective Intel compiler version (if using Intel 12.x or later use -liomp5 otherwise use -lguide the current default). See the Users Guide or the example in the XBCTESTOPT2 option tree at $NMROOT/nxm/xbc/test/nmopts/nxm/xbctestopt2 .
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.
Windows - There is a known issue related to Windows Direct3D when combined with certain hardware profiles and JDKs. This results in severe performance issues with plots, causing sluggish performance, blank plots, and CPU spikes. This is especially true in JDK 7. The workaround is to disable the Direct3D support in java via the environment variable NM_USER_JVM_FLAGS=-Dsun.java2d.d3d=false).

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.
  - Timecode readout for large Type 2000 may give t=00:00:00.
Webstart - Oracle has been making frequent changes to the security restrictions for Web Start and Applets. Since Java 7u45, users may have to import a public certificate via the jconsole application in order to prevent Web Start application failures. See the Building Web Start Applications section of the User's Guide for details. In addition, as of JDK 7u51, you may see warnings related to jar file signing such as "No -tsa or -tsacert is provided and this jar is not timestamped." These warning do not impact NeXtMidas.
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 3.8.1 (17 Sep 2018)
JIRA Issue GForge DR Description
NXM-3095 823952-3 Security flaw in JAR signing during NeXtMidas build (fixed issue with reading PEM files on Windows)
NXM-3143 825104-3 Table: Inconsistent handling of spaces
NXM-3189 826435-3 JsonUtilities: doesn't handle Data properly (partial fix - needs additional testing)
NXM-3201 876408-1 Update Units fields from CCB approval
NXM-3213 826567-22 Graphics severely degraded on CentOS 7 (the "minimal" fix involved switching to full Java Swing and fixing other CentOS 7 issues)
NXM-3223 826567-22 PSD Packet Reordering
NXM-3253 669085-19 GeodeticUtils.computeCircleLL has issues when crossing date line (insidePolygon() portion of fix):
NXM-3261 827222-3 Mouse Wheel zoom should center on mouse

Bugs Fixed in Release 3.8.0 (02 Feb 2018)
JIRA Issue GForge DR Description
NXM-3085 823964-3 handlers.tbl needs https RESOURCE entry
NXM-3113 N/A FileName.parseName incorrectly treating filenames starting with '.' as file extension (fixed as part of NXM-3095)
NXM-3117 872676-1 Table: should not set DISABLE_ESCAPE_SEQUENCES in toString (when Table.SERIALIZE_WITH_ORIGINAL_FLAGS is set)
NXM-3120 872678-1 Table: support for Java Number - storing primitive types, deserialization (AKA All primitive types in Table should not be stored as Data objects)
NXM-3122 825058-3 Table: need support for keeping 'null' as is (adjusted behavior to throw NPE when null value us added)
NXM-3140 825201-3 GeodeticUtils.computeDistance(Position,Position) is wrong
NXM-3166 825690-3 JsonUtilities: Not handling Unicode escapes
NXM-3174 875036-1 NeXtMidas 3.7.3 PipeResources.initTimecode() timeline broken with pipe restarts

Bugs Fixed in Release 3.7.3 (03 Nov 2017)
JIRA Issue GForge DR Description
NXM-3040 865095-1 TimeLine Issue #1 - Bad TimeLine Issues
NXM-3041 865096-1 TimeLine Issue #2 - Insufficient TimeLine Entries (make alloc=-1 GROW_AS_NEEDED more usable by capping growth at 1M entries)
NXM-3042 865097-1 TimeLine Issue #3 - TimeLine Extension / overriding (partial fix allowing setting of missed entries))
NXM-3044 822867-3 NeXtMidas interfering with Java Web Start caching (Web Start caching is disabled)
NXM-3073 868952-1 TimeLine handling incorrect with pipe restarts
NXM-3084 824488-3 NeXtMidas 3.7.2 PKI/SSL Phase 1 unusable at site without fixes (partial fix)
NXM-3087 823964-3 Timecode broken for TC Keywords, with first offset not being first sample, in 3.7.2
NXM-3088 824013-3 PLOT/Layer2D: The NXM 3.7.2 release has a raster drawing issue when boxes are added
NXM-3095 823952-3 Security flaw in JAR signing during NeXtMidas build (patch included)
NXM-3119 872677-1 Table.toStringBuffer needs to properly handle Windows File and Path Objects
NXM-3122 825058-3 Table: need support for keeping 'null' as is
NXM-3155 825418-3 CsvFile:Regression - CSV file no longer recognizes spaces or last rows that do not end with LF

Bugs Fixed in Release 3.7.2 (27 Mar 2017)
JIRA Issue GForge DR Description
NXM-2841 851534-1 Refresh issue with zoom box
NXM-2890 860673-1 PLOT: MarkLocation and Zoom in FLAGS for GOTOLOCATION message should not be case-sensitive
NXM-2971 511352-15 Platinum header with large keyword section never completes
NXM-3007 862233-1 Keywords: Putting keywords fails
NXM-3010 862236-1 Timeline/DataFile: TimeLine does not support time code (TC) keywords, missing setTimeLineObject(..) in DataFile
NXM-3034 822618-3 PLOT: GEODETIC view panning, dragging broken
NXM-3040 865095-1 TimeLine Issue #1 Bad TimeLine Issues (partial fix)
NXM-3044 822867-3 NeXtMidas interfering with Java Web Start caching (temporary patch with partial fix)
NXM-3048 822477-3 DGNETSEND adds ICE HEADER (partial fix)

Bugs Fixed in Release 3.7.1 (20 Jun 2016)
JIRA Issue GForge DR Description
NXM-2626 824939-1 Unable to CTRL+C from loop
NXM-2704 826014-1 XBC: Keywords not propagated
NXM-2758 841173-1 File Write/Read Exception Not Propagated
NXM-2813 850933-1 NeXtMidas needs option to LOG NeXtMidas interactive commands when the Midas to Java Logger is enabled
NXM-2816 851147-1 HEADERMOD: Fails if duplicate key set
NXM-2834 854387-1 Cleanup SYS's (baseline's) cfg/nmstartup.mm
NXM-2840 850796-1 PLOT: Problem with axis labels
NXM-2843 851754-1 INCLUDE: Fails if name of include file is quoted
NXM-2849 852051-1 KEYWORD: Keywords.makeTable() can't handle PLATINUM keywords (with dots in key name)
NXM-2850 852053-1 HEADERMOD: Can't set SubSize on a file
NXM-2867 854385-1 DataFile: setData(offset,fieldNum,obj) does write Type 6000 subrecord correctly when num_elts > 1
NXM-2871 853082-1 GCONTROL: Selected item in a CHOICE not shown when there are disabled items
NXM-2872 853356-1 SHELLGUI: NullPointerException when multiple SHELLGUIs are attached to Shell
NXM-2875 839910-1 GCONTROL: Unable to right-justify numeric values
NXM-2888 854513-1 require Java 7 or higher (drop support for Java 6) (JavaSE-1.6 removed from manifest.mf)
NXM-2891 856370-1 ENVIRONMENT: SET KEYMAP should support loading from .tbl file
NXM-2892 855066-1 PLOT: incorrect AutoMin/AutoMax autoscaling when all of the first frame data is the same very large number
NXM-2898 820601-3 PLOT: x-cut plot should plot with same mode as original raster (complex mode, readout and view parameters added)
NXM-2900 855053-19 NeXtMidas: Issues defining path/options
NXM-2901 855059-1 File: Need to specify file in class path
NXM-2907 667782-19 XGEOPLOT: Handling OVERLAY message
NXM-2916 860739-1 Keyword: Reading file with incorrect HEADERREP or KeyLength causes errors
NXM-2918 820874-3 FileUtil.copyBaseFile does not work for input tar entry
NXM-2919 856234-1 Plot does not scale to the smallest dimension
NXM-2920 667799-19 DataFile.getDataBuffer() method name is confusing - added createDataBuffer(xfer)
NXM-2921 857198-1 PLOT: x-cut NPE on files without extension specified
NXM-2927 667810-19 CONVERT xml2tab gives cryptic error on bad xml
NXM-2931 511240-15 CsvFile now parses multi-line fields/cells.
NXM-2933 857485-1 CONVERT / StateVector: sv2blue(..) stack trace when using PLATINUM input file.
NXM-2934 667842-19 Convert auto-generated math libraries (nxm/sys/libm/*) to standard Java files.
NXM-2937 858331-1 PLOT: LayerScatter constant flicker in LatLon view with no x margin.
NXM-2938 858330-1 PLOT: LayerKML resizing issues due to incorrect full range calculation.
NXM-2941 857234-1 XGEOPLOT: Allow users to draw boxes on the nm xgeoplot.
NXM-2942 815906-1 INCLUDE statement should find files from other option trees.
NXM-2943 821342-3 LayerKML.drawPolygon(double[] coords) throws NPE even though issue caught earlier.
NXM-2944 821341-3 LayerMap.checkReachable does not handle default port for https.
NXM-2945 821334-3 List type for tables/results.
NXM-2946 859131-3 sys.lib.Data(String) constructs Data objects which overstate the amount of data they actually hold.
NXM-2947 821356-3 LayerWMS should default maxWidth and maxHeight.
NXM-2948 859518-1 ERROR running from NeXtMidas Jar
NXM-2954 821362-3 fcalc does not operate in piped mode.
NXM-2956 859894-1 FileName.relativeTo not work for Windows.
NXM-2959 814304-1 Add ULAW encode and decode library/primitives to AUDIO option tree.
NXM-2984 861281-1 PLOT: Layers' findRange() not setting values used for autoscaling.

Bugs Fixed in Release 3.7.0 (30 Dec 2015)
Bug Number GForge DR Description
2825 815434-3 PLOT / GCONTROL: Plot's Features menu needs a scrollbar
2861 840802-1 IF FEQ returns true for zero-length file vs any other file
2869 839462-1 HEADERMOD does not support T=<file type> (correction to error/warning messages for HEADREP=)
2889 850020-1 DSP: Need support for Platinum keyword DATA_INVERSION_FLAG (e.g. UPRIGHTSPECTRUM or INVERT_SPECTRUM command)
2901 850525-1 PLOT / Layer2D: Autoscale stops working after an extreme value
2917 848243-1 XGEOPLOT not processing T5LAYER message
2918 850721-1 PLATINUM to BLUE keyword conversion
2920 851099-1 Pipe.java: add try-catch to write method (always print details when exception occurs)
2928 851532-1 Support using NeXtMidas from bash
2934 851755-1 Args: Incorrect parsing of percent macro defaults
2938 853503-1 Table.toBytes() ClassCastException when has Hashtable entry that has non-String as a key
2949 667640-19 TABLE: Add library call for loading an OPAL table to "supported" API
2950 819632-3 PATH: include jar files recursively under jars area (Support for Jar directory links)
2955 852593-1 MAKE: CLEAN doesn't work for user option trees (does so recursively)
2956 852594-1 MAKE: Unable to re-build with earlier Java version
2958 852659-1 DataFile: getData(offset,fieldNum) does not return/read all data in Type 6000 when num_elts > 1 (fixed convertRecordRep(..) and read(Data,elements))
2965 853357-1 XGEOPLOT/LayerT5: New point component types are not displayed
2969 839910-1 GCONTROL: Unable to right-justify numeric val...
2970 817431-3 PLOT: Features text placement sticky (implemented DTag)
2973 854356-1 NmMake.java resource leak in copyFile method (and in Help, OptionTree, and Update classes)
2979 854391-1 TarFile: Add ability to create TAR files
2980 854392-1 BaseFile should implement Closable
2981 854393-1 StateVector: Add ability to request Ephemeral keywords based on list of time ticks
2982 854513-1 require Java 7 or higher (drop support for Java 6)
2983 854527-1 ARCHIVE: NPE during ON function when unable to open log file for output
2985 856370-1 ENVIRONMENT: SET KEYMAP should support loading from .tbl file
2988 855063-1 Table.removeListener() does NOT remove the table listener
2989 855064-1 nm make clean should not delete *.zip and *.jar under option tree
2991 855009-1 PLOT: Raster plot crashes (added additional thread safety measures)
2996 855052-1 DEFAULTS: Ignored bad input (e.g. non-existent command)
2999 855277-1 GENERATE: NPE when trying to SIGN jar file
3006 856456-1 nm make clean should not re-run user's nmstartup.mm on Unix (since nxm354)
3009 856457-1 Keywords: set method does not convert byte order after first element

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
NMPOSTLEGACY The user-contributed NMPOST (Legacy) option tree is out of date and is usually replaced with author's version. Get latest from the authors of NMPOST. 3.3.1
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 in 3.9.0 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)