How to Build an Air Traffic Control System.notes

Friday, March 25, 2005

TITLE OF PAPER: How to Build an Air Traffic Control System
URL OF PRESENTATION: _URL_of_powerpoint_presentation_
PRESENTED BY: Neal Horwitz
REPRESENTING: MetaSlash

CONFERENCE: PyCon 2005
DATE: _date_of_your_conference_here_
LOCATION: _venue_and_room_in_venue_

--------------------------------------------------------------------------
REAL-TIME NOTES / ANNOTATIONS OF THE PAPER:
{If you've contributed, add your name, e-mail & URL at the bottom}

Neal had 10 yrs experience with ATC systems, saw how bad they generally
were.  

Everyone thinks ATC is hard - Can't build a good system?  Neal didn't buy that.

Neal decides to test this theory as an internal R&D project.
See also http://sourceforge.net/projects/openatc/
(help!!!! I'm not really into this....)

ATC Requirements
    High availability
        no single point of failure
    Keep track of all the aircraft
        where they are
        where they are going
    Don't let aircraft get too close
        to each other
        to a mountain, etc.

ATC Automation
    Flight Data Processors (FDP) keep track of
        Airspace features, including: routes, waypoints, sectors, areas, etc
        Flight Plans
        Aircraft information, possibly including position, emergency
        Air Traffic Controllers usually deal with 10s of aircrafts, not hundreds
        
    FDPs handle conformance monitoring and conflicts
        (current and in the future)
        Ensure that aircraft are doing what they're supposed to -- fly along the correct route
        It's a 4D problem - lat, long, alt, time
        Predictive observations & prognostications about future conflicts (terrain, plane, etc).
        Anecdote: .5hr delay near ocean city md for aircraft in air cause an 8hour delay
            for stuff on the ground. yikes.

What does this have to do with Python?
    Less code means less bugs
    VM handles memory/resource issue
        Memory, socket, and file descriptor leaks
        Buffer overruns
        Double frees
        Most ATC's are written in C/C++, a few in Java - worries about memory
        lifetime of objects - not a problem in Python!
    Rich data structures
    Concise, readable code
    Robust, high-level libraries (e.g. Tk, Twisted) (uses Tkinter canvas)
    Extensive testing (aka 'soak test') key to success in this arena. (good!)
    Anecdote: one installation knew that they'd fail a soak test after 8 hours,
        so they didn't really want to run them at all. double yikes.


<tangent>
(JB Note: I used to write flight tracking software for airline dispatch operations.  Our code base -- which I didn't start, so don't blame me -- had
every one of the problems indicated above.)
(rpk - cool, jb - can you say for whom you wrote the above? NWA would be my guess. :))
(Preston Aviation, a subsidiary of Boeing.  We sold the SW to airlines.  Actually, we didn't sell, which was one reason they shut down the whole Fairfax office in January :))
(well, safety^h^h^h^h^hprofitability, first, i guess. ;))
</tangent>

DATA STRUCTURES
    Not sure what to say except the obvious
    Strings, lists, etc...
    Results in smaller, yet still easily understood code

Concise/Readable Code (ah, slides to be made available)
 -zipped through


[Demo: ]
 - stressing the scale of the problem, 10s to 100s of aircraft, demo using 1000 on an old craptop
 - runs fine. no py perf issues.
 - 75% of the world has no radar coverage, this has a different name for the
 type of coverage it does have...missed that
 

Development
    Developing the situation Display and Flight Data Processor took very
        little time (81.5 hours) and ~2100 lines of code
    Second system experience (impl once before, about a month, but each reimpl (py too)
        built all the data proc, file io, gui bits, etc)
    System does not do simulation, it just displays the data from data sources

Currently Developed
    Waypoints, routes, sectors, MSAW, restricted areas
    Warnings for MSAW or restricted areas

What needs to be done
    Coflight (Conflict) alert
    Sector reconfiguration
    Automated hand hand-off between controllers
    External communications
    Dynamic reconfiguration
    Redundancy

Q:  Thoughts on TK/UI toolkits in general?
A:  Most familiar with Tk and Wx, a bit on Qt.
    All of them are okay (none particularly bad).
    About Tk
        Canvas Widget
        Very robust
        Non-modern-ness of GUI not an issue
    About Wx
        lack of robustness

    (so he's not using OpenGL - i was wondering that too - i do OpenGL for a living - thought 3d would be much cooler (or even, in some cases, useful) (I do 3D too -- going to the bof?)  I want to.  3d gfx BOF is @ 11 in 310. Oops, almost time to go, then. Si. Going to the UPS now.
    

Q:  JB: What data sources does the sw use?  Any human data sources, and how do you handle errors?
A:  TCP/IP feed with simple data: Lat, Long, Alt, flight number
    FAA data feed -- airlines radio people on ground who type stuff in
    Haven't added it in, but want to use that in the future
    (JB: I asked because we had all sorts of problems with that data!)

----------------------------------------------------------------------
REFERENCES: {as documents / sites are referenced add them below}

(slides unavailable on the web at this point)

--------------------------------------------------------------------------
QUOTES:



--------------------------------------------------------------------------
CONTRIBUTORS: {add your name, e-mail address and URL below}
Jonathan Blocksom <blocksom@gollygee.com>
Abhay Saxena <ark3@email.com>
Sally Kleinfeldt <skleinfeldt@tnc.org>



--------------------------------------------------------------------------
E-MAIL BOUNCEBACK: {add your e-mail address separated by commas }



--------------------------------------------------------------------------
NOTES ON / KEY TO THIS TEMPLATE:
A headline (like a field in a database) will be CAPITALISED
    This differentiates from the text that follows
A variable that you can change will be surrounded by _underscores_
    Spaces in variables are also replaced with under_scores
    This allows people to select the whole variable with a simple double-click
A tool-tip is lower case and surrounded by {curly brackets / parentheses}
    These supply helpful contextual information.

--------------------------------------------------------------------------
Copyright shared between all the participants unless otherwise stated...