3d Corridors built on-the-fly to display area-of-responsibility for a mission.
Corridors that were used by real aircraft flying in DFW airspace.
My JavaFX multiforming architecture proposal based off Microsoft's MVVM architechture for .NET.
OVERVIEW:
Air Commons was a client project built for The US Air Force, focusing on building fast, secure, and robust software. This project was a gps-based Command and Control Center for Air-Domain assets. Built in Java and JavaFX, Air Commons is used for creating, commanding, and observing aircraft and swarm missions in the field while tracking data, progress, and swarm health. My main focus during this project was to handle all corner cases and provide redundancy while maintaining a high level of quality in a multithreaded application.
Main Tech Stack:
Java, JavaFX, Maven, Gradle, MariaDB(SQL), edgeDB(Postgres)
Other technologies:
Protobuf, ArcGIS, Python, Rust
TECHNICAL GOALS:
During this project I wanted to expand my knowlege of large codebases, team git flow, cost-sunk evaluation, time management, and other concepts majorly focused on CI/CD routine efficiency. I expanded my skills with the Linux Kernel and comfort level with CLI based libraries like Git, Maven, Gradle, OpenSSH, and more. Understanding networking relationships and connections was also a very important part of this position, especially when it came to cybersecurity, considering the use case for the platform.
NOTABLE FEATURES:
Minimap:
Based on vectors in the physics sense, I was able to make this fairly lightweight, by using a centered "rod" with a height relative to double the percentage of the distance of the object from the center of the map and the maximum threshold, then adding a dot on top. I could add a rotation, and skip the need to make a number matrix to place the dot acurately based on the center of the map. An altered version of raytracing. To the right is a debug version to display this in action.
MVVM Architecture:
When researching the most common techinique to multiform in JavaFX, I found that there is no widely accepted variant, So I took inspiration from Microsoft's MVVM Architecture to create a simple multiforming pattern in JavaFX. I created a design model to present as a proposal. This change targeted reducing hardware load for our deployable windows tablets.
Dynamic 3D Corridors:
Digging through years of SO posts and documentation to put this together, I was finally able to piece together a Java Based version of this ArGIS feature. Using GeoJSON, Air Commons can build "Corridors" on the fly for missions that were just recieved. Allowing you to visualize things like an Area of Responsibility or an air taxi lane to make sure you're within the bounds of your reserved airspace. Built with the intent of observing unmanned traffic management in real time, an example intersection is shown on the right.
HURDLES:
Abundant Multi-threading:
Running a thread safe application while managing roughly 50 threads at any time is a task that requires close attention to detail.
Low Support:
JavaFX doesn't support the full svg spec, or css animations, so designing and implementing a modern interface posed lots of challenges I had to overcome with special curated techiniques.
Low Online Presence:
JavaFX doesn't have a great online presence or documentation, so when when it comes to complex issues or specific hurdles, there's very little relevant information available. Therefore, this role required a large amount of research, invention, and discovery. I had to implement more than 10 undocumented UI needs with little to no information overall, some requiring extreme creativity.
No Multiforming Best Practices:
JavaFX doesn't have a well-known best practice for multiforming, so I had to take inspiration from similar frameworks and design one that would allow me to have flexibility in development, but fit the application for the overall software.
TIMELINE:
I was initially tasked with the redesign of our old and outdated UI, and was following a design document to produce the vision of our designer. It was a difficult process due to the effect and svg limitations of the JavaFX framework, but in the end I was able to find ways around the limitations.
I took over this application as my own portion of our platform, adn was in charge of making system-wide improvements. I would make changes involving 30 files and 1500 lines regularly. I rewrote at least half of the old code-base while making performance improvements. I implemented more Object Oriented Principles into our codebase by creating classes that would carry and process data that was previously hard-coded. Such as the Aircraft Object, custom drop-downs, and our notification system. Having these new improvements, development and maintenance becaome much faster and easier. Many other improvements were my work, such as gracefully closing connections to keep ports from being held open.
The software I had optimized was now being used in the field to complete contracts. Live helicopters and hexacopter style drones were communicating through software I developed a major portion of. A few examples shown below contain real aircraft connected to our system.
A mini map, similar to a radar in real situations, is a UI feature meant to expand a user's awareness beyond the area they can currently see. Our's is meant to let the user monitor the area 5x larger than the current map bounds.
Piecing together a barely mentioned feature from a set of unrelated documentation helped me to produce long tubes for drones to fly through on our GUI based on paths provided from missions.
After using the initial design, our team wanted to implement custom volumes from our mission JSON files. So I did a pretty big overhaul of our GeoJSON parser and created some python scripts to generate these volumes based on the orginial data using geomtery formulas and the turfPy library. In the future, these should be generated on the fly in Java.
Now that we had flown many live missions with real aircraft, we began to think of ways to appeal to retail customers. A large feature set was creating "Airspaces." These held user defined attributes as Corridors and Points Of Interest. Streamlining the operation of a mission. It had it's own tables in the database so all data would persist, and defaults could be selected on load.
After using MariaDB for a while, our team decided that we would migrate to edgeDB as our sole primary DB. I created many schemas for new features and implemented query tactics to shorten query time. Most of my personal efforts lay in the Airspace tables.
I was in charge of the codebase migration for the MVVM architechure I proposed. The biggest portion of this for me was creating a basic lightweight state management solution, similar to Redux. It cut down memory usage by 60% and allowed us to run our software on our dell tough tablets, and weaker hardware.