Usage
* Server:
    * inside debugging_environment: `node debugging_server.js`
* Client:
    * inside debugging_environment: `python simulation_client.py`
* Interface:
    * go to [localhost:9595] (http://localhost:9595) for the debugging interface
        * Operations (Toolbar):
            * Simulate: simulates the model as-fast-as-possible.
            * Realtime Simulate: simulates the model in (scaled) real-time (change the scale by adjusting the parameter to the right of the button).
            * Pause
            * Big Step: perform one iteration of the simulation algorithm.
            * Small Step: perform one of the eight phases of one iteration of the simulation algorithm. Detail on each phase is listed below.
                * Imminent components are shown in blue.
                * Selected component is shown in blue.
                * Output generated is visualized under the output ports. Click on a message to show its contents in the console.
                * Output is routed along port connections (and potentially translated).
                * Components that will execute their external transition function are shown in red, those that will execute their internal transition function in blue.
                * The next state of each transitioning component is computed.
                * The next time at which an internal transition function is scheduled is computed and displayed.
                * Structural changes are displayed.
            * Reset the simulation to its initial state. Also resets the visualization.
            * Add a Breakpoint with four parameters:
                * The name of the breakpoint.
                * A function, returning `True` (simulation halts) or `False` (simulation does not halt). The parameter `t` is an array of two elements representing the current time and phase, `m` is the model being simulated, and `tr` is a set of models that just transitioned to a new state.
                * Enabled allows to specify whether the breakpoint is enabled or not.
                * Disable on Trigger allows to specify whether the breakpoint is to be disabled once it has been triggered.
        * Operations (Canvas Elements):
            * Instances:
                * Left-clicking an instance will log its current state in the console.
                * Right-clicking an instance allows to change one of its state variables with a god event.
                * Left-clicking an input port allows to inject a message on that port at a specified time.
            * Breakpoints:
                * Clicking the trash bin icon next to the breakpoint's name will delete it.
                * Clicking the breakpoint will enable or disable it.
                * Triggered breakpoints are highlighted in red.
        * Information:
            * Instances:
                * Names of coupled DEVS models are displayed in italics.
                * Input ports are green, output ports are purple.
                * The time at which the next internal transition function is scheduled is shown in the top right corner.
                * Hovering over an instance will display its current state.
                * Hovering over a port of an instance shows its name and connections.
            * The simulation time is displayed, as well as the phase (in case multiple transitions are executed on the same simulated time instance).
    * go to [localhost:9696] (http://localhost:9696) for the visualization
        * Left-clicking a particle sends a realtime interrupt to the simulation (which selects that particle).
        * Pressing the delete button sends a realtime interrupt to the simulation (deleting all selected particles).
        * Right-clicking a particle will display the state of that particle in the debugging interface.

Models and Source Files
* User Model: `particle_interaction.py`
* User Visualization:
    * Statechart model: `javascript_models/particle_interaction_vis_js_instrumented.xml`
    * Webpage: `visualization_server.html`
* Simulator:
    * Statechart model: `debugging_environment/pypdevs/sccd.xml`
    * Simulation client: `debugging_environment/simulation_client.py`
* Communication Layer: `debugging_server.js`