Monday, October 5, 2015

Application Management, Security, & Distribution

While at Attachmate, during a product version development period in which the features on which I worked had no new feature requests or bugs reported, I was assigned a three month special project whose goal was to explore the various management and distribution mechanisms available in the market so I could report on any that were suited to improve our product.

Among the products currently performing those services was Microsoft's Management Console, which offered an interface by which we could install and specify what features in our flagship product, Extra Personal Client, were visible or accessible, by user or group, from the network administrator's console. Applying this research I prepared a group policy administrator file (ADM) that provided the list of product features the MMC console could offer to configure and the awareness code in the product that presented the group policy settings in the product's UI.

With this feature our product cold be installed, configured, and made available feature-by-feature to users or groups as allowed by the network administrator. That reduced the cost of management and distribution of our product and provided security that was controlled in a place accessible only to those a customer would choose gave pause to those rushing to web-based solutions.

The Extra! Personal Client ADM File:


; EE2000 policy settings
#if version <= 2

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLASS USER   ;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;************************************************
;************************************************
;************************************************
;************************************************
; BEGIN EXTRA! Enterprise 2000 Policy Template for use with Windows 95/98 or Windows NT 4.0
;
CATEGORY !!EE2000

KEYNAME Software\Policies\Attachmate\EE2000
   

        POLICY !!EE2K_File

                PART !!EE2K_NewSession_Disable CHECKBOX
                VALUENAME DisableFileNewSession
                END PART

                PART !!EE2K_OpenSession_Disable CHECKBOX
                VALUENAME DisableFileOpenSession
                END PART

                PART !!EE2K_SaveSession_Disable CHECKBOX
                VALUENAME DisableFileSaveSession
                END PART

                PART !!EE2K_SaveSessionAs_Disable CHECKBOX
                VALUENAME DisableFileSaveSessionAs
                END PART

                PART !!EE2K_HostCapture_Disable CHECKBOX
                VALUENAME DisableFileHostCapture
                END PART

                PART !!EE2K_OpenLayout_Disable CHECKBOX
                VALUENAME DisableFileOpenLayout
                END PART

                PART !!EE2K_SaveLayout_Disable CHECKBOX
                VALUENAME DisableFileSaveLayout
                END PART

                PART !!EE2K_Properties_Disable CHECKBOX
                VALUENAME DisableFileProperties
                END PART

                PART !!EE2K_PageSetup_Disable CHECKBOX
                VALUENAME DisableFilePageSetup
                END PART

                PART !!EE2K_PrintSetup_Disable CHECKBOX
                VALUENAME DisableFilePrintSetup
                END PART

                PART !!EE2K_PrintScreen_Disable CHECKBOX
                VALUENAME DisableFilePrintScreen
                END PART

                PART !!EE2K_PrintMultipleScreens_Disable CHECKBOX
                VALUENAME DisableFilePrintMultipleScreens
                END PART

                PART !!EE2K_Capture_Disable CHECKBOX
                VALUENAME DisableFileCapture
                END PART

                PART !!EE2K_StopCapture_Disable CHECKBOX
                VALUENAME DisableFileStopCapture
                END PART

                PART !!EE2K_FinishPrinting_Disable CHECKBOX
                VALUENAME DisableFileFinishPrinting
                END PART

                PART !!EE2K_ExitSession_Disable CHECKBOX
                VALUENAME DisableFileExitSession
                END PART

                PART !!EE2K_ExitExtra_Disable CHECKBOX
                VALUENAME DisableFileExitExtra
                END PART

        END POLICY    ;file
;************************************************

        POLICY !!EE2K_Edit

                PART !!EE2K_Cut_Disable CHECKBOX
                VALUENAME DisableEditCut
                END PART

                PART !!EE2K_Copy_Disable CHECKBOX
                VALUENAME DisableEditCopy
                END PART

                PART !!EE2K_CopyAsTable CHECKBOX
                VALUENAME DisableEditCopyAsTable
                END PART

                PART !!EE2K_CutAndAppend CHECKBOX
                VALUENAME DisableEditCutAndAppend
                END PART

                PART !!EE2K_CopyAndAppend CHECKBOX
                VALUENAME DisableEditCopyAndAppend
                END PART

                PART !!EE2K_Paste_Disable CHECKBOX
                VALUENAME DisableEditPaste
                END PART

                PART !!EE2K_Paste_Continue CHECKBOX
                VALUENAME DisableEditPasteContinue
                END PART

                PART !!EE2K_Clear_Disable CHECKBOX
                VALUENAME DisableEditClearDisable
                END PART

                PART !!EE2K_Clear_Display CHECKBOX
                VALUENAME DisableEditClearDisplay
                END PART

                PART !!EE2K_Clear_History CHECKBOX
                VALUENAME DisableEditClearHistory
                END PART

                PART !!EE2K_SelectAll_Disable CHECKBOX
                VALUENAME DisableEditSelectAll
                END PART

                PART !!EE2K_SelectDisplay CHECKBOX
                VALUENAME DisableEditSelectDisplay
                END PART

                PART !!EE2K_Settings_Disable CHECKBOX
                VALUENAME DisableEditSettings
                END PART
               

        END POLICY    ;edit
