Kicking the Tires on Domino 14 and Java 17  

By Jesse Gallagher | 6/5/23 2:28 AM | Development - Notes / Domino | Added by Roberto Boccadoro

As promised, HCL launched the beta program for Domino 14 the other day. There's some neat stuff in there, but I still mostly care about the JVM update. I quickly got to downloading the container image for this to see about making sure my projects work on it, particularly the XPages JEE Support project. As expected, I had a few hoops to jump through. I did some groundwork for this a while back, but there was some more to do. Before I get to some specifics, I'll mention that I put up a beta release of 2.13.0 that gets almost everything working, minus JSP. Now, on to the notes and tips I've found so far.

XPages JEE 2.12.0: JNoSQL Views and PrimeFaces Support  

By Jesse Gallagher | 5/29/23 12:36 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Last week, I put up version 2.12.0 of the XPages JEE Support project. Beyond the usual fit-and-finish bits here and there, there are two main improvements in this release. Jakarta NoSQL Views Jakarta Faces and PrimeFaces

The Loose Roadmap for XPages Jakarta EE Support  

By Jesse Gallagher | 5/5/23 1:23 AM | Development - Notes / Domino | Added by Roberto Boccadoro

At Engage, HCL officially announced Java 17 in Domino 14 (I'm sure they announced other things too, but I have my priorities). This will allow me to do a lot in pretty much all of my projects, but it's particularly pertinent to XPages JEE. Currently, the project targets generally Jakarta EE 9, which came out in late 2020 and was "just" a switch from javax.* to jakarta.*, with no official new features. However, Jakarta EE 10 came out a year ago - in addition to bringing a raft of new features, it also bumped the minimum Java version to Java 11, pushing it outside of Domino's realm. Accordingly, I've had to hold off on a lot of major- and minor-version bumps in the XPages JEE project as new releases started being compiled for Java 11. Once V14 is out, though, I'll be able to move to the current JEE platform... at least until JEE 11 comes out next year and requires Java 21, anyway. So I've been working on how I'm going to approach this, and what I'm thinking is that I'll do it in two phases: first, a final 2.x release that provides Java 17/Domino 14 compatibility for existing components, and then a new 3.x breaking-changes release to bring in Jakarta EE 10 components.

In Development: Containerized Builds in NSF ODP  

By Jesse Gallagher | 5/2/23 2:04 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Most of my active development happens macOS-side - I'll periodically use Designer in Windows when necessary, but otherwise I'll jump through a tremendous number of hoops to keep things in the Mac realm. The biggest example of this is the NSF ODP Tooling, born from my annoyance with syncing ODPs in Designer and expanded to add some pleasantries for working with ODPs directly in normal Eclipse. Over the last few years, though, the process of compiling NSFs on macOS has gotten kind of... melty. Apple's progressive locking-down of traditional native loading mechanisms and the general weirdness of the Notes package and its embedded non-JDK JVM have made things get a little weird. I always end up with a configuration that can work, but it's rough going for sure.

XPages JEE 2.11.0 and the Javadoc Provider  

By Jesse Gallagher | 4/21/23 4:11 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Yesterday, I put two releases up on OpenNTF, and I figure it'd be worth mentioning them here. The first is a new version of the XPages Jakarta EE Support project. As with the last few, this one is mostly iterative, focusing on consolidation and bug fixes, but it added a couple neat features. The second one is a new project, the XPages Javadoc Provider. This is a teeny-tiny project, though, not even containing any Java code.

Creating V2 style attachments  

By Andre Guirard | 4/15/23 4:59 PM | Development - Notes / Domino | Added by Oliver Busse

I thought to try attaching the files to a hidden rich text item — one that’s not on the form — and then deleting the rich text item, leaving just the attachments. But LotusScript is too smart for that — when you delete rich text items it also deletes the $FILE items to which they refer.

Debugging program crashes with gdb on Linux  

By Daniel Nashed | 4/10/23 9:37 AM | Development - Notes / Domino | Added by Roberto Boccadoro

This bugged me for a while because I had no idea what was happening. One of my OpenSSL-based tools in C crashed once in a while. I was only able to find out once wrote my own small tool to check the server listener of my other application. The crash happened very intermittently in different places when I opened and closed the connection very quickly. Adding a delay of 1 ms stopped the crash. But if you are running a service on the internet with port scanners around, you better find out in detail. It turned out to be the SIGPIPE event causing my program to terminate. But the interesting part is how I found out about the crash.

Categorised view problem in Domino Nomad Web 1.07  

By Sean Cull | 4/3/23 5:54 AM | Development - Notes / Domino | Added by Oliver Busse

We upgraded some servers to nomad Web 1.07 over the weekend but had to revert to 1.06 after a bug appeared. On first inspection it looked like a reader / author field issue but it was not. View robustness, an absolutely fundamental requirement, seem to be challenging.

Quick Tip: Stashing Log Files From Domino Testcontainers  

By Jesse Gallagher | 3/29/23 3:55 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I've been doing a little future-proofing in the XPages Jakarta EE project lately and bumped against a common pitfall in my test setup: since I create a fresh Domino Testcontainer with each run, diagnostic information like the XPages log files are destroyed at the end of each test-suite execution.

Read Attachment Files without Writing to Disk  

By Andre Guirard | 3/13/23 3:13 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Someone sent me a link to this “domino idea” asking for the ability to read file data from attachments in Notes documents without “extracting the file” to disk, since ECLs might not always let you do that. I never like to say there’s no way to do that, so the question prompted me to create an answer. This code uses DXL — it exports the document, then searches the exported data for the file data objects, which are encoded in base64. Fortunately it’s just the plain file data without CD record headers or the like, so it’s easy to convert to a NotesStream containing the raw data — or to interpret that data as text in a specified character set.

Moving Relative Date Text Client-Side  

By Jesse Gallagher | 3/13/23 3:11 AM | Development - Notes / Domino | Added by Roberto Boccadoro

One of my main goals in the slow-moving OpenNTF home-page revamp project I'm doing (which I recently moved to a public repo, by the way) is to, like on this blog, keep things extremely simple. There's almost no JavaScript - just Hotwire Turbo so far - and the UI is done with very-low-key JSP pages and tags.

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 https://openntf.github.io/bali-unit/.

TOTP and vert.x  

By Stephan Wissel | 2/7/23 9:13 AM | Development - Notes / Domino | Added by Roberto Boccadoro

TOTP and vert.x - Time-based one-time passwords (TOTP) are a common security feature in Identity Providers (IdP). There are use cases beyond IdP, mine was 'Understanding what it takes'). TOTP interaction You have two phases: enrollment and use. During enrollment a secret is generated and (typically) presented as QR Code. A user points one of the many Authenticator apps to it and gets a numeric code that changes once a minute. When you use it, you pick the current number and paste it into the provided field. The backend validates the correctness with some time leeway. What it is not Typically when enrolling you also get recovery codes, sometimes called scratch codes. They are NOT part of TOTP and implementation is site specific and not standardized. An implementer might choose to check your recovery codes when your TOTP fails or provide a separate interaction using those. The initial confirmation, is actually the first instance of "use" and one could have a successful enrollment without it. This is depending on the implementation. It isn't foolproof. An attacker could trick you into typing your TOTP code into a spoofed form or just hijack your session (cookie). That's why responsible web apps run a tight security with CSP and TLS (and once browser support is better Permission Policy)

