Thursday Feb 26, 2009

Find Binds

JavaFX binds are cool. They significantly simplify the structure of an application by eliminating completely the need to use observer patterns to allow objects to receive notifications of application state changes.

I spent several days at Mobile World Congress demoing JavaFX to MIDP developers, and overall I'd say bind was the feature of the language most appreciated.

With all its advantages, it seems to me that code maintainability (not to mention performance) potentially suffers by the use of this construct. With multiple binds scattered throughout an application, it's likely that at some point an update to a bound variable will cause unexpected behavior, a situation not easy to trace.

I would love it if NetBeans had a "Find Binds" feature, similar to "Find Usages" which shows all variables affected by bindings to a selected variable or code block.

Without such a feature, debugging obscure issues related to bindings can be tedious.

I just submitted this as a NetBeans feature request.

Video Surveillance System Demo Script

The demo script for the Video Surveillance system we built for Mobile World Congress in Barcelona unfolds as follows.

Background: A centralized console shows six video feeds from cameras situated throughout a corporate campus. All feeds are active simultaneously, with each shown as a thumbnail. The system cycles through the feeds, expanding one at a time to highlight it.

Several security guards, each with a JavaFX handset, make their rounds throughout the campus. The handsets are GPS-enabled, and the app on the handset invokes the Java Location API (JSR 179) to determine its location, and broadcasts this back up to the desktop application over http (using, with the physical location of the phone encoded in the URL string.

Like the console, the handsets cycle through each video feed, and also display a map showing the location of each feed.

A map on the desktop shows the entire campus, with icons representing each guard wandering around the campus corresponding to the guard movements.

That's the backround. Now the action begins. An operater monitoring the main console observes a suspicious-looking truck pulling into the loading dock, as shown on one of the camera feeds. Three thugs jump out of the truck, grab crowbars and sledge hammers, and within ten seconds are able to break into the loading bay and make their way into the building, and start stealing servers and monitors and loading them into the truck.

Seeing all this, the operator sounds the alarm by clicking an alarm button on the console. Immediately each handset changes state and displays a bright red background screen, plays an audio message ("INTRUDER ALERT AT LOADING DOCK D"), while the video feed from the loading dock camera is simultaneously streamed to the phone.

The phone also shows a map of the area where the breakin occurs with a flashing red camera icon at the loading dock. This map can be zoomed with a tap of the stylus.

With the guards notified, the main console map shows all four guards converging at the loading dock area. The precise moment the first guard arrives, the video feeds (on both the console and the handset) show a security truck arriving, followed by the guard jumping out and making the arrest.

At this time the operator at the console cancels the alarm, whereby the phone plays another audio alert ("SITUATION UNDER CONTROL") and returns to its previous state of cycling through camera feeds.

That's the demo scenario in a nutshell. Due to the nature of the demo and some constraints imposed by the conference environment, some aspects of the demo were simulated. But overall it was a good proof of concept showing a sophisticated media-rich JavaFX application running on both the desktop and the handsets.

JavaFX Video Surveillance System

Our group is building a project for JavaOne 2009 which is based on JavaFX and will showcase many capabilities of the platform. In order to achieve maximum leverage of the code we're writing, my manager encouraged me to submit the same project as a demo proposal for the Mobile World Congress conference which was held in Barcelona last week.

The proposal was mostly accepted, but the marketing folks asked that we considerably change it so as to highlight the video streaming capabilities of JavaFX.

It turned out that modifying the original scenario to support video didn't make alot of sense. Instead we came up with a completely new scenario based on a video surveillance system.

The basic scenario is a corporate security force which has multiple cameras situated throughout an office complex. A centralized console displays the streams coming from each camera, and several security guards patrol the campus, each carrying a JavaFX-enabled handset.

We were able to implement a proof of concept of this demo in well under a month, with no prior experience with JavaFX.

In the next few postings I'll describe the demo in detail and discuss some of the issues we encountered while building it.

Overall I'm extremely pleased with the JavaFX platform, and I also was pleasantly surprised by the warm reception the demo received at the show.




« July 2016