Posts tonen met het label Lotus_Domino. Alle posts tonen
Posts tonen met het label Lotus_Domino. Alle posts tonen

16 dec 2008

Here we go again...

 

In al die jaren dat ik nu met Lotus Notes/Domino werk zijn er altijd weer geruchten dat het platform zijn langste tijd gehad heeft, dat concurrerende producten als SharePoint en anderen beter zijn etc etc.

Ook bij de ABN loop ik nu weer tegen dezelfde sentimenten aan. Toch kiezen we voor ons nieuwe project weer voor Lotus Notes/Domino. Reden: er is geen alternatief dat binnen de deadline die we hebben dezelfde functionaliteit en penetratie kan bewerkstelligen. Laten we nou eens ophouden met het zeuren over Domino en gebruik gaan maken van de groete hoeveelheid functionaliteit die het platform ons geeft. Met name in deze economische moeilijke tijden is het leveragen van bestaande software binnen een onderneming een zinnige actie.

Hieronder een artikel uit de CIO.com van afgelopen maand. Al vele malen gezien en gehoord, nu maar hopen dat IT managers het ook eindelijk gaan lezen.....

 

From: www.cio.com

7 Things IT Managers Should Know About Lotus Notes

– Thomas Duff, CIO

December 09, 2008

When the phrase "Lotus Notes" is mentioned in the halls of your IT department, you probably hear a range of responses, from "That's still around?" to "Notes is a critical part of our application portfolio, and we couldn't deliver value without it." For a significant enterprise collaboration application that's been around for more than two decades, it's surprising that so many IT professionals still have a difficult time explaining just what Notes and Domino is, what it does and how it fits into the IT infrastructure.

Lotus Notes is the "Ginsu knife" of application development. It slices, it dices, it cuts both leather and tomatoes. This extreme flexibility means that Notes doesn't fit neatly into a single software category in either its definition and functionality. But it also means that your investment in Notes and Domino can deliver more than "just e-mail" to your organization. Are you taking advantage of what it can do?

1. Notes is more than "just e-mail."

With near-universal use of e-mail as a corporate communication tool, Notes users spend much of their time in their mail file. This tends to lead to the never-ending debate of which is better: Lotus Notes or Microsoft Exchange. In reality, that's an unreasonable comparison.

If you're using Lotus Notes as "just" an e-mail application, you could do much better (and save a lot of money). Download an open-source mail transfer agent (MTA) like Sendmail and an open-source mail client like Thunderbird, and you have e-mail. Historically, the Notes mail client has not been "best-in-class" (to put it nicely), and as such has suffered in comparisons to Microsoft's Outlook mail client. But it's what Lotus Notes offers beyond the mail client that makes it so valuable to the enterprise.

In addition to its e-mail capabilities, Lotus Notes is also a full-featured rapid application development platform. Notes uses a semi-structured data store that allows for the creation and processing of "documents" (which are similar to records in relational database systems). Documents are displayed to the user as "forms," which reveal the application's pertinent fields. This means that you can use Notes to build electronic workflow applications that can create requests, notify approvers via e-mail and process the requests once the approval is granted.

For instance, an expense reporting application built on the Notes platform could allow users to enter their expenses, route the document to their supervisors for approval (perhaps with an additional level of approval if the amount is over a certain limit), and then generate a notice to the Accounting department to reimburse the user.

Another example might be an information request form on your corporate website. Once the form is completed and the "submit" button is clicked, Notes could route the request to the correct department and track its fulfillment.

2. Notes and Domino is a powerful (and open) application development platform.

A goal of many organizations want to avoid getting too closely tied to any single vendor or technology. If not careful, the proprietary nature of the technology can limit the future choices of the company when it comes to upgrading or integration with other platforms.

Applications built for Notes incorporate a wide variety of open standard technologies, such as JavaScript, HTML, Java and LotusScript (a close relative of Visual Basic). Developers who already know some of these technologies can quickly come up to speed in Notes application development, producing complex workflow applications very little time.

To build Notes applications, developers use the Designer client to create and modify all the different parts of a Notes application, such as forms, views and agents. It can be viewed and tested in the Notes client or in a web browser for instant feedback. In terms of productivity, developers get a lot done with very little effort.

But useful Notes applications don't always require attention from the IT department. It's common in Notes for power users to develop applications that meet a tactical need, with little assistance from IT.

On the other hand, Designer's easy-to-use interface historically can be a frustration at times to high-end developers. The latest version of Notes/Domino (version 8) has an Eclipse-based IDE, making it easy for some of those developers—for whom Eclipse is their native environment—can easily grasp the environment and produce high-quality applications.

3. Notes is the client, Domino is the server.

Notes, Domino, Notes/Domino... What is this software really called, anyway?

The full name of IBM's software offering is IBM Lotus Notes and Domino. Lotus Notes refers to the Notes client, which is installed on the user's personal computer, and is used to access both mail files and Notes applications.

Domino is the server component of the Notes/Domino team, and it runs on a variety of operating systems. When a user connects to the server replica of their mail database using the Notes client, it's the Domino server that is serving up the content from the user's mail database. The Domino server is also responsible for controlling access and security to mail files and application databases.

The Domino server has a robust security model that can control access in Notes documents down to the field level. This includes both user access based on the user's Notes ID, as well as database and network traffic encryption.

Notes and Domino run on a number of operating systems: from an Intel Pentium 2 desktop machine to the "big iron" of IBM mainframes. The Domino server is available for Windows Server 2003, IBM AIX, Novell SUSE and RedHat Linux distributions, Sun Solaris, IBM System i, IBM System z and IBM z/OS. This attention to multi-platform support means that IT departments can use existing servers and data center architecture to consolidate hardware and keep a tight rein on costs. The Notes client is supported on Windows XP, Windows Vista, Mac OS, and SUSE and RedHat Linux desktop distributions.

4. Notes has a long history of backward compatibility.