XAgents to Jakarta REST Services  

By Jesse Gallagher | 2/6/23 2:03 AM | Development - Notes / Domino | Added by Oliver Busse

For a good long time now, XAgents have been one of the common ways to do non-HTML output in an XPages environment - JSON, mostly. I think the technique was codified and the term coined by Stephan Wissel back in 2008 and the idea has been the same since. Effectively, an XAgent lets you write a Servlet but with a bit more scaffolding. Though XPages has a path to use Servlets officially, that method is more out-of-the-way than XAgents and doesn't (without further hoop jumping) give you some niceties like sessionAsSigner.

The Pront statement [sic]  

By Andre Guirard | 2/3/23 4:18 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The LotusScript debugger isn’t the simplest thing in the world to use, especially when debugging form event code, where the fact of the debugger grabbing focus may change what happens. You can put Print statements in LotusScript to do a less impactful debug, but these are hard to read and you can’t tell which messages are new — or which are repeats of the last message. For a project I’m working on now, I wanted something easier to use. So I present the Pront Console. This is an NSF you download and install on your client, with a bit to put in your applications to make the Pront statement available.

Error 404 - Item Not Found Exception after upgrade to Domino 12.0.2  

By Oliver Busse | 2/2/23 2:21 AM | Development - Notes / Domino | Added by Roberto Boccadoro

For a customer we also set up a dev environment using our application platform Aveedo where we are creating a brand new CRM system. Very soon we faced the problem, that pages were not loaded properly (404 error) at random occurrence. After some testing with various XPages memory settings etc. I opened a case, and it turned out: there is a problem in the com.ibm.xsp.core_12.0.2.20221101-2131 plugin lib, which means in the XPages core. HCL support immediately forwarded this to the dev team and they were able to create a testfix for us which solved the problem. The fix is addressed for FP1 of 12.0.2.

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.

A new tool for creating rich text  

By Andre Guirard | 1/26/23 7:32 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I’ve used an earlier version of this in other applications, but now it’s greatly improved and expanded. This is an API for creating rich text, including all the variations of sections, tables, image backgrounds, links, borders… This is an initial 0.1 release, so there will almost certainly be more changes coming, but I need y’all to drive this. Download it, try it out, respond here with questions and suggestions

More thoughts on Content Assist  

By Andre Guirard | 1/24/23 3:34 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Recently I write about best practices for commenting for content assist. I’ve been writing a lot of LotusScript recently (I’m making a present for you), and in trying to make the content assist as helpful as possible, I’ve had some additional thoughts.

Download: Simple App Starter  

