Domino and JavaScript Development MasterClass Redux  

By Paul Withers | 10/4/23 5:21 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Nearly six years ago I delivered a session at IBM Think with John Jardin called “Domino and JavaScript Development MasterClass”, a session I also delivered at Engage in May 2018. The session was delivered at the request of Andrew Manby, product manager for Domino. It was shortly after the first Domino Jams when JavaScript development against Domino was a key point of focus and it pre-dated any specific developments to expose Domino for JavaScript development. Now seemed a good point to revisit and review, not only in the context of Domino REST API and Volt MX Go, but also with the future of VoltScript in Volt Foundry.

XPages Elements Beyond the NSF  

By Paul Withers | 9/19/23 4:02 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I do very little XPages these days, I have one application for personal usage that rarely gets updated. But it’s when applications rarely get touched that changes elsewhere on the server can have a big impact. I’m going to cover two here, the first raised by a discussion on Discord last week.

Postman: The Crucial Tool for Any Microservice Developer  

By Paul Withers | 7/17/23 2:32 AM | Development - Notes / Domino | Added by Roberto Boccadoro

My history with REST development is long. In 2018, before I joined HCL, I delivered a session “Domino and JavaScript Development Masterclass” at IBM Think. When I posted about my development tools in 2017, Postman - then just a Chrome plugin - was key amongst them. Then in 2020 I posted an overview of Postman. And just as both John and I used Postman as a crucial tool when building the application we showed at our session at IBM Think, it’s the tool that should be used by anyone doing anything with microservices - which is what every scope your create for Domino REST API is.

Bali Unit Testing Framework Videos  

By Paul Withers | 3/1/23 4:58 PM | Development - Notes / Domino | Added by Oliver Busse

Two weeks ago four videos were posted on OpenNTF’s YouTube channel walking through the functionality of the Bali Unit testing framework.These are intended to give you all the information you need to use the test suite, although full documentation is available in the repo, at

Introducing Bali Unit Testing Framework  

By Paul Withers | 2/2/23 2:18 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Today we’ve released two projects, one on HCL’s GitHub and a fork on OpenNTF’s GitHub. It will be useful to give a bit of background, as well as an introduction the the project. The version on HCL’s GitHub is the original, Bali Unit Testing Framework, a unit testing framework written in and for VoltScript, the evolution of LotusScript currently in development for Volt MX Go. The documentation, as usual, is available on GitHub. There are a number of places where the code leverages new language functionality from VoltScript. As a result, although the code will be usable from VoltScript, the code cannot be used as-is by Domino developers. Therefore a fork has also been created on OpenNTF’s GitHub and adapted for LotusScript, Bali Unit Testing Framework. The documentation is available also on GitHub. This can be used by Domino developers. The documetation has also been slightly modified, to be relevant to LotusScript developers.

Andre's Directories Challenge  

By Paul Withers | 12/14/22 2:14 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I am sure that anyone who uses LotusScript has been following the excellent blog posts of Andre Guirard. Recent blog posts on large arrays and queues have been particularly interesting for those of us working on VoltScript. His blog post on a Queue data structure ended with a challenge. The root of the problem is that the LotusScript Dir() function is not recursive. Without a parameter it gives the next file or directory relative to its last call. So you can’t have one loop using Dir() and an inner loop that also uses Dir(). Andre uses a Queue class to perform FIFO (First In First Out), which achieves what’s needed, but not as required For this task, if you care about the order of the returned results, this probably isn’t what you want. You’d prefer all the files in a given folder to be grouped together with the files from its subfolders, so those last two should be switched. Exercise for the reader: what data structure could be used instead of a queue to track the work and give the result in the desired order?

LotusScript Variants: EMPTY, NULL, Nothing  

By Paul Withers | 12/7/22 2:07 AM | Development - Notes / Domino | Added by Roberto Boccadoro

One of the great things about working on VoltScript with our team are the regular discussions about the inner workings of the language. Of course it’s also nice how easy it is to write and run a test script with the language, to quickly test various scenarios. Recently, because of two separate initiatives we’ve been working on, the topic of conversation has been Variants, and the potential values that denote a variant without a value.

Understanding Parentheses in LotusScript Method Calls  

By Paul Withers | 11/7/22 4:28 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Look at the following code and guess the error message. Class Person Public firstName as String End Class Sub Initialize Dim p as New Person Call outerPrint(p) End Sub Sub outerPrint(msg as Variant) innerPrint(msg) End Sub Sub innerPrint(msg as Variant) If (TypeName(msg) = "PERSON") Then Print msg.firstName Else Print msg End If End Sub The error message received will be a Type Mismatch, on the line innerPrint(msg). But the cause might be harder to work out - although the title of this blog post might point you in the direction.

MKDocs Sites on Domino  

