Monday, February 4, 2013

Lösen von Notes Performanceproblemen mit dem NRPC Parser

Der Notes Client besitzt eine eingebaute Tracefunktion um die NRPC (Notes Remote Procedure Call) Kommunikation zwischen einem Client und dem Server zu tracen. Leider ist das Log, dass diese Tracefunktionalität zur Verfügung stellt, etwas unübersichtlich und kryptisch. Jedoch gibt es auf OpenNTF eine Datenbank mit der man die Analyse vereinfachen kann.

Hier die Schritte um eine Performanceanalyse mit der Datenbank durchzuführen:

Downloaden Sie den NRPC Parser von OpenNTF und signieren Sie die Datenbank mit einer Developer id, damit Sie keine Probleme mit der ECL haben.

Öffnen Sie die Parserdatenbank und klicken Sie auf die

 Schaltfläche. Damit werden in Ihrer notes.ini die Einträge
  • Client_Clock=1
  • Debug_Console=1
  • Debug_Outfile=c:\Program Files (x86)\IBM\Lotus\Notes\Data\RPC.txt
  • CONSOLE_LOG_ENABLED=1
gesetzt. Diese bewirken, dass in die Datei RPC.txt  nach dem Neustart des Clients jeder RPC protokolliert wird.

Jetzt muss der Notesclient neu gestart werden und man kann die Funktion in Notes durchführen mit der man ein Performanceproblem hat. z.B. eine Datenbank öffnen, oder ein Dokument aufmachen.

Danach sollte man die Notes.ini Einträge mit

wieder deaktivieren und den Notesclient neu starten.

Danach kann man mit der Schaltfläche
die erstellte Datei analysieren lassen und bekommt dann für jeden Aufruf einer Funktion auf dem Server eine Zeile in der genau  steht was gemacht wurde, wie lange dieser Aufruf gedauert hat und wieviele Daten vom Server gesendet und empfangen wurden.


Aufwendige Operationen sind rot markiert. Die Spalte Sent gibt die Datenmenge in Bytes an die der Server gesendet hat. Die Spalte Rec'd gibt an, wieviel Daten der Server vom Client empfangen hat.

Update 11.11.2013 Wie in den Kommentaren angeführt hat Andrew Magerman eine neue Version des NRPC Parser veröffentlicht, die jetzt auch mit aktuellen Version von Notes korrekt funktioniert. Die Angabe von Debug_ThreadID=0 die man in älteren Versionen des NRPC Parsers benötigte ist daher nicht mehr notwendig. Vielen Dank für dieses Update und das fantastische Tool.











Wednesday, January 30, 2013

Überschüssige Leerzeichen im Text entfernen mit Regular Expression

Nehmen wir an, wir haben einen Code der wild mit String konkatinierung zusammengebaut wurde und Whitespace unterschiedlicher Länge enthält. z.B. "     Der            faule braune        Fuchs ". Mit folgenden kleinen Codeschnippsel kann man den überschüssigen Whitespace eliminieren.


text = text.replaceAll("\\s{2,}", " ").trim();

Ergibt "Der faule braune Fuchs".

Monday, January 14, 2013

Notes 9 Verbesserung beim e-mail typeahead

Das Typeahead bei e-mail Adressfeldern ist eine sehr praktische Sache, aber seit Einführung dieser Funktion stört mich die Tatsache, dass immer zuerst die lokalen Adressbücher vor den Serveradressbüchern durchsucht werden, obwohl davon auszugehen ist, dass die Serveradressbücher im Normalfall die viel akuraten Informationen enthalten. Mit Notes 9 wurde nun eine neue notes.ini Variable (TypeaheadShowServerFirst=1) eingeführt mit der man dieses Verhalten umkehren kann.

Ohne TypeaheadShowServerFirst=1



Mit TypeaheadShowServerFirst=1

Die Notes.ini Variable kann natürlich auch über eine Desktoppolicy gesetzt werden. Leider gibt es jedoch keine Benutzerschnittstelle für diese meiner Meinung nach extrem wichtige Einstellung.

Laut Doku in der Version 9 soll diese Variable auch in 8.5.3 funktionieren. In meinem 8.5.3 FP1 Client hat die Variable jedoch keine Funktion.


Für weitere Infos zur neuen Version schauen Sie auch auf meine Übersicht über alle Postings zum Thema Notes/Domino 9

Friday, January 11, 2013

Neuer Artikel im Wiki über Plugin und Feature Deployment

Die IBM hat eine sehr gute Beschreibung (Managing features in the IBM Lotus Notes 8.5.x Client) über die verschiedenen Möglichkeiten der Installation von Features und Plugins im Lotus Notes Domino Wiki veröffentlicht. Ich war am Anfang sehr skeptisch bezüglich der Wikis aber in letzter Zeit wird wirklich sehr guter Content seitens der IBM veröffentlicht. Hoffentlich hält der positive Trend an.

Thursday, January 10, 2013

Zugriff auf die Hard und Softwarekonfiguration über WMI mittels Lotus Script

Unter Windows gibt es mit dem Windows Management Instrumentation ein sehr mächtiges Werkzeug mit dem man auf diverse Hardware und Software Informationen in Windows zugreifen, bzw mit dem man auch administrative Dinge erledigen kann. Normalerweise verwendet man WMI aus einem vb oder aus einem Powershell script.

Heute möchte ich aber zeigen, dass man den selben Mechanismus auch bequem von Lotus script für die Beschaffung von diversen Infos verwenden kann. Als Beispiel möchte ich einen Agenten anführen, der z.B. die derzeitige Bildschirmauflösung ausliest. Eventuell will man ja in einem Notesscript je nach verwendeter Bildschirmauflösung verschiedene Framesets anzeigen.


Sub Initialize
 Dim objWMIService As Variant
 Dim colItems as Variant
 Dim strComputer As String
 strComputer="."
 Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
 Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor",,48) 
 Forall objItem In colItems 
  print "Monitor Höhe:" & objItem.ScreenHeight
  Print "Monitor Breite:" & objItem.ScreenWidth 
 End forall
End Sub


02-04  die verwendeten Variablen werden definiert.
05 Mit WMI kann man auch auf Remotecomputer zugreifen. Im Normalfall will man jedoch auf seinen eigenen Computer zugreifen, was man durch den Punkt erreichen kann.
06  Das WMI Service Objekte wird instantiert.
07 WMI stellt die Informationen in einer Datenbank ähnlichen Struktur zur Verfügung die mit einer an SQL angelehnten Syntax abgefragt werden kann. Ich komme dann noch später dazu wie man auf diese SQL Kommandos kommt.
08-11 Mittels einer Forall Schleife werden alle Sätze gelesen. Normalerweise sollte hier nur ein Satz zurückgegeben werden, ausser der Benutzer hat mehrere Monitore;-)

Obiges Gerüst kann man natürlich nicht nur für den obigen Zweck verwenden sondern mit den richtigen WMI SQL's kann man praktisch auf jede Info die in Windows gespeichert ist zugreifen. Um den Querystring zusammenzubauen kann man entweder die Doku in der MSDN durcharbeiten oder besser auf den genialen WMI Code Creator  zurückgreifen.


Mit dem kann man sich bequem die Informationen zusammenklicken und bekommt dann den Code in vbscript angezeigt. Mittels diesen Infos kann man dann oben angeführtes Lotus Script Beispiel überarbeiten und auf die gewünschten Infos zugreifen.


Wednesday, January 9, 2013

Detail Formatter erleichtern das Debuggen in Eclipse

Wer kennt nicht diese ärgerlichen Klassen, die toString() nicht überschreiben und deshalb im Debugger keine vernünftigen Informationen zu Objekten dieser Klassen angezeigt werden.


