Ben Langhinrichs

Photograph of Ben Langhinrichs

IBM Champion logo

E-mail address - Ben Langhinrichs






June, 2019
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

Search the weblog





























Genii Weblog


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


Thu 13 Jun 2019, 11:03 PM
This is my second post in the series introduced in Delving deeper into your data - Intro in which I show how the Midas LSX can be used to query deep into Notes data and return results in JSON or XML for manual or programmatic purposes.  In Part 1, I showed how to search across all graphics in the Body fields of a database, returning only those that met some criteria in a JSON result set. In this, I show how the Midas LSX can expand to handle multiple databases, and how the results could also be XML if that were desired. I expand on the flexibility of formulas using chunk properties. So, let's look at the second question I posed in the intro: 
 
How would I find all doclinks in our three sales dbs that point to our product db? Or the ones that don't?
 
As before, I am using databases that are available in place of an actual sales dbs and product db. For the purpose of this demo, I use the Business Partner forums for 2006, 2007, and 2008. In place of the product db, I'll use the Fix List database, as people occasionally put links to specific SPRs and such.  Results for all three dbs will be returned together. We will cycle through rich text chunks with a target of 'Doclink', and since the replica id for the fix list db is 8525692D0056EDAF, we will make the chunk filter formula (see Part 1 for more details on that) we would use would be @ChunkStr(LinkReplicaID) = "8525692D0056EDAF". (If we wanted all the doclinks that pointed anywhere else, we'd use != instead of =.)
 
Now, what do we want in our result set? I decided to add the Subject of the document, but then rather than giving you individual pieces, I used a formula to generate the Notes URL. It has to be clever enough to only use the replica id if it is a db link, only the replica id and view id if it is a view link, but use all three if it is a regular doclink. The formula I used was:
 
"notes:///" + @ChunkStr(LinkReplicaID) + @If(@ChunkStr(LinkViewUniversalID)="00000000000000000000000000000000"; ""; "/" + @ChunkStr(LinkViewUniversalID) + @If(@ChunkStr(LinkNoteUniversalID) = "00000000000000000000000000000000"; ""; "/" + @ChunkStr(LinkNoteUniversalID)))=NotesURL
 
Now, let's see what this looks like as a simple result set in XML.
 
Inline JPEG image
 
or we could return the same result set as JSON:
 
Inline JPEG image
 
We could have sorted the results for either. but by default a result set generated from a selection formula is order independent, as both XML and JSON are in this kind of task.
 
Now, what if we needed each of the results to have more complete document information? For JSON, we'd use the Domino format which included doc information. For XML, we'd set a parameter called DominoMetadata='Yes'. If we generated the same two results with these changes, we'd get:
 
Inline JPEG image
 
or the same result set in JSON using the Domino format:
 
Inline JPEG image
 
 
 

Copyright © 2019 Genii Software Ltd.

Tags:

Mon 10 Jun 2019, 04:58 PM
On Friday, I posted Delving deeper into your data - Intro, in which I introduced the series and its goals. I started by suggesting a series of questions or queries we might want to answer that all go deeper than you can with DQL or selection formulas or views. My purpose is to explain more about how the Midas LSX can answer these sorts of questions, and how it can provide the answers in convenient JSON or XML form. The first question: 
 
How would I find all the product images in our offerings database that do not have corporate's dictated 1.91:1 aspect ratio or that are under 450 pixels wide?
 
To answer this, we have to iterate through the documents. While we could narrow down that set using a view or selection formula or DQL, I'm going to assume we are checking all the documents. The Midas part comes in when we go inside the document and inside one or more rich text fields to iterate through the images. Take a look at the Export Directive from our Export to JSON sample db, a data driven way of harnessing the Midas engine without having to write any code. The numbers below match the numbers of the image below:
 
