XPages App to Web App: Part Seven - CSS  

By Paul Withers | 10/8/24 5:09 AM | Development - Notes / Domino | Added by Roberto Boccadoro

In the last part we created the login form. In this part we’re going to start adding some theming. Theme Colours The power of XPages is in the out-of-the-box themes available. These provide styling for the various XPages components and some developers may even have not add their own CSS. But hopefully developers have.

LotusScript Classes and Delete  

By Paul Withers | 9/24/24 1:04 AM | Development - Notes / Domino | Added by Roberto Boccadoro

A couple of years ago I wrote a number of blog posts about LotusScript / VoltScript classes. The topic is relevant to both languages, we’ve not made any changes to how classes are managed in VoltScript, even though we discussed adding some things added to Visual Basic since LotusScript was created, things like additional modifiers. Even though classes are still the same, we’ve used some quite sophisticated aspects of class, as will be apparent to anyone who has looked at VoltScript Testing, its LotusScript port bali-unit, VoltScript JSON Converter, or VoltScript Collections. Three particular aspects I used in those projects are of particular relevance for this blog post.

XPages to Web App Redux: 2  

By Paul Withers | 8/21/24 6:45 AM | Development - Notes / Domino | Added by Roberto Boccadoro

XPages to Web App Redux: Part Two - Dev Tools Many Domino developers may not have used anything other than Domino Designer. We’re stepping into a different world of development here. So we’ll be using different tools. Plural.

XPages to Web App Revisited: Part One - Introduction  

By Paul Withers | 8/19/24 7:47 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Many years ago I wrote a series of blog posts on the topic of XPages to web app. At the time my target technology was Vaadin running in an OSGi plugin on Domino HTTP server (initially) and then CrossWorlds - Daniele Vistalli’s innovative approach to use Domino data via OpenNTF Domino API on a Websphere Liberty server running as a sidecar to Domino. My experience of developing with Vaadin lagged behind the technology, because it quickly evolved not only to Java 8 (and undoubtedly beyond) but used annotations which required Servlet 3.0. Today there are a variety of options for web application. Adjacent to Domino is Jesse Gallagher’s JakartaEE approach. Domino REST API can host applications as well. Frameworks like Angular and React have gained prominence. JSP is still seen in some places, but seems to have slipped from prominence. But after my session at Engage with Stephan Wissel, and particularly the rapid evolution of browser support over the last few years, my target is traditional web, hosted in Domino REST API’s server.

Domino REST API Proxy Problems  

By Paul Withers | 8/1/24 6:36 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Earlier this week I was working with Domino REST API for a personal project and encountered what appeared to be a bug. It was a very strange issue, but one that had a simple cause that was ultimately easy to verify. In this case, Domino REST API’s `/lists/{name}’ endpoint was resulting in unexpected results. For certain views on the server I was using, e.g. a view with a name “vwFoo” was returning expected results. But for hidden views, e.g. “(luKeys)” I was getting a 405 “Method Not ALlowed” error when accessing via Postman.

Developing for Research  

By Paul Withers | 7/25/24 1:30 AM | Development - Notes / Domino | Added by Roberto Boccadoro

It’s been nearly five years since I joined HCL Labs, progressing currently to Associate Director - Research. In that time I’ve been involved in: setting up HCL’s Open Source Project Office researching the state of rich text editing on the web (as I covered in a session at Collabsphere in 2020) leading the modernisation of language, extensions and tooling of LotusScript as VoltScript integrating VoltScript into Volt MX Foundry as a first-class language adapter web components and a variety of other projects This has covered some degree of coding in a variety of languages and frameworks. But there are significant differences between traditional product-focused development and development for research. And it’s useful to highlight those differences, because it takes a certain mind-set and skill-set.

Adventures in AI  

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

Those who were at Engage will have seen some of the experimentation I’ve been doing with AI in the context of VoltScript. In the OGS Jason demoed how I used it to provide code for a loop, correcting it with information about APIs specific to VoltScript. Before my VoltScript session, I showed two videos demonstrating how I’ve used AI to add value to the VoltScript coding experience, firstly by checking unit tests for code coverage and then by checking code complexity of functions in VoltScript Collections.

Engage 2024  

By Paul Withers | 4/10/24 1:00 PM | Business - Events / People | Added by Oliver Busse

Later this month I will be attending Engage 2024. It will be a bittersweet experience. Engage was the first conference at which I spoke, a session that was way ahead of its time, highlighting the power of repeat controls in XPages and advocating against using View Panels. Ironically, at Engage this year, one of the sessions I’ll be delivering has some similarities. But I’ll cover the sessions I’m involved in chronologically.

Eclipse Java Debugging  

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

When XPages came to Domino it introduced many Domino developers to Java. Because the IDE was based on Eclipse, it also introduced Domino developers to standard elements of Java development on Eclipse.

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

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.

LotusScript Declarations  

By Paul Withers | 4/14/21 5:10 AM | Development - Notes / Domino | Added by Andi Kress

How can you get a “Type Mismatch” error in a Forall loop in LotusScript? This was the question a few of us hit with a recent bit of coding. You can’t declare the forall variable, and if you’re iterating over a variant containing only strings, surely this shouldn’t happen.

Goodbye Nathan  

By Paul Withers | 4/12/21 5:01 AM | Business - Events / People | Added by Oliver Busse

Over the weekend we lost another long-standing member of the Domino community, Nathan T Freeman. Nathan was outgoing, often controversial, but passionate about open source and helping others. Everyone who met him will have stories about him. But I know he is one of the individuals I have to thank for being where I am today.

Adventures in CacheLand 2  

By Paul Withers | 4/1/21 12:46 AM | Development - Notes / Domino | Added by Roberto Boccadoro

In my last blog post I talked about challenges we had to overcome as a team with regard to caching of constants. But a bigger challenge we hit was caching of design elements. Part of the solution we built required copying design elements from one database to another. Part of the beauty of Domino is that everything is a Note - including design elements. Design elements are just Notes with a special flag. So just as you can copy a document from one database to another by getting a handle on the note, you can also copy a design element from one database to another by getting a handle on the design note.

Adventures in CacheLand 1  

By Paul Withers | 3/24/21 9:03 AM | Development - Notes / Domino | Added by Roberto Boccadoro

Recently I’ve been involved in a project with a lot of LotusScript. As a team our approach has been to structure the code according to best practices and leveraging what we’ve learned from other languages. Standards are always good, but there are always peculiarities that impact what you do. The crucial skill is to be able to work out what is happening when the standard ways don’t produce expected results. And most importantly, work out how to work around them.

Domino Timezones  

By Paul Withers | 1/4/21 2:27 AM | Development - Notes / Domino | Added by Andi Kress

There are a number of challenges when it comes to two-way REST and Domino. But one of the biggest challenges for manipulation between NotesDateTime objects and JSON is timezone handling.