By Andre Guirard | 1/16/23 5:58 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I was creating yet another HCL Notes demo client application recently and was hunting for an existing application I could copy the basic navigation features from without having too many unique things to get rid of. Strange hide formulas, Queryopen code, etc. It occurred to me there should be a template for that. So I created it and here it is (also available on the Downloads page).

Best practice error trapping in LotusScript  

By Andre Guirard | 1/13/23 10:31 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The handling of unexpected errors is one of the headaches we have to deal with while coding. By their nature, you don’t have a specific strategy for handling that error, or it would be an expected error. But you don’t want to present the end user with the uninformative default error dialog. Default type mismatch error dialog.What line, please? Also, end user, please DON’T click the link. We’d hope the end user never sees the system error message, but if they do, we should at least have enough information for a developer to locate the code line that generated the error. That means we want a stack with line numbers, such as Java generates by default. In this article, I discuss three “levels” of error handling. You can choose how far to take it based on your needs and the amount of effort you want to put in.

Users don't read your dialogs   

By Andre Guirard | 1/12/23 3:02 AM | Development - Notes / Domino | Added by Roberto Boccadoro

You know how you open a dialog to ask for confirmation or additional information, or to warn them what’s about to happen? Yeah. People don’t read that stuff. The dialogbox is just an obstacle to completing their task. They may press Enter or do whatever it takes to get past it — especially if they routinely encounter other dialogs in the application. This article discusses best practices and tooling to get people’s attention where it’s needed and to avoid negative consequences of inattention.

Close & Reopen Database, and Ad Hoc Stored Form   

By Andre Guirard | 1/9/23 9:09 AM | Development - Notes / Domino | Added by Roberto Boccadoro

I’ve been working on a Notes client application recently where I ran into the problem that I needed to create a design element and then immediately use it. This ran afoul of the Notes client’s design element cache — it wouldn’t recognize the new design element until I closed the application and reopened it. There’s no “close and reopen” command in any Notes scripting language, and if you close the current application completely, your code in that application stops running, so you can’t then execute a command to reopen it. Here’s my solution. Someone will probably comment about some much simpler solution I’ve missed, such as a secret command to reload the design element cache, but this way works.

Creating random names for test data  

By Andre Guirard | 1/9/23 9:07 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Notes/Domino applications don’t just have code — they also store data, often a lot of it. But it can take years for them to accumulate enough documents for any performance issues to start seriously impacting users. When designing an application, especially a brand new one, it’s important to performance test it with an unreasonable amount of sample data so any performance issues become evident immediately.

Coding for translatability in Domino  

By Andre Guirard | 1/5/23 3:13 AM | Development - Notes / Domino | Added by Roberto Boccadoro

This is partly for organization which, like HCL, use Domino Global Workbench to do translations of their Notes/Domino applications. But also, even if you do translations manually, or even if you don’t do them at all, it makes sense to learn good habits for creating applications in a way that makes translations simple, because it’s not that hard and you never know.

HCL Notes V12.0.2 and embedded views / UPDATED !!  

By Rainer Brandl | 1/4/23 4:35 PM | Development - Notes / Domino | Added by Oliver Busse

After migrating a Domino environment to 12.0.2 and upgrading the Notes Clients we could see the following issue. In an application where documents from another application should have been displayed in an embedded view the embedded view was not filled and kept empty.

Workstation-specific user application settings  

By Andre Guirard | 1/3/23 6:23 AM | Development - Notes / Domino | Added by Roberto Boccadoro

For a couple of applications, I’ve needed a way to store values specific to the combination of a user and workstation. These are personal settings, in other words, but the same person may need different settings if they use the application on a different workstation. This would mostly be local filepaths, things like the last folder the user selected for a particular file-open prompt, or the path of an external tool the user has to launch in a given situation. A list of recently accessed files. These would be different on different workstations.

Lazy code  

By Andre Guirard | 1/2/23 4:12 AM | Development - Notes / Domino | Added by Roberto Boccadoro

You may be familiar with “lazy loading” on webpages. That’s where the browser doesn’t request images from the server until the page is scrolled to the point where they would be visible. The general principle is to not do work until you have to, both to speed up initial loading and because who knows, you might not have to do it at all. The same principle can be applied to writing code. For best performance of your code, try to avoid time-consuming operations altogether. In the LotusScript context, an example would be that you sometimes need to look things up in a view, but sometimes not. You don’t open the view and create a NotesView object until it’s first needed, and then once you have opened it, you don’t discard the object until you know you’re done with it. You can create your own cache.

Wonderful List datatype in LotusScript  

By Andre Guirard | 12/29/22 2:55 AM | Development - Notes / Domino | Added by Roberto Boccadoro

The general term for it is “associative array” — a collection of values indexed by a string rather than a numeric index. You might be thinking you already know about the List datatype in LotusScript, but there are a few tricks you might not have thought of.

NotesStream performance  

By Andre Guirard | 12/27/22 1:19 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Lars Berntrop-Bos posted a comment concerning the LotusScript NotesStream class and his practice of reading as large a block as he possibly could to optimize performance. I decided to run a test to see how much difference that made. The results are as follows: