Posts Tagged: ‘IBM Notes/Domino’

2018 kann losgehen

2. Februar 2018 Posted by Stephan Kopp

Ich weiß es ist schon Februar, aber ich hatte die letzten 3 Wochen Urlaub und starte sozusagen erst jetzt so richtig ins neue Jahr. Ich bin kein Freund von guten Vorsätzen, primär weil ich mich eh selten daran halte. Trotzdem hat natürlich jeder so seine Vorstellungen und Wünsche an ein neues Jahr und blickt auf das Vergangene zurück.

Beruflicher Wandel

Mein Berufsleben habe ich als Lotus Notes Entwickler gestartet, das ist mittlerweile schon ein paar Jährchen her. Vor einigen Jahren, als das Ende dieser Ära abzusehen war, habe ich angefangen mich auch mit anderen Dingen zu beschäftigen. Nach einigen Experimenten bin ich dann bei Java, dem Vaadin und Spring Boot Framework gelandet. Rückblickend kann ich sagen, dass ich letztes Jahr nun erstmals mehr Zeit mit diesen neuen Themen verbracht habe und weniger mit Lotus Notes. Das Thema Notes/Domino wird mich natürlich auch weiterhin begleiten, aber ich denke der Fokus wird sich weiter darauf konzentrieren, die Kunden bestmöglich bei der Ablösung zu beraten.

Mein persönlicher Wunsch für dieses Jahr ist es, diese Projekte, die sich komplett jenseits der altbekannten Lotus Notes Welt bewegen weiter auszubauen. Die neuen Themen, Technologien und Konzepte wie Microservices, APIs, etc. machen mir viel mehr Spaß. Das sind herausfordernde Projekte und man hat die Gelegenheit sich in neue Themen und Ideen einzuarbeiten.

IBM Notes/Domino 10

Der Verkauf der Produkt Sparte hat einige Leute in der Community in helle Aufregung versetzt und positive Erwartungen und Hoffnungen geweckt. Persönlich hat mich das alles allerdings nicht überzeugt. Es ist eine naheliegende Entscheidung von IBM, aber die Hoffnung, dass mit Notes 10 jetzt eine echte Weiterentwicklung auf uns zukommt kann ich nicht teilen. Meiner Meinung nach ist das allerhöchstens eine Produktpflege, um den Kunden ein wenig den Druck von den Schultern zu nehmen, Notes möglichst schnell abzulösen. Das kommt allerdings einige Jahre zu spät und die meisten haben das Thema „End of Lotus Notes“ schon fest auf der Agenda.

Soll jetzt nicht heißen, dass ich Kunden jede Investition in die Plattform versuche auszureden. Wer weiter darauf setzen will, hat jetzt einen validen Fahrplan für die nächsten Jahre und kann bestehende Applikationen mit gutem Gewissen weiterentwickeln. Ich persönlich setze meinen Fokus aber nicht mehr auf Lotus Notes, sondern will mich weiterentwickeln und mich um interessantere Themen kümmern.

Work Life Balance

Das ist ein sehr überstrapazierter Begriff, aber für mich hat das Thema einen hohen Stellenwert. Ich arbeite um zu leben, aber ich lebe nicht nur um zu arbeiten. Natürlich stecke ich viel Zeit und Mühe in meinen Job, aber kann meine Freizeit und Urlaub auch sehr genießen. Der Start in das Jahr 2018 mit einer ausgedehnten Asien Reise war hierfür ein guter Anfang und sicher nicht meine letzte Auszeit dieses Jahr.

Das neue Jahr kann also kommen und ich bin gespannt, was mich erwartet.

2018 kann losgehen

2. Februar 2018 Posted by Stephan Kopp

Ich weiß es ist schon Februar, aber ich hatte die letzten 3 Wochen Urlaub und starte sozusagen erst jetzt so richtig ins neue Jahr. Ich bin kein Freund von guten Vorsätzen, primär weil ich mich eh selten daran halte. Trotzdem hat natürlich jeder so seine Vorstellungen und Wünsche an ein neues Jahr und blickt auf das Vergangene zurück.

Beruflicher Wandel

Mein Berufsleben habe ich als Lotus Notes Entwickler gestartet, das ist mittlerweile schon ein paar Jährchen her. Vor einigen Jahren, als das Ende dieser Ära abzusehen war, habe ich angefangen mich auch mit anderen Dingen zu beschäftigen. Nach einigen Experimenten bin ich dann bei Java, dem Vaadin und Spring Boot Framework gelandet. Rückblickend kann ich sagen, dass ich letztes Jahr nun erstmals mehr Zeit mit diesen neuen Themen verbracht habe und weniger mit Lotus Notes. Das Thema Notes/Domino wird mich natürlich auch weiterhin begleiten, aber ich denke der Fokus wird sich weiter darauf konzentrieren, die Kunden bestmöglich bei der Ablösung zu beraten.

Mein persönlicher Wunsch für dieses Jahr ist es, diese Projekte, die sich komplett jenseits der altbekannten Lotus Notes Welt bewegen weiter auszubauen. Die neuen Themen, Technologien und Konzepte wie Microservices, APIs, etc. machen mir viel mehr Spaß. Das sind herausfordernde Projekte und man hat die Gelegenheit sich in neue Themen und Ideen einzuarbeiten.

IBM Notes/Domino 10

Der Verkauf der Produkt Sparte hat einige Leute in der Community in helle Aufregung versetzt und positive Erwartungen und Hoffnungen geweckt. Persönlich hat mich das alles allerdings nicht überzeugt. Es ist eine naheliegende Entscheidung von IBM, aber die Hoffnung, dass mit Notes 10 jetzt eine echte Weiterentwicklung auf uns zukommt kann ich nicht teilen. Meiner Meinung nach ist das allerhöchstens eine Produktpflege, um den Kunden ein wenig den Druck von den Schultern zu nehmen, Notes möglichst schnell abzulösen. Das kommt allerdings einige Jahre zu spät und die meisten haben das Thema „End of Lotus Notes“ schon fest auf der Agenda.

Soll jetzt nicht heißen, dass ich Kunden jede Investition in die Plattform versuche auszureden. Wer weiter darauf setzen will, hat jetzt einen validen Fahrplan für die nächsten Jahre und kann bestehende Applikationen mit gutem Gewissen weiterentwickeln. Ich persönlich setze meinen Fokus aber nicht mehr auf Lotus Notes, sondern will mich weiterentwickeln und mich um interessantere Themen kümmern.

Work Life Balance

Das ist ein sehr überstrapazierter Begriff, aber für mich hat das Thema einen hohen Stellenwert. Ich arbeite um zu leben, aber ich lebe nicht nur um zu arbeiten. Natürlich stecke ich viel Zeit und Mühe in meinen Job, aber kann meine Freizeit und Urlaub auch sehr genießen. Der Start in das Jahr 2018 mit einer ausgedehnten Asien Reise war hierfür ein guter Anfang und sicher nicht meine letzte Auszeit dieses Jahr.

Das neue Jahr kann also kommen und ich bin gespannt, was mich erwartet.

Die Zukunft von Notes Applikationen: Domino als Backend: JA / XPage oder Notes Client als Frontend: NEIN

24. Februar 2017 Posted by Stephan Kopp

Dieses Jahr und auch letztes Jahr schon, war ich nichtmehr auf der IBM Connect. Meine Einschätzung aus der Ferne: Ich habe auch dieses Jahr nicht viel verpasst… Dank Volker Weber habe ich die wichtigsten News über den Slack Team Space verfolgt, den er angelegt hatte (Infos findet ihr hier).

Meine Einschätzung über die Zukunft von Notes Applikationen hat sich im Grunde bestätigt. IBM wird die Plattform Domino soweit am Leben erhalten, dass die Applikationen dort im Hintergrund noch viele Jahre betrieben werden können. Mit den Frontends sollte man sich aber mittel- bis langfristig vom Notes Client und XPage Umsetzungen weg bewegen. Die Zukunft der Applikationen liegt im Browser und dort sollte man auf OpenSource Technologien setzen.

Es gibt viele Hersteller auf dem Markt, die hierfür mehr oder weniger sinnvolle Lösungen anbieten. IBM hat auf der Konferenz einige davon hervorgehoben, lässt die Partner Lösungswege zur Modernisierung aufzeigen und konzentriert sich selbst auf die Wartung der Plattform.

Jeder Entwickler kann aber auch ohne solche Komplettlösungen dieses Konzept selbst umsetzen. Die Oberfläche einer Applikation für den Browser entwicklen, z.B. mit Angular, Vaadin oder ähnlichen Frameworks. Die bestehenden Notes Applikationen über APIs ansprechen, steuern und bereits vorhandene Funktionen weiter verwenden. Damit verabschiedet man sich nach und nach vom Notes Client und betreibt den Domino Server langfristig nur noch als Datenbank System und Applikationsserver.

Ich sehe das als sinnvollen Weg um die bestehenden Applikationen zu modernisieren. Viele davon sind Business kritisch und nur mit sehr hohem Aufwand und Risiko komplett zu ersetzen.


Filed under: Development, IBM Notes/Domino

Knock, knock… is this thing still alive? It seems to be, somehow

28. Januar 2017 Posted by Stephan Kopp

IBM released some information about the IBM Notes/Domino 9.0.1 Feature Pack 8. You can see the details here. Some of the features are quite interesting, especially Java 1.8 and the possibility to store view indizes outside of the nsf file. So it seems that IBM has still a few developers working at least on the Domino server code.

If I remember correctly, I saw those features on the roadmap for “this year” the last time I visited IBM Connect. This was in 2015 and I was there already disappointed, because I saw the nearly same roadmap in the second year without any progress…

It is disappointing to see how IBM is laying this product to rest, but let’s move on and get the best out of it!


Filed under: IBM Notes/Domino

Nicht wegwerfen, sondern recyceln: IBM Notes Applikationen im Lego-Prinzip modernisieren

11. Januar 2017 Posted by Stephan Kopp

Viele Nutzer von IBM Notes stehen vor der Frage, wie sie veraltete Applikationen fit für die Zukunft machen. Eine „R.I.P. and Replace“-Strategie macht meist wenig Sinn und wird viel zu teuer. Das Beispiel eines Energiemarktdienstleisters zeigt, wie die Software sinnvoll recycelt werden kann.

weiter lesen…


Filed under: IBM Notes/Domino

Es war einmal ein Lotus Notes Entwickler – Alles hat irgendwann ein Ende

21. Dezember 2016 Posted by Stephan Kopp

Ok, etwas überspitzt, aber dennoch wahr. Notes wird mich und Andere noch lange begleiten, aber bis zu meiner Rente schaffe ich es damit sicherlich nicht.

IBM hat meiner Meinung nach leider kein wirkliches Interesse die Plattform weiter zu entwickeln. So lange es geht, werden die bestehenden Kunden mit „Feature Packs“ noch bei der Stange gehalten, aber mehr nicht. Auch IBM Verse on premise wird daran nichts ändern. Deshalb sollte sich jeder über die Zeit danach Gedanken zu machen.

Wohin mit den ganzen Applikationen? Wirklich alles neu entwickeln? Alles nach Sharepoint oder sonst wohin „migrieren“? Ein solches Projekt ist ein Monster, das kaum jemand angehen und schon garnicht bezahlen möchte.

Ich bin kein Fan des „R.I.P. and Replace“ Ansatzes, den viele bevorzugen. Bei einfachen Applikationen und irgendwelchen Standard Anwendungsfällen mag soetwas machbar und sinnvoll sein. Wir sollten uns aber bei komplexen Applikationen eher ganz gezielt diese zwei Fragen stellen:

  1. Was können wir neu entwickeln um einen Mehrwert für die jeweilige Anwendung zu bieten?
  2. Wie können wir das mit „nicht Notes” Technologien machen und es an die bestehende Applikation anbinden?

In letzter Zeit habe ich mich sehr viel mit REST Schnittstellen und Webservices beschäftigt und auch ein wenig mit Vaadin und Spring Boot. Diese Technologien bieten im Grunde alles, was wir benötigen um beide Fragen zu beantworten.

Nachfolgend ein kleines Szenario, bei dem wir diesen Ansatz konkret umsetzen konnten. Es ging um eine bestehende Notes Applikation, die verwendet wird um andere Applikationen in ein Langzeit Archiv zu verschieben sobald sie nichtmehr verwendet werden. Hierfür sollte ein Webinterface entwickelt werden.

  • Wir benötigen ein Browser Interface, aber der Entwickler (ich) hat kein Händchen für HTML und CSS:  Vaadin
  • Ein Application Server jenseits von Domino ist nicht vorhanden und auch nicht erwünscht: Spring Boot
  • Bestehende Daten und Funktionen aus Notes Applikationen sollen eingebunden werden: REST API oder Webservices

Entstanden ist ein recht ansehnliches Webinterface, das Daten aus einer Notes Applikation darstellt und auch Funktionalitäten aus dieser Applikation ansteuern kann. Hierzu wurden einige bestehende Funktionen als Webservices zur Verfügung gestellt und eingebunden.

archiving-selfservice-01 archiving-selfservice-02

Dieser Ansatz gefällt mir persönlich am besten und zwar aus folgenden Gründen:

  1. Der Aufwand und damit die Kosten sind überschaubar.
  2. Die Anwender haben sofort etwas davon, da wir uns zunächst auf neue Funktionen konzentrieren und nicht erst langwierig das nachbauen müssen, was eh schon vorhanden ist.
  3. Langfristig wird sicher auch irgendwann die Notes Applikation abgelöst, aber vorerst kann man seine Investition schützen und muss nicht bei Null anfangen.
  4. Sind nach und nach immer mehr Funktionen aus Notes hinaus gewandert, kann irgendwann auch der Data Store z.B. auf eine Mongo DB, Couch DB oder was auch immer umgestellt werden.
  5. Das Knowhow der eigenen Entwickler, Admins oder Partner entwickelt sich weiter.

Ich will damit nicht sagen, dass wir alle Notes Applikation in diesem Stil migrieren sollten. Es ist nur ein Beispiel, das in unserem Fall gut funktioniert hat. In anderen Fällen machen andere Technologien vielleicht mehr Sinn. Falls eine Application Server Infrastruktur vorhanden ist, kann diese auch mit verwendet werden und man kann auf Spring Boot verzichten.

Was ich sagen will ist, dass ich jedem Notes Entwickler sehr empfehle sich aktiv in den Entscheidungsprozess einzubringen, was zukünftig mit den Notes Applikationen geschehen soll. Ansonsten wird diese Entscheidung woanders getroffen und oft landen dann mit dem Produkt auch die zugehörigen Personen auf dem Abstellgleis und das wollen wir ja alle nicht.


Filed under: Development, IBM Notes/Domino, Vaadin

Domino Gruppen Management mit Hilfe von Webservices und einer Vaadin Applikation

11. September 2016 Posted by Stephan Kopp