1) Select all the documents (this is where we could use various criteria including DQL.
2) Specify what values we want to show up in the JSON. Both methods for getting a chunk property are used.
3) We have chosen to split the result by chunk, so we have to specify the rich text field and the target type. We will use 'Graphic' which refers to any image. See the Midas 101 - Chunk Definitionspost for more details - the fact that it was written 16 years ago should give you an idea of how durable the chunk concept has proven to be.
4) The chunk filter formula is like a selection formula for chunks. If it evaluates to True, the image is included and a record is written to JSON for this result. If not, it is skipped.
5) The JSON format to use is specified. There is a Midas-defined default format, but you can change to MongoDB or Salesforce or any of the others.
 
Inline JPEG image
 
Now, you may have noticed that in my chunk selection formula, I did basically the opposite of the question. That is because I don't have a product database with images, so instead I used one of the old Business Partner forum databases from 2007, and I will look for any images in the 13000+ documents in that db to see if there are images that are in the correct range and over the specified size. It turns out, there are six of them. See the JSON result set below. This took about 10 seconds, though there are lots of optimization details I ignored for the sake of this demo.
 
I'm going to leave this here without a lot more discussion, but please don't hesitate to ask in the comments or by email if you want clarification or are curious about the features. By the way, the actual chunk filter formula to answer the original question would be @ChunkNum(GraphicRatio) != 1.91 | @ChunkNum(GraphicWidthPX) < 450, but I'm guessing you figured that out for yourself.
 
Inline JPEG image
 

Copyright © 2019 Genii Software Ltd.

Tags:

Fri 7 Jun 2019, 12:33 PM
We live in a data driven world, and finding the useful data means searching.. Google (aka Alphabet) is a hugely valuable company because they figured out how to offer better searching on data. When HCL/IBM wanted to reignite interest in Notes/Domino, one of their highly publicized new features was DQL, because it offers faster and better searches on data.
 
Yet, there are some searches on Domino data that are painfully hard to do or painfully slow to execute, For that reason, I wanted to do a series on how the Midas engine allows better, deeper searches into your data, and how it can harness DQL or other techniques to get at that data quickly and efficiently. Also, how the results can be delivered as JSON or XML or other formats, depending on what you need.
 
But rather than starting with a demo, I'm going to pose a few questions which will be addressed in the following posts.
 
1) How would I find all the product images in our offerings database that do not have corporate's dictated 1.91:1 aspect ratio or that are under 450 pixels wide?
 
2) How would I find all doclinks in our three sales dbs that point to our product db? Or the ones that don't?
 
3) How would I see what bullet point items we've used in the ten highest earning proposals? In the ten lowest earning?
 
4) Given our accessibility rules, which graphics in our four public-facing dbs have heights greater than 1 pixel but no alt text?
 
5) Are there any unredacted credit card numbers appear in our discussion and job posting databases? How about only in certain views?
 
6) Are there any zero size attachments in our discussion databases? Any greater than 10MG in size? How about greater than 4MG in size from before 2017?
 
Each of these should be answerable without writing a lot of code, ideally using a data-driven approach, and the results should be available in JSON or XML.
 
Inline GIF image
 

Copyright © 2019 Genii Software Ltd.

Tags:

Tue 4 Jun 2019, 11:34 AM
Inline JPEG image
 
Twenty-two years ago, I quit my stable job at a prestigious international law firm, leaving behind my reliable salary and excellent benefits to try to make it on my own. My wife and three young kids depended on me, so it was scary, but I'd just recently released my quirky new software product and hoped it would exceed the success of my earlier Notes product, the @YourCommand toolkit, which had brought in a nice supplemental income but not enough to pay the mortgage and feed the hungry mouths.
 
