Space programming

Ahead of their talk at the JavaOne, four NASA software engineers told Geertjan Wielenga about how they use Java, JavaFX and NetBeans to develop NASA’s mission software.

What kind of software development, i.e., what kinds of applications, are you developing for NASA missions?

Nick: Typically I develop a combination of text file parsing, analysis, and reporting software that provide products in support of the NASA Conjunction Assessment Risk Analysis (CARA) team, and the Space Surveillance Performance Analysis Team (SSPAT) which is managed by both NASA and the Air Force.

Sean H: For DSCOVR (the Deep Space Climate Observatory satellite), the software systems we develop for NASA will be used in planning orbit maintenance maneuvers and generating data products related to the orbit of the satellite.

Keith: In our work in the FDF (Flight Dynamics Facility), we are developing and maintaining a variety of applications that range from infrastructural (input and output to the facility, initial data processing, process management) to user interactive support and analysis tools.

In our environment we have a mix of the newer applications we’ve developed and legacy applications that have some history to them. The nature of the FDF is that it is a multi-mission facility, so these applications generally support any and all of the missions that are supported by the facility.

Sean P: I find myself developing a mix of tools that all support missions in different phases. My NASA Magnetospheric Multiscale software is deployed directly to Flight Dynamics Operations and will be executed daily for product generation and Telemetry QA. For other missions like James Webb Space Telescope I am developing tools for analysts to visualize the mission’s Contact Analysis modeling.

What role does Java play in the NASA mission software you develop?

Nick: Java is the glue that ties our legacy software capabilities together, and provides a cross-platform modular framework for a collection of unrelated tools and capabilities via the NetBeans platform.

Sean H: Java has provided a user interface on top of a set of numerical analysis and physics simulation tools. The tools typically require a subject matter expert to operate properly; with Java in the loop, this knowledge has been captured and implemented for general use by non-technical personnel.

SEE ALSO: NASA’s ten coding commandments

Keith: At the FDF we’ve been using Java for all of our new application development, and intend to continue doing so unless a particular project requires otherwise.

Sean P: Java enables me to deliver solutions that are cross-platform, performant and intuitive all at a low cost for the software development life cycle. Like Nick said the Java ecosystem makes integrating the existing legacy tools straight forward while JavaFX and the NetBeans Platform allow for modern reusable attractive interfaces.

In mission-critical systems you work on, how does Java performance measure up? And is garbage collection helpful or harmful? What are the key factors and requirements that are unique to software developed in your support of NASA?

Nick: So far Java performance has never been a bottleneck. Most of our bottlenecks that exist have to do with data bandwidth limits, and legacy software speed. One of the unique requirements is that we must use accredited software. This means that we can’t just pull in third-party JAR files at will, but we can use anything already contained within the JDK.

Keith: In the FDF we’ve been pleased with the performance of the Java applications we’ve developed. None of the performance issues we’ve encountered up to now have been related to the choice of Java as a platform. But it is something we keep an eye on. The data rates that our facility deals with currently aren’t particularly high.

But as a facility we are always keeping an eye out for new mission support opportunities along with the opportunity to bring in new data which may drive different performance requirements. Some of the key things for our software in the FDF is that it needs to be robust, configurable, and easy to maintain.

Sean P: The performance of the latest JDKs (7/8) has shown no issues of performance. I am not developing a real time system so I don’t have to worry about GC timing to a fine detail. However I am working with large data products, sometimes many simultaneously.

It is not uncommon to have a 1 GB of heap in use because of the size of ephemeris and covariance files along with their visualizations. However the 64 bit JRE 8 has had absolutely no problems thus far managing this amount of memory and cleaning up when needed.

How important is JavaFX in the context of the NASA software that you have worked on? Is it a ‘nice to have’ or has it been more than that? Which aspects of JavaFX are especially useful? Are there performance concerns or other potential problem areas in your mind in relation to JavaFX?

Nick: We are in the process of upgrading our operational system to Java 8 / JFX 8. Due to our accreditation requirements, we can’t typically bring in third-party graphical libraries. JavaFX gives us access to visualizations and plotting capabilities in an accredited software package, making it the only cost-effective way to provide these capabilities.

Since most of our software is analytical in nature, plots and 3D visualizations are going to be especially useful, although the use of JavaFX UI components is certainly interesting. There aren’t currently any performance concerns, and our only concerns are that JavaFX 3D is lacking a few features that we would find very useful such as 3D lines, billboards, and 3D scene backgrounds.

Sean H: Although tools developed in JavaFX, typically visual representations of data, start out as ‘nice to have’s, the usefulness quickly becomes apparent in the operations environment. Before long, JavaFX becomes a first class citizen in the ground system software.

Keith: From our standpoint so far it’s been a nice to have. Our biggest thing in initial adoption was getting the team up to speed. But going forward we hope to leverage more of what’s there as we move from a more infrastructure focus to address more user interactive applications and potential web based tie-ins.