Letzte Woche habe ich geschrieben, dass ich mich mit dem Vaadin Framework ein wenig auseinandersetzen wollte. Mittlerweile bin ich schon so weit, dass ich meine erste Applikation für einen Kunden beinahe fertig habe. Das war nur eine kleine Applikation, die einige Daten aus einer Domino Applikation darstellt und einen Status per Webservice wieder zurück in die Applikation schreiben kann. Das war nichts großartiges, hat mir aber Gelegenheit gegeben, mich mit der Materie näher zu befassen. Das Ergebnis hat mich überzeugt, sodass wir auch gleich die nächste Anforderung über diesen Weg umsetzen werden.


Das Ziel

Wir arbeiten für einen Kunden, der momentan weg von Notes migriert (wie so viele). Da eine komplette Abschaltung jedoch vermutlich noch Jahre oder Jahrzehnte dauern wird, benötigt der Kunde eine Möglichkeit, die bislang vorhandene Lösung um Gruppen im Domino Adressbuch zu verwalten, durch eine Self Service Web Applikation zu ersetzen.

Die Idee

Um möglichst flexibel für zukünftige Szenarien zu sein, wollten wir die Applikation Zweigeteilt implementieren. Der erste Teil besteht aus einer Domino Applikation, die die eigentliche Verwaltung der Gruppen übernimmt. Also das eigentliche ändern der Gruppen im Adressbuch, Validierung, Rechte Verwaltung, etc. Diese Funktionalität soll per Webservice zur Verfügung gestellt werden um sie aus externen Systemen komfortabel bedienen zu können. Die Schnittstelle soll dabei aber einfach genug sein, um sie verwenden zu können, ohne zu viel Know-How über das Domino Backend haben zu müssen. Es sollen also z.B. automatisch verschachtelte Gruppen erzeugt werden, wenn wir an irgendwelche Grenzen laufen, ohne dass ich selbst an so etwas denken muss. Ebenso sollten die Gruppen Mitglieder anhand ihrer SMTP Adresse verwaltet werden können, ohne dass der Vollhierarchische Notes Name bekannt sein muss.

Für diese Schnittstelle entwickeln wir dann auch ein unabhängiges Web Frontend, um die Gruppen Verwaltung komplett in einem Browser vornehmen zu können. Hierfür verwenden wir eine Standalone Vaadin Applikation. Die Vaadin Applikation könnte man auch als OSGi Plugin auf den Domino Server installieren, aber die eigenständige Variante befreit uns von jeglicher Abhängigkeit von Server Versionen, Zugriffsrechten oder ähnlichem. Die Authentifizierung wird direkt gegen das Active Directory gemacht, da zukünftig nichtmehr jeder Mitarbeiter auch automatisch einen Notes Account erhalten wird. Die Funktionalität der Gruppenverwaltung (primär für Applikationen) muß aber jedem zur Verfügung stehen.

Ein ähnliches Konzept haben wir für unseren User Manager verwendet und der hat sich schon bei vielen Kunden bewährt.

Vorteile

Die MVC (Model View Controller) ähnliche Trennung von Funktion und Interface bietet einige Vorteile. Zukünftig könnte die Gruppenverwaltung auch über weitere Prozesse oder Workflow Systeme angesprochen werden, da wir über standardisierte Webservice Schnittstellen kommunizieren. Ebenso könnte das Web Frontend weitere Aufgaben übernehmen, in dem wir dort weitere Schnittstellen zur Verwaltung weiterer Systeme integrieren.

Die Umsetzung

Ich kann hier leider nicht die ganze Applikation veröffentlichen, werde aber versuchen im Verlauf der nächsten Tage/Wochen den Fortschritt, die Erfahrungen und einige Code Beispiele zu posten.


Filed under: Development, IBM Notes/Domino, Vaadin

Domino Gruppen Management mit Hilfe von Webservices und einer Vaadin Applikation

11. September 2016 Posted by Stephan Kopp

Letzte Woche habe ich geschrieben, dass ich mich mit dem Vaadin Framework ein wenig auseinandersetzen wollte. Mittlerweile bin ich schon so weit, dass ich meine erste Applikation für einen Kunden beinahe fertig habe. Das war nur eine kleine Applikation, die einige Daten aus einer Domino Applikation darstellt und einen Status per Webservice wieder zurück in die Applikation schreiben kann. Das war nichts großartiges, hat mir aber Gelegenheit gegeben, mich mit der Materie näher zu befassen. Das Ergebnis hat mich überzeugt, sodass wir auch gleich die nächste Anforderung über diesen Weg umsetzen werden.

Das Ziel

Wir arbeiten für einen Kunden, der momentan weg von Notes migriert (wie so viele). Da eine komplette Abschaltung jedoch vermutlich noch Jahre oder Jahrzehnte dauern wird, benötigt der Kunde eine Möglichkeit, die bislang vorhandene Lösung um Gruppen im Domino Adressbuch zu verwalten, durch eine Self Service Web Applikation zu ersetzen.

Die Idee

Um möglichst flexibel für zukünftige Szenarien zu sein, wollten wir die Applikation Zweigeteilt implementieren. Der erste Teil besteht aus einer Domino Applikation, die die eigentliche Verwaltung der Gruppen übernimmt. Also das eigentliche ändern der Gruppen im Adressbuch, Validierung, Rechte Verwaltung, etc. Diese Funktionalität soll per Webservice zur Verfügung gestellt werden um sie aus externen Systemen komfortabel bedienen zu können. Die Schnittstelle soll dabei aber einfach genug sein, um sie verwenden zu können, ohne zu viel Know-How über das Domino Backend haben zu müssen. Es sollen also z.B. automatisch verschachtelte Gruppen erzeugt werden, wenn wir an irgendwelche Grenzen laufen, ohne dass ich selbst an so etwas denken muss. Ebenso sollten die Gruppen Mitglieder anhand ihrer SMTP Adresse verwaltet werden können, ohne dass der Vollhierarchische Notes Name bekannt sein muss.

Für diese Schnittstelle entwickeln wir dann auch ein unabhängiges Web Frontend, um die Gruppen Verwaltung komplett in einem Browser vornehmen zu können. Hierfür verwenden wir eine Standalone Vaadin Applikation. Die Vaadin Applikation könnte man auch als OSGi Plugin auf den Domino Server installieren, aber die eigenständige Variante befreit uns von jeglicher Abhängigkeit von Server Versionen, Zugriffsrechten oder ähnlichem. Die Authentifizierung wird direkt gegen das Active Directory gemacht, da zukünftig nichtmehr jeder Mitarbeiter auch automatisch einen Notes Account erhalten wird. Die Funktionalität der Gruppenverwaltung (primär für Applikationen) muß aber jedem zur Verfügung stehen.

Ein ähnliches Konzept haben wir für unseren User Manager verwendet und der hat sich schon bei vielen Kunden bewährt.

Vorteile

Die MVC (Model View Controller) ähnliche Trennung von Funktion und Interface bietet einige Vorteile. Zukünftig könnte die Gruppenverwaltung auch über weitere Prozesse oder Workflow Systeme angesprochen werden, da wir über standardisierte Webservice Schnittstellen kommunizieren. Ebenso könnte das Web Frontend weitere Aufgaben übernehmen, in dem wir dort weitere Schnittstellen zur Verwaltung weiterer Systeme integrieren.

Die Umsetzung

Ich kann hier leider nicht die ganze Applikation veröffentlichen, werde aber versuchen im Verlauf der nächsten Tage/Wochen den Fortschritt, die Erfahrungen und einige Code Beispiele zu posten.

Auf der Suche nach Alternativen: Vaadin + Spring Boot

4. September 2016 Posted by Stephan Kopp

Die ganze Diskussion über die Zukunft von IBM Notes/Domino ist sehr müßig und darauf habe ich eigentlich gar keine Lust mehr. Ich für meinen Teil beschäftige mich sehr gerne mit neuen Themen und schaue mich daher ganz automatisch immer auch nach Alternativen um.