That quirky new software was the Midas Rich Text LSX. Those were heady days in the Lotus Notes world with Version 4 flying high and its exciting addition of LotusScript making Notes developers and customers drool with excitement. (Didn't take much in those days.) Having extended formula language with my first product, it seemed a natural to extend this new scripting language, but I had no idea whether companies really wanted to make rich text jump through hoops.
 
I guess they did. 
 
I was thinking about this as I received a new order today for Midas, now called the Midas LSX as it does more than just rich text tricks. I also sent off a half dozen invoices for Midas maintenance contracts and agreed to a large proposed Midas trial at another company. I have other products as well, even one that has made more money (looking at you, CoexLinks Fidelity), but the incredible longevity of the Midas LSX still astonishes me, and the range of products that have spun off Midas already (both custom and public) is inspiring.
 
So, I guess they still do.
 
Thank you all, and don't count Midas out for some major surprises in the near future, including some with a very modern Notes/Domino 11 twist.

Copyright © 2019 Genii Software Ltd.

Tags:

Tue 21 May 2019, 09:21 AM
Inline GIF image
 
I've noticed a few times recently something we haven't seen much in a while: new people needing to learn/understand Notes admin or development, or just needing to understand what Notes/Domino is all about. If all goes well, this may happen more and more. But we need a better answer than suggesting they go out and see "all the content online". We need to start thinking about being more organized. With luck, HCL and partners like TLCC will offer the right courses or content, but right now the content out there is often dated, obsolete, too advanced, too confusing, or lacking in context for a new user. 
 
We need to ask ourselves, what should an admin, developer, or manager read first? What provides enough roadmap that they'll understand the context of all that information. We don't have an amazing resource like Saleforce's Trailhead that is already highly organized and streamlined, so we're going to have to play catch up. Saying "there's lots of great content online" is useless to people starting out who don't know where to start, what to trust, and how to focus. As ISVs and BPs, and for those who work for HCL, these are our potential customers, so helping them is also a first step to building relationships with them. We've been an old buddy network for so long, we aren't always prepared to welcome and guide the newbies. But doing so will help all of us, so let's get prepared. Put together a solid resource sheet ahead of time, and you may develop a relationship with a customer that needs you as much as you need them. If you offer training materials, courses, etc., make sure it is clear what is needed for someone either new to Notes/Domino (and Sametime, etc,.) or who has not used it in years. Also, spruce it up and make sure it is up-to-date.
 
Have you ever thought about the fact that the word noob is just the word boon turned around? If we can turn around these noobs, they can be boons to our business and the community. 
 
Of course, if any of you can build a magical experience like Trailhead for Notes/Domino, do so and I'll happily send people to you. In the meantime, let's do the best with what we have.

Copyright © 2019 Genii Software Ltd.

Tags:

Wed 13 Feb 2019, 04:05 PM
Mix together my last two posts, Formula language in a JavaScript world: JSON db lookups and Choices in your on-the-fly data retrieval, and you get an odd but powerful concoction I have nicknamed @MQRY (Midas Query formulas). All this took to implement was current working code in the Midas C++ API exposed in formula language calls. Consider this the art of the possible. 
 
Since formula language calls can be made from LotusScript, Java, and Javascript using calls to evaluate, and can also be used in computed text, computed fields, etc, this makes a versatile general query tool. Selection of documents and values can be as broad as across multiple databases and as narrow as retrieving elements from inside rich text, or both at once. In this case, the two calls would return exactly the same data as in my  Choices post.
 
Would you like to see something like this in Notes/Domino 11? How about in Domino 8.5/9/10/11?
 
 
REM {Example of handlng query and retrieval in one call, returning JSON};
json := @DbCommand("MQRY":"NoCache"; 
  @DbName:"SELECT MaintVerNum=\"9.0.1 FP10\""; 
  "SPRnumber,APARID,Client_Server,OfficialDesc,Project,Regression{B},SecurityIssue{B},TRIAGEMODDATE"; 
  "IncludeUNID='Yes' Sort='Yes' Title='SPRNumber' Format='json' JSONFormat='Mongodb' ");
 
 
REM {Example of handlng query and retrieval in one call, returning XML};
xml := @DbCommand("MQRY":"NoCache"; 
  @DbName:"SELECT MaintVerNum=\"9.0.1 FP10\""; 
  "SPRnumber,APARID,Client_Server,OfficialDesc,Project,Regression{B},SecurityIssue{B},TRIAGEMODDATE"; 
  "IncludeUNID='Yes' Sort='Yes' Title='SPRNumber' Format='xml' ");
 
 

Copyright © 2019 Genii Software Ltd.

Tags: