Optimize with a SATA RAID Storage Solution
Range of capacities as low as $1250 per TB. Ideal if you currently rely on servers/disks/JBODs
In this series of articles, I have introduced a mechanism that removes manual labor from dependency tracking. This mechanism automatically discovers dependencies within the application and ensures that dependent information is always up to date.
Read the whole series on automatic dependency tracking:
Along the way, I developed Nebula, a network design application that demonstrates a typical GUI application's many key features. It models a problem in such a way that the user can build, traverse, and apply the solution. And it presents a graphical user interface that allows simple repositioning and component editing. However, Nebula is not yet complete; it lacks true user interaction.
An interactive application provides feedback for most user actions. The feedback tells the user what the program expects and foreshadows events. It allows the user to combine several small actions to achieve a larger result. And it lets the user see what is going on inside the model itself.
To achieve a rich user experience, you must add visual feedback for such actions as selection, dragging, placing new devices, and running simulations. Just as automatic dependency tracking helps simplify the construction of the UI itself, it also helps you add rich user interaction. You simply identify the system's dependent and dynamic state.
Recall that an event changes dynamic state, whereas dependent state simply reacts to other state. Once you identify dynamic and dependent attributes, you use sentries to express them in code (refer to the sidebar, "Coding Practices for Automatic Dependency Tracking" for more information). In the previous two installments, we used sentries to capture the dependency of the user interface (UI) on the information model (IM). In this installment, we implement the following four dependency cases:
First, we tackle how to add visual feedback as the user repositions a device. We want to pick a device when the user presses the mouse button, track the mouse position while the button is pressed, and repaint the device as the mouse moves. We have already written the code that moves the device when the user releases the mouse; now we just need to provide some feedback for the drag.