Notes Client Performance optimization with Notes RPC Parser: new Version 1.0.13 available

A new version of the Notes RPC is now available for download. Have a look here:

Lars Bentrop-Bos contacted me last week with a couple of bugs he had found in the application. Since I was already updating things, I made a large release, with many small improvements that I had been thinking of:

New function: Clear cache.ndk

Screen Shot 2014-04-07 at 10.08.41
NRPC Calls are logged only for calls between the server and the client. As a performance booster, Notes caches design element information on a local file called cache.ndk (in the notes data directory). If the file already exists in the local cache, it’s not downloaded by the server. The new button clears the local cache, so that you can simulate the kind of response times that first-time users have of your application.

New Navigation: using unread marks

Screen Shot 2014-04-07 at 10.12.34

I have cunningly made the particularly slow transactions unread documents, so that the end-user can jump from one to another.

Jump to Note
Screen Shot 2014-04-07 at 10.14.37
If a particular transaction concerns a particular note, you can now jump to that note. If it’s a data note, the client is opened, if it’s a designer note, the designer client is opened.

New UI:
1995 came by and took the old UI back. I have spruced things up and added new icons, including a nifty application icon showing some lightning

 

NSF/NIF transactions : Names which appear in the Debug_Outfile.

Buried deep inside neterr.h is this gem of a table:

