Ben Langhinrichs

Photograph of Ben Langhinrichs

E-mail address - Ben Langhinrichs







Recent posts

Tue 19 May 2020

An unladen user



Thu 7 May 2020

Can we get a huzzah for updated Domino Limits?



Wed 29 Apr 2020

A bigger boat: when in Rome


July, 2020
SMTWTFS
   01 02 03 04
05 06 07 08 09 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Search the weblog





























Genii Weblog


Civility in critiquing the ideas of others is no vice. Rudeness in defending your own ideas is no virtue.


Fri 29 May 2020, 04:22 PM
Inline JPEG image
 
 
I've noticed a couple of people in very different conversations talk about the idea of "round tripping" data, moving it from Notes rich text to HTML or MIME and then bringing it back. Often, this is described more specifically as moving it from "Domino to Mongo DB" or from Notes to SharePoint or simply from "the client to the web". Fundamentally, these all mean more-or-less the same thing. The internal format is Notes rich text. The "external" format is HTML or MIME, and even the MIME is really just HTML packaged differently.
 
In both conversations where it was mentioned, round tripping was treated as if it were a special case, unusual and not of interest to most Notes/Domino users.
 
This is simply not true. Round tripping happens every day, and it happens without any special coding or effort. Two of the simplest examples:
 
1) Send an email to a colleague outside of your domain. After that person replies, reply back. You've gone from rich text to MIME to rich text (again) to MIME (again). Two round trips.
 
2) Staying entirely in a Notes client, any version including Notes 11, saving a document with a rich text field set to "Store contents as HTML and MIME". Then, open it up to read it. For bonus points, make a change and save it, then open it again. You've gone from rich text to MIME to rich text to MIME to rich text again.
 
But so what? Obviously, Notes allows you to store content as HTML and MIME, so it must understand it. Right? 
 
Watch the video. All I do is save three documents with rich text fields stored as HTML and MIME, then reopen them. That's it. Watch the chaos which ensues. Then, tune in next week as I start to show the different ways Genii Software has found to make that round trip more pleasant and productive. Because we could all use a pleasant round trip right about now.
 
 
(I skipped the audio on this, but the captions should tell you what you need to know. I used HCL Notes 11.0 for this demo.)
 
 
 
 

Copyright 2020 Genii Software Ltd.

Tags:

Tue 19 May 2020, 02:16 PM
Inline JPEG image
 
When creating videos and demos and blog posts, I always have to ask myself how long is long enough and how long is too long. But the question turns out to be a trick, because there are no unladen users. Everybody is too busy, too distracted, and too absorbed with their own issues. Unladen means not carrying a load. If you only focus on users who are not carrying a load, you are focusing on nobody at all.
 
Having said that, people probably do have a need for your software or services or whatever. Year after year, people buy our software, so we're clearly not only focused on the unladen. The difficulty then is knowing what load they are carrying, and how your software or services or whatever can lighten that load, or make it more productive or profitable.
 
So, while I strongly believe in brevity and most of my videos are 3 minutes or shorter, the real question: how you can get and keep the attention of a laden user? Clickbait headlines and dimmicks are good for getting attention, and lousy for keeping it. Information dense articles and videos are good for the thoroughly engaged, and lousy at engaging. Storytelling is fairly effective, but your story has to hit the mark quite closely, as distracted users often won't extrapolate to their own issues if the one being solved is not very, very close to a match.
 
Do you have ways you get and keep attention? If you do, how long do you assume the attention span will hold out? Obviously, the more your offering is exactly what people will need, the more likely they are to stay around to hear the pitch, but what do you do when they don't recognize that it is exactly what they need?

Copyright 2020 Genii Software Ltd.

Thu 7 May 2020, 10:50 AM
Idea: HCL should update documentation of Domino limits
 