One of the most impressive features of Notes is its level of backwards compatibility between versions. It's possible to take a Notes application built in version 1 back in 1989, and run it in the current Notes 8 release without any need to convert or rewrite the application. We're not talking about showcase "proof point" applications, but real-world legacy applications which are still giving good value to the organization and do not need any feature enhancements. Few software applications can boast about compatibility across versions like Notes can. This means your application development investment continues to return value long into the future.

Often, a Domino server migration consists of running the install utility for the latest version. In as little as 15 minutes, the server is upgraded. All the applications built in prior versions of Notes still continue to run with no conversions necessary.

5. Replication lets you work both online and offline.

Today's knowledge workers don't come to the office at 9:00 am and leave at 5:00 pm. They are "always on," and they need to access their data whether or not a network connection is available. The Notes client accommodates this requirement by replicating data between server and local versions of your mail files and applications. It's among Notes oldest and most cherished features—for good reason.

When a network connection exists, Notes synchronizes data between the server and client. The replication occurs at the field level, so two people can update different fields in the same document (such as an invoice or travel request); the server merges the updates so that the document shows both sets of changes. Frankly, this is slick. Nobody else has ever achieved this level of WayCool synchronization sophistication, particularly because it's so trouble free that the feature is usually invisible.

Notes e-mail users replicate their mail files to local versions on their laptops, so they can be productive offline. When they once again connect to the network, all the changes are replicated with the server and messages are sent to the appropriate people. That applies to Notes databases and applications, not just e-mail.

6. Notes applications can be built for both the Notes client and for Web browsers.

Part of the flexibility of Notes is that you can build both Notes client applications and applications that are accessed through a Web browser. Domino has a built-in HTTP server that renders content based on normal HTTP requests. Domino takes the application's design and data and renders it into HTML "on the fly" for the browser. That's one quick way to migrate an in-house legacy application to an intranet or extranet.

Because you can deliver both Notes client and browser content from the same source, your application development investment can pay off with greater flexibility for the end users.

7. Notes is "not dead."

Notes has been declared dead multiple times. When the Web came along, some opined Notes would be replaced by web browsers. When Java became the hot new development platform, many felt that Notes would be replaced by a full-fledged Java Enterprise architecture. And now that Microsoft has a popular collaboration offering in SharePoint, some are again predicting the demise of Notes.

Excuse me if I don't hold my breath waiting for that to happen....

Not only has Notes survived—it has adapted and thrived. IBM added Web capabilities to the Domino server long ago, when intranet applications became a business requirement. Java became another language supported in the Notes programming environment. Notes Domino version 8 added the ability to build composite applications. That is, these applications allow developers to blend data and functionality from both Notes and non-Notes applications so that the end of Notes and the start of a different application becomes seamless. For instance, an SAP application can interact with a Notes application, sharing and updating data between the two platforms.

With the rapid pace of innovation that's demanded these days, it's tempting to be on the hunt for that "silver bullet" that solves all your technology and business problems. Unfortunately, silver bullets don't exist in our field. But rather than being distracted by the latest shiny object, step back and ask yourself if you're getting the most out of what you already have. IBM Lotus Notes and Domino is far more than "just e-email," and you should be squeezing out every last dollar from your investment.

Thomas "Duffbert" Duff is a software developer with nearly 30 years of experience in IT, covering everything from punch cards and tape drives to cloud computing. When he is not developing Notes-based collaboration applications for a large health insurance company, he's usually reading and reviewing books on his blog, Duffbert's Random Musings. He also speaks at software conferences.

© 2008 CXO Media Inc.

18 okt 2008

Sync Lotus Domino calendar met Google calendar

Calendaring & Scheduling is in de huidige drukke maatschappij erg belangrijk geworden. Het bijhouden en afstemmen van ieders agenda is absoluut noodzakelijk geworden. Natuurlijk is het dan aan te raden om deze agenda digitaal bij te houden. Ieder mail pakket voorziet ook in dergelijke functionaliteit. Bijvoorbeeld Outlook, Lotus Notes en anderen kennen al jaren dzeze functionaliteit. Ook google kent deze functionaliteit met Google calendar. Een erg handige manier om je agenda met anderen te delen.

Wat ik echter vaak mis is de mogelijkheid je werk agenda te synchroniseren met je thuis agenda. Dus de mogelijkheid om het thuisfront op de hoogte te stellen van je werkzaamheden en je bezigheden.

Op het werk gebruik ik natuurlijk Lotus Domino. Het zou toch mooi zijn als ik de agenda daarvan zou kunnen synchroniseren met Google calendar.

Binnen Google calendar heb je de mogelijkheid extra kalenders aan te maken. Het is mijn bedoeling zo'n extra kalender te synchroniseren met Lots Domino.

Hiervoor heb ik een java proces geschreven die alle Lotus Domino calendar items vertaald in iCal formaat. Vervolgens maak ik gebruik van opensource software, GCaldaemon, om deze iCal te synchroniseren met Google.

Op dit moment ben ik aan het worstelen met recurrent events, maar dat gaat zeker werken.

Een mooi oplossing vind ik zelf:-)

Performance

Bij de ABNAMRO ben ik bezig met een proces management applicatie die in Lotus Domino gebouwd is.

Deze applicatie bestaat uit twee databases, een productie en een archief database. Met name het archief heeft een forse omvang: 22 Gig. 90% Van deze omvang wordt ingenomen door attachments.

De applicatie kent ongeveer 500 gebruikers, en er worden per dag een paar duizend transacties op de database gedaan.

De gebruikers bevinden zich door het hele land en zijn verdeeld in 5 regio's

De applicatie managed alle processen omtrend CCU en top MKB klanten. Aan de hand van de doorlooptijden van processen worden prestaties zichtbaar gemaakt en deze prestaties vormen de basis om afdelingen af te rekenen op hun funtioneren.

Nu wil het geval dat er veel klachten zijn met betrekking tot de performance van het systeem.