/* Strings which are the names of the various NSF/NIF transactions.
Used to display them for debugging (CLIENT_CLOCK). */
#define STR_GET_MULT_NOTE_INFO_UNID_RQST PKG_NETWORK+144
stringtext(STR_GET_MULT_NOTE_INFO_UNID_RQST,"GET_MULT_NOTE_INFO_BY_UNID")
#define STR_ASYNC_NIFOPENNOTE_RQST PKG_NETWORK+145
stringtext(STR_ASYNC_NIFOPENNOTE_RQST, "ASYNC_NIF_OPEN_NOTE")
#define STR_ASYNC_READ_ENTRIES_RQST PKG_NETWORK+146
stringtext(STR_ASYNC_READ_ENTRIES_RQST, "ASYNC_READ_ENTRIES")
#define STR_ASYNC_CANCEL_RQST PKG_NETWORK+147
stringtext(STR_ASYNC_CANCEL_RQST, "ASYNC_CANCEL")
#define STR_ASYNC_OPEN_NOTE_RQST PKG_NETWORK+148
stringtext(STR_ASYNC_OPEN_NOTE_RQST, "ASYNC_OPEN_NOTE")
#define STR_ASYNC_READ_OBJECT_RQST PKG_NETWORK+149
stringtext(STR_ASYNC_READ_OBJECT_RQST, "ASYNC_READ_OBJECT")
#define STR_OPEN_DB_RQST PKG_NETWORK+150
stringtext(STR_OPEN_DB_RQST, "OPEN_DB")
#define STR_CREATE_DB_RQST PKG_NETWORK+151
stringtext(STR_CREATE_DB_RQST, "CREATE_DB")
#define STR_CLOSE_DB_RQST PKG_NETWORK+152
stringtext(STR_CLOSE_DB_RQST, "CLOSE_DB")
#define STR_CLOSE_DB_RQST_ALT PKG_NETWORK+153
stringtext(STR_CLOSE_DB_RQST_ALT, "CLOSE_DB")
#define STR_GET_SPECIAL_NOTE_ID_RQST PKG_NETWORK+154
stringtext(STR_GET_SPECIAL_NOTE_ID_RQST, "GET_SPECIAL_NOTE_ID")
#define STR_ITEM_DEF_TABLE_RQST PKG_NETWORK+155
stringtext(STR_ITEM_DEF_TABLE_RQST, "ITEM_DEF_TABLE")
#define STR_OPEN_NOTE_RQST PKG_NETWORK+156
stringtext(STR_OPEN_NOTE_RQST, "OPEN_NOTE")
#define STR_DELETE_NOTE_RQST PKG_NETWORK+157
stringtext(STR_DELETE_NOTE_RQST, "DELETE_NOTE")
#define STR_GET_NOTE_INFO_RQST PKG_NETWORK+158
stringtext(STR_GET_NOTE_INFO_RQST, "GET_NOTE_INFO")
#define STR_SET_SPECIAL_NOTE_ID_RQST PKG_NETWORK+159
stringtext(STR_SET_SPECIAL_NOTE_ID_RQST, "SET_SPECIAL_NOTE_ID")
#define STR_DB_INFO_GET_RQST PKG_NETWORK+160
stringtext(STR_DB_INFO_GET_RQST, "DB_INFO_GET")
#define STR_DB_INFO_SET_RQST PKG_NETWORK+161
stringtext(STR_DB_INFO_SET_RQST, "DB_INFO_SET")
#define STR_DB_MODIFIED_TIME_RQST PKG_NETWORK+162
stringtext(STR_DB_MODIFIED_TIME_RQST,"DB_MODIFIED_TIME")
#define STR_SEARCHSTART_RQST PKG_NETWORK+163
stringtext(STR_SEARCHSTART_RQST, "SEARCH")
#define STR_SEARCHSTOP_RQST PKG_NETWORK+164
stringtext(STR_SEARCHSTOP_RQST, "SEARCHSTOP")
#define STR_SERVER_TIME_RQST PKG_NETWORK+165
stringtext(STR_SERVER_TIME_RQST, "SERVER_TIME")
#define STR_DELETE_DB_RQST PKG_NETWORK+166
stringtext(STR_DELETE_DB_RQST, "DELETE_DB")
#define STR_FILE_SUMMARY_RQST PKG_NETWORK+167
stringtext(STR_FILE_SUMMARY_RQST, "FILE_SUMMARY")
#define STR_GET_DBOPTIONS_RQST PKG_NETWORK+168
stringtext(STR_GET_DBOPTIONS_RQST, "GET_DBOPTIONS")
#define ERR_ISPY_PROBE_COMPLETED PKG_NETWORK+169
errortext(ERR_ISPY_PROBE_COMPLETED, "Probe of %s port on %s has completed")
#define STR_DB_REPLINFO_SET_RQST PKG_NETWORK+170
stringtext(STR_DB_REPLINFO_SET_RQST, "DB_REPLINFO_SET")
#define STR_DB_REPLINFO_GET_RQST PKG_NETWORK+171
stringtext(STR_DB_REPLINFO_GET_RQST, "DB_REPLINFO_GET")
#define STR_GET_MODIFIED_NOTES_RQST PKG_NETWORK+172
stringtext(STR_GET_MODIFIED_NOTES_RQST, "GET_MODIFIED_NOTES")
#define STR_STAMP_NOTES_RQST PKG_NETWORK+173
stringtext(STR_STAMP_NOTES_RQST, "STAMP_NOTES")
#define STR_RENAME_DB_RQST PKG_NETWORK+174
stringtext(STR_RENAME_DB_RQST, "RENAME_DB")
#define STR_REPLICATE_RQST PKG_NETWORK+175
stringtext(STR_REPLICATE_RQST, "REPLICATE")
#define STR_GET_OBJECT_SIZE_RQST PKG_NETWORK+176
stringtext(STR_GET_OBJECT_SIZE_RQST, "GET_OBJECT_SIZE")
#define STR_FREE_OBJECT_RQST PKG_NETWORK+177
stringtext(STR_FREE_OBJECT_RQST, "FREE_OBJECT")
#define STR_ALLOC_OBJECT_RQST PKG_NETWORK+178
stringtext(STR_ALLOC_OBJECT_RQST, "ALLOC_OBJECT")
#define STR_REALLOC_OBJECT_RQST PKG_NETWORK+179
stringtext(STR_REALLOC_OBJECT_RQST, "REALLOC_OBJECT")
#define STR_READ_OBJECT_RQST PKG_NETWORK+180
stringtext(STR_READ_OBJECT_RQST, "READ_OBJECT")
#define STR_WRITE_OBJECT_RQST PKG_NETWORK+181
stringtext(STR_WRITE_OBJECT_RQST, "WRITE_OBJECT")
#define STR_OPEN_COLLECTION_RQST PKG_NETWORK+182
stringtext(STR_OPEN_COLLECTION_RQST, "OPEN_COLLECTION")
#define STR_CLOSE_COLLECTION_RQST PKG_NETWORK+183
stringtext(STR_CLOSE_COLLECTION_RQST,"CLOSE_COLLECTION")
#define STR_CLOSE_COLLECTION_RQST_ALT PKG_NETWORK+184
stringtext(STR_CLOSE_COLLECTION_RQST_ALT,"CLOSE_COLLECTION")
#define STR_UPDATE_COLLECTION_RQST PKG_NETWORK+185
stringtext(STR_UPDATE_COLLECTION_RQST,"UPDATE_COLLECTION")
#define STR_UPDATE_FILTERS_RQST PKG_NETWORK+186
stringtext(STR_UPDATE_FILTERS_RQST, "UPDATE_FILTERS")
#define STR_READ_ENTRIES_RQST PKG_NETWORK+187
stringtext(STR_READ_ENTRIES_RQST, "READ_ENTRIES")
#define STR_LOCATE_NOTE_RQST PKG_NETWORK+188
stringtext(STR_LOCATE_NOTE_RQST, "LOCATE_NOTE")
#define STR_FIND_NOTEID_RQST PKG_NETWORK+189
stringtext(STR_FIND_NOTEID_RQST, "FIND_NOTEID")
#define STR_UPDATE_NOTE_RQST_ALT PKG_NETWORK+190
stringtext(STR_UPDATE_NOTE_RQST_ALT, "UPDATE_NOTE")
#define STR_LOOKUP_HELP_NOTE_RQST PKG_NETWORK+191
stringtext(STR_LOOKUP_HELP_NOTE_RQST,"LOOKUP_HELP_NOTE")
#define STR_FIND_BY_KEY_RQST PKG_NETWORK+192
stringtext(STR_FIND_BY_KEY_RQST, "FIND_BY_KEY")
#define STR_NAME_LOOKUP_RQST PKG_NETWORK+193
stringtext(STR_NAME_LOOKUP_RQST, "NAME_LOOKUP")
#define STR_AUTHENTICATE_RQST PKG_NETWORK+194
stringtext(STR_AUTHENTICATE_RQST, "EXPLICIT_AUTHENTICATE")
#define STR_DB_SPACE_USAGE_RQST PKG_NETWORK+195
stringtext(STR_DB_SPACE_USAGE_RQST, "SPACE_USAGE")
#define STR_TEXT_SEARCH_RQST PKG_NETWORK+196
stringtext(STR_TEXT_SEARCH_RQST, "TEXT SEARCH")
#define ERR_QUIT PKG_NETWORK+197
errortext(ERR_QUIT, "Program shutdown in progress")
#define STR_ALLOC_UPOBJECT_RQST PKG_NETWORK+198
stringtext(STR_ALLOC_UPOBJECT_RQST, "ALLOC_UPDATE_OBJECT")
#define STR_FREE_UPOBJECT_RQST PKG_NETWORK+199
stringtext(STR_FREE_UPOBJECT_RQST, "FREE_UPDATE_OBJECT")
#define STR_NIFOPENNOTE_RQST PKG_NETWORK+200
stringtext(STR_NIFOPENNOTE_RQST, "NIF_OPEN_NOTE")
#define STR_NIFSTAMPNOTES_RQST PKG_NETWORK+201
stringtext(STR_NIFSTAMPNOTES_RQST, "NIF_STAMP_NOTES")
#define STR_GET_SERVER_NAMES_RQST PKG_NETWORK+202
stringtext(STR_GET_SERVER_NAMES_RQST,"GET_SERVER_NAMES")
#define STR_GET_SERVER_STATS_RQST PKG_NETWORK+203
stringtext(STR_GET_SERVER_STATS_RQST,"GET_SERVER_STATS")
#define STR_RELAY_EVENT_RQST PKG_NETWORK+204
errortext(STR_RELAY_EVENT_RQST, "RELAY_EVENT")
#define STR_FT_SEARCH_RQST PKG_NETWORK+205
stringtext(STR_FT_SEARCH_RQST, "FULL TEXT SEARCH")
#define STR_FT_CLOSE_SEARCH_RQST PKG_NETWORK+206
stringtext(STR_FT_CLOSE_SEARCH_RQST,"CLOSE FULL TEXT SEARCH")
#define STR_REMOTE_CONSOLE_RQST PKG_NETWORK+207
errortext(STR_REMOTE_CONSOLE_RQST, "REMOTE_CONSOLE")
#define STR_DB_SQUEEZE_RQST PKG_NETWORK+208
stringtext(STR_DB_SQUEEZE_RQST, "SQUEEZE DATABASE")
#define STR_FT_INDEX_RQST PKG_NETWORK+209
stringtext(STR_FT_INDEX_RQST, "BUILD FULL TEXT INDEX")
#define STR_FT_GET_LAST_INDEXTIME_RQST PKG_NETWORK+210
stringtext(STR_FT_GET_LAST_INDEXTIME_RQST, "GET LAST INDEX TIME")
#define STR_FT_DELETE_INDEX_RQST PKG_NETWORK+211
stringtext(STR_FT_DELETE_INDEX_RQST,"DELETE FULL TEXT INDEX")
#define STR_GET_NAMED_OBJECT_ID_RQST PKG_NETWORK+212
stringtext(STR_GET_NAMED_OBJECT_ID_RQST,"GET_NAMED_OBJECT_ID")
#define STR_DB_READ_HIST_RQST PKG_NETWORK+213
stringtext(STR_DB_READ_HIST_RQST,"READ REPLICATION HISTORY")
#define STR_DB_WRITE_HIST_RQST PKG_NETWORK+214
stringtext(STR_DB_WRITE_HIST_RQST,"WRITE REPLICATION HISTORY")
#define STR_GET_NOTE_INFO_BY_UNID_RQST PKG_NETWORK+215
stringtext(STR_GET_NOTE_INFO_BY_UNID_RQST,"GET_NOTE_INFO_BY_UNID")
#define STR_NAME_LOOKUPID_RQST PKG_NETWORK+216
stringtext(STR_NAME_LOOKUPID_RQST, "NAME_LOOKUPID")
#define STR_POLL_DEL_SEQNUM_RQST PKG_NETWORK+217
stringtext(STR_POLL_DEL_SEQNUM_RQST,"POLL_DEL_SEQNUM")
#define STR_GET_MULT_NOTE_INFO_RQST PKG_NETWORK+218
stringtext(STR_GET_MULT_NOTE_INFO_RQST,"GET_MULT_NOTE_INFO")
#define STR_GET_COLLECTION_DATA_RQST PKG_NETWORK+219
stringtext(STR_GET_COLLECTION_DATA_RQST,"GET_COLLECTION_DATA")