By Paul Withers | 10/31/22 4:48 AM | Development - Notes / Domino | Added by Roberto Boccadoro

In the last blog posts I covered using a Jekyll-based site on Domino. Jekyll is a popular documentation option based on Markdown, but another is MKDocs. MKDocs also has a number of themes - a default Bootstrap-based theme, one used by the Read The Docs service, and the one I’ve used, Material for MKDocs.

Negotiating Enhancements  

By Paul Withers | 9/26/22 2:23 AM | Business - News | Added by Roberto Boccadoro

No IT solution is delivered using code written solely by the solution provider. There is always dependent code written by a third party. Dependency management tooling has proliferated in every technology sector to support this. And every solution includes an implicit assumption that the dependent code will continue to work as it does and provide whatever the consumer requires. And the brutal truth for consumers is that the authors of your dependencies did not write their code knowing your requirements up front. Whether or not it fits your implementation falls in the realm of “caveat emptor”. If it doesn’t, if you need an enhancement or you find a bug, your priorities may or may not align with the priorities of the owners of that dependency. With a product, you’re just one paying customer. With open source, you’re just one consumer - not even a customer.

The Importance of Reproducers  

By Paul Withers | 7/4/22 4:57 AM | Development - Notes / Domino | Added by Roberto Boccadoro

So you think you’ve found a bug. What next? Create a support ticket, right? Wrong! First off, let’s point out something critical in that first line - “you think you’ve found a bug”. You may be a consumer for the code you think you’ve found a bug in. But you’re also a committer to other code. How many times has someone raised a problem where the code is actually working correctly? How many times has someone raised a problem but given insufficient evidence to know what’s going on, resulting in the famous “works for me”? And how many times was it PEBKAC (problem exists between keyboard and chair)?

VoltScript - A Unique Opportunity (Paul Withers and Jason Roy Gary)  

By Paul Withers | 6/10/22 4:06 AM | Development - Notes / Domino | Added by Roberto Boccadoro

At Engage 2022 Volt MX Go was announced including features like Volt Formula, a JavaScript-based fusion of Notes formula syntax and Open Formula, and VoltScript, a derivative from LotusScript, and inspired by many modern implementations of BASIC, which will run in Foundry, Volt MX Go’s middleware layer. Already at Engage we demonstrated live running code of VoltScript with Try/Catch/Finally, an alternative declaration keyword “Def” for “Dim” and deprecation of GoSub; which let’s be honest is Satan’s spawn. These are the first changes to the core LotusScript language keywords in over 30 years. In addition, we showed live demos of code running triggered from Foundry as well as standalone VoltScript outside of HCL Notes or Domino, for the first time since the end of life of Lotus 1-2-3. We also showed a number of new extensions (LSXs / VSXs) that will obviously be required, as well as developer productivity tooling like unit testing, mocking and a POC of dependency management.

LotusScript Profiling  

By Paul Withers | 3/11/22 1:25 AM | Development - Notes / Domino | Added by Roberto Boccadoro

LotusScript agent profiling is not new, but there are still some developers who are not aware of it. It’s something I blogged about more than ten years ago. At that time talking about the relative performance of specific API calls, in that case the relative performance of checking .count was greater than zero vs getting the first entry and checking if it was nothing. On other occasions it’s also identified mistakes in my code, because it demonstrated more API calls than I expected or needed.

Rancher Desktop, A New Dev Tool  

By Paul Withers | 2/7/22 2:23 AM | Infrastructure - Notes / Domino | Added by Roberto Boccadoro

Docker has been a significant development tool for me for some time. The ease of spinning up a clean, standalone development environment for applications is a great benefit. The ability to switch seamlessly between different versions is a big benefit when testing. But when Docker announced new licensing terms last year, it shook up the dekstop development landscape. Rancher, who have a long history of expertise with Kubernetes, stepped into the desktop game by announcing Rancher Desktop. I was aware of the open source project last year, but when Daniel Nashed pointed out to me that 1.0 had recently been released, I decided it was time to give it a try.

Docker, Java and Processes  

By Paul Withers | 12/13/21 2:08 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Docker, Java and Processes Whether it’s Docker or Kubernetes (or some flavour thereof), running microaservices in containers is a powerful option. It can make it easy to deploy development or test systems, ensuring consistency across your devlopment team. But when you move from consuming to building, particularly when you’re building less out-of-the-box containers, there are some deeper elements that you need to be aware of.

REST API Gateways  

By Paul Withers | 6/14/21 1:07 AM | Development - Notes / Domino | Added by Andi Kress

Three years ago I presented at IBM Think I presented a session called Domino and JavaScript Development Masterclass with John Jardin. In that session I talked about the various REST options for Domino and used the term “API gateway”. Particularly at this time it makes sense to expand more on what was in the slides.