Das Konzept von Node.js und vor allem in Kombination mit AngularJS gefällt mir sehr. Einige REST Services mit Anbindung an Domino Daten habe ich damit auch schon für Kunden umgesetzt. Ich bin aber ehrlich gesagt kein großer Freund von JavaScript. Mir persönlich fehlt einfach der klassische Ansatz der Objekt orientierten Programmierung, außerdem tue ich mir mit dem Oberflächen Design in HTML auch sehr schwer.

Zuletzt bin ich aufgrund eines Erfahrungsberichtes über das Vaadin Framework gestolpert und war auf den ersten Blick begeistert. Das Prinzip ist im Grunde sehr ähnlich zur klassischen Notes Entwicklung. Mit sehr wenig Aufwand halbwegs ansehnliche Business Applikationen zu entwicklen. Ja, Notes war damals auch durchaus ansehnlich. Was mich allerdings wiederum abgeschreckt hat, war die Notwendigkeit eines Applikationsservers. Sicher, man kann Domino verwenden und die Vaadin Applikation in ein OSGi Plugin packen, aber dadurch steckt man eigentlich wieder in genau der selben Zwickmühle wie jetzt auch. Man ist abhängig von Java Versionen, Server Upgrade Zyklen, etc. Wenn ein Kunde im großen Stil auf solche Applikationen setzen möchte, macht eine Server Infrastruktur mit Backup, Hochverfügbarkeit, Rechte Konzept, etc. natürlich Sinn. Die Flexibilität geht dabei aber verloren.

Die Node.js Applikationen, die ich für einen meiner Kunden entwickelt habe, war ein gutes Beispiel. Es war völlig egal auf welcher Technologie wir entwickeln, aber wenn ich als Voraussetzung einen Application Server genannt hätte, wäre es nicht mehr so egal gewesen. Dann hätte das eine Menge zusätzlichen Aufwand, Abstimmungen und Entscheidungen nach sich gezogen. Statt dessen habe ich einfach eine Node.js Applikation irgendwo als Windows Service konfiguriert und seit dem läuft die Applikation ohne Probleme. Ich war nicht abhängig von irgendwelchen Server Versionen oder sonst irgendwas. Alles was ich benötige, packe ich in meine Applikation.

Das Vaadin Framework alleine kann diese Anforderung nicht erfüllen. Vor einiger Zeit habe ich mich aber auch mit Spring Boot beschäftigt. Vaadin und Spring Boot in Kombination erfüllen auf den ersten Blick all meine Erwartungen. Mit Vaadin entwickle ich meine Applikation und das Frontend und über Spring Boot integriere ich quasi einen Application Server und viele weitere nützliche Dinge, wie z.B. eine Authentifizierung gegen ein LDAP Verzeichnis.

Ich habe aktuell zwei Projekte auf meiner ToDo Liste, für die genau dieses Konzept sinnvoll wäre. Falls es zeitlich möglich ist, würde ich diese beiden Projekte mal sozusagen als Testballon mit Vaadin und Spring Boot implementieren. Als Backend werde ich per REST API auf Domino Daten zugreifen und über Webservices komplexere Funktionen ansprechen. Meine Erfahrungen, ob das Experiment erfolgreich war, werde ich hier bei Gelegenheit erzählen…

Falls jemand schon Erfahrung zu dem Thema gemacht hat, würde ich mich über Feedback sehr freuen.

Auf der Suche nach Alternativen: Vaadin + Spring Boot

4. September 2016 Posted by Stephan Kopp

Die ganze Diskussion über die Zukunft von IBM Notes/Domino ist sehr müßig und darauf habe ich eigentlich gar keine Lust mehr. Ich für meinen Teil beschäftige mich sehr gerne mit neuen Themen und schaue mich daher ganz automatisch immer auch nach Alternativen um.

Das Konzept von Node.js und vor allem in Kombination mit AngularJS gefällt mir sehr. Einige REST Services mit Anbindung an Domino Daten habe ich damit auch schon für Kunden umgesetzt. Ich bin aber ehrlich gesagt kein großer Freund von JavaScript. Mir persönlich fehlt einfach der klassische Ansatz der Objekt orientierten Programmierung, außerdem tue ich mir mit dem Oberflächen Design in HTML auch sehr schwer.

Zuletzt bin ich aufgrund eines Erfahrungsberichtes über das Vaadin Framework gestolpert und war auf den ersten Blick begeistert. Das Prinzip ist im Grunde sehr ähnlich zur klassischen Notes Entwicklung. Mit sehr wenig Aufwand halbwegs ansehnliche Business Applikationen zu entwicklen. Ja, Notes war damals auch durchaus ansehnlich. Was mich allerdings wiederum abgeschreckt hat, war die Notwendigkeit eines Applikationsservers. Sicher, man kann Domino verwenden und die Vaadin Applikation in ein OSGi Plugin packen, aber dadurch steckt man eigentlich wieder in genau der selben Zwickmühle wie jetzt auch. Man ist abhängig von Java Versionen, Server Upgrade Zyklen, etc. Wenn ein Kunde im großen Stil auf solche Applikationen setzen möchte, macht eine Server Infrastruktur mit Backup, Hochverfügbarkeit, Rechte Konzept, etc. natürlich Sinn. Die Flexibilität geht dabei aber verloren.

Die Node.js Applikationen, die ich für einen meiner Kunden entwickelt habe, war ein gutes Beispiel. Es war völlig egal auf welcher Technologie wir entwickeln, aber wenn ich als Voraussetzung einen Application Server genannt hätte, wäre es nicht mehr so egal gewesen. Dann hätte das eine Menge zusätzlichen Aufwand, Abstimmungen und Entscheidungen nach sich gezogen. Statt dessen habe ich einfach eine Node.js Applikation irgendwo als Windows Service konfiguriert und seit dem läuft die Applikation ohne Probleme. Ich war nicht abhängig von irgendwelchen Server Versionen oder sonst irgendwas. Alles was ich benötige, packe ich in meine Applikation.

Das Vaadin Framework alleine kann diese Anforderung nicht erfüllen. Vor einiger Zeit habe ich mich aber auch mit Spring Boot beschäftigt. Vaadin und Spring Boot in Kombination erfüllen auf den ersten Blick all meine Erwartungen. Mit Vaadin entwickle ich meine Applikation und das Frontend und über Spring Boot integriere ich quasi einen Application Server und viele weitere nützliche Dinge, wie z.B. eine Authentifizierung gegen ein LDAP Verzeichnis.

Ich habe aktuell zwei Projekte auf meiner ToDo Liste, für die genau dieses Konzept sinnvoll wäre. Falls es zeitlich möglich ist, würde ich diese beiden Projekte mal sozusagen als Testballon mit Vaadin und Spring Boot implementieren. Als Backend werde ich per REST API auf Domino Daten zugreifen und über Webservices komplexere Funktionen ansprechen. Meine Erfahrungen, ob das Experiment erfolgreich war, werde ich hier bei Gelegenheit erzählen…

Falls jemand schon Erfahrung zu dem Thema gemacht hat, würde ich mich über Feedback sehr freuen.


Filed under: Development, IBM Notes/Domino

Applikations-Modernisierung als preiswerte Alternative

3. Mai 2016 Posted by Stephan Kopp

“Notes-Applikationen funktionieren dank guter Programmierung und individueller Entwicklung in den Unternehmen auch nach 15 Jahren noch. Daher herrschte in vielen IT-Abteilungen lange Zeit kein Druck, die Anwendungen zu überarbeiten oder neu zu entwickeln.

Dementsprechend sehen viele davon heute aus: Veraltet. Auch wenn sie nach all den Jahren noch einwandfrei funktionieren, fordern die Anwender heute zu recht moderne Applikationen mit erweitertem Funktionsumfang und frischem Look and Feel. Hohe Neuinvestitionen sind deshalb aber nicht unbedingt nötig, denn es gibt in vielen Fällen eine kostengünstige Alternative: Applikations-Modernisierung.”

weiter lesen…


Filed under: Development, IBM Notes/Domino

Easy updates for your Notes applications

31. März 2016 Posted by Stephan Kopp

I don’t like the whole template and design update/replace handling with Notes Applications. It’s ok when you have access to the server and application you want to update, but usually I don’t have such access. I’m developing for customers and many of them have no deep Notes knowledge. So in most of the cases, when I’m sending out new versions of applications, I get an answer like this: “Can we install the update together in a Teamviewer session?”.

This is not only the case for customers, but also for all these Notes to Exchange projects currently happening… I’m developing some tools for my colleagues working on those projects, but they usually don’t have much Notes know-how and I always have to update these applications by myself or in a remote session.

To get all these updates done more easily, I thought about a little update function for my applications. It should be easier to use than the standard process. Finally, yesterday I found a little bit of time to implement this. It is the first version, so there is still a lot of room for improvements and I also have a lot of more ideas for the future.

For the moment, that’s the code. One Agent and one script library. You just have to add them to your application to get the update function running. Agents won’t get updated to preserve settings and signatures. When executed using the actions menu, it asks for the source database, deletes all design elements (ATTENTION!!) of the current database except agents. At last it copies all design elements from the selected source database to the current one and your application should be updated to the new version.

Any recommendations, bug reports and contributions are welcome!

As always, use the code with caution and at your own risk.

Agent “VersionUpdate”

%REM
 Agent VersionUpdate
 Created Mar 30, 2016 by Stephan Kopp
%END REM

Option Public
Option Declare
Use "stdlib_update"

Sub Initialize
 Dim l_update As New DBUpdate
 Call l_update.funcUIStartUpdate()
End Sub

Script Library “stdlib_update”

%REM
 Library stdlib_update
 Created Mar 30, 2016 by Stephan Kopp
%END REM

Option Public
Option Declare

Public Const lsERR_NOTES_DBNOACCESS = 4060 
Public Const lsERR_NOTES_DATABASE_NOTOPEN = 4063

%REM
 <b>Class DBUpdate</b>

 <u>Created:</u>
 Mar 30, 2016 by Fritz & Macziol
 <u>Contributors:</u>
 Stephan Kopp, Fritz & Macziol
 <u>Description:</u>
 
%END REM
Public Class DBUpdate
 private m_source As NotesDatabase
 Private m_target As NotesDatabase
 Private m_session As NotesSession
 Private m_uiw As NotesUIWorkspace
 Private m_thisdb As NotesDatabase

 Sub New
   Set me.m_uiw = New NotesUIWorkspace
   Set me.m_session = New NotesSession
   Set me.m_thisdb = me.m_session.Currentdatabase
 
   'at the moment, target is always the current database
   Call me.funcSetTarget(me.m_thisdb.Server, me.m_thisdb.Filepath)
 End Sub
 
 %REM
 <b>Function funcSelectSource</b>
 <p><u>Description:</u>
 Ask for the source database and save it for further processing.
 </p>
 %ENDREM
 private Function funcUISelectSource
   On Error GoTo catch
   funcUISelectSource = False
 
   Dim aw As Variant
   aw = m_uiw.Prompt(13, "Select your source template", "Select the source database or template to use for update")
   If IsEmpty(aw) Then GoTo done
 
   funcUISelectSource = me.funcSetSource(aw(0), aw(1))
 
   If not funcUISelectSource Then
     MessageBox "Can't open your selected database, please check log for details"
   End If

  done:
   Exit Function
  catch:
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
 %REM
 <b>Function funcSetSource</b>
 <p><u>Description:</u>
 Set the source database used for the update procedure.
 </p>
 <p><u>Return value:</u>
 true if sucessfully opened the source database
 </p>
 %ENDREM
 private function funcSetSource(p_server As String, p_file As string) As boolean
   On Error GoTo catch
   On Error lsERR_NOTES_DBNOACCESS GoTo noAccess
   On Error lsERR_NOTES_DATABASE_NOTOPEN GoTo noAccess
 
   Set me.m_source = me.m_session.Getdatabase(p_server, p_file)
   If me.m_source.Isopen Then
     funcSetSource = true
   Else
     funcSetSource = false
   End If

  done:
   Exit Function
  catch:
   print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
  noAccess:
   funcSetSource = False
   Print "ERROR, Can't open database: " & p_server & "!!" & p_file
   GoTo done
 End Function
 
 %REM
 <b>Function funcSetTarget</b>
 <p><u>Description:</u>
 Set the target database to update with the source databse.
 ATTENTION! All design elements of this database will be overwritten!
 </p>
 <p><u>Return value:</u>
 true if sucessfully opened the target database
 </p>
 %ENDREM
 Private Function funcSetTarget(p_server As String, p_file As String) As Boolean
   On Error GoTo catch
   On Error lsERR_NOTES_DBNOACCESS GoTo noAccess
   On Error lsERR_NOTES_DATABASE_NOTOPEN GoTo noAccess

   Set me.m_target = me.m_session.Getdatabase(p_server, p_file)
   If me.m_target.Isopen Then
     funcSetTarget = True
   Else
     funcSetTarget = False
   End If

  done:
   Exit Function
  catch:
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
  noAccess:
   funcSetTarget = False
   Print "ERROR, Can't open database: " & p_server & "!!" & p_file
   GoTo done
 End Function
 
 %REM
 <b>Function funcStartUpdate</b>
 %ENDREM
 Public Function funcUIStartUpdate As Boolean
   On Error GoTo catch

   If not me.funcUISelectSource() Then
     'exit
     GoTo done
   End If

   'show message to the user with details and ask again if update should be started
   Dim aw As Variant
   aw = m_uiw.Prompt(PROMPT_YESNO, "Are you sure?", "Do you really want to start the update?" & Chr(13)_
 & "All design elements (except agents) in the target database will be overwritten!" & Chr(13)_
 & "Source: " & me.m_source.Server & "!!" & me.m_source.Filepath & Chr(13)_
 & "Target: " & me.m_target.Server & "!!" & me.m_target.Filepath)
    If aw <> 1 Then GoTo done

   'maybe later we can add an option mask to select some types of design elements to update
   'e.g. All, Script Libraries only, etc.

   'start update
   funcUIStartUpdate = me.funcStartUpdate()
   If funcUIStartUpdate Then
     Messagebox "Update successfull, please restart your Notes Client"
   Else
     MessageBox "Something went wrong, please try again or contact Stephan Kopp"
   End If

  done:
   Exit Function
  catch:
   funcUIStartUpdate = false
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
 %REM
 <b>Function funcStartUpdate</b>
 <p><u>Description:</u>
 Start the update process
 </p>
 %ENDREM
 Private Function funcStartUpdate As Boolean
   On Error GoTo catch
   funcStartUpdate = False
 
   'delete design elements
   funcStartUpdate = me.funcDeleteAllDesignElements()
   If funcStartUpdate = False Then GoTo done
 
   'copy design elements
   funcStartUpdate = me.funcCopyAllDesignElements()

   'do some checks?
   'send notify?
   'sign database?

  done:
   'print message
   If funcStartUpdate Then
     Print "Update successfull, please restart your Notes Client"
   Else
     Print "Something went wrong, please try again or contact Stephan Kopp"
   End If
   Exit Function
  catch:
   funcStartUpdate = false
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
 %REM
 <b>Function funcDeleteAllDesignElements</b>
 <p><u>Description:</u>
 Deletes all design elements in selected target database except agents.
 Agents won't be updated to preserve scheduling and signatures.
 </p>
 %ENDREM
 Private Function funcDeleteAllDesignElements As Boolean
   On Error GoTo catch
   funcDeleteAllDesignElements = False
 
   'create a note collection with all design elements except agents
   Dim l_nodecol As NotesNoteCollection
   Set l_nodecol = funcCreateNoteCollection(me.m_target)
   Print "Found " & CStr(l_nodecol.Count) & " design elements to delete..."

   Dim l_count As Integer
   Dim l_nodeid As String
   l_nodeid = l_nodecol.Getfirstnoteid()
   While l_nodeid <> ""
     l_count = l_count+1
 
     Dim l_doc As NotesDocument
     Set l_doc = me.m_target.Getdocumentbyid(l_nodeid)
     If not l_doc Is Nothing Then
       Print "deleting element " & CStr(l_count) & " of " & CStr(l_nodecol.Count)
       Call l_doc.Remove(true)
     End If
 
     l_nodeid = l_nodecol.Getnextnoteid(l_nodeid)
   Wend

   funcDeleteAllDesignElements = true
  done:
   Exit Function
  catch:
   funcDeleteAllDesignElements = False
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
 %REM
 <b>Function funcCreateNoteCollection</b>
 <p><u>Description:</u>
 Creates a notecollection used for delete and copy of design elements.
 </p>
 %ENDREM
 Private Function funcCreateNoteCollection(p_db As NotesDatabase) As NotesNoteCollection
   On Error GoTo catch

   Dim l_nodecol As NotesNoteCollection
   Set l_nodecol = p_db.Createnotecollection(True) 'select all
   l_nodecol.Selectacl = False
   l_nodecol.Selectagents = False
   l_nodecol.Selectdocuments = False
   l_nodecol.Selectprofiles = False
   Call l_nodecol.Selectalldatanotes(False)
   Call l_nodecol.Selectalladminnotes(False)
   Call l_nodecol.Buildcollection()

   Set funcCreateNoteCollection = l_nodecol
  done:
   Exit Function
  catch:
   Set funcCreateNoteCollection = nothing
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
 %REM
 <b>Function funcCopyAllDesignElements</b>
 <p><u>Description:</u>
 Copies all design elements from selected source db to target db except agents.
 Agents won't be updated to preserve scheduling and signatures.
 </p>
 %ENDREM
 Private Function funcCopyAllDesignElements As Boolean
   On Error GoTo catch
   On Error GoTo catch
   funcCopyAllDesignElements = False
 
   'create a note collection with all design elements except agents
   Dim l_nodecol As NotesNoteCollection
   Set l_nodecol = funcCreateNoteCollection(me.m_source)
   Print "Found " & CStr(l_nodecol.Count) & " design elements to copy..."

   Dim l_count As Integer
   Dim l_nodeid As String
   l_nodeid = l_nodecol.Getfirstnoteid()
   While l_nodeid <> ""
     l_count = l_count+1
 
     Dim l_doc As NotesDocument
     Set l_doc = me.m_source.Getdocumentbyid(l_nodeid)
     If Not l_doc Is Nothing Then
       Print "copy element " & CStr(l_count) & " of " & CStr(l_nodecol.Count)
       Call l_doc.Copytodatabase(me.m_target)
     End If
 
     l_nodeid = l_nodecol.Getnextnoteid(l_nodeid)
   Wend

   funcCopyAllDesignElements = True
  done:
   Exit Function
  catch:
   funcCopyAllDesignElements = false
   Print "ERROR: " & Error & " (" & CStr(Err) & " / Line: " & CStr(Erl) & ")"
   Exit Function
 End Function
 
End Class

Ideas for the future:

  • Update also Notes Agents, but save and restore all scheduling and other settings
  • Download updates from a hosted web service automatically
  • Download and apply updates automatically by a server agent in background

Filed under: IBM Notes/Domino

Ein Plädoyer für Lotus Notes (Teil 2): Das Lego Prinzip

21. März 2016 Posted by Stephan Kopp

…oder wie ich Java und Web Services durch Lotus Notes zu lieben gelernt habe.

Einige meiner Kollegen arbeiten schon seit längerem mit Webservices und haben unter anderem schon ein komplettes User Management für Domino und eine Kalender Schnittstelle für SAP entwickelt. Ich selbst fand das schon immer sehr interessant und zukunftsweisend, habe selbst aber noch nicht damit gearbeitet.

In den letzten Tagen habe ich mich jetzt endlich mal etwas intensiver mit dem Thema beschäftigt. Es ist faszinierend was man mit diesem Lego Prinzip alles erreichen und vereinfachen kann, wenn man es konsequent einsetzt.

Konkretes Fall Beispiel

Es geht um einen relativ großen Kunden, den ich hier nicht nennen möchte. Dieser Kunde migriert seit längerem weg von Lotus Notes. Mail wurde relativ schnell migriert und jetzt fehlt noch der ganze Rest.

Anfang des Monats haben wir dort die bereits erwähnten User Management Webservices live genommen um die Userverwaltung zu vereinfachen. Es werden also jetzt im Self Service Prinzip alle Notes IDs von den Anwendern selbst beantragt, weitere Daten aus dem internen Identity Management System nachgeladen und voll automatisch angelegt. Ein ähnlicher Prozess existiert für die Anlage von Outlook Accounts und Mailboxen, das ganze läuft aber parallel und wurde nicht in einen Prozess integriert. Soweit so gut, alles läuft nahezu perfekt, wir haben bis heute schon fast 200 User accounts in knapp 2 1/2 Wochen über den Prozess angelegt.

Das Problem

Über ein Problem sind wir jedoch gestolpert: Wir erzeugen die Notes IDs, legen sie in den ID-Vault und vergeben dabei ein Initial Passwort. Dieses Passwort senden wir dem User per Mail zu. Das sollte eigentlich kein Problem sein, da das Mail System ja Outlook ist und die User damit an die Passwörter ran kommen (sollte). Jedoch hat sich herausgestellt, dass das Anlegen der Outlook Postfächer in einzelnen Fällen durchaus etwas länger dauern kann und wir deshalb die Passwörter nicht einfach verschicken können sobald wir fertig sind. Ein einfacher Zeitversatz von x Stunden war auch wenig hilfreich, da es nicht nachvollziehbar war, wie lange das Anlegen auf Exchange Seite dauert.

Der Lösungsansatz

Im Laufe des Migrationsprojektes habe ich schon für verschiedene Applikationen per Java Code Verbindungen in Richtung Active Directory und Exchange programmiert. Deshalb wollte ich in unseren User Anlage Prozess einen Workflow Schritt einbauen, der überprüft ob das Outlook Postfach erfolgreich angelegt wurde und wir das Passwort verschicken können. Ich hätte das jetzt natürlich wieder per Java direkt in die Notes Applikation bauen können, es ist aber abzusehen dass wir diese und ähnliche Funktionen in Zukunft noch an vielen Stellen benötigen werden. Deshalb war es eine gute Gelegenheit das Ganze über einen Webservice zu implementieren um es auch für zukünftige Anwendungsfälle ohne große Programmierarbeit zur Verfügung zu stellen.

Was macht den Webservice Ansatz in diesem Beispiel besser?