Een van mijn opdrachten is om deze performance te verbeteren. Hiervoor heb ik reeds de volgende stappen ondernomen:

  • De applicatie verhuisd naar twee nieuwe clustered servers.
  • "Load balancing" met behulp van een stukje javascript toegepast.
  • Applicatie functies herschreven zodat ze efficienter worden.
  • Het archief verkleind door oude documenten te verwijderen
  • Alle attachments in het archief gezipped
  • Views geoptimaliseerd
  • Controle uitgevoerd op collations
  • Network load balancing en failover in gang gezet

Toch zijn er nog steeds gebruikers die de performance als onvoldoende ervaren. Nadat ik zelf naar een van de regio's ben gegaan moet ik ze daar gelijk aan geven. Het gebruik van de applicatie is daar ook erg traag maar het hele netwerk is in de desbetreffende regio traag. Het openen van bijvoorbeeld nu.nl kan zomaar enkele sec. duren.

Blijkbaar hebben de gebruikers in de regio dus last van netwerk latency of een te kleine bandbreedte. Om het een en ander inzichtelijk te maken heb ik een stukje code geschreven en die via mail naar de gebruikers gestuurd. Deze code meet de netwerk Latency dmv het uitvoeren van een aantal pings op de twee domino servers. Het resultaat wordt vervolgens weer terug gestuurd naar mij zodat ik de informatie kan verwerken. Dit wil ik even een weekje volhouden en dan kijken wat er uit komt.

Iemand nog andere iedeeen om de performance te verbeteren??

2 sep 2008

Lotus Notes Traveler

Lang geleden had ik een BlackBerry als mobile device. Deze heb ik in moeten leveren toen ik wisselde van werkgever. Nu is dat niet heel erg want mobile devices zijn er genoeg en met mijn huidige Sony Ericsson pi1 kan ik heel goed uit de voeten.

Toch mis ik de BlackBerry wel. Reden hiervan is de push mail die je met de BlackBerry tot je beschikking hebt.

Ik heb allerlei middelen geprobeert deze functionaliteit op mijn eigen SonyEricsson te dupliceren. Zo heb ik een Java proces geschreven die alle ontvangen mail als SMS naar mijn telefoon stuurde. Dit was echter geen succes. Berichten werden afgekapt vanwege de maximale lengte van SMS berichten. Bovendien liepen de kosten al snel uit de hand.

Een volgende stap was het installeren van de IMAP taak op de Domino server. Met behulp van de ingebouwde IMAP client op de SonyEricsson kon ik toen periodiek mijn mail ophalen. Het is echter geen "push".

