<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-17199621</id><updated>2012-01-02T01:45:25.217-08:00</updated><category term='Sametime bot'/><category term='regex'/><category term='Formula'/><category term='Lotus Domino'/><category term='LotusScript'/><category term='DXL'/><category term='Sametime Widget'/><category term='Sametime API'/><category term='XML'/><category term='vbscript'/><category term='JavaScript'/><category term='Lotus Notes'/><category term='Sametime'/><category term='Second Life'/><category term='Lotusphere'/><category term='Excel'/><title type='text'>Andrei's Blog about Lotus Domino and other things</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default?start-index=101&amp;max-results=100'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>114</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-17199621.post-2235230985200202422</id><published>2009-03-31T12:30:00.000-07:00</published><updated>2009-04-01T03:22:08.200-07:00</updated><title type='text'>April Fools' pranks and jokes from Sametime bot</title><content type='html'>For the April Fools' Day I updated our Joke Bot with new funny jokes and pranks. &lt;br /&gt;I like the one in which victims are tricked into calling the zoo to ask for Mr. Lyon :)&lt;br /&gt;&lt;br /&gt;Open &lt;a href="http://www.botstation.com/sametime/april.html" target="_blank"&gt;April Fools' Sametime Bot&lt;/a&gt;&lt;br /&gt;Type "april" to bot to see more joke suggestions.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Other Sametime bots:&lt;br /&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/stwidget_joke.php" target="_blank"&gt;The original jokes bot&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/halloween.html" target="_blank"&gt;Halloween jokes&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/bot_wisdom.html" target="_blank"&gt;Wisdom quotes from famous people&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/bot_translate.html" target="_blank"&gt;Translation bot&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/bot_currency.html" target="_blank"&gt;Currency exchange rates&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/stwidget_lotusphere.html" target="_blank"&gt;Lotusphere RSS posts on Technorati&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/bot_regex.html" target="_blank"&gt;Example of Bot processing regular expressions (regex)&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/stwidget_morse.php" target="_blank"&gt;Morse code&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/bot_bible.html" target="_blank"&gt;Random bible quote&lt;/a&gt;&lt;br&gt;&lt;br /&gt;* &lt;a href="http://www.botstation.com/sametime/stwidget_zip.html" target="_blank"&gt;Get city names by zip codes (Sweden)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is the HTML code needed to include Joke Bot on your own web page. Access to bot is implemented with help of &lt;a href="http://www.stwidget.com" target="_blank"&gt;STWidget web client for Sametime&lt;/a&gt; - the first web based Sametime client.&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;&lt;b&gt;&lt;br /&gt;&amp;lt;iframe src="http://www.stwidget.com/ggljoke/stwidget.html" scrolling="no" frameborder="0" style="width:170; height:280;"&amp;gt;&amp;lt;/iframe&amp;gt;&lt;/b&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Example of a bot emdedded using the code above:&lt;br /&gt;&lt;span style="WIDTH: 170px; HEIGHT: 280px"&gt;&lt;br /&gt;&lt;iframe src="http://www.stwidget.com/ggljoke/stwidget.html" scrolling="no" frameborder="0" style="width:170; height:280"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-2235230985200202422?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/2235230985200202422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=2235230985200202422' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2235230985200202422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2235230985200202422'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2009/03/sametime-bot-suggests-april-fools.html' title='April Fools&apos; pranks and jokes from Sametime bot'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-1998386361968976841</id><published>2009-03-17T11:08:00.000-07:00</published><updated>2009-03-17T11:30:08.232-07:00</updated><title type='text'>Testing blogging from iPhone</title><content type='html'>Testing how it works to create a blog post using iBlogger app on iPhone. Sitting right now in a community train on the way home.&lt;br/&gt; &lt;br/&gt;Today Apple releases news about iPhone version 3 update. I hope they will include MMS functionality, SMS forwarding and video recording. Possibility to run applications in background would also be nice, then I would consider porting &lt;a href="http://www.stwidget.com"&gt;STWidget Sametime web chat&lt;/a&gt; to a native iPhone app. The problem with current apps in iPhone is that they are automatically aborted as soon as phone goes into sleep mode. That saves of course battery life and frees up memory, but there should be a way to override this behaviour by asking user to allow to run in background. Windows PDA allow this, but I couldn't use them for more than 1.5 hours of continuous typing, iPhone lasts about 3 hours. I mean &lt;u&gt;lasted&lt;/u&gt; 3 hours, but after version 2.2 update last month, battery life jumps up and down without obvious reason. &lt;br/&gt;&lt;div class="iblogger-footer"&gt;&lt;br clear="all"/&gt;&lt;p style="text-align:right;font-size:10px;"&gt;[Posted with &lt;a href="http://illuminex.com/iBlogger/index.html"&gt;iBlogger&lt;/a&gt; from my iPhone]&lt;/p&gt;&lt;br/&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-1998386361968976841?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/1998386361968976841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=1998386361968976841' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1998386361968976841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1998386361968976841'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2009/03/testing-blogging-from-iphone.html' title='Testing blogging from iPhone'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-5388187223607075061</id><published>2008-12-26T11:24:00.000-08:00</published><updated>2008-12-27T01:26:13.208-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotusphere'/><title type='text'>Lotusphere and USA travel authorization</title><content type='html'>I am finally ready with all my Lotusphere bookings. But as it is right now, I'll have to stay in 3 hotels. First 1 night in "Dolphin", then 4 nights in "Port Orleans Riverside" and then 1 night in "Swan". I am on the waiting list for "Port Orleans Riverside", hope that I'll get at least 1 hotel switch less.&lt;br /&gt;&lt;br /&gt;When booking the flight ticket, I noticed a warning that from 12 January travelers must electronically register at least 72 hours prior to travel. See below for more info.&lt;br /&gt;&lt;br /&gt;Link:&lt;br /&gt;http://www.cbp.gov/linkhandler/cgov/travel/id_visa/esta/about_esta/esta_intro/esta_english.ctt/esta_english.pdf&lt;br /&gt;Extract:&lt;br /&gt;Effective January 12, 2009, all VWP travelers will be required to obtain an electronic travel authorization prior to boarding a carrier to travel by air or sea to the U.S. under the VWP.&lt;br /&gt;&lt;br /&gt;VWP=Visa Waiver Program&lt;br /&gt;&lt;br /&gt;Tag: &lt;a href="http://technorati.com/blogs/tag/lotusphere" rel="tag"&gt;Lotusphere&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-5388187223607075061?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/5388187223607075061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=5388187223607075061' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5388187223607075061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5388187223607075061'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/12/lotusphere-and-usa-travel-authorization.html' title='Lotusphere and USA travel authorization'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-5988058382847007575</id><published>2008-12-01T06:07:00.000-08:00</published><updated>2008-12-01T07:18:35.370-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DXL'/><title type='text'>Strange behavior of DXL import</title><content type='html'>While working with DXL123 freeware Domino app(beta released soon), I found a strange behavior of DXL importer in LotusScript: swedish letters (åäö) in imported stream are changed to garbled characters. But simple &lt;strong&gt;stream.ReadText&lt;/strong&gt; before importing the stream fixes the problem.&lt;br /&gt;I guess it has to do with wrong encoding, maybe with utf-16 being used instead of utf-8, but I don't see how I would change that or why it begins working after stream.ReadText &amp;lt;?xml version="1.0" encoding="utf-16"?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Dim tmpstream As NotesStream&lt;br /&gt;Dim importer As NotesDXLImporter&lt;br /&gt;Dim fixencoding As String &lt;br /&gt;&lt;br /&gt;Set tmpstream = session.CreateStream&lt;br /&gt;Call domParser.setOutput(tmpstream)&lt;br /&gt;Call domParser.Serialize&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;fixencoding=tmpstream.ReadText  &lt;em&gt;'This makes the result OK&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Set importer = session.CreateDXLImporter(tmpstream, sourcedoc.ParentDatabase)&lt;br /&gt;importer.ReplaceDBProperties = False &lt;br /&gt;importer.ReplicaRequiredForReplaceOrUpdate = False&lt;br /&gt;importer.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE &lt;br /&gt;Call importer.Process   &lt;em&gt;'.Import gives same result&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DXL123&lt;/strong&gt; is a set of LotusScript API to easily perform different operations on inline images and on attachments without knowing anything about DXL.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Function available in DXL123:&lt;/strong&gt;&lt;br /&gt;Copy attachments between documents (without detaching to disk)&lt;br /&gt;Convert inline image to attachment (without detaching to disk)&lt;br /&gt;Change name of an attachment (without detaching to disk)&lt;br /&gt;Remove inline images&lt;br /&gt;Import disk file as an inline image&lt;br /&gt;Place inline image in text after specified word/phrase&lt;br /&gt;Place inline image inside a table&lt;br /&gt;Replace inline picture to another picture&lt;br /&gt;Replace attachment in richtext to URL link&lt;br /&gt;Replace inline image to HTML image reference&lt;br /&gt;&lt;br /&gt;Example:&lt;br /&gt;attachment_name=CopyInlineImageToDocAttachment(sourcedoc, targetdoc, "Body", 2, False, True)' make the second image in Body field to become an attachment and delete the original image&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tag: &lt;a href="http://technorati.com/blogs/tag/dxl" rel="tag"&gt;dxl&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-5988058382847007575?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/5988058382847007575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=5988058382847007575' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5988058382847007575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5988058382847007575'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/12/strange-behavior-of-dxl-import.html' title='Strange behavior of DXL import'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-7232458990221930647</id><published>2008-10-31T02:15:00.000-07:00</published><updated>2008-11-01T02:36:34.835-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Halloween bot</title><content type='html'>On this dark October evening, amuse yourself with Halloween Sametime Bot, which knows a lot of Halloween jokes about vampires, ghosts and other scary creatures:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/sametime/halloween.html"  target="_blank"&gt;Halloween Sametime bot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To see more scary jokes, type "scary" or "joke" to the bot.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/sametime/halloween.html" target="_blank"&gt;&lt;img src="http://2.bp.blogspot.com/_JEVmVtrdoiE/SQr8pbUsqtI/AAAAAAAAAFk/K8iHkYpTdec/s320/halloweenbot.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5263296903175252690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-7232458990221930647?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/7232458990221930647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=7232458990221930647' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7232458990221930647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7232458990221930647'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/10/halloween-bot.html' title='Halloween bot'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_JEVmVtrdoiE/SQr8pbUsqtI/AAAAAAAAAFk/K8iHkYpTdec/s72-c/halloweenbot.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-4802791613890406233</id><published>2008-08-21T07:16:00.000-07:00</published><updated>2008-08-21T07:18:18.498-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Sametime bot shows currency exchange rates</title><content type='html'>Based on &lt;a href="http://dominounlimited.blogspot.com/2008/07/sametime-bot-for-text-translations.html" target="_blank"&gt;Translation Bot&lt;/a&gt;, I created another multi-step function for our &lt;a href="http://www.botstation.com/products/stbot/about.php" target="_blank" title="Sametime bot homepage"&gt;Sametime bot&lt;/a&gt;. It shows current exchange rates between different currencies (from Yahoo Finance).&lt;br /&gt;You can try it here:&lt;br /&gt;&lt;a href="http://www.botstation.com/sametime/bot_currency.html" target="_blank" title="Sametime Bot"&gt;Currency Exchange Sametime bot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Instructions:&lt;br /&gt;1) Type 1 and click "Say" button (or press Enter key).&lt;br /&gt;2) Type 2 to set Euro as source currency and press Enter key.&lt;br /&gt;3) Type 7 to set Swedish crown as target currency and press Enter key.&lt;br /&gt;The result is the current exchange rate according to Yahoo finance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/SJdBSSr70yI/AAAAAAAAAFU/GricsA8voGQ/s1600-h/ScreenShot001.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/SJdBSSr70yI/AAAAAAAAAFU/GricsA8voGQ/s200/ScreenShot001.jpg" border="0" id="BLOGGER_PHOTO_ID_5230721274723685154" /&gt;&lt;/a&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/SJdBaP-wa3I/AAAAAAAAAFc/R9363GpUMtE/s1600-h/ScreenShot002.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/SJdBaP-wa3I/AAAAAAAAAFc/R9363GpUMtE/s200/ScreenShot002.jpg" border="0" id="BLOGGER_PHOTO_ID_5230721411436276594" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-4802791613890406233?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/4802791613890406233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=4802791613890406233' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4802791613890406233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4802791613890406233'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/08/sametime-bot-shows-currency-exchange.html' title='Sametime bot shows currency exchange rates'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/SJdBSSr70yI/AAAAAAAAAFU/GricsA8voGQ/s72-c/ScreenShot001.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-2851024961163172877</id><published>2008-08-17T02:50:00.000-07:00</published><updated>2008-08-17T03:15:11.418-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Another Javascript feature</title><content type='html'>Javascript uses pointers when assigning objects. This can lead to unexpected results for those who are used to work with LotusScript and Visual Basic, where data is copied to the new object and is no longer connected to the original object.&lt;br /&gt;&lt;br /&gt;In the example below note that date2 object was not deliberately changed after it was initially set, but still at the end of the script it gets a new value which is the same as the changed date1 object.&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;var date1=new Date();&lt;br /&gt;&lt;strong&gt;var date2&lt;/strong&gt;=date1;&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;alert(date2);&lt;/font&gt; //shows Sun &lt;em&gt;Aug 17 &lt;/em&gt;11:46:50 UTC+0200 2008&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;date1.setMonth(5);&lt;br /&gt;date1.setDate(9);&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="red"&gt;&lt;strong&gt;alert(date2);&lt;/strong&gt;&lt;/font&gt; //shows Mon &lt;em&gt;Jun 9&lt;/em&gt; 11:46:50 UTC+0200 2008&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="javascript:var date1=new Date();var date2=date1;alert(date2);date1.setMonth(5);date1.setDate(9);alert(date2); "&gt;run example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It also works in the opposite direction: if you change date2, the date1 will also be changed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-2851024961163172877?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/2851024961163172877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=2851024961163172877' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2851024961163172877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2851024961163172877'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/08/another-javascript-feature.html' title='Another Javascript feature'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-4123078209649596980</id><published>2008-08-04T11:23:00.000-07:00</published><updated>2008-08-04T11:25:39.612-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>Why javascript doesn't like August and September in date validation</title><content type='html'>Do you like August and September months? Well, then bad news, because JavaScript doesn't like them. Using &lt;strong&gt;parseInt&lt;/strong&gt; function without base parameter to convert from text to number when validating month number 08 gives 0.  &lt;br /&gt;This is true only for August(month "08") and September(month "09"), so it can take a while until the error is discovered. Why is that happening? Well, probably because genious developers of Javascript API thought that people use octal (base8) as default. Numbers until 08(August, put as "08" in dates) are converted correctly because they are same in octal as in base10, and numbers after 09 are recognized correctly because they(almost never) have a non-zero leading number. In between we have our poor "08" and "09".&lt;br /&gt;&lt;strong&gt;Fortunately&lt;/strong&gt;, there is a parameter you can add to parseInt function which specifies the base, e.g. parseInt("09", &lt;strong&gt;10&lt;/strong&gt;). But was it really so smart to use base8 as default for numbers beginning with 0 instead of always using base10 and requiring user to explicitely enter parameter for &lt;strong&gt;other&lt;/strong&gt; (less used) bases?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alternatives for parseInt are parseFloat and Number functions:&lt;br /&gt;&lt;br /&gt;&lt;font color="red"&gt;&lt;strong&gt;Doesn't work correctly:&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a href="javascript:alert(parseInt('09'))"&gt;javascript:alert(parseInt("09"))&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;&lt;strong&gt;Works correctly:&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;a href="javascript:alert(parseInt('09', 10))"&gt;javascript:alert(parseInt("09", 10))&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:alert(Number('09'))"&gt;javascript:alert(Number("09"))&lt;/a&gt;&lt;br /&gt;&lt;a href="javascript:alert(parseFloat('09'))"&gt;javascript:alert(parseFloat("09"))&lt;/a&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-4123078209649596980?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/4123078209649596980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=4123078209649596980' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4123078209649596980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4123078209649596980'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/08/why-javascript-doesnt-like-august-and.html' title='Why javascript doesn&apos;t like August and September in date validation'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-8601327672483726938</id><published>2008-07-28T11:41:00.000-07:00</published><updated>2008-07-28T07:59:53.483-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime Widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Sametime bot for text translations</title><content type='html'>As I wrote in my previous blog post "&lt;a href="http://dominounlimited.blogspot.com/2008/02/lotusscript-to-translate-text-between.html" target="_blank"&gt;LotusScript to translate text between languages&lt;/a&gt;", I have created a function in &lt;a href="http://www.botstation.com/products/stbot/about.html" target="_blank"&gt;Sametime bot&lt;/a&gt; to translate text between languages using Google Translate. Now this bot functionality is available for everyone to test through STWidget-Sametime AJAX web client.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Link to live demo&lt;/strong&gt;: &lt;a href="http://www.botstation.com/sametime/bot_translate.html"  target="_blank" title="Sametime bot translation"&gt;Sametime translation bot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quick instructions: &lt;br /&gt;1) type 1 (to choose "Translate between languages" option)  and then press Enter or click "Say" button.&lt;br /&gt;2) type 1 (to choose English language) and then press Enter.&lt;br /&gt;3) then type 2 (to choose German language) and Enter.&lt;br /&gt;4) then type text you want to get translated, e.g. "I love programming" and Enter.&lt;br /&gt;&lt;br /&gt;To fetch the translation result, Bot makes a web call to Google Translate service, using MSXML2 object in a  slightly modified LotusScript code as in the old post. Here is an animated picture of the translation process:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/SIuL3OKM0DI/AAAAAAAAAFM/h4YQhlcepTc/s1600-h/sametime_bot_translate.gif" target="_blank" title="Sametime bot animation"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/SIuL3OKM0DI/AAAAAAAAAFM/h4YQhlcepTc/s200/sametime_bot_translate.gif" border="0" alt="Sametime translation bot animation"  id="BLOGGER_PHOTO_ID_5227425573303537714" /&gt;&lt;/a&gt;&lt;br&gt;&lt;br /&gt;&lt;font size="1"&gt;Click picture to see animation&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Some other funny functions available through the same bot are "&lt;a href="http://www.botstation.com/sametime/bot_joke.html" target="_blank"&gt;joke&lt;/a&gt;", "&lt;a href="http://www.botstation.com/sametime/bot_wisdom.html" target="_blank"&gt;wisdom&lt;/a&gt;", "&lt;a href="http://www.botstation.com/sametime/bot_morse.html" target="_blank"&gt;morse&lt;/a&gt;" and "&lt;a href="http://www.botstation.com/sametime/bot_bible.html" target="_blank"&gt;random bible quote&lt;/a&gt;". The main difference between these small functions and Translation function is that Translation works in multi-step mode, prompting user with available choices, thus eliminating the need for user to remember the syntax of the commands. Another multi-step function is "&lt;a href="http://www.botstation.com/products/stbot/stwidget_sametime_bot.php" target="_blank"&gt;Company info&lt;/a&gt;" where user can get virtually any corporate info through Sametime bot. &lt;br /&gt;&lt;br /&gt;All of the example functions above are handled by the same bot instance, so users do not need to add a separate bot to their buddy list for each new function added by developer/admin to bot. &lt;br /&gt;&lt;br /&gt;In one of my next posts I will show a screencapture video how to develop a "whois username" function using @Formula language and how to create multi-step "Translation" function. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-8601327672483726938?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/8601327672483726938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=8601327672483726938' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8601327672483726938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8601327672483726938'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/07/sametime-bot-for-text-translations.html' title='Sametime bot for text translations'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/SIuL3OKM0DI/AAAAAAAAAFM/h4YQhlcepTc/s72-c/sametime_bot_translate.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-8810987057297126352</id><published>2008-07-23T14:12:00.000-07:00</published><updated>2008-07-23T23:36:02.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Domino'/><title type='text'>Automated login to Domino by HTTP POST request</title><content type='html'>In a comment to Joachim Dagerot's blog post "&lt;a href="http://www.dagerot.com/2008/02/13/login-in-with-just-url-arguments/" target="_blank"&gt;Login in with just url-arguments&lt;/a&gt;"  I mentioned that it's possible to login without exposing login credentials in the URL. It is done by making a POST request to Domino web server, instead of GET request. User still can see login credentials if he views page's HTML source, but they are at least not shown directly in the URL. Showing login details in URL makes it possible for bypassers to see your password, it's saved in the browser's URL history and it's also logged in the Domino log database, which is not so good as anyone with access to the log database can see them. Such URL might even get indexed by Google and show up in the search results.&lt;br /&gt;&lt;br /&gt;To additionally secure automated login, an extra redirect can be used, so the page itself does not contain the password. Or even better and without any password exposure is a page/form which calls an agent which makes login in background and then passes the session cookie back to the initial page. But that's a topic for another blog post. Here i will show the simplest solution.&lt;br /&gt;&lt;br /&gt;&lt;font color="#660066"&gt;&lt;br /&gt;&amp;lt;form action="/names.nsf?Login" method="POST" name="LogonForm"&amp;gt; &lt;br /&gt;&amp;lt;input type="hidden" name="Username" value="myname"&amp;gt;&lt;br /&gt;&amp;lt;input type="hidden" name="Password" value="mypassword"&amp;gt;&lt;br /&gt;&amp;lt;input type="hidden" name="RedirectTo" value="/anotherdb.nsf/view?OpenView"&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;document.forms[0].submit();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_JEVmVtrdoiE/SIgeP3LBPHI/AAAAAAAAAE8/fK7uHCVzesw/s1600-h/loginpost.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_JEVmVtrdoiE/SIgeP3LBPHI/AAAAAAAAAE8/fK7uHCVzesw/s320/loginpost.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5226460625420500082" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When user opens this page, the first form gets automatically submitted to "&lt;strong&gt;/names.nsf?Login&lt;/strong&gt;". User gets logged in to Domino with username and password specified in the form's fields and then redirected to another database according to the value in RedirectTo field.&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotus+Domino" rel="tag"&gt;Lotus Domino&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-8810987057297126352?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/8810987057297126352/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=8810987057297126352' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8810987057297126352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8810987057297126352'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/07/automated-login-to-domino-by-http-post.html' title='Automated login to Domino by HTTP POST request'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_JEVmVtrdoiE/SIgeP3LBPHI/AAAAAAAAAE8/fK7uHCVzesw/s72-c/loginpost.gif' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-4401225337671600934</id><published>2008-06-01T09:39:00.000-07:00</published><updated>2008-06-01T10:39:13.222-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>LotusScript's List bug strikes again</title><content type='html'>Last week i was working with a LotusScript agent which uses &lt;strong&gt;List data type&lt;/strong&gt; for storing text values. The agent was not working properly as it could not find matching values in the second list(which was populated with the same listtags as the first list). I suspected it was something wrong with processing of List, but couldn't find what part of the code was wrong, as I got no error messages. The List was more than 1000 elements and in the debugger I could only see about 200 first elements, which was not very helpful. I have earlier experienced &lt;strong&gt;similar problem with IsNull(mylist("listtag"))&lt;/strong&gt; function, but in this agent there were no such IsNull checks (use IsElement instead of IsNull). After 2 hours of commenting parts of the code out, I finally found what was wrong. The fact of calling &lt;strong&gt;tst&lt;/strong&gt; procedure with nonexistant list value mylist("b") as parameter, creates "b" list element with value ""! It does not generate "List item does not exist" error message as one would expect!&lt;br /&gt;&lt;br /&gt;I have hard to think that it works "as designed", as a programmer clearly doesn't want to create a new list element by simply passing it to a procedure.&lt;br /&gt;Using IsElement(mylist("b")) before calling the procedure/function helps to avoid the problem, but that shouldn't be necessary, as the programmer expects an error if the List element does not exist.&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;  Dim mylist List As String&lt;br /&gt;  mylist("a")="a"&lt;br /&gt;  ' Msgbox mylist("b")   'properly results in error "List item does not exist"&lt;br /&gt; &lt;br /&gt;  Call tst(mylist("b")) 'erroneously creates "b" list element&lt;br /&gt;&lt;br /&gt;  ' Msgbox Isnull(mylist("b")) 'erroneously creates "b" list element&lt;br /&gt;&lt;br /&gt;  Msgbox mylist("b")   'shows "" as list value for "b" instead of an error&lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Sub tst(tmp)&lt;br /&gt; &lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/lotusscript" rel="tag"&gt;LotusScript&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-4401225337671600934?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/4401225337671600934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=4401225337671600934' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4401225337671600934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4401225337671600934'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/06/lotusscripts-list-bug-strikes-again.html' title='LotusScript&apos;s List bug strikes again'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-2326082816691083863</id><published>2008-03-02T03:30:00.000-08:00</published><updated>2008-03-02T03:56:28.725-08:00</updated><title type='text'>Short tip: connect to remote Windows desktop console session</title><content type='html'>Just a short tip which I discovered today. &lt;br /&gt; &lt;br /&gt;When connecting to a remote Windows server using the standard "Remote Desktop" client program, you are connected to a user session and can not see what happens on the server's main console (the one which you get when you login physically on the server). You can not, for example, see the Domino server console.&lt;br /&gt;&lt;br /&gt;But there is a special parameter which can be used with Remote Desktop client to login into Windows console session instead of user session.&lt;br /&gt;In Start/Run menu type:&lt;br /&gt;&lt;strong&gt;mstsc /console&lt;/strong&gt;&lt;br /&gt;use your regular username and password, and you will be logged in directly to Windows console. I guess that you must have some kind of admin privilegies to do that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-2326082816691083863?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/2326082816691083863/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=2326082816691083863' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2326082816691083863'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2326082816691083863'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/03/short-tip-connect-to-remote-windows.html' title='Short tip: connect to remote Windows desktop console session'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-1354808841093425101</id><published>2008-02-23T11:09:00.000-08:00</published><updated>2008-02-23T12:24:40.950-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>LotusScript to translate text between languages</title><content type='html'>I am currently working to update our &lt;a href="http://www.botstation.com/products/stbot/about.php" target="_blank"&gt;Sametime Bot&lt;/a&gt; with a new feature: translation of text. It will be a prompted flow where user is asked for input language, output language and text. The answer from the bot is the translated text. The translation is done by using a LotusScript agent which gets the translation from Google Translate page. LotusScript agent uses MSXML object for web communication with the Goggle server.&lt;br /&gt;See below for an example of translation between English and German.&lt;br /&gt;Pictures show the messagebox for German, Spanish, French and Russian translations. The translation is of course not perfect, but enough good to understand the general meaning. &lt;br /&gt;The best automated translator I've seen so far is by the company "Prompt": http://www.e-promt.com/  It produces very correct translations and even sees the difference between "hello all Domino developers" and "hello to all Domino developers".&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt; Dim xmlhttp, MySoap&lt;br /&gt; Dim StartTag As String,EndTag As String, FromLang As String, ToLang As String, TextToTranslate As String&lt;br /&gt; StartTag&lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;|&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;div id&lt;font color="4444FF"&gt;=&lt;/font&gt;result_box dir&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;ltr&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt;&lt;font color="4444FF"&gt;|&lt;/font&gt;&lt;br /&gt; EndTag &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#008000"&gt;&amp;quot;&amp;lt;/div&amp;gt;&amp;quot;&lt;/font&gt;&lt;br /&gt; FromLang&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;en&amp;quot;&lt;/font&gt;&lt;br /&gt; ToLang&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;de&amp;quot;&lt;/font&gt;&lt;br /&gt; TextToTranslate&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;hello all Domino developers&amp;quot;&lt;/font&gt;&lt;br /&gt; TextToTranslate&lt;font color="4444FF"&gt;=&lt;/font&gt;Replace(TextToTranslate,&lt;font color="#008000"&gt;&amp;quot; &amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;%20&amp;quot;&lt;/font&gt;)&lt;br /&gt; &lt;br /&gt; WebServer&lt;font color="4444FF"&gt;=&lt;/font&gt;&lt;font color="#008000"&gt;&amp;quot;http://translate.google.com/translate_t?text=&amp;quot;&lt;/font&gt;+TextToTranslate+&lt;font color="#008000"&gt;&amp;quot;&amp;amp;hl=en&amp;amp;langpair=&amp;quot;&lt;/font&gt;+FromLang+&lt;font color="#008000"&gt;&amp;quot;|&amp;quot;&lt;/font&gt;+ToLang+&lt;font color="#008000"&gt;&amp;quot;&amp;amp;ie=utf-8&amp;quot;&lt;/font&gt;&lt;br /&gt; Set xmlhttp &lt;font color="4444FF"&gt;=&lt;/font&gt; CreateObject(&lt;font color="#008000"&gt;&amp;quot;MSXML2.ServerXMLHTTP&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.&lt;font color="a52a2a"&gt;&lt;strong&gt;open&lt;/strong&gt;&lt;/font&gt;(&lt;font color="#008000"&gt;&amp;quot;GET&amp;quot;&lt;/font&gt;, WebServer, False)&lt;br /&gt; Call xmlhttp.setRequestHeader(&lt;font color="#008000"&gt;&amp;quot;Content-Type&amp;quot;&lt;/font&gt;, &lt;font color="#008000"&gt;&amp;quot;text/html; charset=utf-8&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.setRequestHeader(&lt;font color="#008000"&gt;&amp;quot;User-Agent&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.setRequestHeader(&lt;font color="#008000"&gt;&amp;quot;Accept&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.setRequestHeader(&lt;font color="#008000"&gt;&amp;quot;Accept-Language&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;sv&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.setRequestHeader(&lt;font color="#008000"&gt;&amp;quot;Content-Type&amp;quot;&lt;/font&gt;,&lt;font color="#008000"&gt;&amp;quot;application/x-www-form-urlencoded&amp;quot;&lt;/font&gt;)&lt;br /&gt; Call xmlhttp.send(Null)&lt;br /&gt; &lt;br /&gt; strxml &lt;font color="4444FF"&gt;=&lt;/font&gt; xmlhttp.responseText&lt;br /&gt; &lt;br /&gt; Msgbox Strleft(Strright(strxml,StartTag),EndTag) &lt;br /&gt; &lt;br /&gt;End Sub&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://bp2.blogger.com/_JEVmVtrdoiE/R8B8QVRfuNI/AAAAAAAAAD0/B7uNaFqUN-U/s1600/ScreenShot342.gif"&gt;&lt;img src="http://bp1.blogger.com/_JEVmVtrdoiE/R8B8LFRfuMI/AAAAAAAAADs/SA1RB7xJR2w/s1600/ScreenShot343.gif"&gt;&lt;br /&gt;&lt;img src="http://bp3.blogger.com/_JEVmVtrdoiE/R8B8DlRfuLI/AAAAAAAAADk/wmVNYhouHj4/s1600/ScreenShot344.gif"&gt;&lt;img src="http://bp1.blogger.com/_JEVmVtrdoiE/R8B75FRfuKI/AAAAAAAAADc/ipf0g6EHz2E/s1600/ScreenShot345.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/LotusScript" rel="tag"&gt;LotusScript&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-1354808841093425101?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/1354808841093425101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=1354808841093425101' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1354808841093425101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1354808841093425101'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/02/lotusscript-to-translate-text-between.html' title='LotusScript to translate text between languages'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_JEVmVtrdoiE/R8B8QVRfuNI/AAAAAAAAAD0/B7uNaFqUN-U/s72-c/ScreenShot342.gif' height='72' width='72'/><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-428589781348394696</id><published>2008-02-03T09:02:00.000-08:00</published><updated>2008-02-03T09:36:43.373-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime Widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Sametime bot to read Lotusphere RSS feeds is updated</title><content type='html'>Hey folks! I am back from the long period of not blogging! And several more posts are in the pipeline, including DXL API for handling pictures/files, webcam API for spying on Notes users and Java agent to impersonate web users! :)&lt;br /&gt;&lt;br /&gt;Last week I've updated my Sametime bot which shows &lt;a href="http://dominounlimited.blogspot.com/2007/01/sametime-bot-shows-latest.html" target="_blank"&gt;blog posts in &lt;strong&gt;Lotusphere2007&lt;/strong&gt;&lt;/a&gt; category(on Technorati). Now it shows the last 20 posts for keyword &lt;strong&gt;Lotusphere2008&lt;/strong&gt;.&lt;br /&gt;You can try it here: &lt;a href="http://www.botstation.com/sametime/stwidget_lotusphere.html" target="_blank"&gt;Sametime bot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you want to see &lt;strong&gt;another blog category &lt;/strong&gt;available through STWidget and Sametime Bot, drop me a line and I'll create a new function and an appropriate STWidget link. Or do you have an idea for a cool Bot function not related to RSS? Drop me a line and I'll see what I can do :)&lt;br /&gt;&lt;br /&gt;For sample of LotusScript agent fetching the RSS data from Technorati, see the old post: &lt;a href="http://dominounlimited.blogspot.com/2007/01/sametime-bot-shows-latest.html" target="_blank"&gt;Sametime bot shows latest Lotusphere2007 blogs&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotusphere2008" rel="tag"&gt;Lotusphere2008&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-428589781348394696?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/428589781348394696/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=428589781348394696' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/428589781348394696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/428589781348394696'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2008/02/sametime-bot-to-read-lotusphere-rss.html' title='Sametime bot to read Lotusphere RSS feeds is updated'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-7142552578349615121</id><published>2007-10-11T09:21:00.000-07:00</published><updated>2007-10-11T03:34:51.637-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='vbscript'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Using regex for matching multiple words anywhere in the sentence</title><content type='html'>This blog post is to save time for those developers who want to use Regular Expressions to determine whether ALL of the multiple words are located anywhere in the input string. It took me several hours to make it work right for 3 sets with 3 alternative words in each set. Google was not to much help, only a couple of pages contained useful examples. &lt;br /&gt;&lt;br /&gt;It began with me implementing regex (regular expressions) matching mechanism for our &lt;a href="http://www.botstation.com/products/stbot/about.php" taget="_blank"&gt;Sametime Bot&lt;/a&gt; to make a more flexible pattern-matching solution than current wildcard matching. So that instead of simply specifying *helpdesk* to match all incoming questions where word "helpdesk" is present, with regex it is possible to fine-tune the match and handle "what is phone number to helpdesk?" incoming question and "How can I contact helpdesk on weekends" question differently. Matching capabilities of regex are amazing, there are very little operations you can't do with it.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Pattern "any one word is enough":&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;helpdesk|assistance|support&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;Matches for: Can I get some &lt;strong&gt;assistance&lt;/strong&gt;? How can I contact &lt;strong&gt;support&lt;/strong&gt;? Does &lt;strong&gt;helpdesk&lt;/strong&gt; have an email address?&lt;br /&gt;Not matches for: What's the time? Can you assist me?&lt;br&gt;&lt;br /&gt;-------------------------------------&lt;br&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Pattern "all words must be present":&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;^(?=.*?(phone|fone|call|contact))(?=.*?(help|assistance|support)).*$&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;Matches for: What is the &lt;strong&gt;phone&lt;/strong&gt; number to &lt;strong&gt;helpdesk&lt;/strong&gt;? Can I &lt;strong&gt;call&lt;/strong&gt; to &lt;strong&gt;support&lt;/strong&gt; department from my cell phone? How can I &lt;strong&gt;contact&lt;/strong&gt; &lt;strong&gt;helpdesk&lt;/strong&gt;?&lt;br /&gt;Not matches for: I need help! I want to call my mom. My phone doesn't work. Charlie, Charlie, this is Bravo, send more air support!&lt;br&gt;&lt;br /&gt;-------------------------------------&lt;br&gt;&lt;br /&gt;&lt;em&gt;&lt;strong&gt;Pattern "all words must be present, but NOT that one":&lt;/strong&gt;&lt;/em&gt;&lt;br /&gt;&lt;strong&gt;^(?=.*?(phone|fone|call|contact))(?=.*?(help|assistance|support))((&lt;font color="red"&gt;?!weekend|night&lt;/font&gt;).)*$&lt;/strong&gt;&lt;br&gt;&lt;br /&gt;Matches for: I want to come in &lt;b&gt;contact&lt;/b&gt; with &lt;b&gt;support&lt;/b&gt; now. I need &lt;b&gt;phone&lt;/b&gt; &lt;b&gt;assistance&lt;/b&gt; to install ABC software today.&lt;br /&gt;Not matches for: What number can i call on &lt;b&gt;weekends&lt;/b&gt; to get help with this tool? What phone number can I call to contact helpdesk at &lt;b&gt;night&lt;/b&gt;?&lt;br /&gt;&lt;br&gt;-------------------------------------&lt;br&gt;&lt;br /&gt;&lt;br /&gt;With a little help from &lt;a href="http://lekkimworld.com/2005/09/25/1127661564236.html" target="_blank"&gt;blog post on lekkimworld&lt;/a&gt;, I created this LotusScript testing module so the creator of the pattern can test the pattern functionality by providing a text string which is matched to the pre-defined regex expression. The result of the test is either Match or Not match.&lt;br /&gt;&lt;br /&gt;Sub Click(Source As Button)&lt;br /&gt; Dim workspace As New NotesUIWorkspace&lt;br /&gt; Dim uidoc As NotesUIDocument&lt;br /&gt; Dim doc As NotesDocument&lt;br /&gt; Set uidoc = workspace.CurrentDocument&lt;br /&gt; Set doc=uidoc.Document&lt;br /&gt; Dim regexp As Variant&lt;br /&gt; Dim result As Integer&lt;br /&gt; Set regexp = CreateObject("VBScript.RegExp")&lt;br /&gt; regexp.IgnoreCase = True&lt;br /&gt; uinput=Inputbox("Input text to test for pattern match:", "Regex tester", userinput)&lt;br /&gt; &lt;br /&gt; userinput=uinput&lt;br /&gt; regexp.Pattern = doc.RegmatchSubject(0)&lt;br /&gt; result= regexp.Test(userinput)&lt;br /&gt; If result = -1 Then&lt;br /&gt;  Msgbox "Regex match found!"&lt;br /&gt; Else&lt;br /&gt;  Msgbox "Regex match NOT found!"&lt;br /&gt; End If&lt;br /&gt; Set  regexp=Nothing&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Online demo of regex questions to Bot: &lt;a href="http://www.botstation.com/sametime/bot_regex.html" target="_blank"&gt;http://www.botstation.com/sametime/bot_regex.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_JEVmVtrdoiE/RvaaLHRgVQI/AAAAAAAAADU/1xuZs3A4ciU/s1600-h/regex.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_JEVmVtrdoiE/RvaaLHRgVQI/AAAAAAAAADU/1xuZs3A4ciU/s400/regex.jpg" border="0" alt="Sametime Bot regex" id="BLOGGER_PHOTO_ID_5113443942647485698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;Sametime bot&lt;/a&gt;  &lt;a href="http://technorati.com/tag/regex" rel="tag"&gt;regex&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-7142552578349615121?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/7142552578349615121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=7142552578349615121' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7142552578349615121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7142552578349615121'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/09/using-regex-for-matching-multiple-words.html' title='Using regex for matching multiple words anywhere in the sentence'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_JEVmVtrdoiE/RvaaLHRgVQI/AAAAAAAAADU/1xuZs3A4ciU/s72-c/regex.jpg' height='72' width='72'/><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-5080641964687906396</id><published>2007-09-12T13:11:00.000-07:00</published><updated>2009-04-02T04:32:42.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><category scheme='http://www.blogger.com/atom/ns#' term='Formula'/><title type='text'>Morse code in @Formula language and as a function in Sametime Bot</title><content type='html'>Here comes another post about using Lotus Notes' @Formula programming language for accomplishing different tasks. This time I'll show how to convert text to &lt;a href="http://en.wikipedia.org/wiki/Morse_code" target="_blank"&gt;Morse code&lt;/a&gt;. Morse code is a method for transmitting telegraphic information, using standardized sequences of short and long elements to represent the letters, numerals, punctuation and special characters of a message. &lt;br /&gt;&lt;br /&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/thumb/9/9c/J38TelegraphKey.jpg/250px-J38TelegraphKey.jpg"&gt;  &lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/9/92/Intcode.png/250px-Intcode.png"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The @Formula code is rather short. First we by specify 2 arrays: one with letters and another with corresponding morse code. Then we simply use @ReplaceSubstring function to replace the letters in the input text to corresponding elements in the morse array. As the number of elements in the 2 arrays are the same, @ReplaceSubstring function applies 1-to-1 element replacement.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;letters:=" ":"A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z":"1":"2":"3":"4":"5":"6":"7":"8":"9":"0";&lt;br /&gt;morse:="     ":".-":"-...":"-.-.":"-..":".":"..-.":"--.":"....":"..":".---":"-.-":".-..":"--":"-.":"---":".--.":"--.-":".-.":"...":"-":"..-":"...-":".--":"-..-":"-.--":"--..":".----":"..---":"...--":"....-":".....":"-....":"--...":"---..":"----.":"-----";&lt;br /&gt;plaintext:="Morse code";&lt;br /&gt;encoded:=@ReplaceSubstring(@UpperCase(plaintext);letters;morse+"  ");&lt;br /&gt;encoded&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To reverse the process and convert from morse code to plain text following code can be used:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;letters:="A":"B":"C":"D":"E":"F":"G":"H":"I":"J":"K":"L":"M":"N":"O":"P":"Q":"R":"S":"T":"U":"V":"W":"X":"Y":"Z":"1":"2":"3":"4":"5":"6":"7":"8":"9":"0";&lt;br /&gt;morse:=".-":"-...":"-.-.":"-..":".":"..-.":"--.":"....":"..":".---":"-.-":".-..":"--":"-.":"---":".--.":"--.-":".-.":"...":"-":"..-":"...-":".--":"-..-":"-.--":"--..":".----":"..---":"...--":"....-":".....":"-....":"--...":"---..":"----.":"-----";&lt;br /&gt;encoded:="--  ---  .-.  ...  .         -.-.  ---  -..  .  ";&lt;br /&gt;plain:=@ReplaceSubstring(@Implode(@Replace(@Explode(@ReplaceSubstring(encoded;"         ";" _ ");" ");morse;letters);"");"_";" ");&lt;br /&gt;plain&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I also implemented same morse formula as a function in Botstation Bot Framework, where user passes a text string to &lt;a href="http://www.botstation.com/products/stbot/about.php"&gt;Sametime bot&lt;/a&gt; and receives the morse code as output. Here is a picture and a live example.&lt;br /&gt;Bot command syntax: &lt;br /&gt;morse HERE IS TEXT TO ENCODE&lt;br /&gt;demorse ..         .-..  ---  ...-  .         ...  .-  --  .  -  ..  --  .&lt;br /&gt;&lt;br /&gt;Morse Bot online example: &lt;a href="http://www.botstation.com/sametime/stwidget_morse.php" target="morse"&gt;http://www.botstation.com/sametime/stwidget_morse.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/RucS1PYEg_I/AAAAAAAAADM/VwQvgNAJj98/s1600-h/morse_sametime.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/RucS1PYEg_I/AAAAAAAAADM/VwQvgNAJj98/s400/morse_sametime.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5109073008144974834" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/lotus+domino" rel="tag"&gt;Lotus Domino&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;Sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-5080641964687906396?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/5080641964687906396/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=5080641964687906396' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5080641964687906396'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/5080641964687906396'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/09/morse-code-in-formula-language-and-as.html' title='Morse code in @Formula language and as a function in Sametime Bot'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/RucS1PYEg_I/AAAAAAAAADM/VwQvgNAJj98/s72-c/morse_sametime.gif' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-4924135940677282789</id><published>2007-09-10T14:08:00.000-07:00</published><updated>2009-04-30T04:28:00.155-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><category scheme='http://www.blogger.com/atom/ns#' term='Formula'/><title type='text'>Remove HTML tags using one line of @Formula</title><content type='html'>When you need to remove HTML tags from HTML-formatted text, you can use following Domino @Formula: &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;@ReplaceSubstring(@ReplaceSubstring(OriginalText;"&amp;lt;br&amp;gt;":"&amp;lt;li&amp;gt;":"&amp;lt;ul&amp;gt;":"&amp;lt;/ul&amp;gt;";@NewLine:@NewLine:(@NewLine+@NewLine):(@NewLine+@NewLine));"&amp;lt;"+@Right(@Explode(OriginalText;"&amp;gt;");"&amp;lt;")+"&amp;gt;";"")&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;See attached picture for example of original HTML-formatted text and of resulting text where HTML tags are stripped out.&lt;br /&gt;&lt;br /&gt;The @Formula does following:&lt;br /&gt;1) Splits the original text using "&amp;lt;" as separator, creating an array of strings&lt;br /&gt;2) In each array element takes the text to the right of the "&amp;gt;" character, which gives us every HTML tag used in the original text, for example BR, B, U, LI, FONT&lt;br /&gt;3) Adds "&amp;lt;" and "&amp;gt;" to the calculated tags, so the array now consists of &amp;lt;BR&amp;gt;, &amp;lt;B&amp;gt;, &amp;lt;U&amp;gt;, &amp;lt;LI&amp;gt;, &amp;lt;FONT&amp;gt; etc.&lt;br /&gt;4) In the original text replaces the occurances of computed tags to empty string "", thus stripping HTML out of text.&lt;br /&gt;&lt;br /&gt;As we often want to keep line breaks to keep the original look, then before replacing the tags with empty string, we replace &amp;lt;BR&amp;gt;, &amp;lt;UL&amp;gt;, &amp;lt;LI&amp;gt; with a hard new line. Without handling line breaks the code is much shorter:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;@ReplaceSubstring(OriginalText;"&amp;lt;"+@Right(@Explode(OriginalText;"&amp;gt;");"&amp;lt;")+"&amp;gt;";"")&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/RuWz2vYEg-I/AAAAAAAAADE/hibwhqJdshk/s1600-h/removetags.gif"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/RuWz2vYEg-I/AAAAAAAAADE/hibwhqJdshk/s400/removetags.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5108687105333429218" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-4924135940677282789?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/4924135940677282789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=4924135940677282789' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4924135940677282789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4924135940677282789'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/09/remove-html-tags-using-one-line-of.html' title='Remove HTML tags using one line of @Formula'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/RuWz2vYEg-I/AAAAAAAAADE/hibwhqJdshk/s72-c/removetags.gif' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-277912544440163695</id><published>2007-06-03T14:04:00.000-07:00</published><updated>2007-06-03T14:13:30.487-07:00</updated><title type='text'>Prohibit users to trigger agents from web</title><content type='html'>When developing agents, it's easy to forget that every agent can be triggered from web with agentname?OpenAgent URL. Such agent invocation can cause unpredictable results.&lt;br /&gt;To avoid this, developer has these 2 options:&lt;br /&gt;1) Hide agent from web using property "hide design element from: Web browsers"&lt;br /&gt;2) Programmatically find out if the agent is triggered from web and exit&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;ev=Evaluate("@ClientType")&lt;br /&gt;&lt;strong&gt;If ev(0)="Web" Then Exit Sub  &lt;/strong&gt; 'Do not run agent if triggered from web&lt;br /&gt;'here goes the rest of the code &lt;br /&gt;'which will be executed in Notes client but not on web&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-277912544440163695?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/277912544440163695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=277912544440163695' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/277912544440163695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/277912544440163695'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/06/prohibit-users-to-trigger-agents-from.html' title='Prohibit users to trigger agents from web'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-1434824596579461317</id><published>2007-05-20T09:11:00.000-07:00</published><updated>2007-05-20T09:25:25.054-07:00</updated><title type='text'>Domino geek meeting in Stockholm</title><content type='html'>There will be a meeting in Stockholm (Sweden) on May 24, for people working with Lotus Domino and related software. The meeting is hosted by company Ekakan. &lt;br /&gt;Read more here: http://www.ekakan.com/g33k&lt;br /&gt;&lt;br /&gt;Technorati tags:&lt;br /&gt;&lt;a href="http://technorati.com/tag/g33k+date" rel="tag"&gt;g33k date&lt;/a&gt;, &lt;a href="http://technorati.com/tag/g33k+meet" work="" rel="tag"&gt;g33k meet&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-1434824596579461317?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/1434824596579461317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=1434824596579461317' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1434824596579461317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/1434824596579461317'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/05/domino-geek-meeting-in-stockholm.html' title='Domino geek meeting in Stockholm'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-7708135097213779513</id><published>2007-05-18T10:37:00.000-07:00</published><updated>2007-05-20T09:11:17.753-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Second Life'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>You've got a message... from the Second Life</title><content type='html'>Nicholas Chase has published an interesting &lt;a href="http://www-128.ibm.com/developerworks/edu/ls-dw-ls-stsl.html" target="_blank"&gt;article&lt;/a&gt; on IBM Developerworks. It's about making it possible to chat with people in &lt;a href="http://secondlife.com/" target="_blank"&gt;Second Life&lt;/a&gt; (SL), without opening SL program. That's a rather innovative solution and I think that many SL users would appreciate such possibility.&lt;br /&gt;&lt;br /&gt;It works like this:&lt;br /&gt;1) SL person clicks an object (a picture, a cube) which says "Type message now and it will be send to John Doe"&lt;br /&gt;2)SL person types the message, like "Hi John, can you hear me?", while being near the object.&lt;br /&gt;3)The object can "see" the typed text and sends it to a web servlet using HTTP call. Web server has a connection to Sametime server through Sametime bot.&lt;br /&gt;4) Sametime bot forwards the message to John Doe, who is logged in on Sametime network.&lt;br /&gt;5) John Doe has his Sametime client started and receives a message from Sametime Bot, saying "Hi John, can you hear me?".&lt;br /&gt;6) John Doe types "Yes, how can I help you?" as the response to bot in the Sametime client chat window.&lt;br /&gt;7) Bot outputs the answer to the servlet and the servlet outputs it back to the requesting SL object. &lt;br /&gt;8) The object shows message "Yes, how can I help you?" in SL. Anyone near the object can see the message. So you actually do not chat with the person, but with the object itself, which "broadcasts" your message to all people nearby. I think your response message can in theory also be a private message send only to that person, but the person's request message is always visible to others.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-128.ibm.com/developerworks/edu/ls-dw-ls-stsl.html" target="_blank"&gt;http://www-128.ibm.com/developerworks/edu/ls-dw-ls-stsl.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I will try to implement the suggested solution and see if it can be used for something more useful than spam-chatting with people near chatboxes :)&lt;br /&gt;Like having a "chat conference meeting" where people do not need to be logged in to SL, and actually do not even need an SL account. Can be interesting solution for chat-only SL meetings hold by companies like IBM. It should be possible to sort away chats from people other than the meeting's chairman. Just imagine an online conference where instead of people's avatars you see a lot of chatting cubes :)&lt;br /&gt;&lt;br /&gt;I will also try to connect the solution to my company's &lt;a href="http://www.botstation.com/products/stbot/about.php" target="_blank"&gt;Sametime Bot&lt;/a&gt;and use STWidget as a chat client. Having &lt;a href="http://www.botstation.com/products/stweb/about.php"´target="_blank"&gt;AJAX/Flash-based STWidget &lt;/a&gt;web client as chat interface would eliminate the need to download and install Sametime client.&lt;br /&gt;&lt;br /&gt;There are thousands of virtual shops in SL selling virual clothes, virtual furniture and stuff, and some shop owners would probably like to have an option to chat with customers even when they are not logged in to SL. Not sure if there is already some software for this &lt;a href="http://www.babasucks.com/2006/133/wii-secondlife/" target="_blank"&gt;#&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Following things are to consider when developing SL-to-Sametime chat solution for more than 1 user:&lt;br /&gt;* Noone in SL knows what Sametime is and don't care much either. A Sametime-less option would be great (Apache+MySQL+PHP).&lt;br /&gt;* Sametime bot must be hosted somewhere. &lt;br /&gt;* Same Sametime bot should be able to handle tens of thousands of objects and hundreds of simultaneous chats. I guess our &lt;a href="http://www.botstation.com/products/stbot/about.php" target="_blank"&gt;Sametime bot&lt;/a&gt; can be extended for this purpose, but it's still a difficult task. Probably several bots at several locations would be needed.&lt;br /&gt;* People do not have Sametime client and don't want one. Can be solved with &lt;a href="http://www.botstation.com/products/stweb/about.php" target="_blank"&gt;STWidget&lt;/a&gt; though.&lt;br /&gt;* People do not have access to Sametime servers. Can be temporary solved by using IBM's demo server.&lt;br /&gt;* The biggest question: will Sametime add too much overhead to the solution, without actually making it easier to develop and maintain? Theoretically a message can be sent directly to STWidget chat client without going through Sametime network.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I'll publish the results of my tests.&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-7708135097213779513?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7708135097213779513'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7708135097213779513'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/05/youve-got-message-from-second-life.html' title='You&apos;ve got a message... from the Second Life'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-2314658936144221299</id><published>2007-04-23T22:59:00.000-07:00</published><updated>2007-04-23T14:01:59.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Lotus Notes'/><title type='text'>Run scheduled agent every 60 seconds</title><content type='html'>The shortest time between executions of a scheduled agent is 5 minutes. But very often you want to run some important function with only 1 minute interval. Your function takes maybe only 2 seconds to run, but you still are required to wait 5 minutes before it can be started again at the next agent invocation.&lt;br /&gt;&lt;br /&gt;The agent I created makes it possible to simulate running agent every 60 seconds, or even every 2 seconds if you wish so. Some restrictions apply  :) &lt;br /&gt;&lt;br /&gt;It uses the fact that Notes counts 5 minutes from the START of the previous instance, not from the END. So if your agent takes 4 minutes 50 seconds to run, the next execution of the agent (assuming perfect conditions) will be just 10 seconds after the previous execution is finished. Delays caused by server load and other unforeseen delays can cause the agent to wait from 30 seconds to 2 minutes until the next execution. During many tests, I havent's observed execution delay longer than 2 minutes. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Even with the worst case 2 minutes delay, it's much better than standard 5 minutes delay. Note that this delay is only for the time between agent executions, within the started agent you can call the function every 2 seconds if you wish.&lt;br /&gt;&lt;br /&gt;What if the function takes more than 5 minutes to run? Well, the next instance of the agent will wait until the current instance is finished and then start after a certain delay. In my tests the delay was almost always 2 minutes. The delay if the agent ends 15 seconds BEFORE the 5-minutes period (4m 45s) was according to my tests &lt;b&gt;always&lt;/b&gt; 1 minute 5 seconds. These numbers will most certainly be somewhat different on your server. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The main disadvantage of this method is that one of the Agent Manager's threads will be constantly busy, so you would need to increase the number of agent threads to make it possible for other scheduled agents to run too.&lt;br /&gt;&lt;br /&gt;To enable your agent to run every 60 seconds, do following:&lt;br /&gt;1) In your existing agent, move the code from Initialize method to MainAction method.&lt;br /&gt;2) Paste the code from the agent below into the Initialize method of your agent.&lt;br /&gt;3) Change variable values as needed.&lt;br /&gt;&lt;br /&gt;Agent is configured to execute the MainAction() function every &lt;span style="font-weight: bold;"&gt;60 seconds&lt;/span&gt;s (runinterval), max &lt;span style="font-weight: bold;"&gt;100 times&lt;/span&gt; (runmaxtimes), during the 5 minute period (agentschedinterval).&lt;br /&gt;&lt;br /&gt;&lt;div style="FONT-SIZE: 8pt;COLOR: black;FONT-FAMILY: Verdana"&gt;Agent execution flow. Click to enlarge.&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_JEVmVtrdoiE/Ri0dXnfpi-I/AAAAAAAAAC8/-k4Mw00j5aU/s1600-h/ScreenShot114.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_JEVmVtrdoiE/Ri0dXnfpi-I/AAAAAAAAAC8/-k4Mw00j5aU/s400/ScreenShot114.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056730248182860770" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;"Gone in 60 seconds" agent:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;div style="font-family: sans-serif; font-size: 9pt; color: black;"&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Sub&lt;/font&gt; &lt;font style="color: blue;"&gt;Initialize&lt;/font&gt;&lt;br /&gt;    &lt;font style="color: green;"&gt;'Created by Andrei Kouvchinnikov, www.botstation.com&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font style="color: blue;"&gt;Print&lt;/font&gt;  &lt;font style="color: black;"&gt;"*******************  Agent started  *******************"&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; session &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;New&lt;/font&gt; &lt;font style="color: black;"&gt;NotesSession&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; db &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: black;"&gt;NotesDatabase&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; expectedruntime &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt; &lt;font style="color: green;"&gt;'time which take to run the function. required only for deciding about ending the loop.&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; runinterval &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt; &lt;font style="color: green;"&gt;'interval (sec) between runs&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; runmaxtimes &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt; &lt;font style="color: green;"&gt;' max number of times the function will run&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; runcounter &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt; &lt;font style="color: green;"&gt;'counter of number of times the function run&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; runstart &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; runend &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;font style="color: blue;"&gt;,&lt;/font&gt; rundiff &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; notimeleft &lt;font style="color: green;"&gt;' loop must be closed now, no time left to run another round&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; agentstart &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Long&lt;/font&gt; &lt;font style="color: green;"&gt;'initial time when agent started. required only for deciding about ending the loop.&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; agentschedule &lt;font style="color: blue;"&gt;As&lt;/font&gt; &lt;font style="color: blue;"&gt;Integer&lt;/font&gt; &lt;font style="color: green;"&gt;'nr of minutes this agent is scheduled to run. required only for deciding about ending the loop.&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; dynadjust &lt;font style="color: green;"&gt;'instead of hardcoded runtime value, use last run period for calculation of next period&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Dim&lt;/font&gt; uselongestperiod &lt;font style="color: green;"&gt;'instead of the last run period, use the longest period the function took to run &lt;/font&gt;&lt;br /&gt; &lt;br /&gt; expectedruntime&lt;font style="color: blue;"&gt;=&lt;/font&gt;10 &lt;font style="color: green;"&gt;' function is initially expected to take max 10 seconds&lt;/font&gt;&lt;br /&gt; runinterval&lt;font style="color: blue;"&gt;=&lt;/font&gt;60  &lt;font style="color: green;"&gt;' function is called with interval of X seconds&lt;/font&gt;&lt;br /&gt; runmaxtimes&lt;font style="color: blue;"&gt;=&lt;/font&gt;100  &lt;font style="color: green;"&gt;'if function's run time variates, you can limit max number of times function runs&lt;/font&gt;&lt;br /&gt; agentschedinterval&lt;font style="color: blue;"&gt;=&lt;/font&gt;5 &lt;font style="color: green;"&gt;'agent is scheduled to run every X minutes. From the agent properties.&lt;/font&gt;&lt;br /&gt; margininterval&lt;font style="color: blue;"&gt;=&lt;/font&gt;5 &lt;font style="color: green;"&gt;'nr of seconds to add to the final round. used for situations when function's execution time is 0.&lt;/font&gt;&lt;br /&gt; runcounter&lt;font style="color: blue;"&gt;=&lt;/font&gt;0&lt;br /&gt; dynadjust&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;True&lt;/font&gt;&lt;br /&gt; uselongestperiod&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;True&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; agentstart&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Timer&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font style="color: blue;"&gt;While&lt;/font&gt; runcounter&lt;font style="color: blue;"&gt;&amp;#60;&lt;/font&gt;runmaxtimes &lt;font style="color: blue;"&gt;And&lt;/font&gt; notimeleft&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;False&lt;/font&gt;&lt;br /&gt;  runstart&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Timer&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font style="color: blue;"&gt;Call&lt;/font&gt; MainAction&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  runend&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Timer&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;If&lt;/font&gt; dynadjust&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;True&lt;/font&gt; &lt;font style="color: blue;"&gt;Then&lt;/font&gt; expectedruntime&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;runend&lt;font style="color: blue;"&gt;-&lt;/font&gt;runstart&lt;font style="color: blue;"&gt;)&lt;/font&gt;  &lt;font style="color: green;"&gt;'dynamically adjust expected time to actual time it take to run the function&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;If&lt;/font&gt; uselongestperiod &lt;font style="color: blue;"&gt;Then&lt;/font&gt;&lt;br /&gt;   &lt;font style="color: blue;"&gt;If&lt;/font&gt; expectedruntime&lt;font style="color: blue;"&gt;&amp;#60;&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;runend&lt;font style="color: blue;"&gt;-&lt;/font&gt;runstart&lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;Then&lt;/font&gt; expectedruntime&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;runend&lt;font style="color: blue;"&gt;-&lt;/font&gt;runstart&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;If&lt;/font&gt;&lt;br /&gt;  timeleft&lt;font style="color: blue;"&gt;=&lt;/font&gt;runinterval&lt;font style="color: blue;"&gt;-&lt;/font&gt;expectedruntime&lt;br /&gt;  &lt;br /&gt;  &lt;font style="color: blue;"&gt;If&lt;/font&gt; &lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;agentschedinterval&lt;font style="color: blue;"&gt;*&lt;/font&gt;60&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;-&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;Timer&lt;/font&gt;&lt;font style="color: blue;"&gt;-&lt;/font&gt;agentstart&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;&amp;#60;&lt;/font&gt;timeleft&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;expectedruntime&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;expectedruntime&lt;font style="color: blue;"&gt;/&lt;/font&gt;100&lt;font style="color: blue;"&gt;*&lt;/font&gt;30&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;+&lt;/font&gt;margininterval&lt;font style="color: blue;"&gt;)&lt;/font&gt; &lt;font style="color: blue;"&gt;Then&lt;/font&gt;  &lt;font style="color: green;"&gt;'assumes that function can take 30% longer time to run than the last time&lt;/font&gt;&lt;br /&gt;   notimeleft&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;True&lt;/font&gt;&lt;br /&gt;   &lt;font style="color: blue;"&gt;Print&lt;/font&gt; &lt;font style="color: black;"&gt;"Exit. Function will not manage to finish one more run. Computed time: "&lt;/font&gt;&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;Cstr&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;Now&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: black;"&gt;" + "&lt;/font&gt;&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;Cstr&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;expectedruntime&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;expectedruntime&lt;font style="color: blue;"&gt;/&lt;/font&gt;100&lt;font style="color: blue;"&gt;*&lt;/font&gt;30&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;If&lt;/font&gt;&lt;br /&gt;  &lt;br /&gt;  &lt;font style="color: blue;"&gt;If&lt;/font&gt; timeleft&lt;font style="color: blue;"&gt;&amp;#62;&lt;/font&gt;0 &lt;font style="color: blue;"&gt;And&lt;/font&gt; notimeleft&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: purple;"&gt;False&lt;/font&gt; &lt;font style="color: blue;"&gt;Then&lt;/font&gt; &lt;br /&gt;   &lt;font style="color: blue;"&gt;Sleep&lt;/font&gt; timeleft &lt;font style="color: green;"&gt;'finished before the expected time. sleep until next execution.&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;Else&lt;/font&gt;&lt;br /&gt;   &lt;font style="color: blue;"&gt;Sleep&lt;/font&gt; &lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;agentschedinterval&lt;font style="color: blue;"&gt;*&lt;/font&gt;60&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;-&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;Timer&lt;/font&gt;&lt;font style="color: blue;"&gt;-&lt;/font&gt;agentstart&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;-&lt;/font&gt;margininterval &lt;font style="color: green;"&gt;'sleep X seconds-margin&lt;/font&gt;&lt;br /&gt;  &lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;If&lt;/font&gt;&lt;br /&gt;  runcounter&lt;font style="color: blue;"&gt;=&lt;/font&gt;runcounter&lt;font style="color: blue;"&gt;+&lt;/font&gt;1&lt;br /&gt; &lt;font style="color: blue;"&gt;Wend&lt;/font&gt;   &lt;br /&gt; &lt;font style="color: blue;"&gt;Print&lt;/font&gt;  &lt;font style="color: black;"&gt;"*******************  Agent finished  *******************"&lt;/font&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;Sub&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;font style="color: blue;"&gt;Sub&lt;/font&gt; MainAction&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt; &lt;font style="color: blue;"&gt;Print&lt;/font&gt; &lt;font style="color: black;"&gt;"Triggered "&lt;/font&gt;&lt;font style="color: blue;"&gt;+&lt;/font&gt;&lt;font style="color: blue;"&gt;Cstr&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;Now&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;font style="color: green;"&gt;%REM&lt;br /&gt;Here goes your code&lt;br /&gt;Delete demo code below.&lt;br /&gt;%END REM&lt;/font&gt;&lt;br /&gt; &lt;br /&gt; &lt;font style="color: blue;"&gt;Randomize&lt;/font&gt;&lt;br /&gt; sleeprand&lt;font style="color: blue;"&gt;=&lt;/font&gt;&lt;font style="color: blue;"&gt;Int&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;Rnd&lt;/font&gt;&lt;font style="color: blue;"&gt;(&lt;/font&gt;&lt;font style="color: blue;"&gt;)&lt;/font&gt;&lt;font style="color: blue;"&gt;*&lt;/font&gt;10&lt;font style="color: blue;"&gt;)&lt;/font&gt;  &lt;br /&gt; &lt;font style="color: blue;"&gt;Sleep&lt;/font&gt; sleeprand &lt;font style="color: green;"&gt;'Simulates time taken by the function's operations by sleeping X seconds&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;font style="color: blue;"&gt;End&lt;/font&gt; &lt;font style="color: blue;"&gt;Sub&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br/&gt; &lt;br/&gt; &lt;br/&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: sans-serif; BORDER: 1 solid Grey; margin : 0px 0px 0px 0px;"&gt;This LotusScript was converted to HTML using the &lt;b&gt;&lt;i&gt;ls2html&lt;/i&gt;&lt;/b&gt; routine,&lt;br&gt;provided by Julian Robichaux at &lt;a href="http://www.nsftools.com" target="_blank"&gt;nsftools.com&lt;/a&gt;.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="FONT-SIZE: 8pt;COLOR: black;FONT-FAMILY: Verdana"&gt;Output from the agent. Note the 1m 5s delay between instances.&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_JEVmVtrdoiE/Ri0bE3fpi8I/AAAAAAAAACs/Ml0kIZX2qds/s1600-h/ScreenShot117.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_JEVmVtrdoiE/Ri0bE3fpi8I/AAAAAAAAACs/Ml0kIZX2qds/s400/ScreenShot117.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5056727727037057986" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Lotus+Notes" rel="tag"&gt;Lotus Notes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-2314658936144221299?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/2314658936144221299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=2314658936144221299' title='38 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2314658936144221299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/2314658936144221299'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/04/run-scheduled-agent-every-60-seconds.html' title='Run scheduled agent every 60 seconds'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_JEVmVtrdoiE/Ri0dXnfpi-I/AAAAAAAAAC8/-k4Mw00j5aU/s72-c/ScreenShot114.jpg' height='72' width='72'/><thr:total>38</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-8558562037727696952</id><published>2007-04-05T10:19:00.000-07:00</published><updated>2007-04-06T15:42:21.117-07:00</updated><title type='text'>Happy Easter!</title><content type='html'>Happy Easter everyone!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bible reading for the 21st century: let Sametime bot to choose a random quote from the Bible, and then find that chapter in the book and continue reading from there!&lt;br /&gt;&lt;br /&gt;Link to online bot: &lt;a href="http://www.botstation.com/products/stweb/stwidget_bible.php" target="_blank"&gt;Random Bible Quote&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-8558562037727696952?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/8558562037727696952/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=8558562037727696952' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8558562037727696952'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/8558562037727696952'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/04/happy-easter.html' title='Happy Easter!'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-131138692938280450</id><published>2007-02-05T12:36:00.000-08:00</published><updated>2007-02-05T15:10:41.340-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>The fastest way to programmatically import data from Excel to Lotus Notes</title><content type='html'>There are several ways to import data from Excel to Lotus Notes/Domino. One of the most popular is the built-in Import menu option, which can be used manually and works fine in most cases.&lt;br /&gt;&lt;br /&gt;But if you want to import Excel data programmatically, the easiest way is to use Excel's OLE Automation Objects. There are several ways to read data from Excel using OLE, and the one most often mentioned is reading data cell-by-cell. This is a very slow method, and should only be used if you want to read/write special cell properties such color, fonts, etc.&lt;br /&gt;&lt;br /&gt;The &lt;strong&gt;fastest method&lt;/strong&gt; I found so far is to read and write Excel data using blocks of data with &lt;span style="FONT-WEIGHT: bold"&gt;ExcelSheet.Range&lt;/span&gt; method. You can with a single operation read the whole Excel sheet into an array, which extremely efficient, especially if there are many columns.&lt;br /&gt;&lt;br /&gt;I have created an example which can be used to &lt;span style="color:#ff6600;"&gt;&lt;strong&gt;import people from Excel to Notes&lt;/strong&gt;&lt;/span&gt;. Sample Excel file can be downloaded &lt;a href="http://www.botstation.com/code/people.xls" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Depending on the type of data and number of columns, the speed of this method can be up to 100 times faster than reading cell-by-cell. It imports &lt;strong&gt;100 person documents per second&lt;/strong&gt;, and the most of this time is used on creating new Notes documents, not on getting data from Excel.&lt;br /&gt;&lt;pre&gt;&lt;div    style="font-family:sans-serif;font-size:9pt;color:black;"&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Sub&lt;/span&gt; &lt;span style="color:blue;"&gt;Initialize&lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;'This agent imports person records from Excel to Notes. It uses Range method which makes it very fast. &lt;/span&gt;&lt;br /&gt;&lt;span style="color:green;"&gt;'Created by Botstation Technologies (www.botstation.com) &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; session &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; &lt;span style="color:black;"&gt;NotesSession&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; db &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:black;"&gt;NotesDatabase&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; doc &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:black;"&gt;NotesDocument&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; xlApp &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; xlsheet &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; xlwb &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; xlrange &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Variant&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; filename &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; currentvalue &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; batchRows &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; batchColumns &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; totalColumns &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; x &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; y &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; startrow &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; curRow &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Long&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; timer1 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Long&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; timer2 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Long&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; DataArray&lt;span style="color:blue;"&gt;,&lt;/span&gt; fieldNames&lt;span style="color:blue;"&gt;,&lt;/span&gt; hasData&lt;br /&gt;&lt;br /&gt;timer1&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;Timer&lt;/span&gt;&lt;br /&gt;filename&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:black;"&gt;"C:\people.xls"&lt;/span&gt;&lt;br /&gt;batchRows&lt;span style="color:blue;"&gt;=&lt;/span&gt;200 &lt;span style="color:green;"&gt;'process 200 rows at a time &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Set&lt;/span&gt; db&lt;span style="color:blue;"&gt;=&lt;/span&gt;session&lt;span style="color:blue;"&gt;.&lt;/span&gt;CurrentDatabase&lt;br /&gt;&lt;span style="color:blue;"&gt;Set&lt;/span&gt; xlApp &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:blue;"&gt;CreateObject&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;"Excel.Application"&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;xlApp&lt;span style="color:blue;"&gt;.&lt;/span&gt;Visible &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:purple;"&gt;True&lt;/span&gt; &lt;span style="color:green;"&gt;'set Excel program to run in foreground to see what is happening &lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Set&lt;/span&gt; xlwb&lt;span style="color:blue;"&gt;=&lt;/span&gt;xlApp&lt;span style="color:blue;"&gt;.&lt;/span&gt;Workbooks&lt;span style="color:blue;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;Open&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;filename&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Set&lt;/span&gt; xlsheet &lt;span style="color:blue;"&gt;=&lt;/span&gt;xlwb&lt;span style="color:blue;"&gt;.&lt;/span&gt;Worksheets&lt;span style="color:blue;"&gt;(&lt;/span&gt;1&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Redim&lt;/span&gt; fieldNames&lt;span style="color:blue;"&gt;(&lt;/span&gt;1 &lt;span style="color:blue;"&gt;To&lt;/span&gt; 250&lt;span style="color:blue;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;DataArray&lt;span style="color:blue;"&gt;=&lt;/span&gt;xlsheet&lt;span style="color:blue;"&gt;.&lt;/span&gt;Range&lt;span style="color:blue;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;"A1"&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;Resize&lt;span style="color:blue;"&gt;(&lt;/span&gt;batchRows&lt;span style="color:blue;"&gt;,&lt;/span&gt; 250&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;Value &lt;span style="color:green;"&gt;'get worksheet area of specified size &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;For&lt;/span&gt; y&lt;span style="color:blue;"&gt;=&lt;/span&gt;1 &lt;span style="color:blue;"&gt;To&lt;/span&gt; 250 &lt;span style="color:green;"&gt;'we assume max 250 columns in the sheet &lt;/span&gt;&lt;br /&gt;currentvalue&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;DataArray&lt;span style="color:blue;"&gt;(&lt;/span&gt;1&lt;span style="color:blue;"&gt;,&lt;/span&gt;y&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; currentvalue&lt;span style="color:blue;"&gt;&lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;""&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; &lt;span style="color:green;"&gt;'abort counting on empty column &lt;/span&gt;&lt;br /&gt;fieldNames&lt;span style="color:blue;"&gt;(&lt;/span&gt;y&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;currentvalue &lt;span style="color:green;"&gt;'collect field names from the first row &lt;/span&gt;&lt;br /&gt;totalColumns&lt;span style="color:blue;"&gt;=&lt;/span&gt;y&lt;br /&gt;&lt;span style="color:blue;"&gt;Else&lt;/span&gt;&lt;br /&gt;y&lt;span style="color:blue;"&gt;=&lt;/span&gt;250&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Redim&lt;/span&gt; &lt;span style="color:blue;"&gt;Preserve&lt;/span&gt; fieldNames&lt;span style="color:blue;"&gt;(&lt;/span&gt;1 &lt;span style="color:blue;"&gt;To&lt;/span&gt; totalColumns&lt;span style="color:blue;"&gt;)&lt;/span&gt; &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;curRow&lt;span style="color:blue;"&gt;=&lt;/span&gt;2&lt;br /&gt;hasData&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:purple;"&gt;True&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;While&lt;/span&gt; hasData&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:purple;"&gt;True&lt;/span&gt; &lt;span style="color:green;"&gt;'loop until we get to the end of Excel rows &lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; curRow&lt;span style="color:blue;"&gt;=&lt;/span&gt;2 &lt;span style="color:blue;"&gt;Then&lt;/span&gt; startrow&lt;span style="color:blue;"&gt;=&lt;/span&gt;2 &lt;span style="color:blue;"&gt;Else&lt;/span&gt; startrow&lt;span style="color:blue;"&gt;=&lt;/span&gt;1&lt;br /&gt;&lt;span style="color:blue;"&gt;For&lt;/span&gt; x&lt;span style="color:blue;"&gt;=&lt;/span&gt;startrow &lt;span style="color:blue;"&gt;To&lt;/span&gt; batchRows&lt;br /&gt;curRow&lt;span style="color:blue;"&gt;=&lt;/span&gt;curRow&lt;span style="color:blue;"&gt;+&lt;/span&gt;1&lt;br /&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;DataArray&lt;span style="color:blue;"&gt;(&lt;/span&gt;x&lt;span style="color:blue;"&gt;,&lt;/span&gt;1&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;&lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;DataArray&lt;span style="color:blue;"&gt;(&lt;/span&gt;x&lt;span style="color:blue;"&gt;,&lt;/span&gt;2&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;""&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; &lt;span style="color:green;"&gt;'when 2 first columns are empty, we assume that it's the end of data &lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Print&lt;/span&gt; &lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;curRow&lt;span style="color:blue;"&gt;-&lt;/span&gt;2&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Set&lt;/span&gt; doc&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;New&lt;/span&gt; &lt;span style="color:black;"&gt;NotesDocument&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;db&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;Form&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:black;"&gt;"Person"&lt;/span&gt;&lt;br /&gt;doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;&lt;span style="color:blue;"&gt;Type&lt;/span&gt; &lt;span style="color:blue;"&gt;=&lt;/span&gt; &lt;span style="color:black;"&gt;"Person"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;For&lt;/span&gt; y&lt;span style="color:blue;"&gt;=&lt;/span&gt;1 &lt;span style="color:blue;"&gt;To&lt;/span&gt; totalColumns&lt;br /&gt;currentvalue&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;DataArray&lt;span style="color:blue;"&gt;(&lt;/span&gt;x&lt;span style="color:blue;"&gt;,&lt;/span&gt;y&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Call&lt;/span&gt; doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;ReplaceItemValue&lt;span style="color:blue;"&gt;(&lt;/span&gt;fieldNames&lt;span style="color:blue;"&gt;(&lt;/span&gt;y&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; currentvalue&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Next&lt;/span&gt;&lt;br /&gt;doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;ShortName&lt;span style="color:blue;"&gt;=&lt;/span&gt;doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;FirstName&lt;span style="color:blue;"&gt;(&lt;/span&gt;0&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;&lt;span style="color:black;"&gt;" "&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;LastName&lt;span style="color:blue;"&gt;(&lt;/span&gt;0&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Call&lt;/span&gt; doc&lt;span style="color:blue;"&gt;.&lt;/span&gt;save&lt;span style="color:blue;"&gt;(&lt;/span&gt;&lt;span style="color:purple;"&gt;True&lt;/span&gt;&lt;span style="color:blue;"&gt;,&lt;/span&gt; &lt;span style="color:purple;"&gt;False&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Else&lt;/span&gt;&lt;br /&gt;hasData&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:purple;"&gt;False&lt;/span&gt;&lt;br /&gt;x&lt;span style="color:blue;"&gt;=&lt;/span&gt;batchRows&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; hasData&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:purple;"&gt;True&lt;/span&gt; &lt;span style="color:blue;"&gt;Then&lt;/span&gt; DataArray&lt;span style="color:blue;"&gt;=&lt;/span&gt;xlsheet&lt;span style="color:blue;"&gt;.&lt;/span&gt;Range&lt;span style="color:blue;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;"A"&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;&lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;curRow&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;Resize&lt;span style="color:blue;"&gt;(&lt;/span&gt;batchRows&lt;span style="color:blue;"&gt;,&lt;/span&gt; totalColumns&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;.&lt;/span&gt;Value &lt;span style="color:green;"&gt;'get worksheet area &lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Wend&lt;/span&gt;&lt;br /&gt;timer2&lt;span style="color:blue;"&gt;=&lt;/span&gt;&lt;span style="color:blue;"&gt;Timer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Call&lt;/span&gt; xlApp&lt;span style="color:blue;"&gt;.&lt;/span&gt;Quit&lt;span style="color:blue;"&gt;(&lt;/span&gt;&lt;span style="color:blue;"&gt;)&lt;/span&gt; &lt;span style="color:green;"&gt;'close Excel program &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;Msgbox&lt;/span&gt; &lt;span style="color:black;"&gt;"Done in "&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;&lt;span style="color:blue;"&gt;Cstr&lt;/span&gt;&lt;span style="color:blue;"&gt;(&lt;/span&gt;timer2&lt;span style="color:blue;"&gt;-&lt;/span&gt;timer1&lt;span style="color:blue;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;+&lt;/span&gt;&lt;span style="color:black;"&gt;" seconds"&lt;/span&gt;&lt;br /&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="BORDER-RIGHT: 1px solid; BORDER-TOP: 1px solid; FONT-SIZE: 8pt; MARGIN: 5px 50px; BORDER-LEFT: 1px solid; COLOR: gray; BORDER-BOTTOM: 1px solid; FONT-FAMILY: sans-serif"&gt;&lt;center&gt;This LotusScript was converted to HTML using the &lt;b&gt;&lt;i&gt;ls2html&lt;/i&gt;&lt;/b&gt; routine,&lt;br /&gt;provided by Julian Robichaux at &lt;a href="http://www.nsftools.com" target="_blank"&gt;nsftools.com&lt;/a&gt;.&lt;/center&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The Excel sample file was generated using this online tool: &lt;a href="http://www.benjaminkeen.com/software/data_generator/" target="_blank"&gt;data generator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotus+Domino" rel="tag"&gt;Lotus Domino&lt;/a&gt; &lt;a href="http://technorati.com/tag/Excel" rel="tag"&gt;Excel&lt;/a&gt; &lt;a href="http://technorati.com/tag/LotusScript" rel="tag"&gt;LotusScript&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-131138692938280450?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/131138692938280450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=131138692938280450' title='31 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/131138692938280450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/131138692938280450'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/02/quickest-way-to-programmatically-import.html' title='The fastest way to programmatically import data from Excel to Lotus Notes'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>31</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-258396402373618360</id><published>2007-01-30T22:24:00.000-08:00</published><updated>2007-01-30T14:38:59.218-08:00</updated><title type='text'>Programmatically change user's Notes password</title><content type='html'>To programmatically change user's password, Domino developers can use API function W32_SECKFMChangePassword. The function accepts 3 parameters: path to ID file. &lt;strong&gt;old password&lt;/strong&gt; and new password.&lt;br /&gt;Based on the &lt;a href="http://www.experts-exchange.com/Applications/Email/Lotus_Notes_Domino/Q_20881381.html" target="_blank"&gt;article on experts-exchange&lt;/a&gt; web síte, I have created a LotusScript agent which prompts user for his old password, prompts for the new password, automatically reads the path to current ID file and changes the password for that ID file. &lt;br /&gt;Same code can be used in a LotusScript button mailed to users with instructions to click the button in order to change their current password.&lt;br /&gt;&lt;br /&gt;At the end of the script developer might also want to add functionality to send an email to the administrator notifying about successfull or failed password change.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Const NOERROR = &amp;H0&lt;br /&gt;Const ERR_MASK = &amp;H3FFF&lt;br /&gt;Const NULLHANDLE = &amp;H0&lt;br /&gt;&lt;br /&gt;'// Lotus Notes/Domino C API (Windows/Intel 32-bit)&lt;br /&gt;Declare Function W32_SECKFMChangePassword Lib {nnotes.dll} Alias {SECKFMChangePassword} ( Byval pIDFile As String , Byval pOldPassword As String , Byval pNewPassword As String ) As Integer&lt;br /&gt;Declare Function W32_OSLoadString Lib {nnotes.dll} Alias {OSLoadString} ( Byval hModule As Long , Byval StringCode As Integer , Byval retBuffer As String , Byval BufferLength As Integer ) As Integer&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt; Dim session As New NotesSession&lt;br /&gt; Dim IDFile As String, oldpassword As String, newpassword As String&lt;br /&gt; IDFile=session.GetEnvironmentString( "KeyFilename", True )&lt;br /&gt; oldpassword=Inputbox("Enter old password", "Old Password") &lt;br /&gt; If oldpassword="" Then &lt;br /&gt;  Msgbox "No password entered"&lt;br /&gt;  Exit Sub&lt;br /&gt; End If&lt;br /&gt; newpassword=Inputbox("Enter new password", "New Password") &lt;br /&gt; If newpassword="" Then &lt;br /&gt;  Msgbox "No password entered"&lt;br /&gt;  Exit Sub&lt;br /&gt; End If&lt;br /&gt; &lt;br /&gt; Call ChangePassword(IDFile,oldpassword,newpassword)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Sub ChangePassword( id As String, oldp As String, newp As String)&lt;br /&gt; Dim intAPIResult As Integer&lt;br /&gt; Dim szErrorText As String&lt;br /&gt; Dim szBuffer As String * 1024&lt;br /&gt; &lt;br /&gt; intAPIResult = W32_SECKFMChangePassword ( id, oldp, newp )&lt;br /&gt; Stop&lt;br /&gt; If Not ( ( intAPIResult And ERR_MASK ) = NOERROR ) Then&lt;br /&gt;  szBuffer = String$ ( Lenb ( szBuffer ) , 0 )&lt;br /&gt;  Call W32_OSLoadString ( NULLHANDLE , intAPIResult , szBuffer , Lenb ( szBuffer ) - 1 )&lt;br /&gt;  If Instr ( 1 , szBuffer , Chr$ ( 0 ) , 5 ) &gt; 1 Then&lt;br /&gt;   szErrorText = Left$ ( szBuffer , Instr ( 1 , szBuffer , Chr$ ( 0 ) , 5 ) - 1 )&lt;br /&gt;  Elseif Instr ( 1 , szBuffer , Chr$ ( 0 ) , 5 ) = 0 Then&lt;br /&gt;   szErrorText = {}&lt;br /&gt;  Else&lt;br /&gt;   szErrorText = szBuffer&lt;br /&gt;  End If&lt;br /&gt;  Messagebox szErrorText , 16 , {C API ERROR CODE: } &amp; Cstr ( intAPIResult )&lt;br /&gt; Else&lt;br /&gt;  Msgbox "Successfully changed"&lt;br /&gt; End If&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotus+Domino" rel="tag"&gt;Lotus Domino&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-258396402373618360?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/258396402373618360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=258396402373618360' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/258396402373618360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/258396402373618360'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/programmatically-change-users-notes.html' title='Programmatically change user&apos;s Notes password'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-6113013609548610369</id><published>2007-01-27T07:03:00.000-08:00</published><updated>2007-01-27T09:22:29.803-08:00</updated><title type='text'>See Lotusphere Opening Session video recording on Second Life</title><content type='html'>You can now see the recording of Lotusphere 2007 Opening Session (with guest speaker Neil Armstrong) available on 3-D chat &lt;a href="http://secondlife.com/" target="_blank"&gt;Second Life&lt;/a&gt; and on IBM's web site. It's 2 hours 13 minutes long, so it's probably a good idea to watch it at home instead of dong it at work. To see the recording in Second Life, go to IBM Theater on IBM Island and click on the big TV screen. In a couple of seconds you'll see the video on 4 TV screens. Below is a screenshot of me watching Mike Rhodin's opening speech. In the middle right corner of the screenshot you can see Virtual Lotusphere building where you can (if you are lucky) meet other Lotusphere interested people. I hope that more IBM employees and business partners discover the Second Life program and IBM island. &lt;br /&gt;&lt;br /&gt;Click to enlarge&lt;br&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_JEVmVtrdoiE/Rbtt1XW73dI/AAAAAAAAACE/Q3QueEYw09w/s1600-h/ScreenShot085.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_JEVmVtrdoiE/Rbtt1XW73dI/AAAAAAAAACE/Q3QueEYw09w/s320/ScreenShot085.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5024730572832628178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Opening session webcast on IBM's web site:&lt;br /&gt;&lt;a href="https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?lang=en_US&amp;source=sw-pprod05&amp;S_PKG=SW-lotusphere2007webcast" target="_blank"&gt;https://www14.software.ibm.com/webapp/iwm/web/preLogin.do?lang=en_US&amp;source=sw-pprod05&amp;S_PKG=SW-lotusphere2007webcast&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotusphere2007" rel="tag"&gt;Lotusphere2007&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-6113013609548610369?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/6113013609548610369/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=6113013609548610369' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/6113013609548610369'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/6113013609548610369'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/see-lotusphere-opening-session-video.html' title='See Lotusphere Opening Session video recording on Second Life'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/Rbtt1XW73dI/AAAAAAAAACE/Q3QueEYw09w/s72-c/ScreenShot085.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-4946848092076769199</id><published>2007-01-24T12:50:00.000-08:00</published><updated>2008-02-03T09:01:06.738-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lotusphere'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Sametime bot shows latest Lotusphere2007 blogs</title><content type='html'>Today I've created a new bot function which shows latest 20 blog posts tagged with "Lotusphere2007" on &lt;a href="http://www.technorati.com/posts/tag/lotusphere2007" target="_blank"&gt;Technorati&lt;/a&gt;. Took me 20 minutes to modify it from an old example of &lt;a href="http://www.botstation.com/code/xmlhttp.php" target="_blank"&gt;LotusScript agent&lt;/a&gt; and setup STWidget, the LotusScript agent code can be improved but it works.&lt;br /&gt;&lt;br /&gt;It works like this: you type "Lotusphere2007" (not case sensitive) to sametime bot and it responds with the 20 latest blog posts. You can click the links in the result to read the post.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Here you can try the "Lotusphere2007" bot live:&lt;/span&gt; &lt;a href="http://www.botstation.com/sametime/stwidget_lotusphere.html" target="_blank"&gt;http://www.botstation.com/sametime/stwidget_lotusphere.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Or just try it embedded at the end of this post with help of Sametime Widget.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Code of the LotusScript agent which bot calls to get the results:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Function AgentMain(doc As notesdocument)&lt;br /&gt; Dim param As String&lt;br /&gt; param= doc.ArgValue(0)&lt;br /&gt; Dim objHttp, i  &lt;br /&gt; Set objHttp = CreateObject("Microsoft.XMLHTTP")&lt;br /&gt; url = |&lt;/span&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;http://feeds.technorati.com/feed/posts/tag/lotusphere2007&lt;/span&gt;&lt;span style="font-size:85%;"&gt;|&lt;br /&gt; objHttp.open "GET", url, False, "", ""&lt;br /&gt; objHttp.setRequestHeader "Content-type", "application/x-www-form-urlencoded"&lt;br /&gt; objHttp.send("") 'send request to web server&lt;br /&gt;&lt;br /&gt; Set xmlDoc = CreateObject("Msxml2.DOMDocument")&lt;br /&gt; xmlDoc.loadXML (objHttp.ResponseText)&lt;br /&gt; Set xmlLst = xmlDoc.getElementsByTagName("item")&lt;br /&gt; cnt=0&lt;br /&gt; For i = 0 To xmlLst.length - 1&lt;br /&gt;  cnt=cnt+1&lt;br /&gt;  Set xmlNode = xmlLst.Item(i)&lt;br /&gt;  Set att=xmlnode.childnodes&lt;br /&gt;  Forall child In att&lt;br /&gt;   If child.nodename="title" Then&lt;br /&gt;    tmp=tmp+Cstr(i)+". "+child.text+": "&lt;br /&gt;   End If&lt;br /&gt;   If child.nodename="link" Then&lt;br /&gt;    tmp=tmp+|&amp;lt;a href="|+child.text+|" target="_blank"&amp;gt;Link&amp;lt;/a&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;|&lt;br /&gt;   End If&lt;br /&gt;   If cnt=20 Then i=xmlLst.length&lt;br /&gt;  End Forall  &lt;br /&gt; Next&lt;br /&gt;&lt;br /&gt; AgentMain="Last 20 posts in category Lotusphere2007:"+"&amp;lt;br/&amp;gt;"+tmp&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;  &lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://stwidget.dyndns.org:443/stwidget.html?login=anonymous&amp;initialmsg=Lotusphere&amp;initialbuddy=Bot%20Botstation&amp;mybuddies=Bot%20Botstation&amp;autosend=yes&amp;allowhtml=yes" scrolling="no" frameborder="0" style="width:175px; height:330px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/Lotusphere2007" rel="tag"&gt;Lotusphere2007&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-4946848092076769199?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/4946848092076769199/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=4946848092076769199' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4946848092076769199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/4946848092076769199'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/sametime-bot-shows-latest.html' title='Sametime bot shows latest Lotusphere2007 blogs'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-6684694545077963160</id><published>2007-01-22T15:38:00.000-08:00</published><updated>2007-01-23T15:14:12.559-08:00</updated><title type='text'>waterproof brands</title><content type='html'>Cool marketing that leaves no traces  :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=Z2LUz2WVcek" target="_blank"&gt;http://www.youtube.com/watch?v=Z2LUz2WVcek&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Z2LUz2WVcek"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/Z2LUz2WVcek" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-6684694545077963160?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/6684694545077963160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=6684694545077963160' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/6684694545077963160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/6684694545077963160'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/branding-waterfall.html' title='waterproof brands'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116277809110479569</id><published>2007-01-21T11:42:00.000-08:00</published><updated>2007-01-21T13:25:00.314-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime API'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Notify database responsible person about new documents using Sametime</title><content type='html'>Imagine that you are responsible for a Domino application where users can register themselves and  you want to get notified about about new registrations as soon as possible.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-size:85%;" &gt;Screenshot of the demo application:&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_JEVmVtrdoiE/RbPA8XW73cI/AAAAAAAAAB4/d36VyfF3AKg/s1600-h/reg_db.jpg" target="_blank"&gt;&lt;img style="cursor: pointer;" src="http://bp1.blogger.com/_JEVmVtrdoiE/RbPA8XW73cI/AAAAAAAAAB4/d36VyfF3AKg/s320/reg_db.jpg" alt="reg db demo" id="BLOGGER_PHOTO_ID_5022570152743132610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This can be done by sending an email message in WebQuerySave event or &lt;a href="http://www.botstation.com/products/sms123/about.php"&gt;SMS message&lt;/a&gt;, but it has its disadvantages. Sending by email can give several minutes of delay, and receiving 20 SMS per hour can be annoying. Using Sametime messages for notification is not as disturbing as beeping SMS messages and also ensures instant delivery.&lt;br /&gt;&lt;br /&gt;One more way to see the latest registrations is to use a Sametime bot to get a quick overview of the latest registrations without opening the database in Notes client.&lt;br /&gt;&lt;br /&gt;Let's see how you can use tools provided by Botstation Technologies (all available as &lt;a href="http://www.botstation.com/download/evaluations.php" target="_blank"&gt;free trial&lt;/a&gt;) to accomplish these tasks.&lt;br /&gt;1) Immediate notification when user saves his registration&lt;br /&gt;2) Course administrator gets latest results by asking Sametime bot&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Immediate notification&lt;/span&gt;&lt;br /&gt;To immediately notify the responsible person about new registration, all you need to do is add a couple of code lines into your WebQuerySave agent. The code uses STAgent script library, which contains the most popular functions for working with Sametime. You can easily send a Sametime message to the specified person:&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;Here is an example:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;Dim STAgent as New STAgent()&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;Call STAgent.login("stserver.company.com", "Notification Agent", "password")&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;Call STAgent.&lt;span style="font-weight: bold;"&gt;sendMessage&lt;/span&gt;("Admin Doe", "New registration: "+doc.CourseDate(0)+" / "+doc.CreatedBy(0)+" / "+doc.Subject(0))&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;Call STAgent.logout()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The recipient immediately gets a Sametime message showing registration details and can take an appropriate action if needed.&lt;br /&gt;&lt;br /&gt;If you have several responsible persons and want to send the notification message only to one of them, you can send the message only to the first person whos Sametime &lt;span style="font-weight: bold;"&gt;online availability&lt;/span&gt; status is set to Active. You can query the online status with this code line:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;onlinestatus=STAgent.&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);font-size:85%;" &gt;getOnlineStatus&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;("Admin Doe")   'Active, Away, Offline&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can &lt;a href="http://www.botstation.com/products/stagent/about.php"&gt;&lt;span style="font-weight: bold;"&gt;download an evaluation&lt;/span&gt;&lt;/a&gt; version of the STAgent and try by yourself in your own agents.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Notification on demand&lt;/span&gt;&lt;br /&gt;Instead of sending a Sametime message immediately after each registration, you can query Sametime Bot to get the new registrations since last the query time. &lt;a href="http://www.botstation.com/products/stbot/about.php"&gt;Sametime Bot&lt;/a&gt; from our company &lt;a href="http://www.botstation.com/"&gt;Botstation Technologies&lt;/a&gt; is able to run ordinary LotusScript agents, which makes it possible to accomplish this task in just 5 minutes. Same solution can be re-used later in similar applications. You can also restrict access to this particular bot functionality to only certain persons.&lt;br /&gt;&lt;span style="color: rgb(102, 102, 102);font-size:78%;" &gt;&lt;br /&gt;"Access properties" screenshot:&lt;/span&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_JEVmVtrdoiE/RbOGf3W73bI/AAAAAAAAABs/zJNP7XXaVyQ/s1600-h/bot_access.jpg" target="_blank"&gt;&lt;img style="cursor: pointer;" src="http://bp3.blogger.com/_JEVmVtrdoiE/RbOGf3W73bI/AAAAAAAAABs/zJNP7XXaVyQ/s400/bot_access.jpg" alt="Sametime bot security" id="BLOGGER_PHOTO_ID_5022505891442449842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To ask bot for new registrations, you simply choose bot from your buddy list and type "registrations" to him. Bot receives your message and immediately answers with a list of last registrations.&lt;br /&gt;To make this work,  all you need to do is to create a LotusScript agent which searches for documents created after agent's last run time and then create a Question mapping in the bot's configuration database.&lt;br /&gt;To create a bot question which triggers an agent, you specify keywords (e.g. "registrations", "bookings") and choose an agent from a list of available agents. See the picture below.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 0, 0);font-size:85%;" &gt;Sub Initialize&lt;br /&gt;Dim s As New NotesSession&lt;br /&gt;Dim agent As NotesAgent&lt;br /&gt;Set agent = s.CurrentAgent&lt;br /&gt;Dim db As NotesDatabase&lt;br /&gt;Dim doc As NotesDocument&lt;br /&gt;Set db = s.CurrentDatabase&lt;br /&gt;Set doc = db.GetDocumentByID(agent.ParameterDocID)&lt;br /&gt;tmp= AgentMain(doc)&lt;br /&gt;doc.AgentResult=tmp&lt;br /&gt;doc.savedbyagent="Yes"&lt;br /&gt;Call doc.Save(True,False)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;Function AgentMain(doc As notesdocument) As String&lt;br /&gt;Dim session As New NotesSession&lt;br /&gt;Dim db As NotesDatabase&lt;br /&gt;Dim coursedb As notesdatabase&lt;br /&gt;Dim coll As NotesDocumentCollection&lt;br /&gt;Dim coursedoc As NotesDocument&lt;br /&gt;Dim agent As NotesAgent&lt;br /&gt;Set db=doc.ParentDatabase&lt;br /&gt;Set coursedb=New NotesDatabase(db.server, "coursereg.nsf")&lt;br /&gt;Set agent=session.CurrentAgent&lt;br /&gt;Set dateTime = New NotesDateTime(agent.LastRun )&lt;br /&gt;Set col=coursedb.search(|Form="Document"|, dateTime, 0)&lt;br /&gt;Set coursedoc=col.GetFirstDocument&lt;br /&gt;tmp="No new registrations found since "+Cstr(agent.LastRun)&lt;br /&gt;If col.count&gt;0 Then  tmp="Found "+Cstr(col.count)+" new registrations since"+Cstr(agent.LastRun)+"&amp;lt;br&amp;gt;"&lt;br /&gt;&lt;br /&gt;While Not coursedoc Is Nothing&lt;br /&gt;tmp=tmp+coursedoc.CourseDate(0)+" / "+coursedoc.CreatedBy(0)+" / "+coursedoc.CourseName(0)+"&amp;lt;br&amp;gt;"&lt;br /&gt;Set coursedoc=col.GetNextDocument(coursedoc)&lt;br /&gt;Wend&lt;br /&gt;&lt;br /&gt;AgentMain=tmp&lt;br /&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I've created a live demonstration of this functionality using the code above, you can try it here: &lt;span style="font-size:130%;"&gt;&lt;a style="font-weight: bold;" href="http://www.botstation.com/products/stweb/stwidget_regdemo.html" target="_blank"&gt;live demo of Sametime bot reading the registration database&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To emulate the real application, the bot in the demo application adds a random number of new documents (1-5) after each run. So every time you issue "registrations" command to bot, you will get some unique results.&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;a href="http://www.botstation.com/products/stweb/stwidget_regdemo.html" target="_blank"&gt;&lt;img src="http://bp1.blogger.com/_JEVmVtrdoiE/Rav3aXW73XI/AAAAAAAAAA4/RwZ6JXGaJ2c/s400/sametime+bot+regdb.jpg" id="BLOGGER_PHOTO_ID_5020374213274099042" alt="Sametime bot answers" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116277809110479569?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116277809110479569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116277809110479569' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116277809110479569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116277809110479569'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/notify-administrator-about-new.html' title='Notify database responsible person about new documents using Sametime'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_JEVmVtrdoiE/RbPA8XW73cI/AAAAAAAAAB4/d36VyfF3AKg/s72-c/reg_db.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116536394375367224</id><published>2007-01-14T15:33:00.000-08:00</published><updated>2007-01-15T12:13:12.832-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime'/><title type='text'>Sametime-related error messages at console after removing Sametime server</title><content type='html'>If you uninstalled Sametime server from Domino server, or manually removed Sametime task, you can sometimes get following error messages in Domino console:&lt;br /&gt;&lt;br /&gt;FAILURE - lRes:2  hKey:0&lt;br /&gt;hRoot:-2147483646  szKey:[SOFTWARE\Lotus\Sametime\STDiagViewer\STDiag1\&lt;stdiag d="" efault="" module=""&gt;]&lt;br /&gt;&lt;br /&gt;FAILURE - lRes:2  hKey:0&lt;br /&gt;hRoot:-2147483646  szKey:[SOFTWARE\Lotus\Sametime\STDiagViewer\STDiag1\UTIL Configuration API]&lt;br /&gt;&lt;br /&gt;These messages are show during the startup of the server. They are not logged in the log.nsf database and can only be seen on console.&lt;br /&gt;&lt;br /&gt;In my particular case the Sametime was "removed" by deleting all Sametime-related entries in notes.ini, deleting sametime entry in Windows registry and deleting STADDIN task from the list of tasks in notes.ini.&lt;br /&gt;&lt;br /&gt;After searching the Internet, I could not find any solutions to get rid of the irritating console error messages, so I had to investigate it myself. It took a couple of hours to eliminate possible causes and at last I found the solution:&lt;br /&gt;Remove "&lt;strong&gt;scs&lt;/strong&gt;" parameter from &lt;strong&gt;servlets.startup=&lt;/strong&gt; row in &lt;strong&gt;servlets.properties&lt;/strong&gt; file and the error messages will dissapear.&lt;br /&gt;While you are editing servlets.properties file, delete other Sametime-related parameters which IBM masqueraded as important Domino tasks to fool the unsuspecting admins:&lt;br /&gt;auth admin mmapi stcal fileupload rapfile&lt;br /&gt;&lt;br /&gt;Usually there are only Sametime-related entries in servlets.properties, so you can probably just delete everything you can see in the file.&lt;br /&gt;&lt;br /&gt;If you are getting mentioned error messages even after the startup, this means that users are still trying to access the sametime server using Java Connect client. Delete stsrc.nsf database (which contains the HTML form for launching the Connect client) and the messages will dissapear.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Read more about Sametime servlets here: &lt;a href="http://www-128.ibm.com/developerworks/lotus/library/ls-STservlets/index.html"&gt;http://www-128.ibm.com/developerworks/lotus/library/ls-STservlets/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;&lt;/stdiag&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116536394375367224?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116536394375367224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116536394375367224' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116536394375367224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116536394375367224'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/sametime-error-messages-at-console.html' title='Sametime-related error messages at console after removing Sametime server'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116742230084003712</id><published>2007-01-12T13:55:00.000-08:00</published><updated>2007-01-12T14:43:37.757-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>Callback functionality for COM/ActiveX objects in LotusScript</title><content type='html'>Unfortunately there is no such callback functionality in Lotus Notes. The only type of callback which developers can use are for Notes native objects.&lt;br /&gt;&lt;br /&gt;The only solution I found is to periodically poll a variable from COM object and when the variable's value is changed from the previous poll value, it means something happened and you can take an appropriate action in LotusScript.&lt;br /&gt;&lt;br /&gt;For example, you have an ActiveX with function which returns statuses "Busy", "Idle", "In progress", "Finished" for a telephony application. You can not make callback when status changes to immediately notify LotusScript, but you can poll status every 1 second using LotusScript:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);font-size:85%;" &gt;Dim status as String&lt;br /&gt;Set MyPhone=CreateObject("PhoneApp")&lt;br /&gt;Call MyPhone.MakeCall("+1818222333444")&lt;br /&gt;status=MyPhone.GetStatus()&lt;br /&gt;While status&lt;&gt;"Finished" And status&lt;&gt;"Idle"&lt;br /&gt;status=MyPhone.GetStatus()&lt;br /&gt;if status="In Progress" then&lt;br /&gt;Print "Call is in progress, continue looping."&lt;br /&gt;end if&lt;br /&gt;if status="Busy" then&lt;br /&gt;Print "Phone is busy, status will change to Finished automatically soon."&lt;br /&gt;end if&lt;br /&gt;Sleep 1&lt;br /&gt;DoEvents&lt;br /&gt;Wend&lt;br /&gt;Call LogCall(StartTime, EndTime, PhoneNumber)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This solution works pretty well in most cases. Make sure you have Sleep and Doevents in your code, otherwise Notes client will hang until the loop is finished.&lt;br /&gt;To avoid locking Notes client while code is running, set agent's property  "Run in background client thread" and user will be able to continue working with Notes client even if the agent is still running.&lt;br /&gt;&lt;br /&gt;A similar solution was described in my &lt;a href="http://drh02.eapps.com/eview/viewr6.nsf/CurrentIssue/BEB39EA018F7DBBB8525720C000C37B2/?OpenDocument" target="_blank"&gt;article&lt;/a&gt; in The View magazine for working with Skype API.&lt;br /&gt;&lt;br /&gt;To make a shorter delay time than 1 second, you can use &lt;span style="font-style: italic;"&gt;Sleep 0.5&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Another work-around is to use Visual Basic as a wrapper to the COM object.&lt;br /&gt;Visual Basic supports all callbacks, so compiling a Visual Basic project into ActiveX component and exposing variables which are populated from the callback functions inside VB code makes it possible to have access to callbacks which are not accessible with the technique described above.&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;LotusScript&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116742230084003712?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116742230084003712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116742230084003712' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116742230084003712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116742230084003712'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/callback-function-from-comactivex.html' title='Callback functionality for COM/ActiveX objects in LotusScript'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-7057761913113283439</id><published>2007-01-12T11:08:00.000-08:00</published><updated>2007-01-12T12:29:32.309-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sametime'/><category scheme='http://www.blogger.com/atom/ns#' term='Sametime bot'/><title type='text'>Sametime bot finds zip code with @DBLookup</title><content type='html'>Based on &lt;a href="http://notessidan.se/"&gt;Thomas Adrian's&lt;/a&gt; &lt;a href="http://notessidan.se/A55B53/blogg.nsf/plink/TADN-6X9SZE"&gt;Swedish postcodes database&lt;/a&gt;, I've created a function for our company's &lt;a href="http://www.botstation.com/products/stbot/about.php"&gt;Sametime bot&lt;/a&gt; which returns the post codes(zip codes) for a specified city or the city name by specified zip code. All you need to implement this functionality in the &lt;a href="http://www.botstation.com/evalregister.php?prod=stbot"&gt;free evaluation version&lt;/a&gt; of Botstatiuon Bot is to create a "pattern answer" with @formula which makes lookup to the database. Similar  formula can be used for any database lookup from bot. Later I will add bot function to lookup for phone area codes for cities in USA and Sweden.&lt;br /&gt;With &lt;a href="http://www.botstation.com/products/stweb/about.php"&gt;Sametime Widget&lt;/a&gt; (STWidget) AJAX-based tool you can make a live test of the function. &lt;br /&gt;Commands you can type to bot:&lt;br /&gt;postcode 18200 &lt;br /&gt;postcode Danderyd &lt;br /&gt;zip 14700&lt;br /&gt;zip tumba&lt;br /&gt;&lt;br /&gt;And of course the most popular "joke" command which shows you a random joke every time you type it :)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;TRY HERE: &lt;a href="http://www.botstation.com/products/stweb/stwidget_zip.html"&gt;http://www.botstation.com/products/stweb/stwidget_zip.html&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;-------------------------------------&lt;br /&gt;&lt;span style="font-size:85%;"&gt;city:=@ReplaceSubstring(@Trim(@Right(@RequestText;" "));" ";"-");&lt;br /&gt;&lt;br /&gt;tmp:=@DbLookup("":"NoCache";@Subset(@DBName;1):"bot\\pnr.nsf"; "By city";city;2);&lt;br /&gt;@If(@IsError(tmp); @If(@Length(city)!=5;@Return("Postnumber not found for city "+city);"");@Return("Zip code(s) for "+city+": "+@Implode(@Sort(@Unique(tmp));", ")+"&amp;lt;br&amp;gt;--------------&amp;lt;br&amp;gt;You can also try reversed command:&lt;br&gt;postnumber "+@Subset(tmp;1)));&lt;br /&gt;&lt;br /&gt;tmp1:=@DbLookup("":"NoCache";@Subset(@DBName;1):"bot\\pnr.nsf"; "By number";city;2);&lt;br /&gt;@If(@IsError(tmp1);"City for postnumber "+city+" not found"; "City for postcode "+city+": "+@Implode(tmp1;", ")+"&amp;lt;br&amp;gt;--------------&amp;lt;br&amp;gt;You can also try reversed command:&amp;lt;br&amp;gt;postnumber "+@Subset(tmp1;1))&lt;/span&gt;&lt;br /&gt;-------------------------------------&lt;br /&gt;&lt;br /&gt;@RequestText function above is translated by Bot into the incoming command text, for example "zip 12345".&lt;br /&gt;&lt;br /&gt;Screenshot of Bot's answer configuration page:&lt;br /&gt;&lt;img src="http://bp2.blogger.com/_JEVmVtrdoiE/Rafl6nW73VI/AAAAAAAAAAk/AN7WDs3YfgQ/s400/sametime+bot+formula.jpg" border="0" alt="Sametime bot formula" id="sametime bot formula" /&gt;&lt;br /&gt;&lt;br /&gt;An alternative way to find zip code is to make call to a Web Service, which is also possible with &lt;a href="http://www.botstation.com/products/stbot/about.php"&gt;Botstation Sametime Bot&lt;/a&gt;, I'll show how to accomplish it in some of the posts later this month.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Related posts: &lt;br /&gt;&lt;a href="http://dominounlimited.blogspot.com/2006/12/sametime-bot-shows-random-bible-quote.html" target="_blank"&gt;Sametime bot shows a random Bible quote&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dominounlimited.blogspot.com/2006/12/merry-christmas-from-sametime-bot.html" target="_blank"&gt;Merry Christmas from Sametime Bot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;  &lt;a href="http://technorati.com/tag/sametime+bot" rel="tag"&gt;sametime bot&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-7057761913113283439?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/7057761913113283439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=7057761913113283439' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7057761913113283439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/7057761913113283439'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/sametime-bot-finds-zip-code-with.html' title='Sametime bot finds zip code with @DBLookup'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_JEVmVtrdoiE/Rafl6nW73VI/AAAAAAAAAAk/AN7WDs3YfgQ/s72-c/sametime+bot+formula.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-134685952592507996</id><published>2007-01-01T12:31:00.000-08:00</published><updated>2007-01-01T13:29:40.598-08:00</updated><title type='text'>Beginning new year with a new blog design</title><content type='html'>Today I have updated the design of this blog to the new "Google-style" design. It looks similar to the old design, except for some small details. The option to upgrade the blog to a new design was available there for several months, and a new year is a good time to begin with a new design.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;After update, an additional RSS link has been added ( &lt;a href="http://dominounlimited.blogspot.com/feeds/posts/default"&gt;http://dominounlimited.blogspot.com/feeds/posts/default&lt;/a&gt; ) , but luckily the old Atom RSS link (&lt;a href="http://dominounlimited.blogspot.com/atom.xml"&gt;http://dominounlimited.blogspot.com/atom.xml&lt;/a&gt; ) seems to be still valid.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;So far I found a couple of small disadvantages with the new design.&lt;br /&gt;One of them is that links to configure the sections in the navigation panel are always shown for all visitors and when a visitor clicks on them, a popup with login screen is shown. Those links are for blog's owner only and has no use for other people. I would prefer not to have those links at all and do all design modifications from the blog's maintenance page. Maybe I've just missed some setting to hide those links.&lt;br /&gt;One more irretating thing is that HTML editor for richtext (in blog posts) adds many unneccessary DIV tags.&lt;br /&gt;&lt;br /&gt;Old posts for the last month were of course automatically re-saved during the update and are shown in the RSS readers as new posts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The biggest maintenance difference to the old blog is probably a new way to manage the right-side navigation pane. With the new design, it's possible to manage the sections without having to write HTML code, which was the only way in the original Blogger template. See the picture below:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_JEVmVtrdoiE/RZl3LKlgjEI/AAAAAAAAAAU/G9DAk0e-4VY/s1600-h/ScreenShot054.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5015170693757701186" style="CURSOR: hand" alt="" src="http://bp3.blogger.com/_JEVmVtrdoiE/RZl3LKlgjEI/AAAAAAAAAAU/G9DAk0e-4VY/s320/ScreenShot054.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Using a customisable HTML section, I've &lt;a href="http://dominounlimited.blogspot.com/2006/11/embedding-ajax-based-sametime-chat.html"&gt;added STWidget&lt;/a&gt; chat widget below the "About me" section in the right navigation panel.&lt;br /&gt;&lt;br /&gt;Maybe one day I'll update to a Domino-based blog to be able to make advanced customisations and add cool functions, but so far I am satisfied with the Blogger blog :)&lt;br /&gt;&lt;br /&gt;Should you update your old Blogger blog to the new Google design? Well, if you want a larger control over the right navigation panel you might consider doing it, otherwise there are no huge advantages with it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-134685952592507996?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/134685952592507996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=134685952592507996' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/134685952592507996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/134685952592507996'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2007/01/beginning-new-year-with-new-blog-design.html' title='Beginning new year with a new blog design'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_JEVmVtrdoiE/RZl3LKlgjEI/AAAAAAAAAAU/G9DAk0e-4VY/s72-c/ScreenShot054.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116743295410323113</id><published>2006-12-29T14:45:00.000-08:00</published><updated>2007-01-07T15:17:27.956-08:00</updated><title type='text'>hide-when formula in Richtext fields</title><content type='html'>Richtext item inherits and keeps it's hide-when formula from the form's design when the document is saved for the first time. So if you set hide-when formula of the paragraph containing richtext field to "status=1" and create a new document, the richtext will also got "status=1" formula. When you later in the design of the form change the hide-when formula of the field's paragraph to "status=2", the richtext will &lt;strong&gt;still have the old&lt;/strong&gt; "status=1" formula. To change the formula in the richtext field, you would need to open each document and manually change the formula to the new one.&lt;br /&gt;&lt;br /&gt;You can prevent this problem from happening by putting the richtext field into a subform without any hide-when formula and then include the subform as a Computed Subform into the form. By changing Computed Subform's formula you can deside whether subform containing your richtext is shown or not. The formula for the computed subform will be: @If(status="1"; "MySubform";""). So instead of hiding the paragraph containing the richtext field, you simply do not show the subform containing the richtext field.&lt;br /&gt;&lt;br /&gt;In case you already have many documents which must have their old hide-when formulas changed to a new formula and you do not want to do it manually:&lt;br /&gt;a) You can use DXL LotusScript/Java classes to export documents to XML format, then locate and modify the hide-when formula and import the document back to the database. See below for a short example of export result.&lt;br /&gt;b) You can also change hide-when using &lt;a href="http://www.geniisoft.com/showcase.nsf/MidasLSX"&gt;Midas Rich Text LSX&lt;/a&gt; tool (commercial). Check here: http://www.geniisoft.com/MidasHelp.nsf/FIND/559CAE5AF9EFF6CE85256A0900548706?OpenDocument  I haven't try the hide-when functionality of the tool yet, but other richtext functionality I earlier used was easy to call in LotusScript.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is an example of richtext export to DXL:&lt;br /&gt;&lt;br /&gt;&amp;lt;item name='Body'&amp;gt;&amp;lt;richtext&amp;gt;&lt;br /&gt;&amp;lt;pardef id='2'&amp;gt;&amp;lt;code event='hidewhen'&amp;gt;&amp;lt;formula&amp;gt;status=&amp;quot;1&amp;quot;&amp;lt;/formula&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pardef&amp;gt;&lt;br /&gt;&amp;lt;par def='2'&amp;gt;text line 1&amp;lt;/par&amp;gt;&lt;br /&gt;&amp;lt;par/&amp;gt;&lt;br /&gt;&amp;lt;pardef id='3'&amp;gt;&amp;lt;code event='hidewhen'&amp;gt;&amp;lt;formula&amp;gt;status=&amp;quot;2&amp;quot;&amp;lt;/formula&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pardef&amp;gt;&lt;br /&gt;&amp;lt;par def='3'&amp;gt;text line 2&amp;lt;/par&amp;gt;&lt;br /&gt;&amp;lt;/richtext&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you have 3 lines of text in richtext field, and all 3 lines are hidden with same hide-when formula, and you then decide to set another hide formula on line 2, the second line of the text will get it's own hide-when tag in XMl as expected, but the third line of the text will not get it's own hide-when formula in DXL code, but will instead inherit the original hide-when formula by using same &amp;quot;pardef&amp;quot; id reference as the original text had:&lt;br /&gt;&amp;lt;item name='Body'&amp;gt;&amp;lt;richtext&amp;gt;&lt;br /&gt;&amp;lt;&lt;strong&gt;pardef id='2'&lt;/strong&gt;&amp;gt;&amp;lt;code event='hidewhen'&amp;gt;&amp;lt;formula&amp;gt;status=&amp;quot;1&amp;quot;&amp;lt;/formula&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pardef&amp;gt;&lt;br /&gt;&amp;lt;&lt;strong&gt;par def='2'&lt;/strong&gt;&amp;gt;text line 1&amp;lt;/par&amp;gt;&lt;br /&gt;&amp;lt;par/&amp;gt;&lt;br /&gt;&amp;lt;pardef id='3'&amp;gt;&amp;lt;code event='hidewhen'&amp;gt;&amp;lt;formula&amp;gt;status=&amp;quot;2&amp;quot;&amp;lt;/formula&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pardef&amp;gt;&lt;br /&gt;&amp;lt;par def='3'&amp;gt;text line 2&amp;lt;/par&amp;gt;&lt;br /&gt;&amp;lt;&lt;strong&gt;par def='2'&lt;/strong&gt;&amp;gt;text line 3&amp;lt;/par&amp;gt;&lt;br /&gt;&amp;lt;/richtext&amp;gt;&amp;lt;/item&amp;gt;&lt;br /&gt;&lt;br /&gt;I am currently creating a LotusScript library with various DXL features for working with inline images and attachments, and I am considering to include the functionality to remove all hide-when formulas from a richtext field. Should be rather easy to accomplish to locate the node containing the hide-when reference and then simply remove that node.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://technorati.com/tag/dxl" rel="tag"&gt;dxl&lt;/a&gt;  &lt;a href="http://technorati.com/tag/lotus+notes" rel="tag"&gt;lotus notes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116743295410323113?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116743295410323113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116743295410323113' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116743295410323113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116743295410323113'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/hide-when-formula-on-richtext-fields.html' title='hide-when formula in Richtext fields'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116707577491058602</id><published>2006-12-25T11:25:00.000-08:00</published><updated>2007-01-14T15:10:51.758-08:00</updated><title type='text'>Sametime bot shows a random Bible quote</title><content type='html'>To celebrate Christmas holidays, I've re-enabled "biblerandom" command for Sametime bot. This command shows a random verse from the Bible (both Old and New Testaments).&lt;br /&gt;&lt;br /&gt;The Notes database which bot uses for finding answers was created from a Microsoft Access database and contains all books from King James's version of the Bible. The search function is implemented using LotusScript agent triggered from the bot.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://www.botstation.com/products/stweb/stwidget.php" target="_blank"&gt;HERE&lt;/a&gt; to try the Sametime bot command. After you logged in to &lt;a href="http://www.botstation.com/products/stweb/stwidget.php" target="_blank"&gt;chat application&lt;/a&gt; using any name, type "biblerandom" or "bible" without quotes and click the "Say" button. You can send this command many times, each time you will get a new Bible verse.&lt;br /&gt;&lt;br /&gt;Screenshot:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/products/stweb/stwidget.php"&gt;&lt;img src="http://photos1.blogger.com/x/blogger/4486/1652/400/263321/biblebot.jpg" border="0" alt="Bible Bot" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116707577491058602?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116707577491058602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116707577491058602' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116707577491058602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116707577491058602'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/sametime-bot-shows-random-bible-quote.html' title='Sametime bot shows a random Bible quote'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116705311183441124</id><published>2006-12-25T05:24:00.000-08:00</published><updated>2006-12-29T16:41:20.963-08:00</updated><title type='text'>Funny video about history of Ctrl+Alt+Delete</title><content type='html'>An old video, but still funny: &lt;br /&gt;&lt;a href="http://www.youtube.com/watch?v=WdGQsBDSEpk" target="_blank"&gt;http://www.youtube.com/watch?v=WdGQsBDSEpk&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116705311183441124?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116705311183441124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116705311183441124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116705311183441124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116705311183441124'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/funny-video-about-history-of.html' title='Funny video about history of Ctrl+Alt+Delete'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116692896326287841</id><published>2006-12-23T18:45:00.000-08:00</published><updated>2006-12-25T05:32:02.950-08:00</updated><title type='text'>An interesting advice for LotusScript developers to avoid memory leaks</title><content type='html'>In the technote &lt;a href="http://www-1.ibm.com/support/docview.wss?rs=0&amp;uid=swg21090756" target="_blank"&gt;GetProfileDocument Method Appears to Leak Memory; Error "...LookupHandle: Handle Not Allocated"&lt;/a&gt;, an interesting solution is given for avoiding memory leaks in certain LotusScript operations.&lt;br /&gt;&lt;br /&gt;We all have at some time seen that some objects (usually documents in loops) are not properly removed by Notes after they have been processed and we had to call Delete method on the object to free the memory. Well, I think not many of us tried to free even Database object in each loop iteration. But according to the technote, assigning and deleting database object in each loop iteration can make a big difference. It would be interesting to test how this solution affects performance, as I suppose it would take time to reset database object 6000 times.&lt;br /&gt;&lt;br /&gt;Excerpt:&lt;br /&gt;&lt;font color=brown&gt;The memory usage can be reduced by deleting the object handle to the profile document, but if you delete the object handle to the NotesDatabase object, then the memory usage is greatly reduced.&lt;br /&gt;&lt;br /&gt;For example, based on the agent example above, the code would be altered to the following: &lt;br /&gt;&lt;br /&gt;Dim session As New NotesSession&lt;br /&gt;Dim db As NotesDatabase&lt;br /&gt;Dim doc As NotesDocument&lt;br /&gt;Dim i As Integer&lt;br /&gt;-&lt;br /&gt;For i = 1 To 6000&lt;br /&gt;Print Cstr(i)&lt;br /&gt;&lt;strong&gt;Set db = new NotesDatabase("server", "database.nsf")&lt;/strong&gt;&lt;br /&gt;Set doc = db.GetProfileDocument("ProfileDoc", Cstr(i))&lt;br /&gt;Delete doc&lt;br /&gt;&lt;strong&gt;Delete db &lt;/strong&gt;&lt;br /&gt;Next&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116692896326287841?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116692896326287841/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116692896326287841' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116692896326287841'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116692896326287841'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/interesting-advice-for-lotusscript.html' title='An interesting advice for LotusScript developers to avoid memory leaks'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116692833922630978</id><published>2006-12-23T18:36:00.000-08:00</published><updated>2007-01-03T16:21:52.147-08:00</updated><title type='text'>Making Internet password changes work faster</title><content type='html'>IBM has recently published a technote on how to speed up Domino server recognition of a recently changed Internet password.&lt;br /&gt;Technote: &lt;a href="http://www-1.ibm.com/support/docview.wss?rs=463&amp;context=SSKTMJ&amp;amp;dc=DB520&amp;uid=swg21245252&amp;amp;loc=en_US&amp;cs=UTF-8&amp;amp;lang=en&amp;amp;rss=ct463lotus" target="_blank"&gt;New Internet password is not immediately usable&lt;/a&gt;&lt;br /&gt;Looks like solutions described in the technote should work with other similar caching problems. Hopefully it can help against problems with cached group members when users who were added to a group still can not access databases containing that group in the ACL.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116692833922630978?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116692833922630978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116692833922630978' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116692833922630978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116692833922630978'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/making-internet-password-changes-work.html' title='Making Internet password changes work faster'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116691632531354053</id><published>2006-12-23T14:53:00.000-08:00</published><updated>2006-12-23T15:55:24.296-08:00</updated><title type='text'>Merry Christmas from Sametime Bot</title><content type='html'>Follow this link to see Christmas greeting from our Sametime bot Max: &lt;a href="http://www.botstation.com/merrychristmas/" target="_blank"&gt;http://www.botstation.com/merrychristmas/index.html&lt;/a&gt;&lt;br /&gt;And turn on sound on your computer :)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/merrychristmas/index.html" target="_blank"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/4486/1652/400/795735/sametimechristmas.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;On the same page you can try out AJAX-based Sametime chat interface to bot.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116691632531354053?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116691632531354053/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116691632531354053' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116691632531354053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116691632531354053'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/merry-christmas-from-sametime-bot.html' title='Merry Christmas from Sametime Bot'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116545471508611139</id><published>2006-12-06T17:21:00.000-08:00</published><updated>2006-12-20T20:43:56.870-08:00</updated><title type='text'>Lotus Roadshow 2006 in Stockholm</title><content type='html'>On the November 30th there was a half-day seminar at IBM about the new release of Domino and features of Sametime 7.5.&lt;br /&gt;A little strange that roadshow in Stockholm was whole 23 days after the seminar in Gothenburg. Stockholm was the last city out of 12.&lt;br /&gt;All seats in the conferance room were taken by more than 200 visitors (customers and business partners).&lt;br /&gt;IBM's presenters showed how the new Lotus Notes 8 client looks like and some of the new features not available in earlier versions. &lt;br /&gt;&lt;br /&gt;A funny thing happened when the presenter would show the integration of Notes client with SAP. He asked if there were any people in the audience who used SAP at their company. Noone raised their hand.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/x/blogger/4486/1652/1600/670779/IMGP1029.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/4486/1652/200/665805/IMGP1029.jpg" border="0" alt="" /&gt;&lt;/a&gt;          &lt;a href="http://photos1.blogger.com/x/blogger/4486/1652/1600/907592/IMGP1030.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/x/blogger/4486/1652/200/660499/IMGP1030.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here are presentations from the Road show: &lt;a href="http://www-5.ibm.com/se/news/events/lotusroadshow/" target="_blank"&gt;http://www-5.ibm.com/se/news/events/lotusroadshow/&lt;/a&gt;&lt;br&gt;And here are presentations available for online reading, converted by &lt;a href="http://www.notessidan.se/" target="_blank"&gt;Thomas Adrian&lt;/a&gt; to Flash format: &lt;a href="http://www.notessidan.se/A55B53/blogg.nsf/plink/TADN-6WGVR3" target="_blank"&gt;http://www.notessidan.se/A55B53/blogg.nsf/plink/TADN-6WGVR3&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116545471508611139?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116545471508611139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116545471508611139' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116545471508611139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116545471508611139'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/12/lotus-roadshow-2006-in-stockholm.html' title='Lotus Roadshow 2006 in Stockholm'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116390649047201106</id><published>2006-11-18T19:07:00.000-08:00</published><updated>2006-12-23T15:47:23.903-08:00</updated><title type='text'>A quick Sametime tip</title><content type='html'>If your Sametime server is accessible from the Internet and external users are not able to join the meetings, getting "Sametime server disconnected" message when connecting to Meetings, check that you have specified a valid Internet-resolvable server name (e.g.: sametime.company.com) in the server document: Internet protocols\HTTP\Host name(s) field.&lt;br /&gt;&lt;br /&gt;Check also that users ha´ve correct Sametime server in "Sametime server" field in their person documents in NAB.&lt;br /&gt;&lt;br /&gt;Information in the web browser's &lt;strong&gt;Java console&lt;/strong&gt; can provide valuable clues to why the web browser failed to connect to the meeting and other client-side sametime problems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tags: &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116390649047201106?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116390649047201106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116390649047201106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116390649047201106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116390649047201106'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/quick-sametime-tip.html' title='A quick Sametime tip'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116380017482873761</id><published>2006-11-17T12:47:00.000-08:00</published><updated>2006-11-17T13:49:35.030-08:00</updated><title type='text'>Borat from Kazachstan</title><content type='html'>For &lt;a href="http://en.wikipedia.org/wiki/Borat" target="_blank"&gt;Borat&lt;/a&gt;'s fans, &lt;a href="http://www.funkymusic.se/category/borat/" target="_blank"&gt;this web site&lt;/a&gt; can be interesting. It contains links to several video interviews with Borat Sagdiev. I haven't seen many of them before, but I am not his greatest fan either... &lt;a href="http://en.wikipedia.org/wiki/Ali_G" target="_blank"&gt;Ali G&lt;/a&gt; character is way cooler than Borat.&lt;br /&gt;&lt;a href="http://www.funkymusic.se/category/borat/" target="_blank"&gt;http://www.funkymusic.se/category/borat/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/borat" rel="tag"&gt;Borat&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116380017482873761?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116380017482873761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116380017482873761' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116380017482873761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116380017482873761'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/borat-from-kazachstan.html' title='Borat from Kazachstan'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116369052776871418</id><published>2006-11-16T06:56:00.000-08:00</published><updated>2006-11-16T07:22:07.826-08:00</updated><title type='text'>Skype on mobile phones</title><content type='html'>From the 1st December will cell phone network operator "3" (Three) begin selling &lt;a href="http://www.nokia.se/phones/n73/pics/n73-features.jpg" target="_blank"&gt;Nokia's N73&lt;/a&gt; and &lt;a href="http://www.sonyericsson.com/images/spgd/GPD_29403high_27_0_4001.jpg" target="_blank"&gt;Sony Ericssons W950&lt;/a&gt; equiped with &lt;a href="http://www.skype.com" target="_blank"&gt;Skype&lt;/a&gt; software. &lt;br /&gt;&lt;br /&gt;With flat price for mobile Internet access, phone users can make free calls to other Skype-users and cheap international phone calls.&lt;br /&gt;&lt;br /&gt;So far the Skype-enabled phones will be available only in UK, but maybe they will work in other countries too as far as there is a mobile broadband connection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116369052776871418?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116369052776871418/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116369052776871418' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116369052776871418'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116369052776871418'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/skype-on-mobile-phones.html' title='Skype on mobile phones'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116301657472499797</id><published>2006-11-08T11:16:00.000-08:00</published><updated>2006-11-08T12:31:29.503-08:00</updated><title type='text'>Free e-book: Sametime For Dummies</title><content type='html'>&lt;a href="http://www-306.ibm.com/software/info/stdummies/index.jsp" target="_blank"&gt;&lt;img src="http://www-306.ibm.com/software/info/L372294R28128Y25/cover.gif"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As posted earlier by &lt;a href="http://www.edbrill.com/ebrill/edbrill.nsf/dx/lotus-sametime-for-dummies-free-pdf-download" target="_blank"&gt;Ed Brill&lt;/a&gt; and &lt;a href="http://www.adamgartenberg.com/gartenberg/agartenberg.nsf/dx/get-your-copy-of-sametime-for-dummies-today" target="_blank"&gt;Adam Gartenberg&lt;/a&gt;, there is a free ebook called "Sametime For Dummies", which you can download from IBM's web site. &lt;br /&gt;&lt;br /&gt;The book has 72 pages. I could not find a reference to the number of pages in the paper edition, so I am not really sure if the PDF and paper book are same or not. &lt;br /&gt;&lt;br /&gt;You can download the book at &lt;a href="http://www-306.ibm.com/software/info/stdummies/index.jsp" target="_blank"&gt;http://www-306.ibm.com/software/info/stdummies/index.jsp&lt;/a&gt;&lt;br /&gt;It took me about 3 minutes to get the "save file" dialog box after right-clicking the download link and chosing "save target as", so be patient.&lt;br /&gt;&lt;br /&gt;Here is the table of contents:&lt;br /&gt;&lt;br /&gt;Introduction.......................................................1&lt;br /&gt;Part 1: What Is IBM Lotus Sametime? .................5&lt;br /&gt;Part 2: Instant Messages ..................................15&lt;br /&gt;Part 3: Lotus Sametime Web Conferences ..........31&lt;br /&gt;Part 4: Lotus Sametime Your Way .....................51&lt;br /&gt;Part 5: Ten Lotus Sametime Reminders ..............61&lt;br /&gt;Part 6: Ten Reasons Lotus Sametime Beats&lt;br /&gt;the Competition ...............................................65&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Sametime"&gt;Sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116301657472499797?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116301657472499797/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116301657472499797' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116301657472499797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116301657472499797'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/free-e-book-sametime-for-dummies.html' title='Free e-book: Sametime For Dummies'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116290683704920051</id><published>2006-11-07T05:32:00.000-08:00</published><updated>2006-11-09T09:32:24.576-08:00</updated><title type='text'>Embedding AJAX-based Sametime chat widget on web pages</title><content type='html'>With &lt;a href="http://www.botstation.com/products/stweb/about.php" target="_blank"&gt;STWidget&lt;/a&gt; web application it is possible to put chat client on any web page. All you need is to include an IFRAME reference into your page's HTML code. Using STWidget, web users can connect to external or internal Sametime server and chat with other people who use either same STWidget web application or a stand-alone Sametime chat client. &lt;br /&gt;&lt;br /&gt;If your internal Sametime server allows anonymous users, you can allow web visitors to directly contact selected people (or any person without restriction) without exposing internal Sametime server to Internet. This works because communication between STWidget app and server goes through a servlet, the web client never accesses the Sametime server directly.&lt;br /&gt;&lt;br /&gt;The developer of the web page can choose whether users must with username and password or anonymously. There is also a token login mode, where user is logged in automatically with his current credentials which he used for opening the page, so he doesn't need to login twice (first to Domino web application and then to Sametime).&lt;br /&gt;&lt;br /&gt;User's web browser does not need to have support for Java applets, the application works using AJAX-style XMLHTTP technology for communication with the web server.&lt;br /&gt;&lt;br /&gt;Flash version of the STWidget application is planned to be released in about 2 months, which will overcome the AJAX limitation of only &lt;a href="http://support.microsoft.com/kb/183110" target="_blank"&gt;2 concurrent connections &lt;/a&gt;to the web server.&lt;br /&gt;&lt;br /&gt;&lt;font color="green"&gt;&lt;br /&gt;&amp;lt;iframe src="http://stwidget.dyndns.org:19760/stwidget.html?login=anonymous" scrolling="no" frameborder="0" style="width:175; height:330;"&gt;&amp;lt;/iframe&gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Below is a &lt;strong&gt;&lt;span style="color:#009900;"&gt;working example&lt;/span&gt; &lt;/strong&gt;of embedded Sametime chat (&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;not just a picture&lt;/span&gt;&lt;/strong&gt;). Input any name and you'll be logged in to Sametime server where you can chat with our Sametime Bot. Bot knows a lot of jokes, just type "joke" to him and he'll reply with a funny joke :) If you think the joke was not funny, type "joke" again and again until you are satisfied :)&lt;br /&gt;&lt;br /&gt;&lt;iframe style="WIDTH: 175px; HEIGHT: 330px" src="http://stwidget.dyndns.org:19760/stwidget.html?login=anonymous" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:10px;"&gt;&lt;font color="red"&gt;Note:&lt;/font&gt; this embedded chat is for testing purposes only. Do not put it on your web site as it can be removed or modified at any time without prior notice. &lt;a href="mailto:contact@botstation.com?subject=STWidget"&gt;Contact us&lt;/a&gt; if you want to place chat widget on your web site.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Demo for anonymous login and login with password: &lt;a href="http://www.botstation.com/products/stweb/demo.php" target="_block"&gt;http://www.botstation.com/products/stweb/demo.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati:  &lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt; &lt;a href="http://technorati.com/tag/STLinks" rel="tag"&gt;STLinks&lt;/a&gt; &lt;a href="http://technorati.com/tag/STWidget" rel="tag"&gt;STWidget&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116290683704920051?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116290683704920051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116290683704920051' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116290683704920051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116290683704920051'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/11/embedding-ajax-based-sametime-chat.html' title='Embedding AJAX-based Sametime chat widget on web pages'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116231252097370098</id><published>2006-10-31T08:34:00.000-08:00</published><updated>2006-11-05T17:29:10.720-08:00</updated><title type='text'>The forgotten art of StampAll .. or the fastest way to update documents</title><content type='html'>I've been analyzing an agent and found that it uses NotesDocumentCollection.StampAll(fieldname, value) method.  I knew about the existence of the method but didn't remember about actually using it,  so I decided to test how effective it was compared with other methods. For comparing I used looping through all documents in a document collection and updating them one by one.&lt;br /&gt;The result was that for updating one field StampAll is 80% faster than any other method. To update field called "testfield" in 15000 documents using StampAll("testfield", "test")  took &lt;strong&gt;31&lt;/strong&gt; seconds, using doc.testfield="test" tool &lt;strong&gt;54&lt;/strong&gt; seconds and doc.ReplaceItemValue("testfield", "test")  took &lt;strong&gt;50&lt;/strong&gt; seconds.&lt;br /&gt;&lt;br /&gt;Surprisingly to update the same field using @Formula (Field testfield:="test") took 120 seconds. Using Simple Action it took 65 seconds.&lt;br /&gt;&lt;br /&gt;One disadvantage with StampAll method is that it updates &lt;strong&gt;only one field at a time&lt;/strong&gt;. So if you want to update 2 fields in a document, it would take 2 times as long time, while with other methods the difference is about +10% for each additional field.&lt;br /&gt;&lt;br /&gt;Here is the source code of the agent and the agent's output.&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;Dim session As New NotesSession&lt;br /&gt;Dim db As NotesDatabase&lt;br /&gt;Dim coll As NotesDocumentCollection&lt;br /&gt;Dim doc As NotesDocument&lt;br /&gt;Dim item As NotesItem&lt;br /&gt;Set db=session.CurrentDatabase&lt;br /&gt;&lt;br /&gt;Set coll=db.AllDocuments&lt;br /&gt;timerStart=Timer&lt;br /&gt;&lt;strong&gt;Call coll.StampAll("testfield", "test1")&lt;/strong&gt;&lt;br /&gt;Print "Elapsed in test nr1: "+Cstr(Timer-timerStart)&lt;br /&gt;&lt;br /&gt;timerStart=Timer&lt;br /&gt;Set doc=coll.GetFirstDocument&lt;br /&gt;While Not doc Is Nothing&lt;br /&gt;doc.testfield="test2"&lt;br /&gt;Call doc.Save(True, False)&lt;br /&gt;Set doc=coll.GetNextDocument(doc)&lt;br /&gt;Wend&lt;br /&gt;Print "Elapsed in test nr2: "+Cstr(Timer-timerStart)&lt;br /&gt;&lt;br /&gt;timerStart=Timer&lt;br /&gt;Set doc=coll.GetFirstDocument&lt;br /&gt;While Not doc Is Nothing&lt;br /&gt;Call doc.ReplaceItemValue("testfield","test3")&lt;br /&gt;Call doc.Save(True, False)&lt;br /&gt;Set doc=coll.GetNextDocument(doc)&lt;br /&gt;Wend&lt;br /&gt;Print "Elapsed in test nr3: "+Cstr(Timer-timerStart)&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Elapsed in test nr1: 30,89014 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Elapsed in test nr2: 54,27002 &lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Elapsed in test nr3: 50,06982&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116231252097370098?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116231252097370098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116231252097370098' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116231252097370098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116231252097370098'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/forgotten-art-of-stampall-or-fastest.html' title='The forgotten art of StampAll .. or the fastest way to update documents'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116172696151564675</id><published>2006-10-24T13:38:00.000-07:00</published><updated>2006-10-24T14:56:01.590-07:00</updated><title type='text'>Problem with Sametime installation</title><content type='html'>I hope this post will save some Domino/Sametime administrator time searching for solution.&lt;br /&gt;&lt;br /&gt;I had Domino 5 server with Sametime 3.0 installed on my test server. The server was not in autostart mode. I didn't use it much so I decided to upgrade it to Domino 6.5 for making local tests of &lt;a href="http://www.botstation.com/products/stweb/about.php" target="_blank"&gt;STWidget application&lt;/a&gt; in Anonymous mode. I chose not to update to the latest Sametime 7.0/7.5 because many (50%?) companies still use Domino 6 and Sametime 3.1/6.5.1. Although Sametime 7 Java Toolkit should work fine with Sametime 6, you never know.&lt;br /&gt;&lt;br /&gt;I installed the Domino 6.5.5 server to a new folder and tested that it started correctly. Then I tried to install Sametime 6.5.1 server. The installation aborted with following message:&lt;br /&gt;&lt;span style="color:#ff0000;"&gt;IBM Lotus Sametime 6.5.1 requires that&lt;br /&gt;IBM Lotus Domino 6.0.3 or later&lt;br /&gt;be installed on the same&lt;br /&gt;computer as IBM Lotus Sametime 6.5.1&lt;br /&gt;&lt;br /&gt;Install Domino 6.0.3 or later and&lt;br /&gt;then restart this installation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I checked that PATH environment variable does not point to the old Domino5 installation and even manually registered the nlsxbe.dll file "regsvr32 c:\lotus6\nlsxbe.dll" and un-registered the dll file in R5 folder.&lt;br /&gt;That didn't help. Then I renamed the folder containing the old Domino 5 server files to c:\aaaaaaaLotus5\, hoping that installation will continue after it failed to open non-existant files.&lt;br /&gt;Now when the new Sametime server installation started, it showed "Path not found" error message. This clearly pointed ou that it was just as I suspected that the old R5 server still was somehow found from the new server installation.&lt;br /&gt;With "Path not found" search string I found &lt;a href="http://www-1.ibm.com/support/docview.wss?rs=0&amp;q1=1158939&amp;amp;uid=swg21158939&amp;loc=sv&amp;amp;cs=utf-8&amp;lang=" target="_blank"&gt;IBM's technote&lt;/a&gt; describing the solution. The solution was simple: delete the &lt;span style="color:#ff6600;"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Lotus\Domino\5.0&lt;/span&gt; registry entry.&lt;br /&gt;After deleting the entry, the new Sametime server was installed without problems.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www-1.ibm.com/support/docview.wss?rs=0&amp;q1=1158939&amp;amp;uid=swg21158939&amp;loc=sv&amp;amp;cs=utf-8&amp;amp;lang=&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116172696151564675?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116172696151564675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116172696151564675' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116172696151564675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116172696151564675'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/problem-with-sametime-installation.html' title='Problem with Sametime installation'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116156273197106621</id><published>2006-10-22T17:16:00.000-07:00</published><updated>2006-10-23T04:43:43.950-07:00</updated><title type='text'>Skype and Lotus Notes</title><content type='html'>&lt;a href="http://www.eview.com" target="_blank"&gt;The View&lt;/a&gt; journal has recently published my article &lt;a href="http://drh02.eapps.com/eview/viewr6.nsf/CurrentIssue/BEB39EA018F7DBBB8525720C000C37B2/?OpenDocument" target="_blank"&gt;"How to add Internet telephony to your Lotus Notes and Domino applications"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The article describes how to integrate Skype telephony and chat into Lotus Notes applications using Skype COM API and how to integrate Skype with Domino web applications using javascript and other solutions.&lt;br /&gt;&lt;br /&gt;The article includes a downloadable database with example code. Examples show different ways to trigger Skype functionality from Notes client and to monitor Skype status. You can copy buttons from the examples and paste into your own applications to enable one-click phone calls from Address Book.&lt;br /&gt;&lt;br /&gt;Prerequisites for the examples to work: installed Skype client and Skype COM API toolkit, both are free to download and use.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4486/1652/1600/view%20action%20buttons.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4486/1652/320/view%20action%20buttons.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116156273197106621?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116156273197106621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116156273197106621' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116156273197106621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116156273197106621'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/skype-and-lotus-notes.html' title='Skype and Lotus Notes'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116156219590488994</id><published>2006-10-22T15:34:00.000-07:00</published><updated>2006-10-22T17:26:45.966-07:00</updated><title type='text'>Debugging web applications in Firefox</title><content type='html'>Finding errors in JavaScript on web pages can be a difficult task. In Internet Explorer you can in best case see the line number where the error occured.&lt;br /&gt;&lt;br /&gt;I recently began using Firefox Javascript console for debugging web applications. Besides javascript errors, console also shows invalid properties of CSS stylesheets.&lt;br /&gt;The console can be opened using Tools-JavaScript Console menu in Firefox browser. In the console you can see all the errors which occured, not only the last one as in IE. By clicking on error message, it opens a window with the script file where the error occured and marks the error line.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/400/ScreenShot050.0.jpg" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;A strange thing I experienced with Firefox console is that it somehow caches XML-document nodes which results in "ghost" nodes. When I changed &lt;a href="http://www.botstation.com/products/stweb/about.php" target="_blank"&gt;WIMBO Sametime chat application &lt;/a&gt;to use XML-formatted data instead of plain-text data, the Javascript console reported that the web browser still received the old plain-text data. The data was clearly not a part of the information received from the servlet, so I am still wondering why Firefox appended that data to the real data. Similar problem with ghost nodes happened when I replaced an empty "&amp;lt;RESPONSE&amp;gt;&amp;lt;/RESPONSE&amp;gt;" root node which caused problem in Firefox to "&amp;lt;RESPONSE&amp;gt;&amp;lt;NONE&amp;gt;-&amp;lt;/NONE&amp;gt;&amp;lt;/RESPONSE&amp;gt;".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116156219590488994?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116156219590488994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116156219590488994' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116156219590488994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116156219590488994'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/debugging-web-applications-in-firefox.html' title='Debugging web applications in Firefox'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116121465203262063</id><published>2006-10-18T15:55:00.000-07:00</published><updated>2006-10-18T16:37:32.376-07:00</updated><title type='text'>A L33T Java agent one-liner</title><content type='html'>I noticed that most of the Domino developers split object calls into separate (more manageble?) pieces. What a waste of space in the code editor!&lt;br /&gt;&lt;br /&gt;Let's create a one line of code which gets days difference between the first and the last document in a view and the total number of documents in a view, all without any declarations of variables.&lt;br /&gt;The code is written in Java (agent), but the same thing can be done in LotusScript.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;color:#330099;"&gt;System.out.println("Time difference in days: "+String.valueOf(getSession().getAgentContext().getCurrentDatabase().getView("all").getLastDocument().getCreated().timeDifference(getSession().getAgentContext().getCurrentDatabase().getView("all").getFirstDocument().getCreated())/60/60/24)+". Number of documents: "+String.valueOf(getSession().getAgentContext().getCurrentDatabase().getView("all").getAllEntries().getCount()));&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/320/ScreenShot048.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Post your own one-line code snippets,  maybe we can find a practical use for them  :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116121465203262063?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116121465203262063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116121465203262063' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116121465203262063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116121465203262063'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/l33t-java-agent-one-liner.html' title='A L33T Java agent one-liner'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-116034650086108806</id><published>2006-10-08T13:30:00.000-07:00</published><updated>2006-10-18T15:55:07.726-07:00</updated><title type='text'>USB phone for Skype</title><content type='html'>Last week I've buyed a Doro 212IPC USB phone for Skype... and tested it as soon as I came home :)  It costed 99 SEK (&lt;a href="http://www.google.com/search?q=99+sek+to+usd&amp;meta=" target="_blank"&gt;12.5 USD&lt;/a&gt;) at &lt;a href="http://www.mediamarkt.se" target="_blank"&gt;Media Markt&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4486/1652/320/doro_212IPC.jpg" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;The phone quality is pretty good. Both incoming and outgoing sound is clear. But the integration with Skype and Windows could be improved.&lt;br /&gt;Essentially, the USB phone is nothing more than a phone-formed headset with a keypad. I had some more expectations from a device called "phone", but what can you expect for 13 dollars? &lt;br /&gt;&lt;br /&gt;The phone is setup as a sound device in Windows, and when plugged-in to the USB port, all sound goes through the phone instead of regular speakers. This is not very good as you most probably only want the sound from Skype program go through the phone, not sound from other programs. At the same time, this "feature" makes it possible to use the phone with the most of other softphones because it takes over standard audio input/output devices. It worked fine to speak and hear with X-Lite softphone (I dialed using mouse and softphone's virtual keypad) and after I downloaded a special driver, I could even use phone's number pads to dial the number. &lt;br /&gt;Luckily, it's possible to manually change the settings in Windows after plugging in the phone to use standard sound devices instead of "Doro 212IPC" (you can still keep the Doro settings in Skype).&lt;br /&gt;&lt;br /&gt;The first thing I noticed that you must manually open the "dial" tab in the Skype client, otherwise you can not dial a phone number. If any other tab than "dial" is selected in the client, the phone's number pad works for navigation up/down/left/right, which e.g. makes it possible to choose a Skype user in the buddy list. But as it's actually a phone, one would expect that when dialing a number from the key pad, the phone puts the Skype client into dial mode by default. As you must visually verify that the Skype client is on "dial" tab, the number pad on the phone is almost useless, as I can as easily type the number in the Skype software client on the computer when I am there anyway checking that the correct tab is open.&lt;br /&gt;&lt;br /&gt;The other thing I expected to find in the phone was that incoming calls would ring in the phone. But the ring signal is possible only from the computer. How hard would it be to put a small speaker in the phone and activate it on incoming calls? Without this feature, the phone feels like an odd headset.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Overall impression of the phone device is positive, specially considering the low price. It's OK for making casual calls, but probably too boring if you are making a lot of calls. As the phone does not have a screen showing the dialed number, you will rather soon happen to dial a wrong number if you do not verify it on the computer screen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Note: you must purchase SkypeOut credits for making outgoing phone calls; and SkypeIn service for accepting incoming phone calls to Skype client. Skype-to-Skype calls are free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-116034650086108806?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/116034650086108806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=116034650086108806' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116034650086108806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/116034650086108806'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/10/usb-phone-for-skype.html' title='USB phone for Skype'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115850397325566905</id><published>2006-09-17T07:35:00.000-07:00</published><updated>2006-09-17T07:39:33.276-07:00</updated><title type='text'>Top 10 ways to motivate Domino geeks</title><content type='html'>&lt;a href="http://www.dominopower.com/issues/issue200609/00001826001.html" target="_blank"&gt;An interesting article&lt;/a&gt; in the DominoPower magazine about what make the geeks to tick.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115850397325566905?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115850397325566905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115850397325566905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115850397325566905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115850397325566905'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/top-10-ways-to-motivate-domino-geeks.html' title='Top 10 ways to motivate Domino geeks'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115844738758139354</id><published>2006-09-16T15:51:00.000-07:00</published><updated>2006-09-16T15:56:27.590-07:00</updated><title type='text'>Action icons for Domino applications</title><content type='html'>Why use stock icons instead of standard Domino images?&lt;br /&gt;Icons deliver the first impression when someone experiences your application or visits your website. Adding stock icons can be the difference between giving an impression of merely functional, or looking professional.&lt;br /&gt;&lt;br /&gt;Designing professional-quality icons ranges from time-consuming (if you're artistic) to virtually impossible (if you’re not artistic - witness the shopping cart on the left).&lt;br /&gt;&lt;br /&gt;For a fraction of the cost of having a graphics design professional on staff, the solution is to acquire a set of stock icons. A stock icon collection typically contains 100 or more icons that represents the functionality common to most applications and websites (help, copy, paste, shopping carts, flags, locks).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here is a review and list of many web sites offering free and commercial icons:&lt;br /&gt;http://www.iconsreview.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115844738758139354?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115844738758139354/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115844738758139354' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115844738758139354'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115844738758139354'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/action-icons-for-domino-applications.html' title='Action icons for Domino applications'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115793675321768727</id><published>2006-09-10T17:09:00.000-07:00</published><updated>2006-09-10T19:00:06.656-07:00</updated><title type='text'>Mac video ads  -VS-  HP video ads</title><content type='html'>Have you seen those fraudulent video ads that Apple produced for the Mac computers? &lt;br /&gt;You can see them here: &lt;a href="http://www.apple.com/getamac/" target="_blank"&gt;http://www.apple.com/getamac/&lt;/a&gt;   Warning: you must install the latest QuickTime video codec before trying to watch, otherwise the crap won't start. You should not have heavy objects near you as throwing them at the screen can damage the monitor. In short, the ads are about PC computers being boring and infected with viruses; Mac computers on the other hand are cool and are for creative people who don't want to bother about technical details and who use Mac to show their great design skills to other (Mac?) people. Some of the video ads are pretty funny, but the only people they can fool are stay-at-home moms with no technical background wanting to surf the Internet for cookie recepies and school kids who are mistakenly thinking they will somehow instantly raise their creativity level and become able to create cool pics to show their friends. Just look at their ad ("Accident") about a PC which fell down because someone tripped over the cords. What a joke! I woudn't be surprised if they did an ad where a PC user was strike by a lightning because of erhh... hmmm... LED lamp on CD-rom attracting electricity from the air.  &lt;br /&gt;&lt;br /&gt;But don't be in despair, my PC friends! No need to sue Apple for false advertising, they have enough problems without us, converting to Intel platform so people can finally do something useful with their new Unix-based OS X. We have got something better! HP produced several video ads that kick Apple's butt into the space! The ads are obviously more expensive than Apple's, and web campaign has some additional cool multimedia features. You can include your own picture in a video and send it to your friends. Check out my video here: &lt;a href="http://www.personiva.com/hp/preview.aspx?DetId=10399-0V6L4Q1M1S4K5J4" target="_blank"&gt;Link&lt;/a&gt;. No comments about how I look in the rock video please  :)&lt;br /&gt;Here you can see the professional video ads and create your own video email using your picture: &lt;a href="http://www.hp.com/personalagain" target="_blank"&gt;http://www.hp.com/personalagain&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I am not sure if HP's computers are really that good as shown in the ads, but the video ads themself are way better than Apple's brain dead dialog between a hippie and an office guy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115793675321768727?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115793675321768727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115793675321768727' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115793675321768727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115793675321768727'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/mac-video-ads-vs-hp-video-ads.html' title='Mac video ads  -VS-  HP video ads'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115782905437874978</id><published>2006-09-09T11:00:00.000-07:00</published><updated>2006-09-09T12:17:23.086-07:00</updated><title type='text'>I want to believe</title><content type='html'>Finally an &lt;a href="http://en.wikipedia.org/wiki/Steorn" target="_blank"&gt;invention&lt;/a&gt; which can change the history of mankind, and you can follow it's course day-by-day!&lt;br /&gt;A claim of this size happens only once in about 10 years, so don't miss it, otherwise who knows when you have a possibility to see something similar next time. It's not every day someone makes a claim to have a WORKING prototype of Perpetuum Mobile.&lt;br /&gt;&lt;br /&gt;Here is what the &lt;a href="http://www.steorn.net" target="_blank"&gt;company&lt;/a&gt; says:&lt;br /&gt;-  We have developed a technology that produces free, clean and constant energy.&lt;br /&gt;&lt;br /&gt;- This means never having to recharge your phone, never having to refuel your car. A world with an infinite supply of clean energy for all.&lt;br /&gt;&lt;br /&gt;- Our technology has been independently validated by engineers and scientists - always off the record, always proven to work. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;"What we have developed is a way to construct magnetic fields so that when you travel round the magnetic fields, starting and stopping at the same position, you have gained energy," Sean McCarthy (Steorn's chief executive officer) said.&lt;br /&gt;"The energy isn't being converted from any other source such as the energy within the magnet. It's literally created. Once the technology operates it provides a constant stream of clean energy," he told Ireland's RTE radio.&lt;br /&gt;&lt;br /&gt;Many people think that it's a hoax or some kind of PR trick. As the company does not show it's device publicly, I am somewhat sceptical too. &lt;br /&gt;Their claim to put the energy-producing device in mobile phones to make them work without batteries sounds also somewhat unrealistic, I have hard to see how would they fit the device inside the cell phone and how it would manage to produce that much energy. With all the shakings, falls and hot/moisture/dust environments the cell phone experiences, it would be higly impractical to implement a free energy producing thingy inside a cell phone. Is it their give-away that the device does not exist, or is it just an unfortunate example of usage area?&lt;br /&gt;&lt;br /&gt;The main difference of Steorn's invention with other similar claims is that they say that they already have a working machine. 98% of other claimers had only drawings of how such machine would look like. They also say that several independent professionals have verified that the machine works. The fact that ALL of those experts have chosen to remain anonymous raises some suspicion. &lt;br /&gt;Even if the experts couldn't explain why the machine works, according to Steorn they all aknowledged that it does work.&lt;br /&gt;Another difference is that Steorn does not ask for investments. If it was a hoax, they would want to get the investor's money and dissapear before the bluff is exposed. But they challenged 12 scientists to verify the results before any investments are accepted. The fact of not asking for investments does not however exclude it from being a PR trick. As the Steorn itself is too insignificant to gain something from this kind of publicity, maybe some larger company stands behind it as uses Steorn as a marionett. Maybe it's some kind of ad campaign for electricity-driven Toyota Prius? Some people &lt;a href="http://forums.unfiction.com/forums/viewtopic.php?p=271485" target="_blank"&gt;think it's an ad campaign &lt;/a&gt;for the next release of HALO video game. &lt;br /&gt;&lt;br /&gt;So hold your breath, the new age of human civilization is coming soon! Hmmm.. or maybe the end of the world? Anyway, some kind of result (positive or negative) should be available before the end of the year.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://www.steorn.net&lt;br /&gt;http://en.wikipedia.org/wiki/Steorn&lt;br /&gt;Ad in "The Economist": http://www.steorn.net/media/downloads/steorn_ad01_screen.pdf&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115782905437874978?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115782905437874978/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115782905437874978' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115782905437874978'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115782905437874978'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/i-want-to-believe.html' title='I want to believe'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115766278931530034</id><published>2006-09-07T13:37:00.000-07:00</published><updated>2006-09-07T14:06:31.960-07:00</updated><title type='text'>Export inline Notes pictures to disk as GIF files</title><content type='html'>Have you tried to export an inline picture from Notes database to hard drive? You can of course select the picture, copy it to clipboard, paste it to Paintbrush and then save the new picture to disk. But what if there are more than thousand pictures to process? The manual procedure would take several hours.&lt;br /&gt;Fortunately you can programmatically export pictures using Notes DXL classes. The code below takes the first picture in a richtext field named PictureRT and saves it to disk as a GIF file.&lt;br /&gt;&lt;br /&gt;The code uses a LotusScript library for BASE64 decoding, which you can download from Julian Robichaux's web site: http://www.nsftools.com/tips/NotesTips.htm#lsencryption&lt;br /&gt;&lt;br /&gt;Example does not use Notes classes for handling XML (NotesDOMParser), it parses the string using it's own logic. In many cases NotesDOMParser processing is to prefer, and I might later create a version which uses NotesDOMParser.&lt;br /&gt;&lt;br /&gt;Option Public&lt;br /&gt;Use "base64encdec"&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;Dim session as New NotesSession&lt;br /&gt;Dim db as NotesDatabase&lt;br /&gt;Dim doc as NotesDocument&lt;br /&gt;Dim picdata As String&lt;br /&gt;Dim decstr As String&lt;br /&gt;&lt;br /&gt;set db=session.CurrentDatabase&lt;br /&gt;set doc=db.GetDocumentByUNID("1EC1508B08428D4385256E00004B0D3F")&lt;br /&gt;&lt;br /&gt;Set exporter = session.CreateDXLExporter&lt;br /&gt;exporter.ConvertNotesBitmapsToGIF = True&lt;br /&gt;out = exporter.Export(pdoc)&lt;br /&gt;&lt;br /&gt;find1="&amp;lt;item name='PersonPicture'"&lt;br /&gt;find2="&amp;lt;/item&amp;gt;"&lt;br /&gt;findpic1="&amp;lt;picture"&lt;br /&gt;findpic2="&amp;lt;/picture&amp;gt;"&lt;br /&gt;rtstart=Instr(out, find1)&lt;br /&gt;rtstart2=Instr(rtstart, out, findpic1)&lt;br /&gt;rtfinish2=Instr(rtstart2, out, findpic2)&lt;br /&gt;purepic= Mid(out, rtstart2, rtfinish2-rtstart2+Len(findpic2))&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;finddata1="&amp;lt;gif originalformat="'notesbitmap'"&amp;gt;"&lt;br /&gt;finddata2="&amp;lt;/gif&amp;gt;"&lt;br /&gt;picdatastart=Instr(purepic, finddata1)&lt;br /&gt;picdatafinish=Instr(picdatastart, purepic, finddata2)&lt;br /&gt;picdata=Mid(purepic, picdatastart+Len(finddata1), picdatafinish-picdatastart-Len(finddata2))&lt;br /&gt;&lt;br /&gt;decstr=DecodeBase64(picdata)&lt;br /&gt;fout = Freefile&lt;br /&gt;Open "c:\testgif.gif" For Output As fout&lt;br /&gt;Print #fout, decstr&lt;br /&gt;Close #fout&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115766278931530034?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115766278931530034/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115766278931530034' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115766278931530034'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115766278931530034'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/export-inline-notes-pictures-to-disk.html' title='Export inline Notes pictures to disk as GIF files'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115713038667778996</id><published>2006-09-01T09:07:00.000-07:00</published><updated>2006-09-07T14:20:30.506-07:00</updated><title type='text'>Christmas for OS junkies</title><content type='html'>With free VMWare player it's possible to test your Java and web applications in almost any OS.&lt;br /&gt;&lt;br /&gt;Here you can download different &lt;strong&gt;Linux OS&lt;/strong&gt; distributions&lt;strong&gt; pre-configured&lt;/strong&gt; with different software, such as CRM, firewall, web browsers, free web/email/collaboration servers, SSL VPN, security tools:&lt;br /&gt;&lt;a href="http://www.vmware.com/vmtn/appliances/directory/cat/51/"&gt;http://www.vmware.com/vmtn/appliances/directory/cat/51/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;My favorite is Linux OS configured with several web browsers, which makes it possible to see how web (Domino)  applications look like in Linux's browsers:&lt;br /&gt;&lt;a href="http://www.vmware.com/vmtn/appliances/directory/browserapp.html"&gt;http://www.vmware.com/vmtn/appliances/directory/browserapp.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've heard (blink blink ;)) that there is even a way to run Mac OS X in VMWare in Windows. If it was true, that would be a great way to test how web (or Java) applications work in Mac OS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115713038667778996?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115713038667778996/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115713038667778996' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115713038667778996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115713038667778996'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/christmas-for-os-junkies.html' title='Christmas for OS junkies'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115711922506507663</id><published>2006-09-01T06:53:00.000-07:00</published><updated>2006-09-01T07:00:25.076-07:00</updated><title type='text'>List of 25 PDF converters</title><content type='html'>Here is a list of 25 programs which can convert text files to PDF format.&lt;br /&gt;&lt;a href="http://www.epublishingdaily.com/25-pdf-converters/" target="_blank"&gt;http://www.epublishingdaily.com/25-pdf-converters/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Personally I use OpenOffice to save from Word to PDF, but there might be cases where some extra features are needed not available in OpenOffice. I also have PDF995 and PDFCreator as printer drivers which enable me to save output to PDF file from any program which allows to print out to printer. &lt;br /&gt;A PDF printer driver is the easiest way to save any Notes document to PDF format.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115711922506507663?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115711922506507663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115711922506507663' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115711922506507663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115711922506507663'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/09/list-of-25-pdf-converters.html' title='List of 25 PDF converters'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115633850427165146</id><published>2006-08-23T05:59:00.000-07:00</published><updated>2006-08-23T06:12:00.896-07:00</updated><title type='text'>Showing user's pictures in Sametime 7.5</title><content type='html'>&lt;a href="http://www.bingham.co.za/" target="_blank"&gt;Grant Bingham&lt;/a&gt; in his &lt;a href="http://www.bingham.co.za/?p=28" target="_blank"&gt;blog&lt;/a&gt; explains how to show users' pictures in Sametime 7.5 client. His &lt;a href="http://www.bingham.co.za/?p=28" target="_blank"&gt;step-by-step instructions&lt;/a&gt; with screenshots are much easier to follow than &lt;a href="http://www-1.ibm.com/support/docview.wss?uid=swg21244204" target="_blank"&gt;IBM's technote&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Sametime" rel="tag"&gt;Sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115633850427165146?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115633850427165146/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115633850427165146' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115633850427165146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115633850427165146'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/showing-users-pictures-in-sametime-75.html' title='Showing user&apos;s pictures in Sametime 7.5'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115629630573061409</id><published>2006-08-22T18:22:00.000-07:00</published><updated>2006-08-23T06:58:51.893-07:00</updated><title type='text'>Avoid caching of web pages</title><content type='html'>To avoid caching of Domino web pages/documents when re-opening the page, put this code snippet into HTML Head Content property of the form:&lt;br /&gt;&lt;br /&gt;&amp;quot;&amp;lt;meta http-equiv=\&amp;quot;Expires\&amp;quot; content=\&amp;quot;0\&amp;quot;&amp;gt; &amp;lt;meta http-equiv=\&amp;quot;Cache-Control\&amp;quot; content=\&amp;quot;must-revalidate\&amp;quot;&amp;gt; &amp;lt;meta http-equiv=\&amp;quot;Cache-Control\&amp;quot; content=\&amp;quot;no-cache\&amp;quot;&amp;gt;&amp;quot;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115629630573061409?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115629630573061409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115629630573061409' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115629630573061409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115629630573061409'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/avoid-caching-of-web-pages.html' title='Avoid caching of web pages'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115582494936842787</id><published>2006-08-17T07:04:00.000-07:00</published><updated>2006-08-17T08:15:24.963-07:00</updated><title type='text'>Programmatically export Lotus Notes contacts to VCard format</title><content type='html'>Lotus Notes 6 makes it possible to export contacts to VCard format. You can do it using File-Export menu. In the Export dialog box you can choose to export to VCard 2.1/3.0 format. After that you can import the resulting VCF file into Outlook.&lt;br /&gt;&lt;br /&gt;But sometimes you would like to modify the format which the automated function uses. For example instead of "FirstName LastName/Company/Country" format in VCard's FN field you want to use simply "FirstName LastName", or you want to make a lookup to fetch the required field value.&lt;br /&gt;"Export to VCard" option is available only in the databases of type "Domino Directory", you can not see that export option in regular Domino databases where you might have people documents.&lt;br /&gt;&lt;br /&gt;Here is a LotusScript agent which runs on selected documents in any database and exports them to VCard fromat. The agent expects that the names of the fields in the documents are the same as in Address Book's "Person" form, so if you used other field names you must modify the agent. The agent's "Target" property is "All selected documents". Agent is run by choosing agent's name in the actions menu in a view after you've selected the documents you want to export.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:verdana;font-size:78%;color:#333399;"&gt;&lt;br /&gt;'------------- AGENT START -----------&lt;br /&gt;Sub Initialize&lt;br /&gt; Dim session As New NotesSession&lt;br /&gt; Dim nabdb As NotesDatabase&lt;br /&gt; Dim nabdoc As NotesDocument&lt;br /&gt; Dim nabcoll As NotesDocumentCollection&lt;br /&gt; Dim vcardfile As String&lt;br /&gt; Dim result As String&lt;br /&gt; Dim linebreak As String&lt;br /&gt; Dim fileNum As Integer&lt;br /&gt; &lt;br /&gt; linebreak=Chr(13)+Chr(10)&lt;br /&gt; vcardfile="c:\lotus_notes_contacts.vcf"&lt;br /&gt; &lt;br /&gt; Set nabdb=session.CurrentDatabase&lt;br /&gt; Set nabcoll=nabdb.UnprocessedDocuments&lt;br /&gt; Print "Exporting"+Cstr(nabcoll.Count)+" documents to VCard "+vcardfile&lt;br /&gt; &lt;br /&gt; If nabcoll.Count=0 Then Exit Sub&lt;br /&gt; &lt;br /&gt; fileNum% = Freefile()&lt;br /&gt; Open vcardfile For Output As #fileNum%&lt;br /&gt; &lt;br /&gt; Set nabdoc=nabcoll.GetFirstDocument&lt;br /&gt; While Not nabdoc Is Nothing&lt;br /&gt;  &lt;br /&gt;  result="BEGIN:VCARD"+linebreak+ "VERSION:2.1"&lt;br /&gt;  &lt;br /&gt;  result=result+linebreak+ "N:"+nabdoc.LastName(0)+";"+nabdoc.FirstName(0)+";"+nabdoc.MiddleName(0)+";"+nabdoc.Title(0)&lt;br /&gt;  If nabdoc.MiddleName(0)="" Then &lt;br /&gt;   FullName=nabdoc.FirstName(0)+" "+nabdoc.LastName(0)&lt;br /&gt;  Else&lt;br /&gt;   FullName=nabdoc.FirstName(0)+" "+nabdoc.MiddleName(0)+" "+nabdoc.LastName(0)&lt;br /&gt;  End If&lt;br /&gt;  result=result+linebreak+"FN:"+FullName&lt;br /&gt;  ' result=result+linebreak+"NICKNAME:"+FullName&lt;br /&gt;  result=result+linebreak+"ORG:"+nabdoc.CompanyName(0)+";"+nabdoc.Department(0)&lt;br /&gt;  result=result+linebreak+"TITLE:"+nabdoc.JobTitle(0)&lt;br /&gt;  result=result+linebreak+"NOTE:"+nabdoc.Comment(0)&lt;br /&gt;  result=result+linebreak+"TEL;WORK;VOICE:"+nabdoc.OfficePhoneNumber(0)&lt;br /&gt;  result=result+linebreak+"TEL;HOME;VOICE:"+nabdoc.PhoneNumber(0)&lt;br /&gt;  result=result+linebreak+"TEL;CELL;VOICE:"+nabdoc.CellPhoneNumber(0)&lt;br /&gt;  result=result+linebreak+"TEL;WORK;FAX:"+nabdoc.OfficeFaxPhoneNumber(0)&lt;br /&gt;  result=result+linebreak+"TEL;HOME;FAX:"+nabdoc.HomeFAXPhoneNumber(0)&lt;br /&gt;  result=result+linebreak+"ADR;WORK:;"+nabdoc.OfficeCity(0)+";"+replaceLineBreak(nabdoc.OfficeStreetAddress(0))+";"+nabdoc.OfficeCity(0)+";"+nabdoc.OfficeState(0)+";"+nabdoc.OfficeZIP(0)+";"+nabdoc.OfficeCountry(0)&lt;br /&gt;  result=result+linebreak+"ADR;HOME:;;"+replaceLineBreak(nabdoc.StreetAddress(0))+";"+nabdoc.City(0)+";"+nabdoc.State(0)+";"+nabdoc.Zip(0)+";"+nabdoc.Country(0)&lt;br /&gt;  ' result=result+linebreak+"URL;WORK:"+nabdoc.WebSite(0)&lt;br /&gt;  result=result+linebreak+"URL;HOME:"+nabdoc.WebSite(0)&lt;br /&gt;  result=result+linebreak+"PREF;INTERNET:"+nabdoc.InternetAddress(0)&lt;br /&gt;  result=result+linebreak+"EMAIL;INTERNET:"+nabdoc.MailAddress(0)&lt;br /&gt;  &lt;br /&gt;  result=result+linebreak+"END:VCARD"&lt;br /&gt;  &lt;br /&gt;  Print #fileNum%, result&lt;br /&gt;  &lt;br /&gt;  Set nabdoc=nabcoll.GetNextDocument(nabdoc)&lt;br /&gt; Wend&lt;br /&gt; &lt;br /&gt; Close #fileNum%&lt;br /&gt; &lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Function replaceLineBreak(oldString)&lt;br /&gt; replaceFrom=Chr(13)+Chr(10)&lt;br /&gt; replaceTo=", "&lt;br /&gt; tmpString = Evaluate(|@ReplaceSubstring("| + oldString + |"; "|+replaceFrom+|"; "|+replaceTo+|")|)&lt;br /&gt; replaceLineBreak=tmpString(0)&lt;br /&gt;End Function&lt;br /&gt;&lt;br /&gt;'------------- AGENT END -----------&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Show-n-Tell+Thursday" rel="tag"&gt;Show-n-Tell Thursday&lt;/a&gt; &lt;a href="http://technorati.com/tag/LotusScript" rel="tag"&gt;LotusScript&lt;/a&gt; &lt;a href="http://technorati.com/tag/VCard" rel="tag"&gt;VCard&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115582494936842787?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115582494936842787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115582494936842787' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115582494936842787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115582494936842787'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/programmatically-export-lotus-notes.html' title='Programmatically export Lotus Notes contacts to VCard format'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115567364495305450</id><published>2006-08-15T13:12:00.000-07:00</published><updated>2006-08-15T14:57:14.833-07:00</updated><title type='text'>Web charts from LotusScript</title><content type='html'>&lt;a href="http://www.notessidan.se/A55B53/blogg.nsf/plink/TADN-6SHPZW" target="_blank"&gt;Thomas Adrian&lt;/a&gt; (www.notessidan.se) has now published a &lt;a href="http://searchdomino.techtarget.com/tip/0,289483,sid4_gci1201176,00.html" target="_blank"&gt;LotusScript agent&lt;/a&gt; which creates a &lt;a href="http://www.notessidan.se/A55B53/blogg.nsf/divchart?openagent&amp;param=100,300,500,300,100,5,1000" target="_blank"&gt;simple column chart&lt;/a&gt; on a Web page by using div-tags . Chart's HTML/CSS code is created dynamically and the agent outputs it directly to the web browser.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115567364495305450?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115567364495305450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115567364495305450' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115567364495305450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115567364495305450'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/web-charts-from-lotusscript.html' title='Web charts from LotusScript'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115567093304417452</id><published>2006-08-15T10:23:00.000-07:00</published><updated>2006-08-15T12:42:13.146-07:00</updated><title type='text'>Lotus Domino agent uses Apache Axis to consume a web service</title><content type='html'>&lt;a href="http://domino.dagerot.com/2006/08/15/new-developerworks-article-consuming-a-web-service-from-lotus-domino/"&gt;Joachim Dagerot&lt;/a&gt; published an article on IBM developerWorks about how to use Apache Axis in a Domino Java agent to call a web service: &lt;a href="http://www-128.ibm.com/developerworks/lotus/library/domino-webservices/" target="_blank"&gt;Consuming Web services from a Lotus Domino Java agent&lt;/a&gt;. The article provides description and examples of how to call Web Services from  your own Domino databases. &lt;br /&gt;&lt;br /&gt;Last month I &lt;a href="http://dominounlimited.blogspot.com/2006/07/lotus-notes-java-agent-for-consuming.html"&gt;posted&lt;/a&gt; about another Java library to consume Web Services: &lt;a href="http://ws.apache.org/wsif/"&gt;WSIF (Web Services Invocation Framework)&lt;/a&gt;. I had it as a stand-alone Java program in the &lt;a href="http://www.ibm.com/developerworks/edu/i-dw-ls-domino7ws-i.html"&gt;Web Services tutorial published on DeveloperWorks&lt;/a&gt;, and last month I created a Domino Java agent re-using the same source code as in the stand-alone program. The problem with WSIF framework is that it is 3 years old, but it looks like there are plans for a new release. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;What I liked with WSIF the most is the dynamic invocation of Web Services. That means that you do not need to create a stub or proxy or anything, you simply specify the location of the WSDL file, the function name and the parameters to the function: &lt;br /&gt;&lt;strong&gt;&lt;em&gt;java DynamicInvoker http://www.server.com/simplesoap/StockquoteSOAP.wsdl getQuote IBM&lt;/em&gt;&lt;/strong&gt;&lt;br /&gt;AXIS also has a DynamicInvoker example which gives absolutely the same result as DynamicInvoker WSIF example, but using different coding. So I guess that in most cases WSIF can be replaced by the newer AXIS. That would be interesting to compare the speed of initialization and processing between these two libraries. Considering that WSIF uses same Java libraries as AXIS, I would guess that they have the same speed... but you never know. So far the fastest (and smallest in size) library I tested was &lt;a href="http://ksoap.objectweb.org/"&gt;kSOAP&lt;/a&gt;, which was initially designed for mobile devices. And of course the good old deprecated MSSOAP (for VB/LotusScript), which is hard(impossible?) to compete with when it comes to dynamic invocation  :)&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From &lt;a href="http://ws.apache.org/wsif/faq.pdf"&gt;WSIF FAQ&lt;/a&gt;:&lt;br /&gt;&lt;strong&gt;1.3 3. What are the differences between WSIF and Axis?&lt;/strong&gt;&lt;br /&gt;Axis is an implementation of SOAP. It includes on the server-side infrastructure for&lt;br /&gt;deploying web service implementations and then routing SOAP messages between&lt;br /&gt;clients and those implementations. It also implements the JAX-RPC specification for&lt;br /&gt;invoking SOAP services. WSIF is similar to the client piece of Axis, in that it is used&lt;br /&gt;for invoking services. However, WSIF's API is WSDL-driven and protocol&lt;br /&gt;independent; it allows protocol-specific code ("providers") to be plugged in. For&lt;br /&gt;invoking SOAP services, WSIF is in fact packaged with an Axis provider, that uses&lt;br /&gt;Axis APIs (i.e. JAX-RPC) to do the invocation. So WSIF operates at a more abstract&lt;br /&gt;level than Axis.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115567093304417452?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115567093304417452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115567093304417452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115567093304417452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115567093304417452'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/lotus-domino-agent-uses-apache-axis-to.html' title='Lotus Domino agent uses Apache Axis to consume a web service'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115542790372879671</id><published>2006-08-12T16:42:00.000-07:00</published><updated>2006-08-13T09:55:59.630-07:00</updated><title type='text'>Send a screenshot in Skype vs Sametime</title><content type='html'>Similar to "send a screenshot" feature in &lt;a href="http://www.lotus.com/sametime"&gt;Sametime&lt;/a&gt;, now it is possible to send a screenshot in Skype too. Maybe Techsmith (the creator of the plugin) were inspired by that new cool feature in Sametime  :) &lt;br /&gt;It's not as seamless integrated as in Sametime and the picture is sent as a file instead of as an embedded image, but it's still usefull.&lt;br /&gt;&lt;a href="http://www.skypejournal.com/blog/archives/2006/07/skype_now_a_three_step_output_mode_for_s.php"&gt;Read more here&lt;/a&gt; and see an &lt;a href="http://video.techsmith.com/snagit/accessories/skype/enu/sng_skype.html"&gt;instructional video&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Here is how it looks in Sametime:&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4486/1652/1600/ScreenShot040a.jpg"&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/320/ScreenShot040a.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Skype"&gt;Skype&lt;/a&gt;  &lt;a href="http://technorati.com/tag/Sametime"&gt;Sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115542790372879671?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115542790372879671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115542790372879671' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115542790372879671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115542790372879671'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/send-screenshot-in-skype-vs-sametime.html' title='Send a screenshot in Skype vs Sametime'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115516567607107443</id><published>2006-08-09T15:40:00.000-07:00</published><updated>2006-08-09T18:45:16.390-07:00</updated><title type='text'>Making simultaneous AJAX requests</title><content type='html'>During creation of &lt;a href="http://www.botstation.com/products/stweb/about.php" target="_blank"&gt;Sametime Web Contact&lt;/a&gt; I had to create functionality which process simultaneously 2 web requests: the first request is continiously looping and  fetching updates from server-side and the second request is triggered on-demand upon user's actions (send message, change status) and is executed only once. Both are done in asynchronous mode in order to not block the web browser. &lt;br /&gt;Here is an example of how I implemented it:&lt;br /&gt;&lt;br /&gt;&lt;font color="blue"&gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;var scriptpath=&amp;quot;test2.html&amp;quot;;&lt;br /&gt;var default_parameters=&amp;quot;par1=aaa&amp;par2=bb&amp;par3=ccc&amp;quot;;&lt;br /&gt;var stopLooping=false;&lt;br /&gt;&lt;br /&gt;function initHTTP(){&lt;br /&gt; var http_request = false;&lt;br /&gt; if (window.XMLHttpRequest) {  // Mozilla&lt;br /&gt;  http_request = new XMLHttpRequest();&lt;br /&gt;  } &lt;br /&gt; else if (window.ActiveXObject) {  // IE&lt;br /&gt;  try {&lt;br /&gt;  http_request = new ActiveXObject(&amp;quot;Msxml2.XMLHTTP&amp;quot;);&lt;br /&gt;   } catch (e) {&lt;br /&gt;   try {&lt;br /&gt;    http_request = new ActiveXObject(&amp;quot;Microsoft.XMLHTTP&amp;quot;);&lt;br /&gt;   } catch (e) {}&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; if (!http_request) {&lt;br /&gt;  alert('Your web browser is not compatible');&lt;br /&gt;  return false;&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt; return http_request; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function makeAsyncRequestLoop(parameters) {&lt;br /&gt; if(stopLooping==false){&lt;br /&gt;  if (parameters==&amp;quot;&amp;quot;) parameters=default_parameters;&lt;br /&gt;  var http_request1=initHTTP(); &lt;br /&gt;  http_request1.onreadystatechange = function() { readyhandler(http_request1, true); };&lt;br /&gt;  http_request1.open('POST', scriptpath, true);&lt;br /&gt;  http_request1.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt;  http_request1.setRequestHeader(&amp;quot;Content-length&amp;quot;, parameters.length);&lt;br /&gt;  http_request1.setRequestHeader(&amp;quot;Connection&amp;quot;, &amp;quot;Keep-Alive&amp;quot;); &lt;br /&gt;  http_request1.send(parameters);&lt;br /&gt; }&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;function makeAsyncRequestOnce(parameters){&lt;br /&gt; var http_request2=initHTTP(); &lt;br /&gt; http_request2.onreadystatechange = function() { readyhandler(http_request2, false); };&lt;br /&gt; http_request2.open('POST', scriptpath, true);&lt;br /&gt; http_request2.setRequestHeader(&amp;quot;Content-type&amp;quot;, &amp;quot;application/x-www-form-urlencoded&amp;quot;);&lt;br /&gt; http_request2.setRequestHeader(&amp;quot;Content-length&amp;quot;, parameters.length);&lt;br /&gt; http_request2.setRequestHeader(&amp;quot;Connection&amp;quot;, &amp;quot;Keep-Alive&amp;quot;);&lt;br /&gt; http_request2.send(parameters);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function readyhandler(http_requestobj, fetchloop) {&lt;br /&gt; if (http_requestobj.readyState == 4){&lt;br /&gt;  if (http_requestobj.status == 200) {&lt;br /&gt;   document.getElementById(&amp;quot;test&amp;quot;).innerHTML=(new Date().getTime())+&amp;quot; &amp;quot;+http_requestobj.responseText;&lt;br /&gt;   if(fetchloop==false) alert((new Date().getTime())+&amp;quot; &amp;quot;+http_requestobj.responseText)&lt;br /&gt;  }&lt;br /&gt;  if(fetchloop==true) {&lt;br /&gt;   makeAsyncRequestLoop(default_parameters);  //request same web page again&lt;br /&gt;  } &lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function startLoop(){&lt;br /&gt;stopLooping=false;&lt;br /&gt;makeAsyncRequestLoop(default_parameters);&lt;br /&gt;}&lt;br /&gt;function stopLoop(){&lt;br /&gt;stopLooping=true;&lt;br /&gt;}&lt;br /&gt;function customRequest(param){&lt;br /&gt;makeAsyncRequestOnce(param);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;Button&amp;quot; name=&amp;quot;Start&amp;quot; value=&amp;quot;Start&amp;quot; onClick=&amp;quot;startLoop()&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;Button&amp;quot; name=&amp;quot;Stop&amp;quot; value=&amp;quot;Stop&amp;quot; onClick=&amp;quot;stopLoop()&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;input type=&amp;quot;Button&amp;quot; name=&amp;quot;Custom&amp;quot; value=&amp;quot;Custom&amp;quot; onClick=&amp;quot;customRequest('p1=abc&amp;p2=cde')&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;div id=&amp;quot;test&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;If you test the code, you will see that the fetch loop continues getting new data even when the alert box is being shown.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;Warning&lt;/em&gt;&lt;/strong&gt;: IE and Firefox can handle only &lt;strong&gt;2 concurrent connections &lt;/strong&gt;to the same server. The third connection will get queued until one of the previous connections are released. So if you send 2 requests which take 2 minutes to accomplish, the third request will be queued for 2 minutes until processed. This little "feature" took me 2 days to realize.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Technorati: &lt;a href="http://technorati.com/tag/Show-n-Tell+Thursday" rel="tag"&gt;Show-n-Tell Thursday&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115516567607107443?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115516567607107443/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115516567607107443' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115516567607107443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115516567607107443'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/making-simultaneous-ajax-requests.html' title='Making simultaneous AJAX requests'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115507010391999920</id><published>2006-08-08T13:26:00.000-07:00</published><updated>2006-08-08T13:56:29.846-07:00</updated><title type='text'>Address Book on server? Nah, not for l33t D0m1n0 developerz!</title><content type='html'>I have found a rather old but still interesting &lt;a href="http://www.eview.com/eview/viewr5.nsf/CurrentIssue/F17AE0092F3324D085256F25004FF851/?OpenDocument" target="_blank"&gt;article&lt;/a&gt; in &lt;a href="http://www.eview.com" target="_blank"&gt;The View&lt;/a&gt; written by Page Nix. The article shows how Domino applications can have it's own "Address Book" for validating  user's login. The main usage area of the application is in web databases where database responsible person wants to quickly add new users and there is no possibility to add these new users to server's (secondary) Address Book. The responsible person can simply create a new user directly in the database.LotusScript agent is used to verify if the login credentials provided by user match the credentials saved in the user document, and if they match the agent sets a cookie to user's browser containing a "session id".&lt;br /&gt;So far I could not find any obvious security risks with this approach. Groups and ACL Roles will not work without additional programming, but in many cases it's not needed.  &lt;br /&gt;&lt;br /&gt;Demo application is included in the &lt;a href="http://www.eview.com/eview/viewr5.nsf/CurrentIssue/F17AE0092F3324D085256F25004FF851/?OpenDocument" target="_blank"&gt;article&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115507010391999920?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115507010391999920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115507010391999920' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115507010391999920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115507010391999920'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/address-book-on-server-nah-not-for.html' title='Address Book on server? Nah, not for l33t D0m1n0 developerz!'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115448134217594074</id><published>2006-08-01T17:41:00.000-07:00</published><updated>2006-08-01T18:19:20.530-07:00</updated><title type='text'>White nights in Stockholm</title><content type='html'>In the middle of June you can experience white nights in Stockholm. It's dark for only 2.5 hours: from 00 to 02:30 o'clock. Even when it's gets dark, it never gets compeletely dark, you can without problems see everything as if it was 23 o'clock and not kl 01. I think that 21th June is the longest daylight day of the year, so I was 1 day late.&lt;br /&gt;&lt;br /&gt;I have a LotusScript application which interacts with webcamera using Windows API and can take pictures and movies at scheduled times. So I put the webcam on the balcony for the whole night 22 June-23 June and recorded the process of getting dark outside and then getting light again. &lt;br /&gt;As the webcam does not work well when it's dark, I made also a reference shot at 01 o'clock (the darkest time) with an ordinary digital camera.&lt;br /&gt;&lt;br /&gt;Here is a Flash movie I composed from the taken images. Click the image to open the movie.&lt;br /&gt;&lt;a href="http://www.dominokonsult.se/other/webcam_whitenight3.htm" target="_blank"&gt;&lt;img src="http://www.dominokonsult.se/images/screenshot_wn.jpg" border=0&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is a reference shot at 01 o'clock (click to view full size):&lt;br /&gt;&lt;a href="http://www.dominokonsult.se/images/whitenight.jpg" target="_blank"&gt;&lt;img src="http://www.dominokonsult.se/images/whitenight_th.jpg" border=0&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;P.S. I will later publish the Lotus Notes application I used for taking webcam pictures. It can be used to spy on your Lotus Notes users if they have a webcam :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115448134217594074?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115448134217594074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115448134217594074' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115448134217594074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115448134217594074'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/08/white-nights-in-stockholm.html' title='White nights in Stockholm'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115392692810267729</id><published>2006-07-26T07:59:00.000-07:00</published><updated>2006-07-26T12:29:17.156-07:00</updated><title type='text'>AJAX-based Sametime client. Beta release soon.</title><content type='html'>Finally an alternative to STLinks. No Java, ActiveX or other plug-ins required.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/products/stajax/about.php" target="_blank"&gt;Botstation Technologies&lt;/a&gt; will soon release a &lt;a href="http://www.botstation.com/products/stajax/about.php" target="_blank"&gt;web-based client for Sametime messaging&lt;/a&gt;.&lt;br /&gt;In difference to STLinks, this client &lt;strong&gt;does not require &lt;/strong&gt;Java or ActiveX components installed on the user's computer.&lt;br /&gt;&lt;br /&gt;With STAJAX users can pick online people from their buddy list and start interacting with them through text chat. Users can also change their own online status. More features might be included in the final release.&lt;br /&gt;&lt;br /&gt;The client-side of the solution consists of a single HTML file which contains JavaScript and CSS. The background logic is done in a servlet. The servlet can be run in Tomcat, Domino, Websphere and other servlet engines. Client uses &lt;strong&gt;AJAX&lt;/strong&gt; technology for data exchange with servlet and generates very little network traffic. Updates of messages sent to web client from other web clients and stand-alone Sametime clients are almost instanteneous. As the client is HTML-based, it is easy to change it's GUI and add/remove functionality. Same JavaScript functions can be called from Flash applications.&lt;br /&gt;&lt;br /&gt;Here comes a screenshot of beta release taken in Firefox:&lt;br /&gt;&lt;a href="http://www.botstation.com/img/ajax_sametime.jpg" target="_blank"&gt;&lt;img src="http://www.botstation.com/img/th_ajax_sametime.jpg" border="0" alt="Sametime AJAX" /&gt;&lt;/a&gt;&lt;br /&gt;Click image to view full size&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115392692810267729?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115392692810267729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115392692810267729' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115392692810267729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115392692810267729'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/ajax-based-sametime-client-beta.html' title='AJAX-based Sametime client. Beta release soon.'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115358466427264407</id><published>2006-07-22T09:07:00.000-07:00</published><updated>2006-07-22T09:11:04.273-07:00</updated><title type='text'>Free 10-week AJAX Programming Course</title><content type='html'>In this online course, learn the basic concepts of AJAX and how to use the various AJAX frameworks and toolkits like Dojo, jMaki, Google Web, and AJAX-enabled JavaServer Faces components. &lt;br /&gt;The 1st session will start from August 4th, 2006.&lt;br /&gt;&lt;a href="http://www.javapassion.com/ajaxcodecamp/" target="_blank"&gt;http://www.javapassion.com/ajaxcodecamp/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115358466427264407?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115358466427264407/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115358466427264407' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115358466427264407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115358466427264407'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/free-10-week-ajax-programming-course.html' title='Free 10-week AJAX Programming Course'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115342620796139018</id><published>2006-07-20T13:03:00.000-07:00</published><updated>2006-07-20T13:10:07.973-07:00</updated><title type='text'>Mobile client for Sametime</title><content type='html'>Lotus Sametime 7.5 is expected to be available in the third quarter of 2006. Mobile support for Lotus Sametime is expected to support &lt;strong&gt;RIM BlackBerry&lt;/strong&gt;, &lt;strong&gt;Nokia&lt;/strong&gt; and &lt;strong&gt;Windows Mobile&lt;/strong&gt; devices with expected availability in the fourth quarter of 2006. Integration with Microsoft SharePoint, Outlook 2000 and above and Office XP and above is expected at the beginning of 2007. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www-03.ibm.com/press/us/en/pressrelease/19882.wss" target="_blank"&gt;http://www-03.ibm.com/press/us/en/pressrelease/19882.wss&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115342620796139018?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115342620796139018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115342620796139018' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115342620796139018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115342620796139018'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/mobile-client-for-sametime.html' title='Mobile client for Sametime'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115335293619032592</id><published>2006-07-19T15:08:00.000-07:00</published><updated>2006-07-19T17:01:04.586-07:00</updated><title type='text'>One of the differences in Java features between Notes R7 and Notes R6</title><content type='html'>After testing one of my Java applications in Notes/Domino R7 I discovered that it handled some of the Java operations differently than in Notes R6. The difference caused an error and could potentially lead to crash.&lt;br /&gt;&lt;br /&gt;The old code was something similar to this:&lt;br /&gt;&lt;br /&gt;&lt;font color="red"&gt;MyClass MyObjects = new MyClass();&lt;br /&gt;Document doc = MyObjects.db.getDocumentByUNID(unid32)&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;db is a public variable declared in MyClass. "MyObjects.db" is a valid object and is accessible from the code. The only thing that doesn't work is getDocumentByUNID function. This have however &lt;strong&gt;worked without problems in Notes R5 and R6&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;The solution is to declare the database object in the same scope where you call the getDocumentByUNID function.&lt;br /&gt;&lt;br /&gt;&lt;font color="darkgreen"&gt;Database db = session.getDatabase(servername, dbpath);&lt;br /&gt;Document doc = db.getDocumentByUNID(unid32)&lt;/font&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115335293619032592?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115335293619032592/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115335293619032592' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115335293619032592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115335293619032592'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/one-of-differences-in-java-features.html' title='One of the differences in Java features between Notes R7 and Notes R6'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115325923529369848</id><published>2006-07-18T14:20:00.000-07:00</published><updated>2006-07-19T16:50:00.560-07:00</updated><title type='text'>Sametime 7.5 client released again</title><content type='html'>Sametime 7.5 client can now be downloaded again. Here is a link (thanks to &lt;a href="http://vowe.net/archives/007470.html" target="_blank"&gt;vowe.net&lt;/a&gt;): &lt;a href="http://stdemo75.dfw.ibm.com/stcenter.nsf/WebDownloads?OpenView" target="_blank"&gt;http://stdemo75.dfw.ibm.com/stcenter.nsf/WebDownloads?OpenView&lt;/a&gt;&lt;br /&gt;The download size is 52 MB, but the installation went surprisinglty fast. To use the demo server and download the client, you can register here: &lt;a href="http://stdemo75.dfw.ibm.com/" target="_blank"&gt;http://stdemo75.dfw.ibm.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Problems I encountered during the first 10 minutes:&lt;br /&gt;1)During the installation, the default Sametime server(stdemo3.dfw.ibm.com) is suggested automatically, but when the program is started I had to enter it manually again (stdemo75.dfw.ibm.com) because the server field was empty.&lt;br /&gt;2)When the client is started for the first time, it asks to enter the name of my  Sametime community... errrhhh.. Sametime what?? Community? Give me a break, you are lucky if I know my login name! I left that field empty and it worked fine.&lt;br /&gt;3)The client uses Swedish language (OS language) for all menues and configurations, though I chose English in the settings (File-Settings-Language ..or whatever it is in English) and restarted the client.&lt;br /&gt;4) I could not find how to switch to another username. Took me 5 minutes to figure out that this can be done by hmmm... removing current password (username can not be removed), thus causing client to ask again for a password, where I have a chance to reset user. It asked if I want to remove the current buddylist, I sensed that it would not dare to remove it from the server and called the bluff.&lt;br /&gt;5) When I tried to add a new contact and typed "andrei k", it did not presented the list of matching contacts, I had to input the full name "Andrei Kouvchinnikov"&lt;br /&gt;&lt;br /&gt;Other than these 5 things, I have nothing to complain at yet.&lt;br /&gt;&lt;br /&gt;Some useful features in 7.5 client:&lt;br /&gt;* You can change fonts and colors of the text parts of the message.&lt;br /&gt;* You can use smiley pictures.&lt;br /&gt;* You can insert screen captures directly into chat window.&lt;br /&gt;* Time stamps for messages in chat window is rather usefull.&lt;br /&gt;* Spell check of the message.&lt;br /&gt;* Connect to several sametime servers at once.&lt;br /&gt;&lt;br /&gt;I tried to test voice chat functionality, but it lloks like demo server does not support it, as the option to start a voice chat is missing. Will try later on another server. Here is a link to one post which has more info about voice chats: &lt;a href="http://www-03.ibm.com/developerworks/blogs/page/InsideLotus?entry=sametime_sunday_s_click_to" target="_blank"&gt;http://www-03.ibm.com/developerworks/blogs/page/InsideLotus?entry=sametime_sunday_s_click_to&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115325923529369848?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115325923529369848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115325923529369848' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115325923529369848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115325923529369848'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/sametime-75-client-released-again.html' title='Sametime 7.5 client released again'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115231977673427637</id><published>2006-07-07T17:30:00.000-07:00</published><updated>2006-07-09T16:31:24.940-07:00</updated><title type='text'>Lotus Notes Java agent for consuming a Web Service</title><content type='html'>Here comes a little addition to the &lt;a href="http://www-128.ibm.com/developerworks/edu/i-dw-ls-domino7ws-i.html" target="_blank"&gt;tutorial&lt;/a&gt; I wrote for &lt;a href="http://www-128.ibm.com/developerworks/" target="_blank"&gt;IBM developerWorks&lt;/a&gt;. Tutorial has several example of using MSSOAP from LotusScript, but no examples of service consumer as Java agent. So here comes a Java consumer created from code in the WSIF stand-alone example.&lt;br /&gt;There are several other frameworks to call Web Services from Java, some of them are loading much faster than WSIF and Apache SOAP, but WSIF is very easy to use. Take a look at kSOAP if you want a faster initial loading.&lt;br /&gt;&lt;br /&gt;Here is the database with the example agent: &lt;a href="http://www.botstation.com/download/WebservicesR7.zip" target="_blank"&gt;http://www.botstation.com/download/WebservicesR7.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;How to setup the example:&lt;br /&gt;1) Download &lt;a href="http://ws.apache.org/wsif/" target="_blank"&gt;WSIF framework&lt;/a&gt; and unzip it&lt;br /&gt;2) Copy all JAR files from the WSIF's \lib directory into Notes's \jvm\lib\ext directory.&lt;br /&gt;3) Copy the example database into data\ws\ catalog.&lt;br /&gt;4) Open the database, do "Preview in web browser" . Then choose Actions menu and run "javaconsumer" agent.&lt;br /&gt;You will see the output of the agent in the Java debug console window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115231977673427637?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115231977673427637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115231977673427637' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115231977673427637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115231977673427637'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/lotus-notes-java-agent-for-consuming.html' title='Lotus Notes Java agent for consuming a Web Service'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115230227542108415</id><published>2006-07-07T12:44:00.000-07:00</published><updated>2006-07-07T12:57:55.466-07:00</updated><title type='text'>Start Notes client without typing password</title><content type='html'>In some situations it is required to start Notes automatically without entering the password. Such situation can be locally running agents on a Notes client. Changing password to empty string is often not a good solution for different reasons.&lt;br /&gt;&lt;br /&gt;But there is a solution for this problem. Using extpwd example from Domino C API toolkit it is possible to accomplish this task. &lt;br /&gt;&lt;br /&gt;I've compiled the example and you can try it on your Notes client.&lt;br /&gt;http://www.botstation.com/download/notesnopass.zip&lt;br /&gt;&lt;br /&gt;Steps to setup the solution:&lt;br /&gt;&lt;br /&gt;1) Copy nextpwd.dll to the Notes program directory.&lt;br /&gt;2) Create a file called password.txt in the notes\data directory and type the Notes password there.&lt;br /&gt;3) Add line EXTMGR_ADDINS=extpwd to notes.ini&lt;br /&gt;&lt;br /&gt;Now when you start Notes client, it will not ask you for password.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115230227542108415?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115230227542108415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115230227542108415' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115230227542108415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115230227542108415'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/07/start-notes-client-without-typing.html' title='Start Notes client without typing password'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115081519770577603</id><published>2006-06-20T07:45:00.000-07:00</published><updated>2006-06-20T07:53:17.723-07:00</updated><title type='text'>Solution for Java error "native library c:\test.dll already loaded in another classloader while loading driver MyDriver"</title><content type='html'>"java.lang.UnsatisfiedLinkError: Native Library C:\test.dll already loaded in another classloader" can happen in Lotus Notes/Domino when Java agents or libraries use native calls to Windows DLL files.&lt;br /&gt;What was strange about this error is that the same Java scriptlibrary worked fine in Java agent, but not in LS2J LotusScript agent.&lt;br /&gt;&lt;br /&gt;I guess the error happens because the JAR file (the one which calls the DLL) is automatically detached at run-time and gets a new filename each time, which confuses JVM. With pure Java agents this behaviour might be different and the error does not occur.&lt;br /&gt;&lt;br /&gt;Anyway, here is the solution:&lt;br /&gt;Instead of including JAR files directly into the Java agent/scriptlibrary, put them into Notes's classpath.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115081519770577603?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115081519770577603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115081519770577603' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115081519770577603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115081519770577603'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/solution-for-java-error-native-library.html' title='Solution for Java error &quot;native library c:\test.dll already loaded in another classloader while loading driver MyDriver&quot;'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115075299909205782</id><published>2006-06-19T14:00:00.000-07:00</published><updated>2006-06-19T18:32:54.526-07:00</updated><title type='text'>Jumping with a parachute</title><content type='html'>I was watching "Rocky &amp; Drago" documentary today on TV6. One of the missions the 2 actors got was a tandem jump with a parachute from 4000 meters height.&lt;br /&gt;&lt;br /&gt;I did a tandem jump for 1 year ago so I want to share my experience of skydiving :)&lt;br /&gt;Many people think that they are going to be afraid of the height, specially in the moment when they jump out. This is partially true, but shouldn't bother 97% of the people. Here is what happens: When you jumped out of the plane, you can see that the ground is very far away and it's going to get a loooong while to get there. This is rather calming. And actually you do not notice that you move towards the ground because the height is too high to be able to estimate the distance to the ground and speed of the fall. So you will not see a big difference if you are at 4000 meters or at 1000 meters. At 800-1000 meters you can begin suspecting that you are getting closer to the ground. At this moment the parachute opens. You understand that you are still falling, but now you can estimate the speed of the fall and you see that the speed is not dangerous.&lt;br /&gt;&lt;br /&gt;The only thing I worried about was that I totally depended on the instructor who was strapped with me on my back. I mean maybe he was very upset over something today and decided to take his last jump. The other thing I worried about was that when the parachute opens, the sudden pull upwards can cause the strapping between me and instructor to burst. But nothing of this happened, otherwise you won't read this post  :)&lt;br /&gt;&lt;br /&gt;BUT.. I have a warning to you: if your ears hurt when you fly airplane (because of air pressure changes), consult with the instructor before deciding to jump, and get ear-plugs. I got a terrible ear-ache during the jump, which ruined this fantastic experience. I guess in some cases it can lead to serious injuries.&lt;br /&gt;You can also get a slight head ache because of the turbulence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115075299909205782?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115075299909205782/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115075299909205782' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115075299909205782'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115075299909205782'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/jumping-with-parachute.html' title='Jumping with a parachute'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115033892834951106</id><published>2006-06-14T19:26:00.000-07:00</published><updated>2006-06-18T14:41:51.320-07:00</updated><title type='text'>Can you crack Da Andrei code?</title><content type='html'>Test your logic skills by solving this puzzle! If you solve it you will see a message which can change your life!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/da_andrei_code.html"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/4486/1652/200/da_andrei_code.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Click the image to come to the secret page!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115033892834951106?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115033892834951106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115033892834951106' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115033892834951106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115033892834951106'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/can-you-crack-da-andrei-code.html' title='Can you crack Da Andrei code?'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115014651684657134</id><published>2006-06-12T14:05:00.000-07:00</published><updated>2006-06-12T16:55:09.750-07:00</updated><title type='text'>Make incorrectly populated fields blink on web</title><content type='html'>This tip shows how to make fields with incorrect values to blink with &lt;font color=blue&gt;&lt;strong&gt;blue&lt;/strong&gt;&lt;/font&gt; and &lt;font color=red&gt;&lt;strong&gt;red&lt;/strong&gt;&lt;/font&gt; colors. The correctness of a field is verified against field's expected value.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/400/fieldblinker.gif" border="0" alt="blinking fields" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://photos1.blogger.com/blogger/4486/1652/1600/blinkerform.jpg" target="_blank"&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/320/blinkerform.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br&gt;&lt;em&gt;click image to view in full size&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Formula for the first computed field: @If(Field1="This field has correct value";"color:black";"color:blue; font-weight: bold")&lt;br /&gt;&lt;br /&gt;Formula for the second computed field: @If(Field2="This field has correct value";"color:black";"color:blue; font-weight: bold")&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Code on Form (remove space in tags):&lt;br /&gt;&lt;br /&gt;&lt; div id="field1" style="&lt; Computed Value &gt;"&gt;FIELD1&lt; /div &gt;&lt;br /&gt;&lt; div id="field2" style="&lt; Computed Value &gt;"&gt;FIELD2&lt; /div &gt;&lt;br /&gt;&lt; div id="field3" style="&lt; Computed Value &gt;"&gt;FIELD3&lt; /div &gt;&lt;br /&gt;&lt;br /&gt;&lt; script &gt;&lt;br /&gt;checkfield('field1');&lt;br /&gt;checkfield('field2');&lt;br /&gt;checkfield('field3');&lt;br /&gt;&lt; /script &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Code in JSHeader:&lt;br /&gt;&lt;br /&gt;function blinkme(fldid) { &lt;br /&gt;var fld=document.all[fldid];&lt;br /&gt;if (fld.style.color=="red"){&lt;br /&gt;fld.style.color="blue";&lt;br /&gt;}else{&lt;br /&gt;fld.style.color="red";&lt;br /&gt;}&lt;br /&gt;mytime=setTimeout("blinkme('"+fldid+"')",800);&lt;br /&gt;}&lt;br /&gt;function checkfield(fldid){&lt;br /&gt;var fld=document.all[fldid];&lt;br /&gt;if(fld.style.color=="blue"){&lt;br /&gt;mytime=setTimeout("blinkme('"+fldid+"')",800);&lt;br /&gt;}&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115014651684657134?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115014651684657134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115014651684657134' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115014651684657134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115014651684657134'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/make-incorrectly-populated-fields.html' title='Make incorrectly populated fields blink on web'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-115008256720705812</id><published>2006-06-11T20:10:00.000-07:00</published><updated>2006-06-27T15:41:49.660-07:00</updated><title type='text'>Validating numeric fields in Javascript</title><content type='html'>Unless you use "Punctuated at thousands" field property of number fields, you can use following:&lt;br /&gt;isnumeric=parseFloat(tmp)==(tmp*1)&lt;br /&gt;&lt;br /&gt;But if you must have "Punctuated at thousands" property, the above code will not work properly.&lt;br /&gt;For example, 20 000,00 is not the same as 20000,00.&lt;br /&gt;The "space" character in the number is not a regular space, but a special separator. It's ASCII code is 160. This special character makes the validation code above work incorrectly. &lt;br /&gt;&lt;br /&gt;Here is how you can validate such field without changing it's properties:&lt;br /&gt;&lt;br /&gt;Code to put in onBlur event of the field:&lt;br /&gt;isNumber(this, "Product Price");  // pass field handle and field title&lt;br /&gt;&lt;br /&gt;Code to put on Form or in JSHeader:&lt;br /&gt;&lt; script &gt;&lt;br /&gt;function isNumber(obj, title){&lt;br /&gt;if(typeof obj=="undefined" || obj.value.length==0){&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;tmp="";i=0;&lt;br /&gt;sText=obj.value.replace(".", ",");  //replace dot to comma, which is decimal separator&lt;br /&gt;for(i=0; i &lt;= sText.length; i++){&lt;br /&gt;if(sText.charAt(i).length!=0){&lt;br /&gt;if(sText.charCodeAt(i)!=160 &amp;&amp; sText.charCodeAt(i)!=32){  // remove thousands space and regular space&lt;br /&gt;tmp=tmp+sText.substring(i,i+1);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;obj.value=tmp;&lt;br /&gt;tmp=tmp.replace(",", ".").replace(" ", ""); //replace dot to comma and remove space&lt;br /&gt;res=(parseFloat(tmp)==(tmp*1));&lt;br /&gt;if(res==false){&lt;br /&gt;alert(title+" field must be numeric!");&lt;br /&gt;obj.focus();&lt;br /&gt;};&lt;br /&gt;return res;&lt;br /&gt;}&lt;br /&gt;&lt; /script &gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-115008256720705812?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/115008256720705812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=115008256720705812' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115008256720705812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/115008256720705812'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/validating-numeric-fields-in.html' title='Validating numeric fields in Javascript'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114988083089178033</id><published>2006-06-09T12:11:00.000-07:00</published><updated>2006-06-10T16:55:40.750-07:00</updated><title type='text'>Blogging by phone</title><content type='html'>When you absolutely MUST create a blog post but has NO access to Internet, there is a solution! You can make a phone call and leave a message which gets posted to your blog!&lt;br /&gt;&lt;br /&gt;Blogger.com is a partner with Audioblogger.com. Audioblogger.com allows to save voice messages as blog posts in Blogger.com. They are saved as MP3 files. To access audioblogger, login to your Blogger account and on the "Edit Profile" page click "audio clips" link. You will get a phone number in USA which you can call and leave a voice message. This message will be posted to your ordinary Blogger blog.&lt;br /&gt;Not sure if this audio blog post is compatible with podcasting software.&lt;br /&gt;Next time I will test bloggin from email and from a mobile device. Looks like text and photos can be posted from cell phones to Blogger.&lt;br /&gt;&lt;br /&gt;Steps to post a voice message to Blogger:&lt;br /&gt;&lt;br /&gt;1. Call the number&lt;br /&gt;(Listen very carefully to the Voice Prompts)&lt;br /&gt;2. Enter your Primary Number&lt;br /&gt;3. Enter your PIN, press #&lt;br /&gt;4. Record your post, Press #&lt;br /&gt;5. Press 1 to post, 2 to review, 3 to re-record.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114988083089178033?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114988083089178033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114988083089178033' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114988083089178033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114988083089178033'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/blogging-by-phone.html' title='Blogging by phone'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114979136288626207</id><published>2006-06-08T11:23:00.000-07:00</published><updated>2006-06-09T05:15:05.096-07:00</updated><title type='text'>Create web charts from LotusScript agents. An easy way. And cool.</title><content type='html'>&lt;a href="http://notessidan.se/A55B53/blogg.nsf/plink/TADN-6QET46" target="_blank"&gt;Thomas Adrian in his blog&lt;/a&gt; shows how to create a web-based chart without using any image files, by simply printing out DHTML from the agent.&lt;br /&gt;&lt;br /&gt;Creating charts has never been easier before!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://notessidan.se/A55B53/blogg.nsf/plink/TADN-6QET46" target="_blank"&gt;&lt;img src="http://photos1.blogger.com/blogger/4486/1652/320/chart.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;http://notessidan.se/A55B53/blogg.nsf/plink/TADN-6QET46&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114979136288626207?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114979136288626207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114979136288626207' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114979136288626207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114979136288626207'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/create-web-charts-from-lotusscript.html' title='Create web charts from LotusScript agents. An easy way. And cool.'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114976552877850791</id><published>2006-06-08T04:17:00.000-07:00</published><updated>2006-06-08T04:19:29.293-07:00</updated><title type='text'>Old pictures from Lotus Evolution seminar</title><content type='html'>Just found a webpage I've created for 4-6 months ago with pictures from Lotus Evolution seminar in Stockholm.&lt;br /&gt;&lt;br /&gt;YOu can see the pictures and 2 videos here:&lt;br /&gt;http://www.dominokonsult.se/lotusevolution.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114976552877850791?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114976552877850791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114976552877850791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114976552877850791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114976552877850791'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/old-pictures-from-lotus-evolution.html' title='Old pictures from Lotus Evolution seminar'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114972870856932124</id><published>2006-06-07T18:01:00.000-07:00</published><updated>2006-06-07T18:05:08.580-07:00</updated><title type='text'>Run two instances of Skype</title><content type='html'>Originally posted &lt;a href="http://forums.infoprosjoint.net/showthread.php?t=8317" target="_blank"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Same tip can be used to start multiple instances of other programs.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The only way to run 2 instances of Skype presently is:&lt;br /&gt;&lt;br /&gt;On a Windows OS you can run another Skype instance at the same time if you start the second with another Windows user account. Example&lt;br /&gt;1. Make sure you have another user account (login) for your Windows.&lt;br /&gt;2. Right click the Skype icon and select "Run as..."&lt;br /&gt;3. On the next screen click "The following user:" and select one different from the one you are currently logged in as on your computer.&lt;br /&gt;4. Voila - another Skype opening which can be used independently from your first Skype instance. You can even make calls between them on the same computer&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Additional tip from JP White.&lt;br /&gt;&lt;br /&gt;To help automate the 'run as' trick you can create a second desktop icon for Skype and modify its properties. Click the advanced button and check the box 'run with different credentials'. After clicking on the modified icon it will ask you to sign in as another user. Changing the icon graphic also helps ensures you click on the correct icon.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114972870856932124?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114972870856932124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114972870856932124' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114972870856932124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114972870856932124'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/run-two-instances-of-skype.html' title='Run two instances of Skype'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114963431399729450</id><published>2006-06-06T15:45:00.000-07:00</published><updated>2006-06-06T17:50:28.253-07:00</updated><title type='text'>Scan papers directly from Lotus Notes code</title><content type='html'>Dmitrij Vojtushin &lt;a href="http://my.opera.com/LotusDomiNotes/blog/show.dml/144710" target="_blank"&gt;in his blog&lt;/a&gt; shares LotusScript code to scan papers and attach the scanned picture to a Notes document. Looks like it works in both UI and background code.&lt;br /&gt;&lt;br /&gt;Here is a short example:&lt;br /&gt;Sub Initialize&lt;br /&gt;' Scan paper page to clipboard and then paste to Body&lt;br /&gt;Call TWAIN_AcquireToClipboard(0,0)&lt;br /&gt;Dim workspace As New NotesUIWorkspace&lt;br /&gt;Dim uidoc As NotesUIDocument&lt;br /&gt;Set uidoc = workspace.CurrentDocument&lt;br /&gt;Call uidoc.GotoField( "Body" )&lt;br /&gt;Call uidoc.Paste&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;http://my.opera.com/LotusDomiNotes/blog/show.dml/144710&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114963431399729450?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114963431399729450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114963431399729450' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114963431399729450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114963431399729450'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/scan-papers-directly-from-lotus-notes.html' title='Scan papers directly from Lotus Notes code'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114963346966535091</id><published>2006-06-06T15:31:00.000-07:00</published><updated>2006-06-06T15:37:49.676-07:00</updated><title type='text'>IBM DeveloperWorks article about AJAX</title><content type='html'>In "&lt;a href="http://www-128.ibm.com/developerworks/lotus/library/domino-ajax/" target="_blank"&gt;Using AJAX to manipulate Lotus Notes documents&lt;/a&gt;" article written by Joachim Dagerot you can see how to use AJAX in Domino databases. Included example shows how to update To-Do list in a Domino database using an agent. The agent receives data through a HTTP request and performs the requested action on a document. The document is found in the database by it's ID.&lt;br /&gt;&lt;br /&gt;http://www-128.ibm.com/developerworks/lotus/library/domino-ajax/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114963346966535091?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114963346966535091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114963346966535091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114963346966535091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114963346966535091'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/ibm-developerworks-article-about-ajax.html' title='IBM DeveloperWorks article about AJAX'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114945921161766114</id><published>2006-06-04T15:04:00.000-07:00</published><updated>2006-06-04T15:13:31.630-07:00</updated><title type='text'>Sleep function in LotusScript</title><content type='html'>If you want to pause script execution in LotusScript, yuo can use Sleep function. You might want to do it if you need to wait until external operation completes.&lt;br /&gt;&lt;br /&gt;Syntax: &lt;br /&gt;Sleep n&lt;br /&gt;&lt;br /&gt;Where n is a number of seconds.&lt;br /&gt;&lt;br /&gt;If you want to pause for less than 1 second, use following:&lt;br /&gt;Sleep 0.2  ' pause for 200ms&lt;br /&gt;&lt;br /&gt;Another good function to use in conjunction with Sleep is DoEvents. Using DoEvents in code allows you to stop looping code with Ctrl+Break keyboard command. Without it Notes client is often not responsible to break command.&lt;br /&gt;Documentation says that Doevents and Yield functions are same, but in my experience DoEvents works much better... at least in older versions of Notes.&lt;br /&gt;&lt;br /&gt;Call MyObject.SendExternalMessageDLL("message")&lt;br /&gt;While Not MyObject.Status=2&lt;br /&gt;sleep 0.1&lt;br /&gt;DoEvents&lt;br /&gt;Wend&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114945921161766114?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114945921161766114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114945921161766114' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114945921161766114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114945921161766114'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/sleep-function-in-lotusscript.html' title='Sleep function in LotusScript'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114943675453786189</id><published>2006-06-04T08:55:00.000-07:00</published><updated>2006-06-04T16:54:16.390-07:00</updated><title type='text'>POST data to Domino agent using AJAX</title><content type='html'>Many people on Domino forums ask about getting data from LotusScript agent without refreshing the page, as if it was a pure javascript function call. It is possible with AJAX, here is an example and a live demo.&lt;br /&gt;&lt;br /&gt;This example sends text located in a DIV tag on a web page to a LotusScript agent and updates the DIV element with response data received back from the agent.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/code/postexample.html" target="_blank"&gt;Live example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;&lt;br /&gt;&lt;   script   &gt;&lt;br /&gt;var http_request = false;&lt;br /&gt;function makePOSTRequest(url, parameters) {&lt;br /&gt;http_request = false;&lt;br /&gt;if (window.XMLHttpRequest) { // Mozilla&lt;br /&gt;http_request = new XMLHttpRequest();&lt;br /&gt;if (http_request.overrideMimeType) {&lt;br /&gt;http_request.overrideMimeType('text/xml');&lt;br /&gt;}&lt;br /&gt;} else if (window.ActiveXObject) { // IE&lt;br /&gt;try {&lt;br /&gt;http_request = new ActiveXObject("Msxml2.XMLHTTP");&lt;br /&gt;} catch (e) {&lt;br /&gt;try {&lt;br /&gt;http_request = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;} catch (e) {}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;if (!http_request) {&lt;br /&gt;alert('Cannot create XMLHTTP instance');&lt;br /&gt;return false;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;http_request.onreadystatechange = GetResponse;&lt;br /&gt;http_request.open('POST', url, true);&lt;br /&gt;http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");&lt;br /&gt;http_request.setRequestHeader("Content-length", parameters.length);&lt;br /&gt;http_request.setRequestHeader("Connection", "close");&lt;br /&gt;http_request.send(parameters);&lt;br /&gt;} &lt;br /&gt;&lt;br /&gt;function GetResponse() {&lt;br /&gt;if (http_request.readyState == 4) {&lt;br /&gt;if (http_request.status == 200) {&lt;br /&gt;result = http_request.responseText;&lt;br /&gt;document.getElementById('test').innerHTML = result; &lt;br /&gt;} else {&lt;br /&gt;alert('There was a problem with the request.');&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function GetAgentData(txtdata) {&lt;br /&gt;var poststr = txtdata; //encodeURI(txtdata);&lt;br /&gt;makePOSTRequest('/test.nsf/postagent?openagent', poststr);&lt;br /&gt;}&lt;br /&gt;&lt;  /script  &gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;-------------- LOTUSSCRIPT AGENT ---------------------&lt;br /&gt;Sub Initialize&lt;br /&gt;Dim session As New NotesSession&lt;br /&gt;Dim doc As NotesDocument&lt;br /&gt;Set doc=session.DocumentContext&lt;br /&gt;req=doc.Request_Content(0)&lt;br /&gt;For x=Len(req) To 1 Step -1&lt;br /&gt;tmp=tmp+Mid(req,x,1)&lt;br /&gt;Next&lt;br /&gt;Print tmp&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114943675453786189?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114943675453786189/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114943675453786189' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114943675453786189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114943675453786189'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/post-data-to-domino-agent-using-ajax.html' title='POST data to Domino agent using AJAX'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114943653075654969</id><published>2006-06-04T08:54:00.000-07:00</published><updated>2006-06-04T08:55:30.766-07:00</updated><title type='text'>Funny story</title><content type='html'>The local bar was so sure that its bartender was the strongest man around that they offered a standing $1,000 bet. The bartender would squeeze a lemon until all the juice ran into a glass, and hand the lemon to a patron. Anyone who could squeeze one more drop of juice out would win the money. &lt;br /&gt;Many people had tried over time (weightlifters, longshoremen, etc.) but nobody could do it. One day this scrawny little man came into the bar, wearing thick glasses and a polyester suit, and said in a tiny squeaky voice “I’d like to try the bet.” &lt;br /&gt;&lt;br /&gt;After the laughter had died down, the bartender said OK, grabbed a lemon, and squeezed away.  Then he handed the wrinkled remains of the rind to the little man. But the crowd’s laughter turned to total silence as the man clenched his fist around the lemon and six drops fell into the glass. &lt;br /&gt;&lt;br /&gt;As the crowd cheered, the bartender paid the $1,000 and asked the little man, “What do you do for a living?  Are you a lumberjack, a weightlifter, what?” &lt;br /&gt;&lt;br /&gt;The man replied, "I work for the IRS."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114943653075654969?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114943653075654969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114943653075654969' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114943653075654969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114943653075654969'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/06/funny-story.html' title='Funny story'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114878320297564506</id><published>2006-05-27T19:11:00.000-07:00</published><updated>2006-05-27T19:26:42.986-07:00</updated><title type='text'>Microsoft.XMLHTTP and cached data</title><content type='html'>Once I had a problem with Microsoft.XMLHTTP object. It used cached results from previous fetch.&lt;br /&gt;I solved the problem by appending a unique parameter to the URL, which caused the object to fetch the new result each time.&lt;br /&gt;Something like this:&lt;br /&gt;strUrl="http://server.com/servlet/GetData?docid=25C6&amp;unique="+cstr(timer())&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------------------&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;Dim oHTTP As Variant&lt;br /&gt;Dim strUrl As String&lt;br /&gt;Dim strReturn As String&lt;br /&gt;&lt;br /&gt;strUrl = "http://server.com/servlet/GetData?docid=25C6&amp;unique="+cstr(timer())&lt;br /&gt;&lt;br /&gt;Set oHTTP = CreateObject("Microsoft.XMLHTTP")&lt;br /&gt;oHTTP.open "GET", strUrl, False, "", ""&lt;br /&gt;oHTTP.send("")&lt;br /&gt;strReturn = oHTTP.responseText&lt;br /&gt;Set oHTTP = Nothing &lt;br /&gt;msgbox strReturn&lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114878320297564506?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114878320297564506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114878320297564506' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114878320297564506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114878320297564506'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/microsoftxmlhttp-and-cached-data.html' title='Microsoft.XMLHTTP and cached data'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114878155076297869</id><published>2006-05-27T18:52:00.000-07:00</published><updated>2006-05-27T19:00:05.366-07:00</updated><title type='text'>NotesDXLExporter export fails on document with attachment</title><content type='html'>This is from an my answer to a &lt;a href="http://www-10.lotus.com/ldd/nd6forum.nsf/ShowMyTopicsAllFlatweb/3281b61833bc84a985257179007a6baf?OpenDocument" target=_blank&gt;post on Notes.net&lt;/a&gt;.&lt;br /&gt;The problem was that NotesDXLExporter failed to export document in UI to XML if there was an attachment in the document, even if the document was manually saved in UI. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I could reproduce this error.&lt;br /&gt;It happens under following conditions:&lt;br /&gt;a)create a new mail document, add attachment to it, save the document but do not close it. Run the code (agent action or form button).&lt;br /&gt;b)open an existing mail document, add attachment to it, save the document without closing it. Run the code.&lt;br /&gt;&lt;br /&gt;It happens only with attachments, adding an inline picture does not generate the error. Triggering a LS agent to perform export results in same error.&lt;br /&gt;&lt;br /&gt;Once you closed and re-opened the document, everything works fine until you add a new attachment. &lt;br /&gt;&lt;br /&gt;Maybe some antivirus attachment control operations can make Notes think that attachment is new even on "old" documents, but I could not test this.&lt;br /&gt;&lt;br /&gt;I could however make the DXLExporter work by programmatically re-opening the document, I guess it's the only solution:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sub Click(Source As Button)&lt;br /&gt;Dim session As New notessession&lt;br /&gt;Dim doc As notesdocument&lt;br /&gt;Set ws=New NotesUIWorkspace&lt;br /&gt;Set uidoc = ws.CurrentDocument&lt;br /&gt;Set doc = uidoc.Document&lt;br /&gt;Call uidoc.save&lt;br /&gt;Call uidoc.close&lt;br /&gt;&lt;br /&gt;Set ws=New NotesUIWorkspace&lt;br /&gt;Set uidoc=ws.editdocument(False, doc)&lt;br /&gt;Set doc = uidoc.Document&lt;br /&gt;Set dxle = session.CreateDXLExporter &lt;br /&gt;Msgbox dxle.Export(doc)&lt;br /&gt;Msgbox dxle.Log &lt;br /&gt;End Sub&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114878155076297869?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114878155076297869/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114878155076297869' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114878155076297869'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114878155076297869'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/notesdxlexporter-export-fails-on.html' title='NotesDXLExporter export fails on document with attachment'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114801705152135238</id><published>2006-05-18T22:14:00.000-07:00</published><updated>2006-05-18T22:37:31.533-07:00</updated><title type='text'>Skype pricing for calls in USA</title><content type='html'>Skype announced that until December 31, all calls from SkypeOut users living in USA and Canada users to landline AND mobile phones in the USA/Canada are totally free. Unfortunately calls from other countries are priced according to standard rates. &lt;br /&gt;I wonder how soon US Skype accounts will be available for sale on the Ebay. I would guess that many European and Asian companies and private persons would be happy to get those free unlimited calls. As Skype uses IP-number verification for location of the caller, this can be difficult.&lt;br /&gt;&lt;br /&gt;Netgear has created a special Skype Wi-Fi phone. It looks like a regular cell phone, but only can make calls using Skype protocoll from Wi-Fi places which does not require logging in. As I understood "looging in" in this case means providing username and password to Wi-Fi net provider using web browser interface. As phone supports WEP, it should be possible to use at home and at most other places. Looks like the price is about 60 USD.&lt;br /&gt;&lt;a href="http://tools.netgear.com/skype/" target="_blank"&gt;http://tools.netgear.com/skype/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114801705152135238?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114801705152135238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114801705152135238' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114801705152135238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114801705152135238'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/skype-pricing-for-calls-in-usa.html' title='Skype pricing for calls in USA'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114788362865637886</id><published>2006-05-17T09:32:00.000-07:00</published><updated>2006-05-17T09:38:37.513-07:00</updated><title type='text'>Using Media Player object in Lotus Notes mail documents</title><content type='html'>Watch Flash movie describing how to &lt;br /&gt;&lt;a href="http://www.dominokonsult.se/other/Media_Player_object_in_Lotus_Notes_mail_documents.htm"&gt;use Media Player object in Lotus Notes documents&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114788362865637886?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114788362865637886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114788362865637886' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114788362865637886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114788362865637886'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/using-media-player-object-in-lotus.html' title='Using Media Player object in Lotus Notes mail documents'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114787780804144359</id><published>2006-05-17T07:52:00.000-07:00</published><updated>2006-05-17T07:56:48.043-07:00</updated><title type='text'>Lotus Domino and PHP</title><content type='html'>Read my latest article on IBM DeveloperWorks about PHP interface to data stored in Domino.&lt;br /&gt;There is also a live demo of reading Domino email from PHP. Same demo is available as download.&lt;br /&gt;I also compiled php_notes.dll file which is needed for native API calls from PHP to Notes. For some reason I could not find the compiled version anbywhere on the Internet.&lt;br /&gt;&lt;br /&gt;Article: &lt;a href="http://www-128.ibm.com/developerworks/lotus/library/domino-php/"  target="_blank"&gt;http://www-128.ibm.com/developerworks/lotus/library/domino-php/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Live demo: &lt;a href="http://www.botstation.com/phpdomino/main.php" target="_blank"&gt;http://www.botstation.com/phpdomino/main.php&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114787780804144359?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114787780804144359/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114787780804144359' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114787780804144359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114787780804144359'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/lotus-domino-and-php.html' title='Lotus Domino and PHP'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114787744603975162</id><published>2006-05-17T07:49:00.000-07:00</published><updated>2006-05-17T07:50:46.040-07:00</updated><title type='text'>Stylesheets for web tables</title><content type='html'>Just today found a web site with a lot of tabel stylesheets.&lt;br /&gt;Looks interesting, will try later to apply them to Domino tables.&lt;br /&gt;http://icant.co.uk/csstablegallery/index.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114787744603975162?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114787744603975162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114787744603975162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114787744603975162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114787744603975162'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/05/stylesheets-for-web-tables.html' title='Stylesheets for web tables'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114598119965311573</id><published>2006-04-25T08:38:00.000-07:00</published><updated>2006-04-25T09:26:55.943-07:00</updated><title type='text'>Gasoline prises in US vs Sweden</title><content type='html'>Today I found a video on MSN which shows prises of gasoline (bensin) in the USA. The current price is 3$ for a gallon. &lt;br /&gt;&lt;br /&gt;1 gallon is 3.8 liters.&lt;br /&gt;1$ is 7.6 SEK (Swedish crowns).&lt;br /&gt;So the price of 1 liter gasoline counted in SEK is: (3 / 3.8) * 7.6 = 6&lt;br /&gt;&lt;br /&gt;The current price of gasoline in Sweden is 12 SEK/liter, which makes the gasoline price in the US twice as cheap as in Sweden.&lt;br /&gt;&lt;br /&gt;Historical price rise is about the same for both coutries: about 50% up during last 3 years, maybe slightly higher rise in the US.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;http://video.msn.com/v/us/v.htm?g=942c87fb-acd7-4150-acf2-d3573072c9ff&amp;t=s2&amp;f=06/64&amp;p=hotvideo_energy&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114598119965311573?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114598119965311573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114598119965311573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114598119965311573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114598119965311573'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/gasoline-prises-in-us-vs-sweden.html' title='Gasoline prises in US vs Sweden'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114588269912695484</id><published>2006-04-24T05:43:00.000-07:00</published><updated>2006-04-24T05:46:46.903-07:00</updated><title type='text'>Very fast import from MS Excel to Lotus Notes using LotusScript</title><content type='html'>Original location: &lt;a href="http://www.botstation.com/code/excel2notes.php" target=_blank&gt;Fast import from Excel to Notes &lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This LotusScript agent has very high performance. It can read 10000 cells in just 1 second, compared to reading cell-by-cell which would take several minutes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Sub Initialize&lt;br /&gt;'This agent imports records from excel to Notes. It uses Range method which makes it very fast. &lt;br /&gt;'Copyright Botstation (www.botstation.com)&lt;br /&gt;&lt;br /&gt;Dim session As New NotesSession&lt;br /&gt;Dim db As NotesDatabase&lt;br /&gt;Dim xlApp As Variant, xlsheet As Variant, xlwb As Variant, xlrange As Variant&lt;br /&gt;Dim x As Integer&lt;br /&gt;Dim y As Integer&lt;br /&gt;&lt;br /&gt;Dim filename As String, currentvalue As String&lt;br /&gt;Dim rowsatonce As Integer, cnt As Integer &lt;br /&gt;Dim DataArray&lt;br /&gt;&lt;br /&gt;Set db=session.CurrentDatabase&lt;br /&gt;Set xlApp = CreateObject("Excel.Application")&lt;br /&gt;&lt;br /&gt;xlApp.Visible = True 'Excel program is visible to see what is happening&lt;br /&gt;&lt;br /&gt;Set xlwb=xlApp.Workbooks.Open("C:\test.xls")&lt;br /&gt;Set xlsheet =xlwb.Worksheets(1) &lt;br /&gt;&lt;br /&gt;actRows=1000 'process 1000 rows&lt;br /&gt;actColumns=5 'process 5 columns&lt;br /&gt;&lt;br /&gt;Redim DataArray(actRows, actColumns) As String&lt;br /&gt;DataArray=xlsheet.Range("A1").Resize(actRows, actColumns).Value 'get sheet area of 5*1000 size &lt;br /&gt;&lt;br /&gt;For x=1 To actRows&lt;br /&gt;For y=1 To actColumns&lt;br /&gt;currentvalue=Cstr(DataArray(x,y))&lt;br /&gt;tmp=tmp+" "+currentvalue&lt;br /&gt;Next &lt;br /&gt;tmp=tmp+" "+Chr(10)&lt;br /&gt;Next&lt;br /&gt;&lt;br /&gt;Msgbox tmp &lt;br /&gt;&lt;br /&gt;End Sub&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Implementation of putting array values into notes documents is left as an exercise to the reader :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114588269912695484?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114588269912695484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114588269912695484' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114588269912695484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114588269912695484'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/very-fast-import-from-ms-excel-to.html' title='Very fast import from MS Excel to Lotus Notes using LotusScript'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114588205372127822</id><published>2006-04-24T05:28:00.000-07:00</published><updated>2006-04-24T05:42:54.283-07:00</updated><title type='text'>Sametime for iSeries How to Install Sametime and Add It to a Domino Server</title><content type='html'>Just found a technote on how to install Sametime on iSeries(AS400). Actually it's more like an article than a regular technote. I had the link as icon on my Windows Desktop for about a year, so today was it's lucky day.&lt;br /&gt;The technote has some black-green screenshots for AS400 lovers  :)&lt;br /&gt;&lt;br /&gt;Here is the link:&lt;br /&gt;http://www-1.ibm.com/support/docview.wss?rs=0&amp;uid=swg21085821&lt;br /&gt;&lt;br /&gt;Take also a look at common problems for Sametime on iSeries, the same problems apply to other OS:&lt;br /&gt;http://www-1.ibm.com/support/docview.wss?rs=477&amp;context=SSKTXQ&amp;q=1108423&amp;uid=swg21108423&amp;loc=en_US&amp;cs=utf-8&amp;lang=en&lt;br /&gt;&lt;br /&gt;And one more useful technote:&lt;br /&gt;Changing IP Address or Hostname After Adding Sametime&lt;br /&gt;http://www-1.ibm.com/support/docview.wss?rs=0&amp;uid=swg21099966&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114588205372127822?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114588205372127822/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114588205372127822' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114588205372127822'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114588205372127822'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/sametime-for-iseries-how-to-install.html' title='Sametime for iSeries How to Install Sametime and Add It to a Domino Server'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114573887619953954</id><published>2006-04-22T13:47:00.000-07:00</published><updated>2006-04-23T16:11:57.060-07:00</updated><title type='text'>Sametime Bot instructional video and configuration program</title><content type='html'>I've created a VB program which helps to configure Botstation Sametime Bot. The problem with current configuration is that person installing the Bot must change in BAT-file and in INI-file some customer-specific values, such as server name and login info. It is not very difficult, but several people evaluating the Bot expressed their desire to make the configuration easier. With this new configuration program they do not need to care about what file to open and which variales to change. They don't even need to read the instructions. This will hopefully make many users happy.&lt;br /&gt;&lt;br /&gt;I am also planning to create an instructional screen capture video in Flash. To be more precise, several videos: one for each topic. The topics will be:&lt;br /&gt;-Installing Bot&lt;br /&gt;-Configuring Bot&lt;br /&gt;-Creating new Pattern Answer "from scratch"&lt;br /&gt;-Creating new Agent Answer "from scratch"&lt;br /&gt;Each video will be about 2 minutes long, hopefully even with speaker voice, if I find some native English speaker.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114573887619953954?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114573887619953954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114573887619953954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114573887619953954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114573887619953954'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/sametime-bot-instructional-video-and.html' title='Sametime Bot instructional video and configuration program'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114507769116071178</id><published>2006-04-14T22:03:00.000-07:00</published><updated>2006-04-24T15:17:30.513-07:00</updated><title type='text'>Sametime Bot</title><content type='html'>Lean, mean Sametime machine is ready to serve you!&lt;br /&gt;New version of Botstation Sametime Bot is released today and the most important improvement is better support for running agents on local Notes client.&lt;br /&gt;You can now also spcify another ID file and password to login with, instead of using the last user's ID.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.botstation.com/products/stbot/about.php" tagret=_blank&gt;Sametime Bot&lt;/a&gt;  http://www.botstation.com/products/stbot/about.php&lt;br /&gt;&lt;br /&gt;Free 30-day trial version is available for download&lt;br /&gt;&lt;br&gt;Technorati:&lt;br /&gt;&lt;a href="http://technorati.com/tag/sametime" rel="tag"&gt;sametime&lt;/a&gt; &lt;a href="http://technorati.com/tag/lotus+sametime" rel="tag"&gt;Lotus Sametime&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114507769116071178?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114507769116071178/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114507769116071178' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114507769116071178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114507769116071178'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/sametime-bot.html' title='Sametime Bot'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114507645924942097</id><published>2006-04-14T21:25:00.000-07:00</published><updated>2006-04-14T21:47:39.260-07:00</updated><title type='text'>Notes Error "Can't run a private agent belonging to someone else"</title><content type='html'>If you get "Can't run a private agent belonging to someone else" error when you trigger a Lotus Notes agent from your Java application, make sure that the agent is initiated in the same thread as it's parent Database. Looks like you can't simply get agent object from another thread without getting it through it's parent database object. Well, you actually get the valid object but the agent can not start. This applies only to local calls, not to DIIOP. And it looks that sometimes it can work anyway.&lt;br /&gt;You might ask why would you have separate sessions/threads in the first place? There are many reasons for that, especially in large applications where Domino objects might have been initiated in different classes.&lt;br /&gt;&lt;br /&gt;Incorrect:&lt;br /&gt;class ClassA{&lt;br /&gt;Session s = null;&lt;br /&gt;Database db = null;&lt;br /&gt;Agent agent = null;&lt;br /&gt;NotesThread.sinitThread();&lt;br /&gt;s = NotesFactory.createSession();&lt;br /&gt;db=s.getDatabase(null, "mydb.nsf");&lt;br /&gt;agent = db.getAgent("agent123");&lt;br /&gt;// NotesThread.stermThread();  //Notes thread is still running!&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class ClassB{&lt;br /&gt;NotesThread.sinitThread();&lt;br /&gt;Agent agent=classA.agent; //this is valid call and we do get valid agent object!&lt;br /&gt;agent.run();  //here we get error "Can't run a private agent belonging to someone else"&lt;br /&gt;NotesThread.stermThread();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Correct:&lt;br /&gt;class ClassA{&lt;br /&gt;Session s = null;&lt;br /&gt;Database mydb = null;&lt;br /&gt;NotesThread.sinitThread();&lt;br /&gt;s = NotesFactory.createSession();&lt;br /&gt;db=s.getDatabase(null, "mydb.nsf");&lt;br /&gt;// NotesThread.stermThread();  //Notes thread is still running!&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;class ClassB{&lt;br /&gt;NotesThread.sinitThread();&lt;br /&gt;Agent agent=classA.mydb.getAgent("agent123");&lt;br /&gt;agent.run();  //agent gets triggered without error&lt;br /&gt;NotesThread.stermThread();&lt;br /&gt;}&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114507645924942097?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114507645924942097/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114507645924942097' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114507645924942097'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114507645924942097'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/notes-error-cant-run-private-agent.html' title='Notes Error &quot;Can&apos;t run a private agent belonging to someone else&quot;'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-17199621.post-114482793112372432</id><published>2006-04-12T00:40:00.000-07:00</published><updated>2006-04-12T00:48:48.203-07:00</updated><title type='text'>A minimum WinXP Install</title><content type='html'>Found an &lt;a href="http://www.xxcopy.com/xxcopy80.htm" target=_blank&gt;article&lt;/a&gt; about what files can be deleted from Windows XP without considerably affecting the functionality. Not sure if it applies in all cases, and haven't tested it by myself yet, but it sounds interesting.&lt;br /&gt;&lt;br /&gt;Here is a list of directories which according to the article can be deleted:&lt;br /&gt;&lt;br /&gt;C:\windows\apppatch  C:\windows\inf  C:\windows\system\        (surprise!!!)&lt;br /&gt;  C:\windows\msagent  C:\windows\help  C:\windows\ime\           (depending on the language)&lt;br /&gt;  C:\windows\srchasst  C:\windows\mui  C:\windows\temp  C:\windows\debug  C:\windows\tasks  C:\windows\registration  C:\windows\pchealth  C:\windows\installer  C:\Windows\system32\catroot  C:\Windows\system32\catroot2  C:\Windows\system32\wbem  C:\Windows\system32\dllclache  C:\Windows\system32\setup  C:\Windows\system32\npp  C:\Windows\system32\spool  C:\Windows\system32\inetsrv  C:\Windows\system32\ime  C:\Windows\system32\com  C:\Windows\system32\1033  C:\Windows\system32\usmt  C:\Windows\system32\mui  C:\Windows\system32\oobe  C:\Windows\system32\xircom  C:\Windows\system32\restore  C:\Windows\system32\macromed&lt;br /&gt;Source: http://www.xxcopy.com/xxcopy80.htm&lt;br /&gt;&lt;br /&gt;Here is another related WinXP article: &lt;a target=_blank href="http://www.sapiensbryan.com/index.php/winxp-minimum-system-requirements/"&gt;http://www.sapiensbryan.com/index.php/winxp-minimum-system-requirements/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/17199621-114482793112372432?l=dominounlimited.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dominounlimited.blogspot.com/feeds/114482793112372432/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=17199621&amp;postID=114482793112372432' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114482793112372432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/17199621/posts/default/114482793112372432'/><link rel='alternate' type='text/html' href='http://dominounlimited.blogspot.com/2006/04/minimum-winxp-install.html' title='A minimum WinXP Install'/><author><name>Andrei Kouvchinnikov</name><uri>http://www.blogger.com/profile/02423321078595062935</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='23' height='32' src='http://www.dominokonsult.se/images/andr02.jpg'/></author><thr:total>1</thr:total></entry></feed>