Natürlich kann ich meinen Code soweit wiederverwendbar machen, dass ich ihn recht einfach in unterschiedliche Applikationen integrieren kann. Es ist aber immer nur Code, den ich wieder verwende. Webservices gehen hier einen Schritt weiter, ich verwende wirklich einen Service, der sehr viel mehr als nur Code zur Verfügung stellt. In unserem konkreten Beispiel greifen wir nicht auf das interne AD, sondern auf das des externen Betreibers der Exchange Umgebung zu. Hierfür benötigen wir Zugangsdaten, Firewall Freischaltungen und weitere Details wie die richtige Searchbase um die User Accounts zu finden. Für jede Applikation muss ich also die Firewall ändern lassen und die Möglichkeit schaffen Zugangsdaten und Optionen sicher zu hinterlegen. Das ist nicht wirklich praktikabel.

Der Webservice Ansatz bietet eine Möglichkeit diesen Zugriff komplett als Service anzubieten. Ich muss also nichts wissen über die weiteren Abhängigkeiten wie Firewall, Zugangsdaten, welche Searchbase ich benötige, etc. Ich greife von meiner Applikation nur auf einen Webservice zu, übergebe als Parameter eine E-Mail Adresse und bekomme ein Ja oder Nein zurück, ob das Outlook Postfach angelegt ist oder eben nicht. Diesen Webservice kann ich dann wirklich sehr einfach in alle Applikationen integrieren, sei es nun eine Notes Applikation oder auch externe Applikationen. Den Zugriff auf meinen Webservice und damit auf die dahinter liegenden Daten kann ich schnell und einfach anhand der Domino ACL steuern und muss nicht die Zugangsdaten an x Stellen hinterlegen.

Ganz konkret sieht eine Integration des Webservices in meinen LotusScript Code genau so aus:

Dim webservice As New ActiveDirectoryWebservice
Dim isExchangeEnabled As Boolean
isExchangeEnabled = webservice.isExchangeEnabled("email@company.com")

Das ist sehr einfach in jeder beliebigen Applikation einzusetzen. Falls es Bug fixes oder Änderungen gibt, muss ich das nur im Webservice machen und nicht in jeder einzelnen Applikation die diesen nutzt.

Java und Webservices in Lotus Notes Applikationen

Ich arbeite schon länger mit Java in Notes Applikationen. Mir gefällt hier vor allem die optimale Nutzung der jeweiligen Vorteile. Java bietet eine Unmenge von Möglichkeiten um in Notes Applikationen sinnvoll zu arbeiten, aber vor allem auch recht einfach auf externe Systeme und Daten zuzugreifen. An Notes Applikationen gefällt mir die Verkapselung in eine NSF und die einfache Datenstruktur und das vorhandene Security Modell. Beides Zusammen bietet viele Vorteile. Ich entwickle komplexe Notes Applikationen und Java Code, aber trotzdem genügt es die NSF zu sichern oder auf einen anderen Server zu kopieren.

Das Manko das ich allerdings habe, ist die schlechte Verbindung von Java und LotusScript. Ja, ich kann Code der jeweils anderen Welt ausführen und integrieren, aber das ist immer sehr speziell und auch Fehler anfällig. Viel besser gefällt mir der Gedanke der Micro Services, also einzelne Teile der eigenen Applikation als Service anzubieten und diesen dann entweder innerhalb der Applikation oder auch von Außen zu verwenden. So kann ich z.B. einzelne Funktionen in Java oder LotusScript entwickeln und als Webservice miteinander verbinden.

Dadurch entsteht das eingangs erwähnte Lego Prinzip. Ich habe viele kleine Teile, die ich schnell und einfach zusammen fügen kann. Zunächst macht es natürlich etwas mehr Arbeit diesen Service Gedanken konsequent umzusetzen, aber langfristig bietet es enorme Vorteile. Die einzelnen Applikationen werden unabhängiger und einfacher zu pflegen und anpassbarer. Kommt man z.B. irgendwann an einen Punkt, an dem man für einzelne Applikationen die Plattform wechseln möchte (oder muss), bietet das enorme Vorteile. Einzelne Legosteine werden auf neue Systeme portiert und für die restlichen ist das nichts anderes als ein Wechsel der URL des Webservices, oder nichtmal das wenn man mit redirect URLs oder ähnlichem arbeitet.


Filed under: IBM Notes/Domino

IBM Connect 2016 – Meine Meinung als daheim gebliebener

3. Februar 2016 Posted by Stephan Kopp

Ich bin dieses Jahr nicht auf der Connect formerly known as Lotusphere, kann mir also meine Meinung leider nur aus zweiter Hand bilden. Alles was man so über Twitter und diverse Blogs erfährt klingt wie jedes Jahr ganz toll, innovativ und zukunftsweisend und alle sind wiedermal total begeistert. “The new way to work” eben, E-Mail neu erfunden und viel besser sowieso weil jetzt alles Social ist, miteinander verbunden wird und Watson einem hilft eine Einladung zu verschicken, weil mir das sonst Stunden wenn nicht sogar Tage meiner Lebenszeit rauben würde.

Aber ganz ehrlich, welcher Kunde möchte denn seinen Mitarbeitern eine komplett neue Arbeitsweise beibringen (müssen) nur um ein paar E-Mails zu verschicken? Alle Systeme ineinander zu verzahnen und zu verbinden klingt ja vielleicht nach einer guten Idee, aber meiner Meinung nach verliert man dadurch auch einen Großteil der Flexibilität. Man muss die gesamte Plattform verwenden um überhaupt einen Vorteil davon zu haben. Dazu gehört dann auch diese Plattform für Dinge zu benutzen, die in anderen Systemen eigentlich besser aufgehoben wären. Sobald man z.B. für die ToDo Verwaltung in einzelnen Teams andere Systeme verwenden will oder muss ist der ganze Vorteil schon wieder hinfällig.

Anfang letzen Jahres habe ich IBM Verse eine Zeit lang produktiv benutzt und fand es sehr gut. Ein gelungener, auf das wesentliche reduzierte, web basierter Mail Client eben. Einige nette Features und eine gelungene Suchfunktion, aber wirklich der versprochenen “New way to work”? Wohl kaum… Seit einigen Monaten arbeite ich nun mit der standard Apple Mail.app auf meinem Mac und habe mich auch damit arrangiert. Ich kann meiner eigentlichen Arbeit nachgehen und organisiere mich ausserhalb des Mail Clients mit ToDo Listen und Projektmanagement Tools, etc. Was ich übrigens auch mit Verse getan habe, denn ab einer gewissen Komplexität geht es eben über einfache Wiedervorlagen oder “auf diese Mail muss ich noch antworten” hinaus.

Ich benutze für einzelne Aufgaben auch einzelne Tools und suche mir dafür jeweils das für mich beste aus (sofern ich die Wahl habe). Ich muss meine ToDo’s nicht in Connections verwalten und mich ständig damit rumärgern mich selbst zwingen zu müssen meine Arbeitsweise zu verändern nur um hin und wieder mit meinen Kollegen zusammenarbeiten zu können (die sich dann ebenfalls umstellen müssten). Das können andere Tools speziell für dieses Thema sehr viel besser lösen und jeder einzelne oder jedes Team sucht sich dafür die jeweils beste Lösung. Diese einzelnen Systeme kann ich dann natürlich auch sehr viel einfacher ersetzen sobald ich ein besseres oder günstigeres gefunden habe, aber das ist natürlich nie im Sinne der Hersteller.

Ein gutes Beispiel ist das Mail System. Momentan wechseln immer mehr Kunden in Richtung Microsoft, sei es nun Exchange oder Office 365. Wenn die Trennung von Mail und Applikationen durch so eine Migration weg von Notes/Domino einmal vollzogen ist, sind zukünftige Wechsel auf günstigere Plattformen sehr viel einfacher und man macht sich auch nicht so abhängig von einem Hersteller. Mail ist nur ein Tool unter vielen das für die tägliche Arbeit in Unternehmen genutzt wird und entsprechend einfach ist es meistens auch dieses eine Tool zu ersetzen.

