PROGRAMMER'S QUIZ: MULTI-USER TECHNICAL ISSUES 1. When your application requests an unavailable resource, does the user get a complete onscreen explanation in plain English saying what has happened, what the program is doing about it, and what the user's options are? (Applications prepared with the Kit display an interactive window similar to this one: ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ Resource Not Available ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ» º Sorry, I couldn't get the resource you requested. I'm º º waiting for one or more users to unlock or close the º º database named Accounts.DBF so that I can open it. I'll º º continue to request this resource until it is granted, º º you press the END KEY, or timeout occurs. º ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹ º Press the arrow keys to move the window. º º Press H to hide the window. º º Press the END KEY to stop waiting. º ÈÍ 16 seconds so far ÍÍÍÍÍÍÍÍÍÍÍÍÍ 44 seconds before timeout ͼ You as the programmer control the timeout interval, the border colors, the interior colors, the default colors, and the left and right margins inside the window. There are default values for each user which you can reset or override.) 2. If your notification message pops up, can the user relocate it to see the information the message obscured when it popped up? (Kit messages can be relocated with the arrow keys or hidden for two seconds by pressing "H" or "h".) 3. Do you offer the user a choice to retry the failed resource request? (This approach wastes the user's time and energy and more seriously, can lead to deadlock. The Kit retries automatically but stops on command.) 4. Do you retry the resource request automatically with no delay between requests? (Retry without delay can slow a LAN to a crawl. With the Kit you specify the retry delay.) 5. Do you retry the resource request automatically and endlessly? (This approach can lead to deadlock. With the Kit you specify the maximum duration of repeated requests to automatically avoid deadlock.) 6. If you retry the resource request automatically for a specified maximum amount of time, do you display a countdown for the user? (The Kit message displays a countdown and a "countup" of the number of seconds of automatic retry activity.) 7. When a request is denied, do you always have to code the exception handling? (With the Kit you can use the Kit's default handling when that is satisfactory, and only code exception handling when the default handling is inappropriate.) 8. Does your application have a structured way to handle screen colors for users and groups of users? (The Kit has a utility which you use to create and maintain settings for screen colors and other items on a per-user or group basis.) 9. You can test NETERR() following a USE command to determine if the USE command was successful. Unfortunately, the USE command is the only file- opening command which NETERR() supports. For example, if you execute "APPEND FROM DAILY.DBF" when DAILY.DBF is in exclusive use by another user, your application will terminate abnormally. Do you know how to handle the file-opening commands other than USE? (An information structure called a "semaphore" is used to provide the concurrency control necessary to compensate for the lack of support by NETERR(). Thirty percent of the Course and about half of the source code library in the Kit is devoted to semaphores.)