Sean P: My answer to this is “it depends”. For my operational deployments it is purely nice to have. However for all of my analysis tools it is absolutely essential as not only the visualization api but also the custom data interaction. Game Engine quality performance is overkill and too complex while the data sets I work with would choke any web toolkit. Only JavaFX can give me both the custom visuals AND the performance I need with such a quick and easy API.

Together with Java and JavaFX, you use NetBeans IDE, as well as the application framework beneath it, i.e., the NetBeans Platform. What are the key strengths of these two separate technologies?

Nick: The NetBeans Platform provides all the plumbing for my applications, meaning that I don’t need to spend nearly as much time developing the things that aren’t important to my application (e.g. UI functionality, file system, modules, nodes, etc). The NetBeans IDE simplifies my build process, provides useful hints and tips for improving my code, integrates with my workflow, and provides excellent tools for profiling my applications.

Sean P: I will admit, you would need a separate interview for me to have enough space to talk about how much I love the NetBeans Platform. Simply stated the Platform gets me to where I need to be as quick as possible while being incredibly modular. I’ve used other plugin frameworks professionally and they are great too, but when it comes down to developing a truly useful user interaction/experience, the Platform gets it down the quickest.

As for using NetBeans as my IDE of choice, it literally does EVERYTHING I need to do, ranging from my Touchscreen enabled custom Canvas visualizations to the legacy flight software written in Fortran/C. I have been using NetBeans since 2006 (Holler for 5.0!) and there were definitely some kinks, but I have watched it catch up and now recently ‘eclipse’ the competition. Very proud to be a part of that community.

As an integration platform for multiple tools across different NASA missions, how does the NetBeans Platform figure into that?

Nick: Our software consists of a variety of applications written in Java, Fortran, MATLAB, CSH, and Perl. As such, we needed the ability to tie all of these capabilities together cleanly. By using the NetBeans Platform plug-in architecture we were able to create reusable plugins, simple module interfaces, provide scalability for future plug-ins, and give our operators a single graphical interface to manage all of these capabilities.

Sean H: In its use across missions, the Netbeans Platform has enabled the use of previously developed plug-ins on a new project. An example of this is leveraging an existing MATLAB integration plug in developed for MMS on DSCOVR. The result was about two staff-weeks saved.

Keith: Again, in the FDF, all of our applications are generally meant to support all of the missions the facility supports. But as we move forward we may find that we have some more specific tools or functions for different missions. We fully expect the NetBeans platform to be an aid in that.

Sean P: I am proud to say I began an initiative internally to create a standardized development platform based on the NetBeans Platform here at a.i. solutions back in 2011. Three years later we have 4 separate missions and over a dozen tools developed on our custom plugin library, nicknamed Polaris.

With our custom platform maturing, those numbers will continue to grow as the software and the approach has clearly demonstrated a software development cost savings. Each successive mission and tool becomes that much easier to develop as we reuse and extend the modules we have already developed.

How do you see the software you’re working on progressing in the coming years? Parallelism and other Java 8 features — how will these figure into your plans?

Nick: Once our operational system goes live with Java 8, we can incorporate our development efforts to include parallel streams, lambdas and most importantly JavaFX visualizations. Our operators are already excited about the sheer amount of possibilities for better understanding of the operational scenarios encountered through visualization.

Keith: The main things we’ll be working on the coming years will be a mix of infrastructure type applications combined with a new emphasis on user analysis and production applications. The infrastructure type work is in continued maintenance and responding to our customer’s own modernization efforts.

But now that the main underpinnings are there we’ll be looking to do some of the things our analysts are looking for to help augment their expertise and streamline their processes, and perhaps expose some of the results and capabilities out of the confines of our particular facility.

We’ll also continue moving forward with our goal to continue retiring the older legacy applications with new development. As we get into those areas of development we’ll certainly be looking to leverage the features of Java8.

Sean P: I am most keenly focused on performance and graphics and here is why: Web development technologies and frameworks have rapidly grown in the past few years to the point where they are a default choice for many new software development efforts. So Java’s path for Desktop development must pass through solution spaces that offer more data, more interaction, and better visualizations then their web counterparts. In the aerospace industry this edge is always shifting. You can never have enough capability. What was cutting edge 5 years ago is boring today.

Java’s performance enabled with easy to use Streams/Parallelism and visual APIs like Canvas and JavaFX 3D will be the attractions. When the various JDK’s finally complete their feature advancement on the mobile processor architectures, it will be the difference maker. These are areas that I believe Oracle and the Community must focus on for Java to again be the default choice for custom application development.

Who are we?

a.i. solutions supports US space and defense agencies, producing products and services that span flight dynamics, space operations, ground system software, information technology, and systems engineering for launch vehicles, missiles and satellites

See also: NASA Mission Software Development on the Eights: Java 8, JavaFX 8, and NetBeans 8 [CON1994] and Software Lessons Learned from NASA and Other Security Organizations [CON6735].