Also available on the Downloads page, this is a Notes database containing a list of Notes/Domino error messages and their corresponding number codes and symbolic names, and other string resources ditto, compiled from scanning the header files in the Notes/Domino source pack. I’ve found it useful in figuring out the meanings of odd status codes returned by APIs with no corresponding text.
The stack data structure is a collection of items that supports “last in, first out” access. You have two operations: “Push” an item onto the stack, and “Pop” to retrieve and remove the most recently added item. It’s like the stack of plates in a buffet restaurant, where unless you’re a rule-breaking savage, you can only take the plate on top, which was added last. Compare to a queue, where when you get a value from it, you’re getting the oldest thing it contains. A stack is used by the system to hold local variables and your position in the code when making multiple levels of calls in a program. Variables defined in the current module are at the top of the stack, then when you exit the module you “pop” that off, discarding it,… Read More »LotusScript Stack data structure
I gave a presentation about CompareDBs, the new template in 12.0.1 Domino server, for a recent OpenNTF webinar. The slides for that — with their attached notes — are a reasonably good summary of what the tool is good for, so I decided to post them here. This is also available on the Downloads page. The tool was developed for internal use at HCL, because we were getting too many unintended changes in our Notes templates and needed a way to do code reviews and know we were seeing all the functional differences — and filter out the nonfunctional differences such as last-accessed timestamps. It’s also designed to store difference reports and link them to SCCS submissions (e.g. in GIT). I’m curious to know what other tools people are using to track changes and conduct… Read More »Posted presentation on CompareDBs
I previously wrote in general about data structures in LotusScript. Now I want to talk about one specific “classic” data structure, the queue. The strict version of this is like a pipeline where you put things in one end, and you pull them out the other end in the same order they went in. It’s a good way to keep track of work that needs doing. As with everything in LotusScript, as regards the datatype of the contents, you either have to write a generic class that can contain any type of data, or if you want type checking, specific classes for each content datatype you want to support. There’s no concept of an Interface like in Java, that you can just declare to the type you want. Specification The Queue class shown below can… Read More »LotusScript Queue data structure
I’ve been working on an application to centralize the management of image resources used in Notes applications. It’s at a stage where I’d like to find people to try it out and provide feedback. There’s a prize involved. The tool is a catalog of image resource design elements, stored in the application. It lets you import/export disk files, or point the catalog at an existing template and tell it to go fetch. It’ll pull in all the image resources, assign them IDs, notice if they’re duplicates of a graphic found in another application and avoid creating duplicate records. Then you can see them in views, including a thumbnail of the image, dimensions, file size, whether it’s an image well. You can assign background color based on the category of an image or override for a… Read More »Standardizing image resources across multiple applications
Here’s something I notice in a lot of other people’s code I look at, which has always bothered me. This isn’t language-specific — I see it everywhere. Programmers create logical expressions with the boolean operators And, Or, and Not. It seems to require a sort of sideways view of things to apply the additional operators that work with boolean values, Eqv and Xor (or to use their non-bitwise counterparts which more people might recognize offhand, = and != (<> in LotusScript). This neglect often results in inefficient and hard-to-read logical expressions. For instance, suppose the code needs to test the assertion: “Either a and b are both 0, or neither is 0.” I often see such a test written as: If (a = 0 And b = 0) Or (a <> 0 And b <>… Read More »The forgotten logical operators
Having a little fun with the performance monitoring code from a previous post. Okay I have a warped idea of fun. I’m always interested in performance, so I decided to analyze the overhead of using an error trap (On Error statement) to handle edge cases as opposed to an “if” statement or other branch. The error trap is often easier to code because it can be a catch-all for any unanticipated problem, but handling an error condition involves the LotusScript runtime coming up with an error message, determining whether the script has defined special handling for that error, etcetera. So it can be expected to take longer than a simple test and branch. My question was, how much longer? Testing method To test this, I created two subroutines to try the two different approaches: Sub… Read More »Overhead of error trapping in LotusScript