In Lotus Domino 8.01 heb je nu een andere mogelijkheid. Deze heet Lotus Notes Traveler. Een additioneel stukje software die op de server geinstalleerd moet worden en....... de domino server heeft de mogelijkheid om mail te paushen naar mobile devices. Helaas is dit alleen mogelijk als je mobile device Windows Mobile 5/6 als OS heeft. Mijn SonyEricsson valt daarmee buiten de boot :-(

Toch heb ik, voor een aantal collega's met een Windows Mobile device, Lotus Notes Traveler geinstalleerd. Na een vlekkeloze next, next, finish installatie ( pas op: niet automatisch je http configuratie laten aanpassen als je al gebruik maakt van internet site documents!!) en het openen van de firewall voor een specifieke tcp poort, werkte het als een zonnetje.

Traveler word geinstalleerd met een website waar de mobile devices de Traveler client kunnen downloaden. Op deze website kun je de juiste versie van de client kiezen, afhankelijk van de versie van het OS die er draait, en de software wordt geinstalleerd. Allemaal erg eenvoudig. Na de installatie is Traveler geintegreerd in je mobile device en ben je push mail enabled.

Tot op heden werkt het als een zonnetje! 

20 jul 2008

IMAP mail mobiele device

Bij mij oude werkgever was ik verwend met het ontvangen van pushed mail op mijn BlackBerry. In ons eigen bedrijfje hebben we deze faciliteiten echter niet. Eigenlijk mis ik dat best. Tijd om te zoeken naar alternatiefen.

Het eerste alternatief was een java agent die me een SMS stuurde van een nieuw ontvagen e-mail. Dit werkte redelijk maar je miste toch informatie omdat alleen het Subject en slechts een deel van de Body doorgestuurd werden.

Sinds kort hebben we echter eigen servers waar ik beheerder van ben. Dat geeft je de mogelijkheid om de Lotus Domino server zo te configureren dat hij geschikt is voor het serveren van mail naar mobiele devices. Ik heb het specifiek over IMAP. IMAP het broertje/zusje van POP3,is een prachtig protocol en de meeste mobiele devices hebben wel een mail client aan boord die IMAP ondertsteunt.

Het aanzetten van IMAP op de Domino server is heel eenvoudig en goed gedocumenteerd in de Admin Help van Domino. Hou er even rekening mee dat je poort 143, de standaard IMAP poort, openzet op je firewall.

Voor het verzenden van mail moet het Mobiele device gebruik maken van een SMTP server. Hij zou in theorie gebruik kunnen maken van de SMTP server die op dezelfde Lotus Domnio server draait. Om Mobiele gebruikers dan te differentieren zodat ze mogen relayen op de server, zou je Authenticatie op SMTP aan kunnen zetten en aangeven dat "Authenticated users are allowed to relay". Helaas werkt deze setting niet als je ook allerlei blacklists en whitelists ingesteld hebt. Deze wil je ook niet uitzetten omdat de kans dat je SMTP server een open relay wordt, daarmee exponentieel toeneemt. Je kan dus eigenlijk geen gebruik maken van dezelfde SMTP server.

De oplossing is een tweede Domino server waarop de SMTP taak draait maar luistert naar een alternatiefe poort ( bv 587 ).

Vervolgens dwing je Authenticatie af voor SMTP en geeft je geauthentiseerde gebruikers de rechten om te mogen relayen.

Omdat de server op een andere poort luistert dan 25 is de kans dat spammers je SMTP server vinden minder groot. Als ze hem dmv een portscan toch vinden dan is er altijd nog de noodzaak voor het Authentiseren voordat er gemailt mag worden.

19 jul 2008

Webservices Domino 8

Twee jaar geleden heb ik voor een klant een postcode webservice geschreven.

Deze doet hetvolgende:

 

Postcode architectuur

 

Het stuk wat ik geschreven heb zit in de middelste laag: de proxy. Deze functionaliteit had ik met behulp van Domino 7, het webservice design element, Stubby en java gerealiseerd. Stubby is een open source tool (link) die je op OpenNtf terug kan vinden. Het geeft je de mogelijkheid een Webservice consumer in Domino 7 te bouwen. Stubby maakt gebruik van het feit dat er in de Domino 7 distribitie een volledige Axis implementatie is meegeleverd. Niet alleen de server functionaliteit maar ook de client functionaliteit is daarbij inbegrepen.

In Domino 8 is de hele Axis implementatie echter veranderd.Het gevolg is dat Stubby niet meer werkt met Domino 8 en ook eerder gerealiseerde webservice consumers, gerealiseerd met behulp van Stubby, werken niet meer. Wel heeft Domino 8 een mogelijkheid gekregen om "out of the box" een webservice consumer te realiseren.(link) Toen ik dit echter probeerde kreeg ik allemaal foutmeldingen. Blijkbaar kan de functionaliteit alleen niet al te ingewikkelde WSDL bestanden aan.

Reden om te switchen naar een externe Axis approach(link). Voorgaande wil zeggen dat je de Axis jars download, stubs genereerd op basis van de te consumen webservice WSDL en deze stubs vervolgens gebruikt in je code. In mijn geval wilde ik de code gebruiken in een Webservice Design element van Domino 8. De Axis jars en Stub code had ik op het classpath gezet door de jars in het design element in te laden. In de domino designer werkt dat allemaal prima. Alles compileert en lijkt goed te werken. Bij het testen van de Webservice genereerd de webservice engine van Domino 8 echter een fout: "java.lang.reflect.InvocationTargetException" op basis van een "ClassNotFoundException".

Wat blijkt: externe jars die op het classpath gezet zijn door de jars in te laden in het webservice design element zijn tijdens runtime niet te vinden voor de webservice engine! 

Bovenstaande is een bug in Domino 8. Ik weet niet of deze ook in Domino 8.0.1 bestaat. Gelukkig is er een workaround voor:

Plaats de externe jars in de ext folder van de Domino 8 jvm.

13 jul 2008

Virtualisatie

Ons bedrijfje maakt roerige tijden door. Voor diegenen die het niet wisten:

We doen consultancy en implementatie met betrekking tot proces management. Dit alles verdeelt, tot heden, in twee technologien: Lotus Domino en Microsoft ( C# en .net ).

In deze roerige tijden is het belangrijk een gedegen infra stuctuur neer te zetten. Hiervoor hebben we de volgende servers in het leven geroepen:

Gehuurde windows 2003 server ( STRATO )

  • Mail server ( Domino 8.0 )
  • Sametime server
  • Applicatie server ( Domino 8.0 )
  • Subversion version control

Een eigen server met daarop een gevirtualiseerde Domino development omgeving (Domino 8.0.1) en een Quickr 8.1, (gevirtualiseerd) omgeving.

Het host OS draait op Win 2003 professional. Hiervoor is gekozen omdat deze versie van windows gebruik kan maken van de aanwezige 8 gig aan geheugen.

De guests OS'en draaien op Win 2003 standard.

Voor de virtualisatie hebben we gekozen voor Virtual Server 2005 van Microsoft. De voornaamste reden hiervoor is de eenvoud van gebruik van dit product. Binnen no time heb je een server up and running.

De beide domino 8.0.1 servers hebben beiden 1 gig geheugen en 2 HDD ( 10 gig en 100 gig ) tot hun beschikking.

Omdat we maar een publiek ip adres tot onze beschikking hebben hebben we een reverse proxy geimplementeerd met host header routing functionaliteit. Windows ISA server zou dit kunnen doen maar dat is wellicht een overkill voor de functionaliteit die wij willen. Uiteindelijk hebben we gekozen voor Puakma webbooster. Deze software is gratis als je het niet voor commerciele doeleinden wil gebruiken. Bovendien is het erg eenvoudig in gebruik en installatie en we krijgen er gratis gzip compressie techniek bij. Een perfect product en dus een aanrader. Zomaar een greep uit de functionaliteit die we krijgen:

  • Routing op basis van host header
  • Caching van statische content
  • Gzip compressie
  • Load balancing
  • Failover
  • SSL voor achterliggende domeinen dmv een wildcard certificaat.

Voor de gzip functionaliteit zijn we tegen een aantal issues aangelopen:

Het gzippen van xml ( text/xml ) gaat vaak niet goed. De browser handeld dit niet goed af. Ook de response van een webservice call is in xml en mag dus niet gegzipped worden. Met name Quickr met zijn Lotus Quickr connectoren heeft daar last van. Puakma Webbooster moet dus geconfigureerd worden zodat xml content niet gegzipped wordt.

Verder hadden we wat problemen met Quickr te draaien op een niet standaard Notes poort. Vanwege het feit dat we maar 1 ipadres tot onze beschikking hebben had ik de Virtuele Domino servers op twee niet standaard poorten laten lopen zodat de router NRPC verkeer naar de goede server kon routeren obv poort nummer ( portforwarding ).

Quickr werkt echter niet op een andere poort dan 1352. Hier is geen workaround voor en de enige oplossing is Quickr gebruik te laten maken van 1352.

Uiteindelijk hebben we nu dus een gevirtualiseerde omgeving met twee domino servers en een productie server met mail, sametime en applicaties.

30 mrt 2008

Hoeveel Domino servers

Ik als Domino man ben natuurlijk erg geinteresseerd in de penetratie van Domino in de nederlandse markt. Nu zijn deze lijsten erg moeilijk te verkrijgen.

Om toch enig inzicht te verkrijgen in hoveel bedrijven er nu Domino draaien heb ik het volgende gedaan:

ik heb een java programmaatje geschreven die alle!! ip adressen in nederland afloopt en checkt of er op poort 1352 ( de domino poort ) een server luistert. Als dat zo is dan logt hij het ip adres en de dns naam in een csv bestandje.

Voor de liefhebbers:

Je kan hem hier downloaden. Het bijbehorende ipranges bestand voor nederland kun je hier vinden.

Je start het programma door:

java -jar dominofinder.jar <iprangebestand> <logbestand> <logginglevel 1-4> <max connecties>

image

BlueXtend Sametime

Een oud collega van me, Erik Vos, is een nieuw bedrijf begonnen. Het heet realconnections en hij biedt services aan via het SaaS principe. Als eerste pilot project is hij een chat community begonnen met behulp van Sametime. Via deze community kunnen IBM business partners met elkaar communiceren. Sinds vandaag ben ik er ook lid van. Ben erg benieuwd hoevaak ik het ga gebruiken.

Hieronder een scherm afdruk van de sametime 8.0 client met de BlueXtend community:

image

13 mrt 2008

Big Brother

Ik maak me de laatste tijd wel eens zorgen over het feit dat er zomaar persoons informatie op straat ligt als je gebruik maakt van bepaalde diensten op het internet. Google en Microsoft worden tegenwoordig met regelmaat van de klok beschuldigd van het schenden van privacy omdat ze ongevraagd gegevens opslaan van personen. Een van deze gegevens is het ip adres van je computer. Het ip adres is een uniek nummer die een computer in het internet identificeert. Is het dan zo erg dat dit nummer opgeslagen wordt? Nou, daar verschillen de meningen over. Het kan best privacy gevoelig worden op het moment dat dat ip nummer aan een naam en locatie gekoppeld kan worden.

Om het een en ander eens te testen heb ik op deze site een paar trucs uitgehaald. De eerste truc is het achterhalen van het ip adres van de bezoeker. Dit is heel makkelijk te doen door middel van het uitlezen van een HTTP header die iedere webbrowser naar een webserver verstuurd. In het geval van deze blog moest ik het echter iets ingewikkelder doen want ik heb geen toegang tot de server, en dus de HTTP headers, van deze blog. Ik vond een gratis javascript service die je in je pagina kan laden en die vervolgens het ip adres van je computer teruggeeft.
(kijk maar eens hier: http://scripts.hashemian.com)

Nadat ik op deze manier het ip adres van bezoekers als "user defined parameter" aan google analytics gevoerd had (dmv: pageTracker._setVar(VIH_HostIP)), was ik klaar voor een volgende stap, het geoloceren van bezoekers aan de hand van het ip adres.

Ik vond een opensource javascript project die je de mogelijkheid geeft een javascript te laden die je vervolgens de landnaam, stadnaam, lattitude en lontitude van de gebruikte computer teruggeeft. ( zie:http://j.maxmind.com). Deze service maakt gebruik van een database waarin ip adressen gekoppeld zijn aan geografische gegevens. De service is niet altijd heel precies, maar meestal geeft hij toch een geografische locatie die behoorlijk in de buurt zit.

De volgende stap was het gebruik maken van google maps om grafisch aan te geven waar een gebruiker zich bevindt. Het resultaat is onder het kopje "Big Brother" te zien op deze blog.

De coclusie van deze exercitie is: het is toch wel erg eenvoudig om met bestaande tools relatief privacy gevoelige informatie te genereren en te tonen cq op te slaan.

16 feb 2008

Google Analytics

  Wederom struikelde ik deze week over de mogelijkheden en schoonheid van de Google tools. Deze keer was het: Google Analytics. Heel nauwkeurig kun je met deze tool allerhande informatie met betrekking tot je website analyseren. Ik heb hem aangezet voor deze site en hieronder vindt u een paar screendumps.

 image

Geografische weergave van de bezoekers

image

Ingezoomed op land

image

Met welke zoekterm komen bezoekers op de site

19 jan 2008

Regular Expressions

Ik ben al heel lang fan van Regular Expressions. De manier om programmatisch tekst te manipuleren volgens specifieke patronen.

De meeste programmeertalen hebben een Regular Expression engine: javascript, java, .NET, VB etc, Wanneer zou IBM nou een engine in lotusscript implementeren?

Maar goed, daar gaat dit item niet over. Het schrijven van Regular Expressions is erg lastig. Ik ben wel eens dagen bezig geweest om het een en ander goed te krijgen. Ook deze week, op een avond, was er weer een moment dat ik een Regular Expression nodig had( het filteren van file:/// urls'uit een HTML pagina ). Na een uurtje proberen was ik het zat en heb ik RegexBuddy gekocht. (http://www.regexbuddy.com) Een aanrader voor iedereen die beroepsmatig wel eens iets met Regular Expressions doet!!

12 jan 2008

Weekend!

Het is weer weekend!

Alweer twee weken in het nieuwe jaar weggebrand en het normale leven is weer begonnen.

Mijn tinyMCE implementatie gaat goed. Uiteindelijk ben ik uitgekomen op standaard Domino technologie.

Binnen tiny heb ik een customized filebrowser geimplementeerd. Deze geeft je de mogelijkheid om bestanden van de server of lokaal te selecteren. In het geval van een lokaal bestand zal deze bij het sluiten van het filebrowser venster, geupload worden naar de server.

In het hoofdvenster kan men rustig de huidige pagina verder bewerken. Verwijzingen naar het bestand dat zojuist naar de server is geupload zijn nog lokale verwijzingen ( file:///). Pas op het moment van opslaan zorgt een javascript Reg. Exp. voor de translatie naar een nieuw pad.

Aan de server kant worden geuploade bestanden aan het huidige document gekoppeld middels een wqs agent.

Allemaal erg nifty, en works like a charm.

Een volgende uitdaging is:

Hezelfde document ook kunnen bewerken in de Notes client! Dit valt vooralsnog buiten de scope van dit project, maar ik wil toch eens in de vrije uurtjes kijken of er iets met mime conversie te regelen valt.

Een tweede uitdaging is dit html document mailen. Ook hier moet er dan een mime conversie plaatsvinden maar dan met bijlagen van de bestanden.

Genoeg hobby projectjes voor de komende tijd:-)

9 jan 2008

JasperReports

Bedrijven hebben vaak behoefte aan management informatie. Vele bedrijven gebruiken daar Crystal reports voor. Een alternatief is JasperReports.

Een OpenSource product gebaseerd op java.

Het product bestaat uit verschillende componenten:

  • TomCat : als application server
  • iReports: als client applicatie voor het modelleren van je rapporten
  • JasperReports: voor het genereren van de rapporten
  • JasperServer: voor het managen van rapporten

Alle componenten zijn in een installer te downloaden van jaspersoft. Na installatie is het vrij eenvoudig datasources aan te maken en vervolgens rapporten te genereren. De rapporten kunnen in .csv, .xls, .pdf, .doc vormgegeven worden en distributie kan plaatsvinden dmv mail.

Allemaal erg mooi en relatief eenvoudig. Na een avondje spelen had ik al rapportages uit een MySQL db. In mijn beleving een aanrader!

( de volgende stap is: rapporteren uit Lotus Notes databases )

7 jan 2008

tinyMCE, FileManager en domino

Op dit moment ben ik bezig met een project waarbij content via een browser aangemaakt en bewerkt moet worden. We hebben gekozen voor tinyMCE als html editor. Probleem bij tinyMCE is echter dat er niet standaard een FileManager meegeleverd wordt voor het uploaden van files. Het zou mooi zijn als je een file kunt uploaden naar de domino server terwijl je een document aan het bewerken bent. Het geuploade document moet daarna weer zichtbaar zijn in het bewerkte document.

Ik denk erover om de Yahoo Filemanager hiervoor te gebruiken. Hiermee kun je asynchroon bestanden naar de domino server sturen. Ben benieuwd of dit gaat werken.

WebDav of customized

In deze tijd van javascript libraries ( Yahoo, Dojo, tinyMCE etc ) komt het regelmatig voor dat je veel js files en css files in de file resources van een domino database moet krijgen. Je kan hier WebDav voor gebruiken ( zie het artikel van Jake ), maar dat is nogal een gedoe. Daarbij komt dat deze methode nogal eens verzuimd om de mimetypes van bestanden goed te zetten.

Een andere mogelijkheid is het importeren van hele folder structuren met behulp van dxl. Dus: bestanden -> base64 encoden -> transformeren naar dxl -> dxl importeren.

Nu ben ik niet een hele grote fan van dxl, maar voor dit specifieke doel: werkt perfect!

(code is op aanvraag te verkrijgen :-))

8 dec 2007

Request_Content geen limiet meer.

Notes 7 releases:
This limit has been removed and Domino can now handle POST data larger than 64KB in the REQUEST_CONTENT field. This is accomplished as follows:

    If the POST data is less than 64KB -
    Use REQUEST_CONTENT to access the POST data.
    If the POST data is greater than 64KB -
    Use REQUEST_CONTENT_000 to access the first 64KB chunk, REQUEST_CONTENT_001 to access the second 64KB chunk, REQUEST_CONTENT_002 to access the third 64KB chunk, and so on.
    A developer can use the NotesDocument.HasItem("REQUEST_CONTENT") call to test for the presence of the REQUEST_CONTENT field. If it exists, then there was less than 64KB of POST data.
    NOTE: The Server Document setting, "Maximum POST data," refers to the maximum amount of POST data Domino will accept. This field (Internet Protocols panel --> Domino Web Engine) does not affect the REQUEST_CONTENT field and how it is used.

1 nov 2007

Dxl- exporter en importer problemen

Dxlexport en import heeft een groot aantal problemen.

Hieronder een opsomming van wat ik ben tegengekomen. In het engels omdat ik het ook op developerworks forum heb geplaatst:

I will note my findings beneath:Database dxlexport and import afterwards throws the following problems:

1.Lotusscript and Java code designelements( agents, libraries ) can not be opened by the designer client. It throws an error like: document is not signed.Workaround can be to get a document handle on those design elements and perform a .sign() on them. This will correct the problem.

2. Imported views are "corrupt". This can be noticed by opening the view in the designer client and saving it. This will cause the selection formula to be replaced by one of the column formula's. No known workaround but the problem is fixed in 7.0.3.

3. Javascriptlibraries are imported as a long string. If there is comment with "//" characters in the javascript this will cause the code to break. Workaround is to get all elements from the dxl export and replace the content of those tags. The correct replacemet should be: .replaceAll("\n","\r\n"). This will fix the import.

4. Stylesheet elements are sometimes appended by one or more random characters. In case of a xsl file this will cause the application to break. Workaround is to get all from the dxl, see if it handles a xsl file and do a replacement. The replacement should:a. base64decode the filedata contentb. replace everything after the tag with ""c. replace "\n" for "\r\n"d. base64decodeand add it to the dxl

5. Sometimes the dxlexporter adds elements to the dxl. It does this if it encounters characters which can not be translated to xml. If this happens within a formula the dxl looks like: .The content of the formula tag also gets scrambled.This causes the dxlimporter to throw an error because a formula element can not contain child elements. Removing the elements from the dxl will not help because then the dxl importer will break on the scrambled content of the element. No known workaround.

6. The dxl importer stumbles on some base64 encoded files from the dxl. This only happens on OS400. It does not matter where those base64 encoded files are. They can be attachments, fileresources, stylesheets or what ever.In case of the above event the dxl importer throws a NullPointer exception!!!One instance of this occuring was with a msxml.msi file in the fileresources of a database.

7. If there is passthru text on a form or page, and on the same designelement the older "["and "]"are used for tagging html, the dxlimport causes
tags to be placed on the desigelement when opened in a browser. Workaround is to open the designelements in the designer client and save them.These are some of the problems I encountered while working with DXL.

Conclusion: a complete roundtrip from dxlexport to dxlimport can not be performed without the loss of information.

23 okt 2007

Reset namelookup

Vandaag kwam ik een domino server commando tegen die ik nog niet kende.
De "show nlcache reset" leest opnieuw groeps informatie vanuit het NAB in. Erg handig tijdens ontwikkel werkzaamheden.

2 okt 2007

Java en Notes.ini

01 Nov 2001

In response to a number of programming related questions, Professor INI decided to run through all the programming related NOTES.INI variables. Last month, we looked at variables associated with LotusScript, Lotus Connectors, and the formula language. This month, we move on to variables that relate to Java and answer the question:
Q: I'm a Notes/Domino applications developer just starting to use Java. What Designer NOTES.INI variables can I use that will help me with my programming?

Java access to Domino objects (through CORBA), although not actually part of the Designer Integrated Development Environment, relies on Designer for compilation and a Domino server at runtime (for applications). This article addresses the NOTES.INI variables affecting Java/CORBA and the JVM.

Note: NOTES.INI variables related to debugging are not addressed in this article. For more information concerning NOTES.INI debug variables, see the Ask Professor INI column, Using debugging variables.

Most of the variables discussed in this article are Notes and Domino R5 NOTES.INI variables. We've included some Rnext-only variables (these are so noted), but please keep in mind that Rnext-only variables are works in progress and, therefore, are subject to change before Rnext is released.

Much of the information contained in this article can be found in Domino R5 Designer Help. However, additional details were gleaned through discussions with the developers and are not documented.

A few of the variables mentioned here are set through the client's user interface (these are so noted), but most are set by modifying the NOTES.INI file directly (for example, by using a text editor). In general, we discourage editing the NOTES.INI file directly because of the damage that can be done by modifying it incorrectly. If you find you need to edit the NOTES.INI file directly, do so with caution and great care.

Variables and Java/CORBA

Using Java to access Domino Objects requires that a few NOTES.INI variables be set. Also, see the section on Variables and the JVM for more Java-related NOTES.INI variables.

Note: Do not confuse this interface with the Lotus Domino Toolkit for Java/CORBA, which will be discussed in a subsequent article.

Allow_Notes_Package_Applets

This variable allows you to use Notes packages in your Java applications. Its syntax is:

Allow_Notes_Package_Applets=1

This variable is set in the client's NOTES.INI file.

JavaDlgSettings

To assist you in creating a Java agent, this variable, when set to 1, is used to "remember" the last set of options you used in the Edit Project dialog box. Its syntax is:

JavaDlgSettings=1

This variable is set in the client's NOTES.INI file.

JavaUserClasses

If your Java agent calls another class that has native methods, you must make sure that that class is loaded via the JVM's system loader. To ensure this, set this variable to the file name of the class file that contains the native methods. The variable's syntax is:

JavaUserClasses=< directory/filename >

By setting this variable, you override a security restriction contained in the agent class loader that does not allow classes with native methods to be loaded. This variable may be set in either or both the client and the server NOTES.INI file.

Note that you should not enter more than one JavaUserClasses entry in a NOTES.INI file. If you have more than one, only the first will be used; all others will be ignored. If you have multiple uses for JavaUserClasses, enter all the parameters on the same line. For example:

JavaUserClasses=< directory1 >;< directory2\jarfile >;< zipfile1 >;…

Keep in mind that there is a 256-byte limit for NOTES.INI entries. Use JavaUserClasses sparingly.

EnableJavaApplets

This variable enables Java applets if set to 1 or disables them if set to 0. You set this variable to 1 by selecting the Enable Java applets option in the Additional Options section of the Basics panel of the User Preferences dialog box. Deselecting Enable Java applets sets the variable to 0.

LaunchDIIOPOnPreview

DIIOP (Domino Internet Inter-ORB Protocol) is a server task that works with the Domino Object Request Broker. When set to 1, this variable launches the DIIOP server task when Preview In a Browser is selected from Domino Designer.

You set this variable to 1 by selecting "Launch the CORBA (DIIOP) server on Preview in a web browser" option in the Additional Options section of the Basics panel of the User Preferences dialog box. Deselecting "Launch the CORBA (DIIOP) server on Preview in a web browser" causes this variable to be removed from the NOTES.INI file.

ServerTasks

In general, this variable must be set for anything to run on the server. Setting it to http and diiop ensures that the server tasks HTTP and DIIOP are running. Java/CORBA requires that these server tasks be running. Its syntax is:

ServerTasks=< any other tasks >, http, diiop

where < any other tasks > are any other needed server tasks. This variable is set in the server NOTES.INI file.

Environment variables

Java/CORBA classes include the following NOTES.INI variable-related functionality:

The getEnvironmentString (for strings and numeric values) and getEnvironmentValue (for numeric values) methods of the Session class retrieve the value of an environment variable from the current user's NOTES.INI file.
The setEnvironmentVar method of the Session class sets the value of a string or numeric environment variable.



Back to top





Variables and the JVM

There are several variables used to control the behavior of the Java Virtual Machine (JVM). All of these variables can be set in either or both the client and server NOTES.INI file. The client's NOTES.INI values rule the JVM executing on the client, such as local Java agents and applets. The server's NOTES.INI values rule all the JVM's running on the server-one each in http, amgr, server, router, runjava, and so on, or in some combination. It is unlikely, however, that you will ever need to set any of these variables (except for perhaps JavaUserClasses). As ever, proceed with caution when editing a NOTES.INI file.

JavaEnableJIT

By default, Notes disables the JVM default JIT (Just-In-Time) functionality because of its instability (see the caution below). Setting this variable to 1 turns on the default JIT functionality, if one is provided; so the JVM will allow normal loading of the default JIT. The variable's syntax is:

JavaEnableJIT=1

Caution: JIT functionality can be unstable and lead to unexpected crashes.

JavaJITName

Setting this variable turns on the JIT specified in the parameter. Its syntax is:

JavaJITName=< jit_name >

where < jit_name > is the specific JIT to use. You must provide the named JIT or an error is reported by the JVM, although execution of the application or agent will continue without it.

You can specify the default JIT name here, such as symcjit on Win32 or jitcompiler on alpha; that is equivalent to using JavaEnableJIT=1.

Note: The name of the JIT on Win32 differs depending on what version of Notes you are referring to. On 5.0.x, the JIT name is symcjit. On Rnext, its name is jitc.

JavaMaxHeapSize

Use this variable to specify the maximum size the Java heap can grow to in bytes. Its syntax is:

JavaMaxHeapSize=< number_of_bytes >

The default number of bytes is 67,108,864 (64MB). Note that this is the maximum size, not the initial size. (Currently, there is no way to set the initial size.) The JVM starts out at 1MB of heap space, most of it uncommitted. If the JVM needs more heap space than it currently has, it expands the heap in increments, although it will not exceed the maximum. An exception like java.lang.OutOfMemoryError is an indication of maxed-out heap space.

JavaNoClassGC

Use this variable to turn off the garbage collection (GC) of unreferenced classes. Its syntax is:

JavaNoClassGC=1

For example, you might turn garbage collection of classes off to protect static fields. If a class has static fields that are used by others, and garbage collection is performed on that class, it could lead to potential unintended changes in the static fields.

You can use this variable to stop failures due to poorly written code, for instance, code that relies on static fields with no continuity of class referencing. Properly designed code will work properly regardless of the state of this variable.

JavaStackSize

You can use this variable to specify the size of each Java thread's execution stack. Its syntax is:

JavaStackSize=< number_of_bytes >

The default size of a Java thread's execution stack is 409,600 (or 400K), which is fine for most purposes. However, if you need to use deeply nested call stacks (such as recursion), then you may need to increase the stack size.

JavaUserClasses

The variable is set to a list of directories or JAR or ZIP files that are added to the CLASSPATH at JVM startup so that classes can be found via the system loader rather than attached to the agent or applet. This allows code sharing across databases. The variable's syntax is:

JavaUserClasses=< directory1>;;;...

The list is semicolon ( ; ) delimited on Win32 and OS/2 system and colon ( : ) delimited on Unix systems. For example, the following is a valid list on a Win32 system:

JavaUserClasses=c:\classes;d:\appxyz\stuff.jar

Be aware that one drawback to using this variable is that, because it is in the NOTES.INI file, it doesn't replicate. If you have an agent, applet, or servlet that relies on JavaUserClasses, and the database that contains that item replicates somewhere, you have to manually add JavaUserClasses to the NOTES.INI file on the target system or the agent, applet, or servlet won't run. Another drawback is that the variable requires that the user have access to the file system on the server.

Note that you should not enter more than one JavaUserClasses entry in a NOTES.INI file. If you have more than one, only the first will be used; all others will be ignored. If you have multiple uses for JavaUserClasses, enter all the parameters on the same line, as shown in the syntax above.

Keep in mind that there is a 256-byte limit for NOTES.INI entries. Use JavaUserClasses sparingly.

JavaVerbose

Use this variable to turn on the verbose setting of the JVM. Its syntax is:

JavaVerbose=1

This causes numerous messages to be issued by the JVM during its execution, which can be helpful in narrowing down runtime problems.

JavaVerboseGC

Use this variable to turn on extra messages from the GC mechanism in the JVM. Its syntax is:

JavaVerboseGC=1

During garbage collection, the JVM issues many informational messages about memory use. These can be helpful for debugging heap allocation problems, such as the unbounded growth of the heap leading to OutOfMemoryErrors.

JavaVerboseJNI

This is a new variable in Rnext. Use this variable to turn on extra messages from the Java Native Interface mechanism in the JVM. Its syntax is:

JavaVerboseJNI=1

During calls to JNI functions, the JVM issues many informational messages about what is happening. These can be helpful for debugging native code and for getting extended JNI-related information out of the JVM at runtime.

Variables related to the JVM verifier

The verifier is a piece of the JVM that inspects a given piece of bytecode to make sure it complies with the spec and doesn't do anything that code shouldn't do. The default behavior of the JVM is to verify just bytecode that is loaded remotely. These next three variables control verifier behavior.

JavaVerify
Use this variable to tell the JVM to verify all bytecode it loads, not just the bytecode loaded remotely. Its syntax is:

JavaVerify=1

Because this verification of non-remotely loaded code results in a performance hit, it is not the default behavior.

JavaNoVerify
Use this variable to turn off all bytecode verification. Its syntax is:

JavaNoVerify=1

Caution: The verifier is an essential part of Java's security mechanism. Turning it off will improve performance, but it will also leave you with a gaping security hole and no protection against code inadvertently getting corrupted in transfer. Although available and supported, this variable should seldom, if ever, be used.

JavaVerifyRemote
Use this variable to tell the JVM to run verification on classes that are loaded remotely, for example, via a classloader. Its syntax is:

JavaVerifyRemote=1

Although the current default for the JVM is to have verification of remotely loaded bytecode on, this variable has been included to ensure that this option can be enabled if the default setting ever changes.

Conclusion

This concludes the second part of our exploration of NOTES.INI variables and programmability. In a future column, we will discuss NOTES.INI variables and the Notes & Domino programming toolkits.

Do you have a NOTES.INI question? Send it in to Professor INI. We'll answer as many questions as we can in future "Ask Professor INI" columns. Keep in mind, however, that we may not be able to answer every question, nor can we quickly respond to requests that require immediate attention. If you need an immediate response to a question, we recommend you post it in the Iris Cafe Notes/Domino Gold Release Forum where someone from the general Notes community might be able to help, or contact Lotus Customer Support.