Die Strategie von IBM und anderen Herstellern ist klar, je mehr Abhängigkeiten ich schaffe, desto schwerer wird es den Kunden gemacht einzelne Bestandteile zu ersetzen. Diese Strategie hat ja auch lange Jahre für Lotus Notes gut funktioniert. Indem man Applikationen und Mail sehr eng verzahnt hat, macht man den Kunden den Umstieg schwerer, aber endlos funktioniert so etwas eben nicht.

Ich finde die Demos toll in denen die schöne neue Arbeitsweise bei IBM gezeigt wird, wie alle Systeme miteinander verbunden sind und wie einfach einem das die tägliche Arbeit machen kann. Aber welche Unternehmen steigen schon in dieser massiven Form auf das IBM Portfolio und diese Strategie ein? Ebenso sollte man sich fragen, ob der Nutzen einer solchen ganzheitlichen Strategie und Abhängigkeit wirklich so groß für das eigene Unternehmen ist um diesen enormen Zeit- und Kostenaufwand zu rechtfertigen?

Immerhin muss die Infrastruktur für all die Systeme geschaffen werden sofern man nicht in die Cloud möchte. Zusätzlich muss eine Menge internes Marketing getrieben werden um die richtigen Führungskräfte vom Nutzen zu überzeugen und letztendlich muss jedem einzelnen Mitarbeiter beigebracht werden, wie die Systeme zu benutzen sind damit sich dann auch ein gewisser Vorteil einstellt.

Wie schwer so etwas sein kann, weiß jeder der einem langjährigen Notes User versucht hat zu erklären, dass die Performance Probleme seines Notes Clients daran liegen, dass er alle Mails der letzten 15 Jahre unbedingt und zwingend in seiner Inbox vorhalten muss. Da zählt auch das Argument, er könne seine täglich Arbeit viel schneller erledigen, wenn er einfach den alten Kram in ein Archiv oder zumindest raus aus der Inbox verschiebt kein Stück! Denn das würde bedeuten er oder sie müsste sich eine neue Arbeitsweise angewöhnen und wie schwer so etwas fällt, hat wohl jeder schon am eigenen Leib erfahren.

Wenn ich ehrlich bin, ist mir dieser Beitrag doch etwas kritischer geraten als ich das eigentlich beabsichtigt hatte. Das ist aber meine ehrlich Meinung und nachdem ich eigentlich wiedermal nur Lobeshymnen gelesen habe, wie toll die IBM Strategie und die ganzen Produkte jetzt sind oder bald werden, hielt ich es für nötig auch mal ein kleines Gegengewicht zu bilden :-)

Diesen Beitrag aber bitte nicht falsch verstehen, ich bin ein eingefleischter Notes Entwickler und stehe immer noch voll hinter der Plattform und bin auch überzeugt dass diese in Zukunft noch lange ihre Vorteile, zumindest als Applikationsplattform ausspielen könnte wenn IBM das richtig anstellen würde. Aber ich als Entwickler überlege auch bei jeder Anfrage, ob Notes das richtige System ist oder ob eine andere Plattform nicht sinnvoller wäre. Es gibt nichts schlimmeres als Systeme und Plattformen für etwas verwenden zu müssen, wofür sie eigentlich nicht geeignet sind.


Filed under: General, IBM Notes/Domino, IBM Verse

Ein Plädoyer für Lotus Notes (Teil 1)

19. Januar 2016 Posted by Stephan Kopp

Ich entwickle jetzt schon seit vielen Jahren im Lotus Notes Umfeld und ja, ich sage weiterhin Lotus Notes!

Man macht sich so seine Gedanken, ob das alles noch Zukunft hat und schaut sich immer mal wieder in fremden Gefilden um. Ich habe auch schon C#, iOS und Java Applikationen entwickelt, muss aber sagen dass mir Lotus Notes immer noch am meisten Spaß macht. Ich meine damit nicht die Programmiersprache LotusScript und schon gar nicht den Eclipse Designer Client. Da gefallen mir Xcode und sogar Visual Studio um Welten besser. Was mich überzeugt ist die Plattform Lotus Notes.

Ich benutze längst nicht alle neuen Features wie OSGI Plugins, Ajax, Dojo, etc. XPages gehen mir auch nicht wirklich leicht von der Hand und ich kann noch nichtmal alles aufzählen was man noch so alles an “modernem Kram” mittlerweile verwenden kann. Aber es ist immer wieder das Gesamtpaket das mich überzeugt und vor allem die schnellen Ergebnisse die man erzielen kann.

Ein konkretes Beispiel ist einer meiner Kunden, der letztes Jahr weg von Notes migriert ist. Bzw. jetzt zwar ein anderes Mail System hat, aber weiterhin die Domino Server für die Applikationen betreiben muss (so wie es eben bei den meisten Migrationen läuft, aber das ist eine andere Geschichte…).

Wir haben zur Unterstützung, Planung und Vorbereitung ein Tool entwickelt. Das war natürlich eine Lotus Notes Applikation. Soweit hat das ja Sinn gemacht, die meisten Vorbereitungen und Tasks liefen auf Domino ab, also nimmt man diese Plattform. Im Verlauf des Projektes sind die Anforderungen aber immer weiter abgedriftet. Von einfachen “schau vorher mal ins AD, ob die SMTP Adresse dort doppelt vorhanden ist” bis hin zu komplexeren Überprüfungen und sogar Änderungen die wir im AD gemacht haben. Bei einigen Anforderungen habe ich sogar mehrfach in den Raum gestellt, ob man dafür nicht lieber eine Applikation auf den zukünftigen Systemen entwickeln sollte, immerhin soll Notes ja abgelöst werden! Aber immer wieder wurde die Lösung auf der Notes Plattform implementiert.

Das kann natürlich mehrere Gründe haben, mir fallen für dieses konkrete Beispiel drei ein:

  1. Die Plattform ist ja schon da
  2. Die Entwickler mit den richtigen Ideen sind auch da
  3. Die Implementierung geht schnell und verzögert das Projekt nicht

Wenn wir von einer Lösung mit anderen Mitteln gesprochen haben, hörten wir meistens von PowerShell oder irgendwelchen Sync Scripten. Aber von einer richtigen Applikation war nie die Rede und schon gar nicht mit vertretbarem Aufwand und Zeitrahmen. Das Ganze musste natürlich auch irgendwie verwendbar sein und einfach zu handhaben. PowerShell ist sehr mächtig, aber an sich nur eine Kommandozeile und man muss sehr genau wissen was man tut. Eine Oberfläche von der aus ich die einzelnen Funktionen (egal welche Systeme dahinter stecken) bedienen kann ist in einem solchen Projekt Gold wert. Also sind immer weitere Funktionen in unser Tool implementiert worden. Sogar die PowerShell Scripte wurden in unser Tool integriert um sie einfacher managen zu können.

Es zeigt sich also, dass selbst bei einer Migration weg von Lotus Notes weiterhin die Vorteile der Plattform zum tragen kommen:

  • Die Server sind vorhanden und skalierbar
  • Security ist gewährleistet
  • Backup ist vorhanden
  • Usermanagement ist vorhanden
  • Man ist nicht auf Domino beschränkt, sondern kann schnell und einfach auf alles möglich zugreifen

Was mich nur sehr traurig stimmt ist die Tatsache, dass solche Argumente meistens nie gehört werden wenn es um die Entscheidung für oder gegen Lotus Notes geht…


Filed under: IBM Notes/Domino