Man sieht hier auf den ersten Blick nur, dass das eine Objekt die id 18 hat und das andere die id 31. Erst wenn man das Objekt aufklappt, wird einem eine unter Umständen lange und unübersichtliche Liste aller Felder dieses Objekts angezeigt.  Bei eigenen Klassen kann man die fehlende toString() Methode ja noch nachrüsten, aber bei fremden Klassen wäre man verloren wenn es nicht die "Detail Formatter" Funktion von Eclipse geben würde.

Einfach einen Rechtsklick auf das Objekt für den man einen Formater erstellen und die Funktion "New Detail Formatter" aufrufen.


Jetzt kann man den Javacode angeben, der den String berechnet, den man gerne als Anzeige für diese Klasse im Debugger haben möchte. In meinen Fall hätte ich gerne für jedes Person Objekt den Vor und Nachname angezeigt.


Schon haben wir in der Detailanzeige des Debuggers nicht mehr die Objektid sondern schon unseren schönen aussagekräftigen Inhalt.



Immer noch nicht ganz ideal, den viel schöner wäre wenn man nicht auf eine Zeile klicken müsste, sondern wenn gleich unter Value der berechnete Wert stehen würde. Aber auch dafür bietet Eclipse eine Lösung. Unter Preferences->Java->Debug->Detail Formatters kann man die Option "As the label for variables with detail formatters" auswählen und schon wird der berechnete Text auch in der Value Spalte angezeigt.



Die Detail Formatters bleiben persistent, das heißt sobald ich mir diesen einmal für eine Klasse erstellt habe, wird dieser in jeder Debugsession von Eclipse verwendet. Ich muss also jeden "Detail Formater" nur einmal definieren.


Sunday, January 6, 2013

Notes 9 Volltextsuche kleine Änderung große Usability Verbesserung

Oft sind es die Kleinigkeiten die einen großen Sprung in der Verwendbarkeit einer Anwendung bewirken. Genauso eine Kleinigkeit wurde in Notes 9 endlich verbessert. Welcher Betreuer kennt nicht das Problem, Anwendern zu erklären wie sie Suchergebnisse der Volltextsuche anders als nach Relevanz sortieren können. Selbst Anwender die darauf geschult wurden, scheitern immer wieder daran auf mehr zu klicken und dann in der großen Anzahl der "Mehr Optionen" die richtige für die Ergebnissortierung zu finden. Mit Notes 9 hat die IBM endlich zumindest in diesem Bereich reagiert und diese absolut essentielle Auswahlbox aus den Tiefen der Optionen geholt und prominent platziert.


Bei der Implementierung der Funktion hat die IBM sogar daran gedacht, dass bei einer Änderung in der Auswahlbox die Sortierung sofort geändert wird. Das heißt man muss nicht wie bisher nach der Änderung noch einmal auf Suche klicken.

Wie wichtig die IBM dieses Feature nun nimmt sieht man daran, dass jetzt sogar Tooltips in die Spaltenköpfe von den Java Ansichten (in den klassischen Notes Ansichten fehlen diese) integriert wurden. Das heißt wenn man mit der Maus auf einen Spaltenkopf zum sortieren positioniert, dann bekommt man vorgeschlagen über den Auswahldropdown die Ergebnissortierung zu ändern.


Soviel Liebe zum Detail würde ich mir an mehr Stellen im Client wünschen.

Für weitere Infos zur neuen Version schauen Sie auch auf meine Übersicht über alle Postings zum Thema Notes/Domino 9

Neues Redbook zum Thema IBM Traveler Deployment

Ein neues Redbook "Lotus Notes Traveler hints and tips for a successful deployment"wurde vom IBM Redbook Team publiziert. Es enthält jetzt nicht wirklich viel neues für einen erfahrenen Domino Admin, aber trotzdem ist es gut an einem Ort die Best Practice Empfehlungen für den Traveler zu haben.
ad