For years, I maintained a fairly popular Domino limits feature on our website. (It is still there, and people still access it, but I have made it more difficult to find as I couldn't figure out how to reference changes made in the "fixpack years", when limits could change in a fixpack.) I could update it for Notes/Domino 10 and 11, but why not vote for this idea and convince HCL to do it properly?
 
Note: This is not my idea. I just saw it, and think it is worth supporting.
 
Click on the idea above or this link to head over to vote for it.

Copyright 2020 Genii Software Ltd.

Wed 29 Apr 2020, 03:03 PM
Inline GIF image
St Augustine famously said, though probably in Latin, "When in Rome, do as the Romans do." Yet my previous post, Down to Business - PDF invoices from Notes data with Node, violates that spirit in a fairly major way. Now, the post is still well worth a read and contains a demo that is absolutely relevant, but the script is a bit like reading a sex scene in a book by a priest. You know what is happening, but you're not convinced the author really does.
 
JavaScript isn't written that way. JavaScript doesn't generally operate that way. Sure, it works, but not in a way that would speak to anybody coming from the modern world of JavaScript or Node.js development. It does look a lot like LotusScript, but if we want to widen the range of developers who work with Notes/Domino, we need to reach beyond the relatively few LotusScript developers still out there and appeal to the vastly wider ocean of JavaScript developers. My earlier post, A bigger boat: meeting developers where they are, adds one element of that by allowing parameters to be passed as an object. But it is still fairly old-fashioned synchronous blocking code. Do this. Then do that. While this, do that other. The main JavaScript loop runs in a single thread, so unless you spin off functions, while it is off doing a function, everything waits. That is not good when you should also be processing mouse movements, etc.
 
In short, we need to go asynchronous. We need Promises. Not ordinary promises, like "I will remember to take the trash out on trash day, but JavaScript Promises, which are more like, "I will come back with a result that either resolves this function or rejects it due to error."
 
So, back to the drawing board with Exciton Power. Here is the same basic script I showed in  Down to Business - PDF invoices from Notes data with Node, generating the exact same invoices, but now using the asynchronous (and default) mode for Exciton Power. It some a bit more error trapping and uses slightly different class names (e.g., ExcitonCollection rather than GCollection). All methods are asynchronous and return promises. It is still mostly imperative code and still pseudo-synchronous in that it uses an async / await model familiar to JavaScript developers. It should be fairly clear to hardcore LotusScript developers as well, but let's face it, we old dogs do have to try and learn a few new tricks. Mostly, it does the job without blocking the main event loop, so Node.js can get on with its business, though a more truly asynchronous model will be coming for times when you might handle multiple documents at the same time by spinning off different threads. But for now, at least we can pass as Roman wannabes if not full-fledged Romans. Che buon'idea!
 
Note: I am not a JavaScript expert by any means, and welcome any suggestions about how to improve this and make it feel more natural to JavaScript developers.
 
// *** Initiate a session
const session = require('./build/debug/ExcitonPower');
const { createInvoice } = require("./createInvoice.js");
 
// *** Create a collection and add a view to it
const coll = session.useCollection();
 
let invoiceStarted = false;
 
// *** Cycle through the view, looking for invoices and their line item response documents
coll.addByView({server: "", filePath: "AcroBatsCRM.nsf", viewname: "Customers"}).then(async doccount => {
  console.log("Added "+doccount+" documents from Customers view");
  try {
    let doc = await coll.getFirstDoc({items: "CompanyName,InvNo,Contact,Address,City,State"})
    let docobj;
    if (doc != null) docobj = JSON.parse(doc);
 
    let count = 0;
    let total = 0.0
    let invoiceStarted = false;
    while (doc !== null) {
      if (docobj'@form' == "Invoice") {
        invoice = {InvNo: docobj.InvNo, filename: docobj.CompanyName+" - "+docobj.InvNo+".pdf", shipping: docobj, items: []};
        invoice.subtotal = 0.0;
        invoice.paid = 0.0;
 
        invoiceStarted = true;
        total = 0.0;
        count = 0;
        } 
      else if (docobj'@form' == "Line Item" && invoiceStarted) {
        count++;
        doc = await coll.getDocByUNID({unid: doc, items: "ItemNo,Qty,Price,Total,@DbLookup(\"\":\"\"; \"\":\"AcroBatsPRD.nsf\"; \"Products\"; ItemNo; \"ItemDesc\")=ItemDesc"});
        docobj = JSON.parse(doc);
        invoice.items.push(docobj);
        total += docobj.Total;
        invoice.subtotal = total;
        invoice.paid = 0.0;
        }
 
      if ((doc = await coll.getNextDoc({unid: doc, items: "CompanyName,InvNo,Contact,Address,City,State"})) != null)
        docobj = JSON.parse(doc);
 
      if (doc == null || (invoiceStarted && docobj'@form' != "Line Item")) {
        invoice.subtotal = total;
        invoice.paid = 0.0;
        createInvoice(invoice);
        console.log("Created invoice as "+invoice.filename+" for $"+total); 
        invoiceStarted = false;
        }
      }
    }
  catch(err) {
    console.log("Error: "+err.message);
    }
  }).catch(function(err){console.log("Error: "+err.message)});
 
console.log("Completed!");
 

Copyright 2020 Genii Software Ltd.

Tags:

Mon 27 Apr 2020, 08:44 AM
Inline JPEG image
 
I've had various customers ask what exactly is in Notes 11, especially for those who are just gradually getting back on maintenance after being lapsed for a while. Mat Newman gives a rundown.
 
 
 

Copyright 2020 Genii Software Ltd.

Tags:

Thu 23 Apr 2020, 09:57 PM
Inline JPEG image
 
I've been in this business a while, and seen a lot of world events translate—or not—into changes in the way people look at their business systems. From I.T.-specific events such as the dot com crash or Y2K to general events such as the Great Recession, when the world shifts on its access, it encourages people to examine their systems and fix what failed or preemptively make changes to prevent failure in a future event. Sometimes they do, and sometimes the event recedes and they don't.
 
The global pandemic is no different, and yet it is very different. A virus that doesn't infect computers has nonetheless forced tremendous upheaval in the computer world. The first wave of changes was almost immediate as lockdowns in country after country forced workers who could to work from home. Online meetings, video conferencing, and email/chat/etc. all found themselves used more heavily and in more ways than ever before.
 
But the second wave has started, and it is more widespread and deep. Every software system a company or organization uses has been pushed and pulled in ways that may not have been planned for. There are big, public examples such as the state unemployment software systems that were never built for surges such as this... and are built in COBOL. A scramble for aging developers who know COBOL is on right now, but also an awareness that these systems have chugged along and are no longer sustainable. In most states (that function well), the systems will be replaced and modernized as this crisis calms down, because the weakness is now visible.
 
Among my customers, both existing and new, I am seeing a growing awareness that relying on those Notes applications that keeps chugging along may have risks. Some applications are only designed for a Notes client, but workers who were never expected to work from home may not be equipped with laptops to run Notes, or are much harder to support remotely. Other apps designed to be run inside the corporate network on a Domino-based Intranet may not be secured properly for external use over less secure WiFi in homes. While some problems can be solved with VPNs and other technical solutions, closer scrutiny is leading people to examine whether to move forward or move away. Perhaps Nomad is the answer for some apps, allowing them to be run on devices that workers already have. For others, a hastily spun-up Domino interface to a Notes app may be the short term answer.
 
But no matter what choices are made, change is in the air. I am currently juggling migrations away from older applications with some customers and upgrades to more recent Domino versions for others. I am working with a couple of customers on whether they can use a combination of Domino Access Services,. a custom DSAPI, and Exciton to move data into a more accessible environment and still be able to keep their Domino data secure and intact. Almost every day, I hear from a new customer or an older customer with new ideas, and most are on the cusp of deciding what direction to take.
 
I want to be able to steer them toward Notes/Domino 11, Nomad, etc. Sometimes, I can. Part of the reason I am working so hard on Exciton is to give pathways forward for their apps where the HCL development picture is still too limited. When I can't steer them forward, I am helping them migrate off with the highest degree of accuracy, fidelity, and security possible. But they are moving for the first time in a long time. The pandemic has exposed weaknesses, and it is up to us and HCL to either help fix those weaknesses or help them move on. There is opportunity, but only if we seize it.
 
Be proactive. Look at your clients and see how well the software applications you know about are likely to perform in this new world. Perhaps we will "get back to normal" in a few months, but the cat is out of the bag, and systems not designed to accommodate this pandemic world will be upgraded, scrapped, or replaced with systems what are designed for it. While some applications are used every day, others may be less prominent. If you can go to your client with a proactive vision for those systems, you can win that business, and perhaps steer the solution in a direction you would like.
 
If you have applications that aren't passing muster in this new reality, request an evaluation of our Midas LSX with Midas Exports to get the data out, or contact me to discuss how we can assist. If you would be interested in moving forward, contact me and ask to participate in our Exciton beta. You may reach me by e-mail at 
 
 

Copyright 2020 Genii Software Ltd.

Tags: