
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.)
