Usability - Productivity - Business - The web - Singapore & Twins


Burn Chart in Dojo

A burn chart implementation in Dojo


Source and Binary code for Java based tools to calculate Notes metrics

Fetch the Lotusphere Presentations on one go

You need to replace the user name and password with what you have on your Lotusphere batch.


Sample Stylesheet to transform a NotesView into a xPage


Sample code to scan a database for design artifacts

Read Protection Sample Database

Shows example code for efficient handling of multi category read access protected documents


Helper File to get all class names that are used in Domino 8.5 OneUI theme

Large ReaderFields > 32k members

Class that simulateses large reader fields by dynamically creating groups for them

Stylesheets for Connections 2.5

XSLT Stylesheets for the ATOM content emitted by Lotus Connections 2.5. One style creates a table with custom fields as columns. Presumes all custom fields are the same (useful for surveys etc.). The other one lists all attachments in an activity including size and download link


OneUI V2 CSS files  - no style definition

Compare documents of 2 databases

Compares documents in databases that are related (e.g. replicas, backups, create with "new copy") and finds additions, deletions and alterations

Import MIME / EML messages into Notes

Classes to run imports: package com.notessensei.mimeimport; import java.io.IOException; import java.io.InputStream; import java.util.Stack; import lotus.domino.Document; import lotus.domino.MIMEEntity; import lotus.domino.NotesException; import lotus.domino.Session; import lotus.domino.Stream; import org.apache.james.mime4j.MimeException; import org.apache.james.mime4j.parser.AbstractContentHandler; import org.apache.james.mime4j.parser.ContentHandler; import org.apache.james.mime4j.stream.BodyDescriptor; import org.apache.james.mime4j.stream.Field; public class DocContentHandler extends AbstractContentHandler implements         ContentHandler {     public static final String TEXTMIMETYPE = "text/plain";     public static final String HTMLMIMETYPE = "text/html";     public static final String RTFIELDNAME = "Body";     Document doc = null;     Session s = null;     boolean mimeStatus = true;     Stack<MimePartInfo> mimeParts = new Stack<MimePartInfo>();     public DocContentHandler(Session s, Document newDoc) {         this.doc = newDoc;         this.s = s;     }     @Override     public void body(BodyDescriptor bd, InputStream is) throws MimeException, IOException {         String mtype = this.mimeParts.peek().getContentType();         System.out.println("      Mime-Part: " + mtype);         this.createBody(bd, is);     }     private void createBody(BodyDescriptor bd, InputStream is) {         try {             Stream notesIn = s.createStream();             notesIn.setContents(is);             notesIn.setPosition(0);             MimePartInfo p = this.mimeParts.peek();             MIMEEntity m = p.getMimepart();             m.setContentFromBytes(notesIn, p.getContentType(), m.getEncoding());         } catch (NotesException e) {             e.printStackTrace();         }     }     @Override     public void endBodyPart() throws MimeException {         this.mimeParts.pop();     }     @Override     public void endMessage() throws MimeException {         try {             doc.save();             s.setConvertMime(this.mimeStatus);             System.out.println("      -- Import complete");         } catch (NotesException e) {             e.printStackTrace();         }     }     @Override     public void field(Field rawField) throws MimeException {         this.mimeParts.peek().createHeader(rawField.getName(),                 rawField.getBody());     }     @Override     public void startBodyPart() throws MimeException {         this.mimeParts.peek().createChildEntity(mimeParts);     }     @Override     public void startMessage() throws MimeException {         try {             this.mimeStatus = s.isConvertMime();             s.setConvertMime(false);             MIMEEntity body = doc.createMIMEEntity(DocContentHandler.RTFIELDNAME);             this.mimeParts.push(new MimePartInfo(body)); // First element on the stack         } catch (NotesException e) {             e.printStackTrace();         }     } }

Tester.java MimePartInfo.java Mime2Doc.java DocContentHandler.java
LDAP extensions for Domino

OpenNTF LDAP Compatibility Directory Extensions The OpenNTF LDAP Compatibility Directory Extensions can be added to your Domino Directory to improve overall support for LDAP compatibility from Domino servers. There are 3 principle objectives for these extensions: 1) Provide a profile-driven mechanism to set an overall BaseDN on your LDAP directory. 2) Provide for hierarchical distinguished group names without interfering with existing Domino ACLs. 3) Prevent invalid entries from appearing in LDAP queries which break standard tools like Apache Directory Services for Eclipse. Secondary objectives include: Compatibility with PAM account management for Linux systems. Creation of Organization and OrganizationalUnit records automatically when needed. Graceful fallback when configuration erroneous or incomplete. There are 4 views, 4 subforms and 1 form included with this template. Of the 4 views, one is entirely new and is used for UIDNumber assignment, while the other 3 replace the existing ($LDAPCN), ($LDAPHier) and ($LDAPRDNHier) views. Of the 4 subforms, two are new, providing the PAM and DN extensions for Groups and Person records, while two demostrate implementation of those extensions in the standard Extensibility schema provided by the Domino Directory. The form replaced the standard DirectoryProfile form, and adds a tab for LDAP where you can set the BaseDN and an optional DN for entries with potentially invalid characters ($, *, ~, #, etc) Many thanks to Andre Guirard for his excellent documentation on User Customizable view columns, though he will discover that this template proves one statement in his post wrong. And also to Alan Bell for his equally excellent document on using Domino LDAP for authentication on Posix systems.

pubnames.ntf.dxl-.DemoDirectory.nsf.dxl.xml-ComparisonReportShort.xslt.html pubnames.ntf.dxl-.DemoDirectory.nsf.dxl.xml-ComparisonReportDetail.xslt.html
On Disk Project Cocomo

Run this tool against your OnDisk Project for a CoCoMo Analysis

Demo for an Angular.js timeline


LotusScript for embedded experiences eMails

Unsorted Sourcecode of Sametime Stuff

Agent code to create a batch file to extract all buddy lists using the Sametime tool provided by Epilio and some Java code to concatenate them and run a report. Sample report included.