;************************************************


        POLICY !!EE2K_View

                PART !!EE2K_Toolbars_Disable CHECKBOX
                VALUENAME DisableViewToolbars
                END PART

                PART !!EE2K_StatusBar_Disable CHECKBOX
                VALUENAME DisableViewStatusBar
                END PART

                PART !!EE2K_QuickPads_Disable CHECKBOX
                VALUENAME DisableViewQuickPads
                END PART

                PART !!EE2K_HotSpots_Disable CHECKBOX
                VALUENAME DisableViewHotSpots
                END PART

                PART !!EE2K_KeyboardMap_Disable CHECKBOX
                VALUENAME DisableViewKeyboardMap
                END PART

                PART !!EE2K_RuleLines CHECKBOX
                VALUENAME DisableViewRuleLines
                END PART

                PART !!EE2K_PrintStatus_Disable CHECKBOX
                VALUENAME DisableEditPrintStatus
                END PART
               
                PART !!EE2K_SessionStatus_Disable CHECKBOX
                VALUENAME DisableViewSessionStatus
                END PART

        END POLICY    ;view
;************************************************


        POLICY !!EE2K_Tools

                PART !!EE2K_FileTransfer_Disable CHECKBOX
                VALUENAME DisableToolsFileTransfer
                END PART

                PART !!EE2K_TransferMultiple_Disable CHECKBOX
                VALUENAME DisableToolsMultipleFileTransfer
                END PART

                PART !!EE2K_5250Transfer_Disable CHECKBOX
                VALUENAME DisableTools5250FileTransfer
                END PART

                PART !!EE2K_SendFile_Disable CHECKBOX
                VALUENAME DisableToolsSendFile
                END PART

                PART !!EE2K_ReceiveFile_Disable CHECKBOX
                VALUENAME DisableToolsReceiveFile
                END PART

                PART !!EE2K_Macro_Disable CHECKBOX
                VALUENAME DisableToolsMacro
                END PART

                PART !!EE2K_RecentMacro_Disable CHECKBOX
                VALUENAME DisableToolsRecentMacro
                END PART

                PART !!EE2K_CaptureIncomingData_Disable CHECKBOX
                VALUENAME DisableToolsCaptureIncomingData
                END PART
               
                PART !!EE2K_EndCapture_Disable CHECKBOX
                VALUENAME DisableToolsEndCapture
                END PART

                PART !!EE2K_RecordPages_Disable CHECKBOX
                VALUENAME DisableToolsRecordPages
                END PART

                PART !!EE2K_PageSettings_Disable CHECKBOX
                VALUENAME DisableToolsPageSettings
                END PART

                PART !!EE2K_Status_Disable CHECKBOX
                VALUENAME DisableToolsStatus
                END PART

                PART !!EE2K_AlignForm_Disable CHECKBOX
                VALUENAME DisableToolsAlignForm
                END PART

                PART !!EE2K_TestPage_Disable CHECKBOX
                VALUENAME DisableToolsPrintTestPage
                END PART

        END POLICY    ;tools
;************************************************


        POLICY !!EE2K_Session

                PART !!EE2K_Connect_Disable CHECKBOX
                VALUENAME DisableSessionConnect
                END PART

                PART !!EE2K_Disconnect_Disable CHECKBOX
                VALUENAME DisableSessionDisconnect
                END PART

                PART !!EE2K_Reset_Disable CHECKBOX
                VALUENAME DisableSessionReset
                END PART

                PART !!EE2K_ResetDisplay_Disable CHECKBOX
                VALUENAME DisableSessionResetDisplay
                END PART

                PART !!EE2K_ResetConnection_Disable CHECKBOX
                VALUENAME DisableSessionResetConnection
                END PART

        END POLICY    ;session
;************************************************


        POLICY !!EE2K_Control

                PART !!EE2K_HoldPrint_Disable CHECKBOX
                VALUENAME DisableControlHoldPrint
                END PART

                PART !!EE2K_PA1_Disable CHECKBOX
                VALUENAME DisableControlPA1
                END PART

                PART !!EE2K_PA2_Disable CHECKBOX
                VALUENAME DisableControlPA2
                END PART

                PART !!EE2K_CancelPrint_Disable CHECKBOX
                VALUENAME DisableControlCancelPrint
                END PART

                PART !!EE2K_FormFeed_Disable CHECKBOX
                VALUENAME DisableControlFormFeed
                END PART

        END POLICY    ;control
;************************************************


        POLICY !!EE2K_Options

                PART !!EE2K_OptionsSettings_Disable CHECKBOX
                VALUENAME DisableOptionsSettings
                END PART

                PART !!EE2K_SessionType_Disable CHECKBOX
                VALUENAME DisableOptionsSessionType
                END PART

                PART !!EE2K_GlobalPreferences_Disable CHECKBOX
                VALUENAME DisableOptionsGlobalPreferences
                END PART

                PART !!EE2K_Security_Disable CHECKBOX
                VALUENAME DisableOptionsSecurity
                END PART

                PART !!EE2K_Color_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsColors
                END PART

                PART !!EE2K_Connection_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsConnection
                END PART

                PART !!EE2K_Display_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsDisplay
                END PART

                PART !!EE2K_Font_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsFonts
                END PART

                PART !!EE2K_Navigation_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsNavigation
                END PART

                PART !!EE2K_Printer_Disable CHECKBOX
                VALUENAME DisableOptionsSettingsPrinter
                END PART


        END POLICY    ;options
;************************************************


        POLICY !!EE2K_Help

                PART !!EE2K_HelpTopics_Disable CHECKBOX
                VALUENAME DisableHelpHelpTopics
                END PART

                PART !!EE2K_UsingHelp_Disable CHECKBOX
                VALUENAME DisableHelpUsingHelp
                END PART

                PART !!EE2K_SupportWeb_Disable CHECKBOX
                VALUENAME DisableHelpSupportWeb
                END PART

                PART !!EE2K_OfficeCompatible_Disable CHECKBOX
                VALUENAME DisableHelpOfficeCompatible
                END PART

                PART !!EE2K_About_Disable CHECKBOX
                VALUENAME DisableHelpAbout
                END PART

        END POLICY    ;help
;************************************************

END CATEGORY

Monday, May 11, 2015

Empire Test Case Builder

When constructing a database that contains all mailing addresses in the world a lot of testing is required to ensure your work is correct -- in each country. The GCAT Test Case Builder searches converted data to generate examples of all permutations of practical address types that can be used in a query like our customers will submit.  The idea is, if all possible address formats are returned from the database, than its structure and design is correct.

This first two screen shots show the part of the application that submits the candidate addresses in database queries to see whether or not results are as desired. The first generates addresses from database data that is based on user-defined patterns:



    The second produces addresses that feature the full range of field values found in the database, and      provides control over whether or not the values are transliterated. a synonym of a found database        value, or just examples of all database string values for the selected field.




The second screen shot, below, shows a dialog from the tool that seeks the presence and number of every address component in the incoming data, as well as exceptions or variations to the basic form. It color codes the results in the dialog and then can generate a combinatoric set of all permutations of the colored elements that it will drive through the Builder shown above.


Sunday, May 10, 2015

Token Type Manager

Every street address that, when written on an envelope will steer that envelope to the correct destination is composed of several informational address components. The country, city, thoroughfare name, and the premises number are four commonly used components. However, there are actually 31 components that are in use somewhere on planet Earth to get an envelope delivered.

That four member subset above is all that is necessary in some countries, so if we research the list of all terms used for the country, city, thoroughfare name, and premises number then we will be able to prepare a search strategy that will recognize the proper order and correctness of terms for that country. The purpose for the Empire Token Type Manager is to develop the set of street address components for each country on Earth.

Numerous technicians -- country specialists -- have been assigned the task of exhaustively listing all terms for each of the components that their country uses.  So, for instance, in the USA, acceptable terms for a thoroughfare name include street, avenue, boulevard, way, place, road, and many others can be entered into the EmpireTokenTypeManager to help advance the search capabilities of Melissa Data's worldwide address search and cleaning utilities.

After the technician is done with a TTM session they can save their work, after which it will be sent to a shared network location and merged with the global archive.


The information sent to the network location is actually a delta file, that is, a relatively small file that contains only the changes the technician added or removed. After a delta file has been transferred to the network OnRamp directory a second EmpireTokenTypeManager component, the ConfigFileIntegrator observes the presence of the delta file and merges it, and any others found at the same time, with the master token file. Once the merge is complete the newly updated global token file is used to generate five new files for various uses -- some in text format and some in binary -- and then committed to the company's internet-based Subversion data archive for use by several company products.

Trace Viewer

The Empire Trace Viewer presents a simple UI view that is a facade covering a massive amount of data. As the commercial product runs, and the trace feature is enabled, tracing data is saved in a file that facilitates debugging and performance statistics.  A typical session will generate hundreds of millions of lines of output.
The user story of interest concerns how to process the trace file so the fraction of contents the user wishes to view can be presented with no perceptible delay between dragging the file into the view and seeing the filtered results.  The other, similar user story is, how can the trace be presented with no perceptible delay after one of the filter options is changed.



I handled this problem by loading what is essentially function-keyed hash tables within call ID-keyed hash tables within session-keyed hash tables, which at the leaf end contains a list of file offset addresses.  With that, all lines in the trace file corresponding to which session the user recorded, which call made into the system, and which functional ID's are of interest can be accessed and presented in near immediate time.