<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
 xmlns:dc="http://purl.org/dc/elements/1.1/"
 xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 xmlns:admin="http://webns.net/mvcb/"
 xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>Lotus Notus (English)</title>
<description>An experimental blog on IBM Lotus Software...</description>
<link>http://lotusnotus.com/lotusnotus_en.nsf/</link>
<language>en-US</language>
<lastBuildDate>Fri, 29 Mar 2013 14:19:23 +0300</lastBuildDate>
<item>
<title>Two critical HTTP problems in Domino 9...</title>
<pubDate>Fri, 29 Mar 2013 14:19:23 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm</link>
<category>System Administration</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm</guid>
<content:encoded><![CDATA[ After I upgraded my servers to Domino 9, I have found two problems affecting HTTP task. <br /> <br /><strong>1. Redirect TCP to SSL problem...</strong> <br /> <br />My HTTP task stopped responding just after the upgrade. When I look into thread logs I saw that it was redirecting every requests to the same URL! After a couple of tests, I found that if you have "Redirect TCP to SSL" checked in your Internet Site document, it fails with infinite redirection problem. <br /> <br /><img  alt="Image:Two critical HTTP problems in Domino 9..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm/content/M2?OpenElement" /> <br /> <br />I posted the issue into the N/D 9.0 Social Edition forum and saw that I'm not alone. It seems like the same issue happens when you check "Require SSL Connection" in specific databases. <br /> <br /><img  alt="Image:Two critical HTTP problems in Domino 9..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm/content/M3?OpenElement" /> <br /> <br />IBMers couldn't repeat the problem. After dozens of tests I found out a specific setting in my configuration was the root cause. <br /> <br />Since one of my servers was behind WAS plugin before, I had a notes.ini setting in my configuration document. After deleting this, it got back to normal. So, <br /> <br /><strong>If you are forcing SSL redirection either by "Redirect TCP to SSL" or "Require SSL Connection", delete "HTTPEnableConnectorHeaders=1" setting from notes.ini file.</strong> <br /> <br />Forum entry: <a href="http://www-10.lotus.com/ldd/ndseforum.nsf/xpTopicThread.xsp?documentId&#8221;692BEB1A4244C685257B39003F4264" target=_blank>http://www-10.lotus.com/ldd/ndseforum.nsf/xpTopicThread.xsp?documentId&#8221;692BEB1A4244C685257B39003F4264</a>  <br /> <br /> <br /><strong>2. Traveler behind IHS (IBM HTTP Server)</strong> <br /> <br />The second problem is with Traveler Server and a new feature of Domino 9: IHS. By this new version, you have the chance to position IHS in front of your Domino servers running in Windows platform. It has a couple of advantages but the most obvious one for me is to be able to use 'modern' SSL certificates :) <br /> <br />However, if you are running Traveler server at the same time, you experience a strange problem. It works for a while and then stops working for iOS (I didn't test Android). <br /> <br />The problem is, when you make a profile change, Traveler asks the client to send a 'PROVISION' command with a non-standard HTTP response code (449). But the IHS module for Domino does not transfer this code between the server and mobile client. So iOS device stops working and you cannot register any more devices. <br /> <br />What you should do is to open a PMR and receive updated "<em>mod_domino.so</em>" file. <br /> <br />Forum entry: <a href="http://www-10.lotus.com/ldd/ndseforum.nsf/xpTopicThread.xsp?documentId=4F341BE6082FF4A985257B3600374B38" target=_blank>http://www-10.lotus.com/ldd/ndseforum.nsf/xpTopicThread.xsp?documentId=4F341BE6082FF4A985257B3600374B38</a> <br /> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/two-critical-http-problems-in-domino-9....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/two-critical-http-problems-in-domino-9....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Happy Pi Day present: Pi Calculator for XPages...</title>
<pubDate>Thu, 14 Mar 2013 09:45:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/happy-pi-day-present-pi-calculator-for-xpages....htm</link>
<category>Development</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/happy-pi-day-present-pi-calculator-for-xpages....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/happy-pi-day-present-pi-calculator-for-xpages....htm</guid>
<content:encoded><![CDATA[ Today is the "<a href=http://en.wikipedia.org/wiki/Pi_Day target=_blank><span style="text-decoration:underline">Pi Day</span></a>"... <br /> <br /> Last week I was playing with <a href="http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;name=Threads%20and%20Jobs" target=_blank><span style="text-decoration:underline">Threads and Jobs</span></a> project from OpenNTF. I needed a very long job to be run n the server-side. I have thought calculating pi digits would be a cool selection :) <br />  <br /> I found a <a href=http://mysite.verizon.net/res148h4j/javascript/script_pi_spigot.html target=_blank><span style="text-decoration:underline">Javascript-based Spigot</span></a> algorithm by Stephen R. Schmitt and easily converted to Java (sorry about the code!). <br /> <br /> Notice that, on an average machine it calculates 10,000 digits in less than a minute. Now consider, ENIAC has calculated 2037 digits in 70 hours in 1949! &nbsp; <br /> <br /> <img  alt="Pi Pie at Delft University" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/happy-pi-day-present-pi-calculator-for-xpages....htm/content/M2?OpenElement" /><br /> <br /> However, to calculate trillion digits would be tough with this algorithm. Because we need a large String buffer and a large integer array for calculation. Integer array is around 3.5 times the digit count and string buffer has one chars per digit. So we are limited with the heap size. In a non-XPages environment, if you don't keep string buffer, you would be able to calculate 2.5 million digits with standard memory :) <br /> <br /> Anyway, it was fun and I wanted to share it. Here is the screencast:<br /> <br /> <iframe width="640" height="360" src="https://www.youtube.com/embed/lCOFpQ6pi_U?rel=0&amp;vq=large" frameborder="0" allowfullscreen></iframe> <br /> <br /> You can download the database <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/PiMadness Release.zip/$file/PiMadness Release.zip" title="PiMadness Release.zip">here</a>.   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/happy-pi-day-present-pi-calculator-for-xpages....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/happy-pi-day-present-pi-calculator-for-xpages....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>DOTS Deep Dive 4: I can schedule myself...</title>
<pubDate>Thu, 21 Feb 2013 14:05:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-4-i-can-schedule-myself....htm</link>
<category>DOTS</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-4-i-can-schedule-myself....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-4-i-can-schedule-myself....htm</guid>
<content:encoded><![CDATA[ Finally, we will be able to enable FeedMonster for CollaborationToday project. <br /> <br /> While doing final touches, I have been challenged by a question: "Can we schedule DOTS tasklets programmatically?" <br /> <br /> Actually, this is in the wish list for the next version of DOTS. But we can do some trick here. I didn't test this on Domino 9 but it should work. <br /> <br /> Here is the code: <br /> <br /> <pre>package org.openntf.news.playground.tasklets; <br /> <br /> import org.eclipse.core.runtime.CoreException; <br /> import org.eclipse.core.runtime.IProgressMonitor; <br /> <br /> import com.ibm.dots.annotation.RunOnStart; <br /> import com.ibm.dots.task.AbstractServerTaskExt; <br /> import com.ibm.dots.task.RunWhen; <br /> import com.ibm.dots.task.RunWhen.RunUnit; <br /> import com.ibm.dots.task.ServerTaskManager; <br /> <br /> public class CustomSchedule extends AbstractServerTaskExt { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;@Override <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void dispose() { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;@RunOnStart <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void scheduleMe(IProgressMonitor monitor) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ServerTaskManager stm=ServerTaskManager.getInstance(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// Every 10 seconds <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;RunWhen sched=new RunWhen(RunUnit.second, 10, 0, 0); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// custom01 is this tasklet's id as defined in plugin.xml <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;stm.scheduleTasklet("custom01", sched); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} catch (CoreException e) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.printStackTrace(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;logMessage("I have scheduled myself for "+sched); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;@Override <br />  &nbsp; &nbsp; &nbsp; &nbsp;protected void doRun(RunWhen runWhen, IProgressMonitor monitor) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;logMessage("CustomSchedule: "+runWhen.toString()); <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br /> }</pre> <br /> <br /> So it's simple. There is a ServerTaskManager singleton object which manages all tasklets. We are using ".schedule(...)" method (luckily it's public). <br /> <br /> When we load DOTS: <br /> <br /> <pre>&gt; load dots <br /> Listening for transport dt_socket at address: 8001 <br /> 21.02.2013 13:55:30 &nbsp; Domino OSGi Tasklet Container started ( profile DOTS ) <br /> 21.02.2013 13:55:31 &nbsp; &#91;DOTS&#93; (custom01) I have scheduled myself for Runs every 10 - second <br /> 21.02.2013 13:55:33 &nbsp; &#91;DOTS&#93; (custom01) CustomSchedule: Runs every 10 - second <br /> 21.02.2013 13:55:43 &nbsp; &#91;DOTS&#93; (custom01) CustomSchedule: Runs every 10 - second</pre> <br /> <br /> You can use some kind of parameterization to customize your tasklet scheduling. For instance, I am planning to use this functionality for FeedMonster such that If there are only 5 feeds to be read, it's useless to receive new stories every 5 minutes. However, there is no way to 'unschedule' a tasklet. We'll find another trick for this. <br /> <br /> ServerTaskManager is a great object BTW. For instance; <br /> <br /> <pre>stm.runTasklet("someTasklet", "argument1", "argument2");</pre> <br /> <br /> I didn't find it safe though. Since it doesn't submit a CommandInterpreter object, there might be a problem in error trapping. Noted to the list of feedbacks :) <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/dots-deep-dive-4-i-can-schedule-myself....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-4-i-can-schedule-myself....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>DOTS Deep Dive 3: Warning for Deadlocks</title>
<pubDate>Thu, 14 Feb 2013 16:00:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-3-warning-for-deadlocks.htm</link>
<category>DOTS</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-3-warning-for-deadlocks.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-3-warning-for-deadlocks.htm</guid>
<content:encoded><![CDATA[ Last time, I have blogged about the importance of <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm" title="dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm" target="_blank">the importantance of canceling tasklets</a>... <br /> <br /> In most of the time, canceling a task is a 'choice' you have. You might want to stop the task for a reason. However, a very important problem is falling into deadlocks. If somehow your code falls into a deadlock or stuck situation, that would lock your DOTS container entirely. <br /> <br /> DOTS uses a basic mechanism for identifying scheduled tasklets that are stuck. Every tasklet starts its life with a predefined timeout value. This is 5 minutes by default. You can use "@HungPossibleAfter( timeInMinutes=n )" annotation to change this value. <br /> <br /> Native part of DOTS implementation (ndots task) continuously signals the service thread (thread responsible from running scheduled tasklets) for a new tasklet. As we said before, it is designed to run a single tasklet at a time. But service thread still stores the next tasklet in the queue (that's why scheduling becomes complicated as in the <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-1-art-of-scheduling-tasklets.htm" title="dots-deep-dive-1-art-of-scheduling-tasklets.htm" target="_blank">first post</a> of this series). <br /> <br /> If added tasklet is already in progress, service thread will check if this tasklet has exceeded the timeout value. If so, it warns us... <br /> <br /> Here, we have an issue. Because DOTS <strong><span style="text-decoration:underline">do nothing</span></strong> to cancel the tasklet that has been stuck with a loop. It just throws stack traces and warnings into console to let you know the situation. You have to cancel your tasklet manually. I hope this would be changed in the future. <br /> <br /> Let's look around the issue with a sample code: <br /> <br /> <pre>@RunEvery( every=15, unit=RunUnit.second ) <br /> public void run15(IProgressMonitor monitor) throws Exception { <br />  &nbsp; &nbsp; &nbsp; &nbsp;logMessage("RUN: 15 seconds"); <br /> } <br /> <br /> @RunEvery( every=1, unit=RunUnit.minute ) <br /> @HungPossibleAfter( timeInMinutes=1 ) <br /> public void run5(IProgressMonitor monitor) throws Exception { <br />  &nbsp; &nbsp; &nbsp; &nbsp;logMessage("START: 1 minutes "); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;while(true) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Thread.sleep(1000); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(monitor.isCanceled()) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;logMessage("Cancel request taken..."); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(getSession().getEnvironmentString("waiting_for_star_wars_disney_edition", true).equals("never")) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;break; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;logMessage("END: 1 minutes"); <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br /> }</pre> <br /> <br /> There are two tasklets here. The first one is simple. The second one is an infinite loop. When we load DOTS, after a point it will be hung. <br /> <br /> <pre>14.02.2013 15:43:09 &nbsp; &#91;DOTS&#93; (stest01) RUN: 15 seconds <br /> 14.02.2013 15:43:09 &nbsp; &#91;DOTS&#93; (stest01) START: 1 minutes <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; Service Thread Scheduled Runs appears to be stuck on task stest01@run5. It has been more than 2 minute(s) 0 seconds since the last time a task ran. Throwing away new Task instances. Thread Stack trace to follow <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; Thread Scheduled Runs appears to be deadlocked: <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.Thread.sleep(Native Method) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.Thread.sleep(Thread.java:853) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;org.openntf.news.playground.tasklets.SchedTest01.run5(SchedTest01.java:32) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.reflect.Method.invoke(Method.java:611) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;com.ibm.dots.task.ServiceThread$ServiceTask.run(ServiceThread.java:171) <br /> 14.02.2013 15:45:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;com.ibm.dots.task.ServiceThread.run(ServiceThread.java:286) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; Service Thread Scheduled Runs appears to be stuck on task stest01@run5. It has been more than 3 minute(s) 0 seconds since the last time a task ran. Throwing away new Task instances. Thread Stack trace to follow <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; Thread Scheduled Runs appears to be deadlocked: <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.Thread.sleep(Native Method) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.Thread.sleep(Thread.java:853) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;org.openntf.news.playground.tasklets.SchedTest01.run5(SchedTest01.java:32) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:60) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;java.lang.reflect.Method.invoke(Method.java:611) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;com.ibm.dots.task.ServiceThread$ServiceTask.run(ServiceThread.java:171) <br /> 14.02.2013 15:46:09 &nbsp; &#91;DOTS&#93; &nbsp; &nbsp;com.ibm.dots.task.ServiceThread.run(ServiceThread.java:286) <br /> &gt; tell dots cancel <br /> 14.02.2013 15:46:35 &nbsp; &#91;DOTS&#93; Canceling all running tasks... <br /> 14.02.2013 15:46:35 &nbsp; &#91;DOTS&#93; 1 task(s) cancelled <br /> 14.02.2013 15:46:36 &nbsp; &#91;DOTS&#93; (stest01) Cancel request taken... <br /> 14.02.2013 15:46:36 &nbsp; &#91;DOTS&#93; (stest01) END: 1 minutes <br /> 14.02.2013 15:46:36 &nbsp; &#91;DOTS&#93; (stest01) RUN: 15 seconds <br /> 14.02.2013 15:46:39 &nbsp; &#91;DOTS&#93; (stest01) RUN: 15 seconds</pre> <br /> <br /> As you see, the second tasklet run and became deadlocked. If you leave it, it will shout forever but will never ever dispose the tasklet. As soon as we cancel this tasklet, the first one runs twice. "15:46:36" is because it has been queued. "15:46:39" is the normal schedule. <br /> <br /> As a result, you have to be very careful about <strong>infinite loops</strong>. Occasional pings to monitoring desk might be a good idea for mission critical tasklets. Always catch the cancel signal. Because if you stop DOTS, it will eventually kill your tasklet but server will be unstable afterwards. <br /> <br /> BTW, there are some situations that you don't have a control on catching a cancel signal. For instance, if your tasklet opens a URL connection and does not define a timeout value for the connection, it would wait forever in case remote server does not respond. Always set timeouts :) <br /> <br /> Have fun... <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/dots-deep-dive-3-warning-for-deadlocks.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-3-warning-for-deadlocks.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>DOTS Deep Dive 2: Cancel me or I will crash your server...</title>
<pubDate>Wed, 13 Feb 2013 12:11:54 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm</link>
<category>DOTS</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm</guid>
<content:encoded><![CDATA[ I just wanted to emphasize an important functionality within DOTS... <br /> <br /> One of our slides in the <a href="https://speakerdeck.com/sbasegmez/bp207-meet-the-java-application-server-you-already-own-ibm-domino" target=_blank><span style="text-decoration:underline">recent DOTS session</span></a> in IBM Connect 2013, we have talked about the "<strong><em>monitor</em></strong>" argument in tasklets. It has two important uses. <br />  <br /> First of all, you might let DOTS container know about your progress. Second, it allows you to cancel your task in a less-disruptive manner. <br /> <br /> Let's dive into code here. <br /> <br /> Our tasklet is running every five seconds and wait 30 seconds each run: <br /> <br /> <pre>@RunEvery( every=5, unit=RunUnit.second ) <br /> public void run5(IProgressMonitor monitor) throws Exception { <br />  &nbsp; &nbsp; &nbsp; logMessage("START: 5 Secs"); <br />  &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; monitor.beginTask("Sleeping well", 15); <br /> <br />  &nbsp; &nbsp; &nbsp; for(int i=0; i&lt;15; i++) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; monitor.worked(1); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep(2000); <br />  &nbsp; &nbsp; &nbsp; } <br />  &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; logMessage("END: 5 secs"); <br /> <br /> }</pre> <br /> <br /> We have splitted 30 seconds wait into 15 parts of sleeping to make more sense. Using "<em>beginTask</em>" method at start, we have declared that "Our tasklet will do 15 units of job". Each unit, we inform progress monitor for "1 unit completed" message with "<em>worked</em>" method. We can check the status from the console: <br /> <br /> <pre>11.02.2013 12:22:03 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br /> &gt; tell dots taskstatus <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; Display the list of OSGi tasklets currently in progress <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; Scheduled Runs <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; --- stest01 &#91;Sleeping well&#93; (13,333%) <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; Triggered Runs <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; --- No task running <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; Manual Runs <br /> 11.02.2013 12:22:06 &nbsp; &#91;DOTS&#93; --- No task running</pre> <br /> <br /> What if we cancel this task? Lets try... <br /> <br /> <pre>11.02.2013 12:28:58 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br /> &gt; tell dots q <br /> 11.02.2013 12:29:02 &nbsp; &#91;DOTS&#93; Canceling task stest01 <br /> 11.02.2013 12:29:29 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br /> 11.02.2013 12:29:29 &nbsp; Domino OSGi Tasklet Container terminated ( profile DOTS )</pre> <br /> <br /> When we stop DOTS task, it will try to cancel our task. However it's not a cancellation. Our tasklet finished its run (30 seconds) because it doesn't have an idea we have sent a cancel signal... <br /> <br /> Now add a simple check inside our loop... <br /> <br /> <pre>@RunEvery( every=5, unit=RunUnit.second ) <br /> public void run5(IProgressMonitor monitor) throws Exception { <br />  &nbsp; &nbsp; &nbsp; logMessage("START: 5 Secs"); <br />  &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; monitor.beginTask("Sleeping well", 15); <br />  &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; for(int i=0; i&lt;15; i++) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; monitor.worked(1); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Thread.sleep(2000); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(monitor.isCanceled()) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; logMessage("Cancel request taken..."); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; } <br />  &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; logMessage("END: 5 secs"); <br /> <br /> }</pre> <br /> <br /> When we cancel the tasklet, it will get the signal and break the execution... <br /> <br /> <pre>11.02.2013 12:34:29 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br /> &gt; tell dots q <br /> 11.02.2013 12:34:32 &nbsp; &#91;DOTS&#93; Canceling task stest01 <br /> 11.02.2013 12:34:33 &nbsp; &#91;DOTS&#93; (stest01) Cancel request taken... <br /> 11.02.2013 12:34:33 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br /> 11.02.2013 12:34:34 &nbsp; Domino OSGi Tasklet Container terminated ( profile DOTS )</pre> <br /> <br /> Receiving the cancel signal is extremely important. Suppose you are developing a very very long-running tasklet (it might be a manual tasklet as well). You should be able to break the execution at any point without waiting its normal run. At some point of cancellation, DOTS will decide it's crashed and fill your console with strange error messages...<br /> <br /> One last point: Cancellation can be achived by "<em>tell dots cancel (tasknumber)</em>" command. I couldn't find out what the tasknumber is but if you don't provide a parameter, it will cancel all running tasks at once. <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-2-cancel-me-or-i-will-crash-your-server....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>DOTS Deep Dive 1: Art of Scheduling Tasklets</title>
<pubDate>Mon, 11 Feb 2013 12:05:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-1-art-of-scheduling-tasklets.htm</link>
<category>DOTS</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-1-art-of-scheduling-tasklets.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-1-art-of-scheduling-tasklets.htm</guid>
<content:encoded><![CDATA[ After a <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm" title="a-rookie-speaker-was-here....htm" target="_blank">successful IBM Connect session</a>, I started a series of posts, based on feedbacks I received from other developers. <br /> <br />There was a little thing I didn't test before the session and this issue has been asked a couple of times: Possible conflicts between scheduled tasklets. <br /> <br />Unfortunately, current implementation within DOTS is based on single threaded approach for tasklets. There are three different threads responsible in DOTS tasklet container for scheduled, manual and triggerred tasklets. It means, there would be only one thread alive to run scheduled tasklets, therefore, only one scheduled tasklet can run at a time. <br /> <br />Let's dive into possible scenerios here. <br /> <br />Suppose we have a scheduled tasklet that will run every 5 seconds and wait for 7 seconds: <br /> <br /><pre>11.02.2013 11:10:19 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:10:26 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br />11.02.2013 11:10:28 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:10:35 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br />11.02.2013 11:10:38 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:10:45 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs</pre> <br /> <br />As you see, since it runs longer than its schedule, it will pass 5 secs schedule and runs every 10 seconds. <br /> <br />Suppose we add a second tasklet here, to run every 2 seconds but wait for 1 secs: <br /> <br /><pre>11.02.2013 11:11:15 &nbsp; &#91;DOTS&#93; (stest01) START: 2 Secs <br />11.02.2013 11:11:16 &nbsp; &#91;DOTS&#93; (stest01) END: 2 secs <br />11.02.2013 11:11:16 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:11:23 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br />11.02.2013 11:11:23 &nbsp; &#91;DOTS&#93; (stest01) START: 2 Secs <br />11.02.2013 11:11:24 &nbsp; &#91;DOTS&#93; (stest01) END: 2 secs <br />11.02.2013 11:11:24 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:11:31 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br />11.02.2013 11:11:31 &nbsp; &#91;DOTS&#93; (stest01) START: 2 Secs <br />11.02.2013 11:11:32 &nbsp; &#91;DOTS&#93; (stest01) END: 2 secs <br />11.02.2013 11:11:33 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs <br />11.02.2013 11:11:40 &nbsp; &#91;DOTS&#93; (stest01) END: 5 secs <br />11.02.2013 11:11:40 &nbsp; &#91;DOTS&#93; (stest01) START: 2 Secs <br />11.02.2013 11:11:41 &nbsp; &#91;DOTS&#93; (stest01) END: 2 secs <br />11.02.2013 11:11:42 &nbsp; &#91;DOTS&#93; (stest01) START: 2 Secs <br />11.02.2013 11:11:43 &nbsp; &#91;DOTS&#93; (stest01) END: 2 secs <br />11.02.2013 11:11:43 &nbsp; &#91;DOTS&#93; (stest01) START: 5 Secs</pre> <br /> <br />This is a complicated scheduling right? They will never run at the sametime. If a tasklet should run in 15th, 20th, 25th and 30th seconds but there is another tasklet running at 20th and 30th seconds, it will just skip. <br /> <br />This is a big problem if you are going to use lots of long-running scheduled tasklets. A tasklet running longer than its schedule would not be a huge problem but multiple tasklets disrupting each other? <br /> <br />OK, there is a very nice solution for that: <br /> <br />Now we will have one tasklet running every 5 secs and waiting for 30 secs (very long job) and another one running every 3 secs waiting 2 secs. Here they are running friendly without intervening each other: <br /> <br /><pre>11.02.2013 11:49:06 &nbsp; &#91;DOTS2&#93; (stest01) START: 5 Secs <br />11.02.2013 11:49:07 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:08 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:10 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:11 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:13 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:14 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:16 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:17 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:19 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:20 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:22 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:23 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:25 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:26 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:28 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:29 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:31 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:32 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:34 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:35 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:36 &nbsp; &#91;DOTS2&#93; (stest01) END: 5 secs <br />11.02.2013 11:49:37 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:38 &nbsp; &#91;DOTS&#93; (stest01) START: 3 Secs <br />11.02.2013 11:49:40 &nbsp; &#91;DOTS&#93; (stest01) END: 3 secs <br />11.02.2013 11:49:41 &nbsp; &#91;DOTS2&#93; (stest01) START: 5 Secs</pre> <br /> <br />Notice something different? They are running in different DOTS tasklet containers. 3-sec tasklet is running inside DOTS profile and the other one is running in DOTS2.  <br /> <br />Multiple profiles are great if you run critical and complicated DOTS tasklets because it has its own <strong>Tasklet Container</strong>... <br /> <br />However, multiple profile helps you if you have seperate projects. What if you need multiple long-running tasklets within the same project? <br /> <br />For this, you have to enter into a red zone where every Domino-Java developers will eventually experience... In this jungle, you have to create your own thread and manage that. I will provide samples in the future... <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/dots-deep-dive-1-art-of-scheduling-tasklets.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/dots-deep-dive-1-art-of-scheduling-tasklets.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>A rookie speaker was here...</title>
<pubDate>Wed, 6 Feb 2013 15:30:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm</link>
<category>Activity</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm</guid>
<content:encoded><![CDATA[ I was there, at IBM Connect 2013. My second Orlando visit was far more greater this time. A speaker badge combined to the IBM Champion ribbon, more experience and more fun! <br />  <br /> This year, my schedule was packed. I have planned lots of sessions and attended most of them. After last year's disappointment in BDD, I attended master classes on sunday and they were great! <br /> <br /> Two sessions were approaching development process in a different angle and they were especially exceptional. On sunday master class session, Nathan T. Freeman explained how to analyze any Notes application in <a href="http://openntf.org/XSnippets.nsf/snippet.xsp?id=reverse-engineering-notes-apps-sample-code" target=_blank><span style="text-decoration:underline">a systematic way</span></a>. Ryan J. Baxter and Mikkel F. Heisterberg had a <a href=http://lekkimworld.com/2013/01/29/slides_from_bp209_in_the_land_of_the_social_apps target=_blank><span style="text-decoration:underline">best practices session</span></a> when designing APIs for your applications. <br /> <br /> I have been a good boy and got social again... I enjoyed meeting new people, talking to IBMers and other community people. The most valuable information you can get is hidden in these conversation (most of them should be consumed with good beer!). <br /> <br /> <img  alt="Image:A rookie speaker was here..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm/content/M2?OpenElement" /><em><br /> IBM Champions at OGS...</em> <br /> <br /> The most important thing was my session with Bruce Elgort... I was not comfortable with the session because practices over Skype was too long and I was concerned about my accent. I have been speaking in front of crowd since I'm 19 and I have no problem about it. I am a passionated speaker and might talk several hours about a topic I really like. But talking in English? I was going to have an heart attack until 5 minutes before the session. <br /> <br /> But I understood why all experienced speakers suggest newbies coupling with another experienced speaker. Bruce has managed me and the session with a great success. My audience might see minutes of silence and a shaking speaker if I was alone there :) <br /> <br /> Our session was a great success! Right now looking the evaluation results and understanding we did a great job. One comment was especially came into my attention: <br /> <br /> <blockquote>"This is the epitome of what a Lotusphere session should be. Veteran and rookie speaker teaching us how to get better value of the tools that we already own. Great stuff!!!!"</blockquote> <br /> <br /> Thanks all for attending and filling out evaluation forms. Here is <a href="https://speakerdeck.com/sbasegmez/bp207-meet-the-java-application-server-you-already-own-ibm-domino" target=_blank>our session</a>: <br /> <br /> <script async class="speakerdeck-embed" data-id="2c71310051b90130c63522000a8f9950" data-ratio="1.33159947984395" src="http://lotusnotus.com/lotusnotus_en.nsf/dx///speakerdeck.com/assets/embed.js"></script> <br /> <br /> Full slides include step-by-step screen shots and explanations from Domino/Eclipse installation to deploying DOTS tasklets. Let me know if there is any problem... <br /> <br /> As a bonus, here Justin interviews with me: <br /> <br /> <iframe width="560" height="315" src="http://www.youtube.com/embed/5uA_7yBViuQ" frameborder="0" allowfullscreen></iframe> <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/a-rookie-speaker-was-here....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/a-rookie-speaker-was-here....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>IBM Connect Session: BP207 - Meet the Java Application Server you already own...</title>
<pubDate>Tue, 22 Jan 2013 12:41:03 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/ibm-connect-session-bp207-meet-the-java-application-server-you-already-own....htm</link>
<category>Development</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/ibm-connect-session-bp207-meet-the-java-application-server-you-already-own....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/ibm-connect-session-bp207-meet-the-java-application-server-you-already-own....htm</guid>
<content:encoded><![CDATA[ Last year was my first Lotusphere. I had a great pleasure visiting labs and talking to developers from IBM. <br /> <br /> I have met to David Taieb and we were discussing about an idea (or a suggestion) about XPages. We are lacking a (distributed) back-end processing system for XPages. When you have to run a really long process in your application which could be a reporting, calculation or so forth, you don't have anything but to keep users waiting with an hour glass. <br />  <br /> David sketched a diagram showing how SmartCloud Social Business (a.k.a. LotusLive) handles background administration tasks with an OSGi-based service architecture. I was surprized to hear that they were using a technology that they have already put to OpenNTF: <a href="http://www.openntf.org/internal/home.nsf/release.xsp?documentId&Atilde;3A1C5F7ADC513A86257927006B63F1" target=_blank><strong><span style="text-decoration:underline">DOTS</span></strong></a><strong> - Domino OSGi Tasklet Services</strong>... <br /> <br /> When I return to my office, the first thing I did was downloading DOTS and playing with this new development method. It was fantastic! I was looking at the <strong>Next Generation Domino Agents</strong>. I have also learnt a lot about OSGi development because in contrast to XPages extensibility API, DOTS has a really simple OSGi Context with little dependencies, easy structure etc. <br /> <br /> Later, we have developed a powerful <a href=https://github.com/OpenNTF/collaborationtoday/tree/master/DOTSFeedMonster/ target=_blank><span style="text-decoration:underline">FeedAggregator</span></a> tasklet for <a href=http://collaborationtoday.info/ target=_blank><span style="text-decoration:underline">CollaborationToday.info</span></a> project and I have personally experienced how powerful and fast DOTS is (you may refer to <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm" title="experimenting-dots-task-vs.-java-agent.htm" target="_blank">this post</a> about the performance of DOTS) <br /> <br /> This year, in IBM Connect 2013, We have submitted DOTS as a session proposal with my dear friend Bruce Elgort. As many of you know, it has been accepted. BP207 session will be on January 30th at 10:00 am in SWAN 5-6. <br /> <br /> We will talk about Java, OSGi, DOTS, preparing development environment, tips, tricks and some good practices. Our slidedeck includes every single detail to develop and deploy your first tasklet as well. <br /> <br /> <blockquote>Java and in particular OSGi are now very important parts of the IBM Notes/Domino app dev model. In this session, you'll learn about OSGi and how easy it is to extend the capabilities of your Domino server and XPages applications with the Domino OSGi Tasklet Services (DOTS). Whether you want to replace your existing agents with DOTS tasks, or develop new services for your XPages apps utilizing the many Java libraries available - we'll show you how!</blockquote> <br /> <br /> <br /> For attendees, there is no need to have any XPages experience but some level of Java knowledge would be needed to understand some concepts better. <br /> <br /> See you there!   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/ibm-connect-session-bp207-meet-the-java-application-server-you-already-own....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/ibm-connect-session-bp207-meet-the-java-application-server-you-already-own....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Still part of IBM Champions Program!</title>
<pubDate>Wed, 12 Dec 2012 10:43:09 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm</link>
<category>Community</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm</guid>
<content:encoded><![CDATA[ In 2011, I have been honored to be recognized as IBM Champion for IBM Collaboration Solutions (formerly, Lotus Software). Yesterday, 2013 class has been<a href="https://www-304.ibm.com/connections/blogs/socialbusiness/entry/december_10_2012_10_05_pm3?lang=en_us" target=_blank> announced</a> by our precious community manager Joyce Davis and my title has been renewed for 2013. <br /> <br /><img  alt="Image:Still part of IBM Champions Program!" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm/content/M2?OpenElement" /> <br /> <br />There are new champions on the list as well. But I am most delighted to see my dear friend, fellow founder of <a href="http://www.lotusturkiye.org" title="Turkish Lotus User Group">Turkish Lotus User Group</a> and neighbour Ferhat Bulut (with the well-deserved nick name: <a href=http://www.bestcoder.net/ target=_blank>bestcoder</a>!). <br /> <br />Ferhat is working for Akbank, one of the largest banks in Turkey and he is an expert on XPages. We know him from last year, as the developer of silver prize contribution at the <a href=http://xpages.info/contest target=_blank>OpenNTF Contest</a>. I'm frequently sending people to him suffering from XPages, web services or blackberry integration issues and he kindly helps many people in our local community in his free time. <br /> <br />Here is the list of people selected as IBM Champions. <br /> <br /><img  alt="Image:Still part of IBM Champions Program!" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm/content/M3?OpenElement" />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/still-part-of-ibm-champions-program.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/still-part-of-ibm-champions-program.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>6000 miles flight and I will speak at IBM Connect 2013...</title>
<pubDate>Mon, 10 Dec 2012 20:14:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm</link>
<category>Community</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm</guid>
<content:encoded><![CDATA[ Yes you heard right... <br /> <br /> One of two sessions I have submitted has been accepted. It will be a great excitement for me to speak at <a href=http://ibm.com/connect target=_blank><span style="text-decoration:underline">IBM Connect</span></a> for the first time, and also honored to do this with my dear friend <a href=http://bruceelgort.com/ target=_blank><span style="text-decoration:underline">Bruce Elgort</span></a> (and I might be the first speaker from Turkey... Not sure...). <br />  <strong><br /> Meet the Java Application Server You Already Own - Domino</strong> <br /> <br /> "<em>Java and in particular OSGi are now very important parts of the Notes/Domino app dev model. In this session you will learn about OSGi and how easy it is to extend the capabilities of your Domino server and XPages applications with the Domino OSGi Tasklet Services (DOTS). Whether you want to replace your existing agents with DOTS tasks or develop new services for your XPages apps utilizing the many Java libraries available - we will show you how.</em>" <br /> <br /> See you there... <br /> <br /> <img  alt="Image:6000 miles flight and I will speak at IBM Connect 2013..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm/content/M2?OpenElement" /><br /> <br /> <h6><em>Picture has been kindly stolen from Per Henrik</em></h6> <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/6000-miles-flight-and-i-will-speak-at-ibm-connect-2013....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>My first NotesIn9 show: Introduction to DOTS</title>
<pubDate>Tue, 4 Dec 2012 23:47:27 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/my-first-notesin9-show-introduction-to-dots.htm</link>
<category>Community</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/my-first-notesin9-show-introduction-to-dots.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/my-first-notesin9-show-introduction-to-dots.htm</guid>
<content:encoded><![CDATA[ Today, my first <a href=http://notesin9.com/ target=_blank>NotesIn9</a> show has been <a href="http://notesin9.com/index.php/2012/12/04/notesin9-093-introduction-to-dots/" target=_blank>released</a> :) <br /> <br />David Leedy is doing a great job in NotesIn9 video series. There are hours of videos, mostly on XPages. <br /> <br />Recently David announced an incredible project: "<a href="http://notesin9.com/index.php/2012/08/29/notesin9-event-drive-to-99/" target=_blank>Drive to 99</a>". The target is having 99 shows until the end of the year. Whole community responded well and many contributors created screencasts for Notes In 9. After weeks of procrastination, my video became ready as number 93 :) <br /> <br /><img  alt="Image:My first NotesIn9 show: Introduction to DOTS" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/my-first-notesin9-show-introduction-to-dots.htm/content/M2?OpenElement" /> <br /> <br />So my video is about DOTS. DOTS is a great addition to Domino Server. Domino OSGi Tasklet Service provides a service architecture for tasklets that are running at the OSGi-level. They can be considered as the next generation server side agents for XPages paradigm. Read my <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm" title="experimenting-dots-task-vs.-java-agent.htm" target="_blank">previous post</a> if you want to know why DOTS is so important... <br /> <br />This is an introduction for setting up runtime and development environments as well as building a simple hello world application. I hope you enjoy the <a href="http://notesin9.com/index.php/2012/12/04/notesin9-093-introduction-to-dots/" target=_blank>video</a>... <br /> <br />BTW, I really enjoyed screencasting. It is more difficult than blogging (in terms of preproduction effort) but I think you can deliver what you know much more easier. I will try to do it more in the future. <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/my-first-notesin9-show-introduction-to-dots.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/my-first-notesin9-show-introduction-to-dots.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Second Article is on The View: Custom Controls - Deep Dive into Parameterization</title>
<pubDate>Thu, 29 Nov 2012 21:23:10 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/second-article-is-on-the-view-custom-controls-deep-dive-into-parameterization.htm</link>
<category>Articles</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/second-article-is-on-the-view-custom-controls-deep-dive-into-parameterization.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/second-article-is-on-the-view-custom-controls-deep-dive-into-parameterization.htm</guid>
<content:encoded><![CDATA[ Finally, I have finished my second article "<a href=http://bit.ly/SszNqT target=_blank><strong><span style="text-decoration:underline">Custom Controls, Part 2 - Deep Dive into Parameterization</span></strong></a>" and it has been published on <a href=http://www.eview.com/ target =_blank><span style="text-decoration:underline">The View</span></a> magazine. <br />  <br /> This is the second part of the article "<a href=http://bit.ly/wZfzib target=_blank><strong><span style="text-decoration:underline">Custom Controls — Basic Concepts and Techniques for Getting Started</span></strong></a>" published before. <br /> <br /><div style="padding-left:20px; font-style:italic">Learn how to customize parameterization using property types and editors to provide a better development experience and increased readability for XPage developers. Find out how multi-value properties and grouping can handle some specific needs (e.g., list of values or logical groups) for parameterization. Also, get best practices on the programmatic use of custom property values.</div> <br /> <br />As a procrastinator, I'd like to thank my editor Julia Wiseman... I would have fired myself if I was an editor :)  <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/second-article-is-on-the-view-custom-controls-deep-dive-into-parameterization.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/second-article-is-on-the-view-custom-controls-deep-dive-into-parameterization.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Experimenting DOTS task vs. Java Agent</title>
<pubDate>Fri, 9 Nov 2012 19:45:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm</link>
<category>Development</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm</guid>
<content:encoded><![CDATA[ DOTS (Domino OSGi Tasklet Service) <a href="http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;name=OSGI%20Tasklet%20Service%20for%20IBM%20Lotus%20Domino" target=_blank><span style="text-decoration:underline">project</span></a> has been contributed into OpenNTF last year. Basically, it provides a way to create server tasks for Java developers. <br /> <br /> This is huge. Basically we could run our Java code in a similar way with a couple of other techniques, but DOTS provide many advantages. I'll dive deep on this in a seperate blog post. For now, take it as a teaser :) <br /> <br /> You can refer to <a href="http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-8RXCN2" target=_blank><span style="text-decoration:underline">Niklas's blog entry</span></a> to setup DOTS in your environment. <br /> <br /> For this experiment, I'm using an exploded version of <a href=http://xpagescheatsheet.com/ target=_blank><span style="text-decoration:underline">FakeNames database</span></a> by David Leedy. In the past, I have duplicated all contents for several times and I'm still using it to crash my server :) <br /> <br /> <img  alt="Image:Experimenting DOTS task vs. Java Agent" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm/content/M2?OpenElement" /><br /> <br /> First, I have created a '<em>terrible</em>' Java agent which does nothing. <br /> <br /> <pre>import java.util.Date; <br /> <br /> import lotus.domino.AgentBase; <br /> import lotus.domino.AgentContext; <br /> import lotus.domino.Database; <br /> import lotus.domino.Document; <br /> import lotus.domino.NotesException; <br /> import lotus.domino.Session; <br /> import lotus.domino.View; <br /> <br /> public class JavaAgent extends AgentBase { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void NotesMain() { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;try { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Session session = getSession(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;AgentContext agentContext = session.getAgentContext(); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Date startTime=new Date(); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Database db=getSession().getDatabase("", "test/fakenames.nsf", false); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;longJob(db); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;long duration=((new Date().getTime()) - startTime.getTime())/1000; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println("Finished in " + String.valueOf(duration) + " secs... - "); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} catch(Exception e) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;e.printStackTrace(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void longJob(Database db) throws NotesException { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int count=0; <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;View view=db.getView("byName"); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(view.getTopLevelEntryCount()); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int i=0; i &lt; view.getTopLevelEntryCount(); i++) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Document doc=view.getNthDocument(i); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(doc!=null) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(doc.getItemValueString("FirstName").startsWith("Sa")) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;count++; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;doc.recycle(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;view.recycle(); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(count); <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br /> }</pre> <br /> <br /> As I said before, it does nothing but counting people that has a first name starts with "Sa". So it does something, consume memory and CPU. Who cares :) <br /> <br /> Then I implemented the same code as a DOTS task: <br /> <br /> <pre>import java.util.Date; <br /> <br /> import lotus.domino.Database; <br /> import lotus.domino.Document; <br /> import lotus.domino.NotesException; <br /> import lotus.domino.View; <br /> <br /> import org.eclipse.core.runtime.IProgressMonitor; <br /> <br /> import com.ibm.dots.annotation.RunOnStart; <br /> import com.ibm.dots.task.AbstractServerTaskExt; <br /> import com.ibm.dots.task.RunWhen; <br /> <br /> public class AnnotatedTasklet extends AbstractServerTaskExt { <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;public AnnotatedTasklet() { <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void dispose() throws NotesException { <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp;@Override <br />  &nbsp; &nbsp; &nbsp; &nbsp;protected void doRun(RunWhen runWhen, IProgressMonitor monitor) &nbsp; &nbsp; &nbsp; &nbsp;throws NotesException { <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;@RunOnStart <br />  &nbsp; &nbsp; &nbsp; &nbsp;public void runOnStart( IProgressMonitor monitor ) throws NotesException { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Date startTime=new Date(); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Database db=getSession().getDatabase("", "test/fakenames.nsf", false); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;longJob(db); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;long duration=((new Date().getTime()) - startTime.getTime())/1000; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;logMessage("Finished in " + String.valueOf(duration) + " secs..."); <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp;public void longJob(Database db) throws NotesException { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;int count=0; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;View view=db.getView("byName"); <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(view.getTopLevelEntryCount()); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for(int i=0; i &lt; view.getTopLevelEntryCount(); i++) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Document doc=view.getNthDocument(i); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(doc!=null) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(doc.getItemValueString("FirstName").startsWith("Sa")) { <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;count++; <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;doc.recycle(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;} <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;view.recycle(); <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;System.out.println(count); <br />  &nbsp; &nbsp; &nbsp; &nbsp;} <br /> }</pre> <br /> <br /> Now, results: <br /> <br /> <pre>&gt; tell amgr run "test\XPagescrash.nsf" 'LongJobAgent' <br /> 09.11.2012 19:38:39 &nbsp; JVM: Java Virtual Machine initialized. <br /> 09.11.2012 19:38:39 &nbsp; AMgr: Start executing agent 'LongJobAgent' in 'test\XPagescrash.nsf' <br /> 09.11.2012 19:38:39 &nbsp; Agent Manager: Agent printing: 181349 <br /> 09.11.2012 19:41:02 &nbsp; Agent Manager: Agent printing: 2227 <br /> 09.11.2012 19:41:02 &nbsp; Agent Manager: Agent printing: Finished in 143 secs... - <br /> 09.11.2012 19:41:02 &nbsp; AMgr: Agent 'LongJobAgent' in 'test\XPagescrash.nsf' completed execution</pre> <br /> <br /> <pre>&gt; load dots <br /> &gt; Listening for transport dt_socket at address: 8001 <br /> &gt; WARNING: Using pde configuration New_configuration located in C:\Lotus\Domino\Data\domino\workspace-dots\pde.launch.ini <br /> 09.11.2012 19:42:40 &nbsp; Domino OSGi Tasklet Container started ( profile DOTS ) <br /> &gt; 181349 <br /> &gt; 2227 <br /> 09.11.2012 19:43:22 &nbsp; &#91;DOTS&#93; (annotated) Finished in 41 secs...</pre> <br /> <br /> You got the idea. The same Java routine runs in <strong>143 seconds</strong> as a <strong>Java agent</strong> and <strong>41 seconds</strong> as a <strong>DOTS task</strong>*. <br />  <br /> <br /><h6>(*) Clinical trials from Developi labs :)</h6>  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/experimenting-dots-task-vs.-java-agent.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/experimenting-dots-task-vs.-java-agent.htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Test platform for IBM Connections...</title>
<pubDate>Fri, 7 Sep 2012 12:52:43 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/test-platform-for-ibm-connections....htm</link>
<category>Development</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/test-platform-for-ibm-connections....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/test-platform-for-ibm-connections....htm</guid>
<content:encoded><![CDATA[ I've been in UKLUG lately. I heard lots of discussions about test platform for IBM Connections. <br /> <br />People who wants to implement new deployments, develop and test widgets or customize user interface, all need to install Connections. <br /> <br />So I just wanted to blog about my test platform. I'm currently doing some Connections business and my customers are expecting UI customization, error trapping, configuration changes, etc. Therefore, I have installed a full Connections image on my computer. <br /> <br />I am using Thinkpad T420, i5 2.4 Ghz CPU, 8 GB RAM, Windows 7 Professional installed, one SSD (for windows and apps) and another SATA disk for data and VM images.  <br /> <br />There is a Windows 2008 64 bit image on VMWare Player. 2 processor assigned with 4704MB RAM in this image. I have found this memory level by trial and error. Less memory kills the VM and more slows down my computer. As LDAP resource, I'm using a Domino server on my computer which I'm also using for XPages development. this configuration is working smoothly. Start, stop and restart times for Connections are acceptable. <br /> <br />Configuring networks is a bit tricky. I am using a NAT to provide internet connection for the VM and host-only connection to provide connectivity between my computer and the VM. <br /> <br />The only problem is that I have used Windows 2008 for this setup. You can use it for evaluation purposes around 180 days (you can extend standard evaluation time for a couple of times). It has been expired last week. It's still working with a black screen, but sure it's not legal to use it anymore. Therefore I have to reinstall it on a Linux image now. Linux will probably consume much less memory, so I strongly suggest using Linux. <br /> <br />Of course, you have to consider other legal things like test period for IBM Connections or installing Domino on your local workstation etc. <br /> <br />Currently, I'm using the test server for pretty much everything and quite happy about its performance. Alternatively, Niklas is <a href=http://heidloff.net/home.nsf/dx/02.08.2012081928NHE9F9.htm target=_blank>providing a Connection image</a> to be used on OpenNTF projects. You can also use IBM cloud environment for a little payment, as a test platform. <br /> <br />Hope this helps.  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/test-platform-for-ibm-connections....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/test-platform-for-ibm-connections....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Really don&#8217;t care...</title>
<pubDate>Mon, 27 Aug 2012 11:38:01 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/really-dont-care....htm</link>
<category>Activity</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/really-dont-care....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/really-dont-care....htm</guid>
<content:encoded><![CDATA[ IBM finally decided to announce that the last major yellow word in the community has changed... Lotusphere event has been renamed as "<a href="http://www-01.ibm.com/software/collaboration/events/connect/" target=_blank><span style="text-decoration:underline">IBM Connect</span></a>" and Lotusphere has become a sub-event or so now. <br />  <br /> Shocked? No... <br /> <br /> Expected? Yes... <br /> <br /> IBM has been working on this transition for a couple of years. First, Lotus name has been removed from internal department hierarchy, then from some major products like Connections or Sametime. Last year Lotusphere 2012 was not yellow anymore. While, in spite of my expectations, Notes/Domino family is still 'Lotus' branded but sure, it will be renamed in a couple of years. <br /> <br /> So what? <br /> <br /> The only problem I'm having with the rebranding is that it's going so slow. I think that these kind of changes should be realised in one stroke. Of course it's not a clear way to rebrand a complete product tree, but Lotus is a special product because of its community. For more than a year, one of the the most discussed topics has been this rebranding issue. IMHO, this discussion is so unnecessary and real waste of time. We have all experienced some denial and some anger but the change was inevitable. <br /> <br /> Now what? <br /> <br /> The rebranding phase is almost over. We are all sleeping, waking up, talking and thinking inside a bubble. It is time to think out of this yellow bubble.But now, it should be an oppurtunity for all of us. <br /> <br /> If you are old enough, you would remember how IBM survived near-bankruptcy-experience in 90s. Gerstner has made a very important move in IBM's point of view. It wasn't important to market names and products anymore, instead, IBM started to sell what the customer was looking for: <strong>Solution</strong>.... <br /> <br /> I am a business partner and I can only sell Domino or XPages or Sametime to a bunch of professionals who like yellow color as much as me. Companies need solutions that fit to their needs. They will need a web application development framework capable to integrate with numerous systems. None of CIOs will care if it's yellow or based on Java. <br /> <br /> At the end of the day, I don't care the name... <br /> <br /> Let's concentrate on the customer again. <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/really-dont-care....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/really-dont-care....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Five weeks of Yammer experience...</title>
<pubDate>Fri, 27 Jul 2012 22:30:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm</link>
<category>Cloud Computing</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm</guid>
<content:encoded><![CDATA[ I'm an author in an additional blog for more than a year. As a scientific skeptic blog, we are posting articles or short entries about hoaxes, legends, pseudo-science, alternative medicine, bad science news and similar stuff. <br /> <br /> At the begining of this year, we have invited more authors to the group and we have become a micro-community. While we were using Google Groups, after a couple of weeks, it became a serious problem for group members to engage the discussion due to the e-mail over-loading. <br /> <br /> Sometimes someone post an idea, news article or a research into a group to start the discussion. After replies and replies to replies (!), my friends (especially those are not monitoring messages every minutes like me!) are getting crazy about massive number of messages every day without any clue about which has been answered or not... <br /> <br /> Two months ago we have decided to look for something else. We might create a private page on Facebook but we are all using FB in our private lives. While preventing e-mail over-loading, Facebook would cause an 'notification-overloading' for us. I have tested some other alternatives like <a href=http://asana.com/ target=_blank><span style="text-decoration:underline">Asana</span></a>, <a href=http://hall.com/ target=_blank><span style="text-decoration:underline">Hall </span></a>and <a href=http://podio.com/ target=_blank><span style="text-decoration:underline">Podio</span></a>. Asana and Podio are too GTD-centric (getting things done) and Hall is just an alternative for Skype persistent chats (BTW, it's great, you should test it!). <br /> <br /> I came up with the <strong>Yammer</strong> idea. While speculations about a possible Microsoft acquisition were everywhere around the web, I was really curious about what it is like. After a short testing period, we have decided to go with it. I have registered a network for my own company and created an external network (this is the only way if you want to invite people with different e-mail domains). <br /> <br /> <img  alt="Image:Five weeks of Yammer experience..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm/content/M2?OpenElement" /><br /> <strong><br /> So what is it? </strong><br /> Many people are describing IBM Connections as a <em>corporate Facebook</em>. After seeing Yammer, this definition seems to be ridiculous to me. Because Yammer is a <em>copy-cat</em> of the Facebook. The visual and functional experience is almost the same as Facebook (But you can change its color!). I think a set of useful tools are coming with the paid version but I'd never pay for a private facebook :) <br /> <br /> It really helped us. Especially desktop and mobile clients are more used than the web site. We can engage our discussion easily, share articles or files and work on new blog entries (even in real time). <br /> <br /> <img  alt="Image:Five weeks of Yammer experience..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm/content/M3?OpenElement" /><br /> <strong><br /> About its shortcomings...</strong> <br /> At the beginning, we have experienced a serious problem on connection speed. It was really slow (especially from Turkey). However, for a week or so, it seems that the speed problem has been resolved. Web site and mobile application work faster. Since the desktop application has been developed using Adobe Air; it is still slow... <br /> <br /> The biggest problem is the notification. Sometimes it creates false signals about notifications and sometimes it skips. Desktop application notification is a silent small window appearing a couple of seconds on the screen and it cannot be customized, mobile notifications are not stable, etc. <br /> <br /> It might not be preferred for big companies but in our case, we want to be notified about every conversation in the network which is not the case (or I couldn't find a related configuration). You can select people to be notified in conversations but there is no option to notify all users in the network. There is an announcement option but it's not a part of standard conversation stream, instead more useful for meeting alerts and so forth. I found interesting issues like when I create a page, it doesn't notify people unless I create a conversation. Clearly, Yammer tries to reduce information over-loading but it should be more customizable. <br /> <br /> <img  alt="Image:Five weeks of Yammer experience..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm/content/M4?OpenElement" /><br /> <br /> Another problem is that Yammer has no any task/todo mechanism. I cannot think of any social platform without some level of '<em>get things done</em>' stuff. So we are currently unable to drop Asana. <br /> <strong><br /> Comparing to IBM Connections or SmartCloud solutions...</strong> <br /> Yammer is definitely more smooth from an end-user perspective. Comparing to the current versions of social platforms in SmartCloud or Connections, the usability is better. Of course, the most important reasons are its simplicity and similarity to Facebook. <br /> <br /> On the other hand, IBM solutions are far more capable than Yammer. Activities, Files and Blogs provide an important difference in functionality. I don't have paid version so I can't decide how much customization it allows for profiles, authentication, user directory, e-mail notifications and UI customization, but since it's a cloud-only solution, it would be similar to SmartCloud services. <br /> <br /> Absense of desktop application in Connections portfolio is a problem. In addition, Connections mobile application is not conversation-centric, so it would be unfair to compare with Yammer's mobile app. <br /> <br /> I should also underline that Yammer differs in style. It is a conversation-centric application. Information (files and contents) and categorization are not selected as a top priority. <br /> <br /> <img  alt="Image:Five weeks of Yammer experience..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm/content/M5?OpenElement" /><br /> <br /> <br /> At the bottom point, Yammer is still an ideal solution for smaller companies that need lots of <strong>micro-community interaction</strong>. We are using Yammer as a huge chat room, nothing more. Those who need more functionality like e-mail, files, forms etc; they will have to skip Yammer for now. <br /> <br /> I am curious about what Microsoft will change in Yammer in the future to adapt it to big companies. The current version will probably be integrated into Office365 and Skype but I can't imagine how it will affect Microsoft's directions in the Sharepoint product. <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/five-weeks-of-yammer-experience....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/five-weeks-of-yammer-experience....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Six long weeks...</title>
<pubDate>Mon, 4 Jun 2012 11:35:09 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/six-long-weeks....htm</link>
<category>Blog</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/six-long-weeks....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/six-long-weeks....htm</guid>
<content:encoded><![CDATA[ Six weeks passed since my last post... <br /> <br />I have worked on XSnippets (<a href="http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-8UA9FZ" target=_blank>OpenSearch support</a>), xInvolve (<a href="http://www.openntf.org/blogs/openntf.nsf/d6plinks/NHEF-8UC9Y2" target=_blank>Version 2.0 released</a>) and a new OpenNTF project named <a href="http://www.openntf.org/internal/home.nsf/project.xsp?action=openDocument&amp;name=VeryShort" target=_blank>VeryShort</a>... <br /> <br />Not much time left for blogging. I'll make up for it :) <br /> <br />Stay tuned... <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/six-long-weeks....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/six-long-weeks....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Completely unacceptable &#8217;Theft&#8217; by LotusLearns company...</title>
<pubDate>Sat, 21 Apr 2012 11:29:07 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm</link>
<category>Blog</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm</guid>
<content:encoded><![CDATA[ I am blogging for more than two years. It's like a part-time job. I am doing this sacrificing my 'life' and 'time'. Many people attribute me and this is a great pleasure...  <br /> <br />But sharing my ideas or knowledge on the WEB doesn't mean that people can <strong>steal</strong> them '<strong>COMPLETELY</strong>' without my approval <strong>even with an attribution</strong>! <br /> <br />Yes, I have used the word "<strong>stealing</strong>" on purpose. Because this is what LotusLearns.com is doing! Kelley Smith, CEO of this company claims that she is doing this for Africans! Really! <br /> <br />For instance; <br /> <br /><img  alt="Image:Completely unacceptable &#8217;Theft&#8217; by LotusLearns company..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm/content/M2?OpenElement" /> <br />This has been <strong>stolen</strong> from my <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/going-to-xpages-discover-disabilities-based-development....htm" title="going-to-xpages-discover-disabilities-based-development....htm" target="_blank">article</a> and there is no attribution for that. Only a link above. Again no attribution on the bottom! <br /> <br /><img  alt="Image:Completely unacceptable &#8217;Theft&#8217; by LotusLearns company..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm/content/M3?OpenElement" /> <br /> <br />Even there was an attribution, RSS feeds don't provide a right to 'COPY' all contents. Many authors that have stolen articles in this site are not providing full articles on their RSS feeds. And Looking the structure of contents, we can easily see that these are not 'automatically' constructed. They have been edited one by one. <br /> <br />This is clear <strong>theft</strong>. <br /> <br />...and I am not alone; <br /> <br />Nathan T. Freeman: <a href="http://ntf.gbs.com/nathan/escape.nsf/d6plinks/NTFN-8TJS4G" target=_blank>LotusLearns that stealing web content is shameful</a> <br />Kathy Brown: <a href="http://www.runningnotes.net/index.php/2012/04/20/how-to-piss-people-off-lotuslearns/" target=_blank>How To Piss People Off – LotusLearns</a> <br />Bill Malchisky: <a href=http://www.billmal.com/billmal/billmal.nsf/dx/04202012110012PMWMA5JQ.htm target=_blank>LotusLearns -- The Good, The Bad, and Yes, It’s Ugly (Underneath)</a> <br />Chris Miller: <a href="http://www.idonotes.com/IdoNotes/idonotes.nsf/dx/lotuslearns-might-be-using-your-content-without-permission-beware.htm" target=_blank>LotusLearns.com might be using your content without permission - beware</a> <br />Thomas Duff: <a href="http://www.duffbert.com/duffbert/blog.nsf/d6plinks/TADF-8TK2LH" target=_blank>If your blog content appears on PlanetLotus, LotusLearns.com is likely infringing on your copyright...</a> <br />Jesse Gallagher: <a href=http://frostillic.us/f.nsf/posts/26F88986C5D052CA852579E60078BFC8 target=_blank>LotusLearns did a poor job copying my post</a> <br />Tim Tripcony: <a href="http://xmage.gbs.com/blog.nsf/d6plinks/TTRY-8TJSRD" target=_blank>LotusLearns wants you to think my content is theirs</a> <br /> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/completely-unacceptable-theft-by-lotuslearns-company....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/completely-unacceptable-theft-by-lotuslearns-company....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>OpenSearch functionality for XPages.info...</title>
<pubDate>Mon, 16 Apr 2012 12:20:00 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm</link>
<category>Community</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm</guid>
<content:encoded><![CDATA[ Today we have added a very simple feature to <a href=http://xpages.info/ target=_blank>XPages.info</a> site. It provides an integrated search functionality to be used with browsers. <br /> <br />Here how to use it: <br /> <br /><strong>For Chrome:</strong> <br /> <br />1. Open <a href=http://xpages.info/ target=_blank>xpages.info</a> site once. <br />2. Close your browser, reopen and at the address bar, start writing "xpages". Depending on how frequent you are using xpages.info, it will suggest the address in the bar. For me, "x" character is enough :) <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M2?OpenElement" /> <br /> <br />3. Now you see a new instruction in the address bar: "Press Tab to search XPages". Do what it says :) <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M3?OpenElement" /> <br /> <br />4. Press enter to see the search results related with your keyword: <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M4?OpenElement" /> <br /> <br /><strong>For Firefox:</strong> <br /> <br />1. Open <a href=http://xpages.info/ target=_blank>xpages.info</a> site. <br />2. Open Search Engine alternatives on the right and click "Add XPages.info" option. <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M5?OpenElement" /> <br /> <br />3. Now XPages.info has been added to Firefox registered search engines. To use it more practically, Click "Manage Search Engines" here. <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M6?OpenElement" /> <br /> <br />4. Select our search engine, click "Edit Keywords" and enter a new keyword like "xp" here. Click OK to close this dialog. <br /> <br />5. Now go to a new window and enter "<strong><em>xp dynamic content</em></strong>" into the address bar... Voila! <br /> <br />I couldn't find a similar way to do this in Internet Explorer 9. If you know, please comment :) <br /> <br /><strong>How we did it?</strong> <br /> <br />It's pretty easy! You need to add two things to your database. First an XML file definition for opensearch: <br /> <br /><pre>&lt;OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/" xmlns:moz="http://www.mozilla.org/2006/browser/search/"&gt; <br />&lt;ShortName&gt;XPages&lt;/ShortName&gt; <br />&lt;Description&gt;XPages.info Search&lt;/Description&gt; <br />&lt;InputEncoding&gt;UTF-8&lt;/InputEncoding&gt; <br />&lt;Url type="text/html" method="get" template="http://xpages.info/XPagesHome.nsf/SearchResults.xsp?search={searchTerms}"/&gt; <br />&lt;/OpenSearchDescription&gt;</pre> <br /> <br />You can also add some more properties here such as an icon to show in the search engine listing. <br /> <br />We put this xml files into File Resources section of our database. Then we added a resource definition into the HEAD section of our home page: <br /> <br /><img  alt="Image:OpenSearch functionality for XPages.info..." border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm/content/M7?OpenElement" /> <br /> <br />That's all! <br /> <br />Now I have two To-Do's for myself. I'll try to extend search functionality of XPages.info to provide single point of search for XPages-specific information. <br /> <br />The second To-Do is adding this to <a href=http://openntf.org/xsnippets target=_blank>XSnippets</a>. I noticed that searching snippets is not practical in the current situation. <br /> <br />OpenSearch provides much more possibilities than this. You can visit <a href=http://www.opensearch.org/Home target=_blank>OpenSearch.org</a> for more information... <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/opensearch-functionality-for-xpages.info....htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/opensearch-functionality-for-xpages.info....htm?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>&quot;Dotless i&quot;, toLowerCase and toUpperCase functions: Use responsibly!</title>
<pubDate>Thu, 5 Apr 2012 18:40:03 +0300</pubDate>
<link>http://lotusnotus.com/lotusnotus_en.nsf/dx/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm</link>
<category>Development</category>
<dc:creator>Serdar Basegmez</dc:creator>
<comments>http://lotusnotus.com/lotusnotus_en.nsf/dx/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://lotusnotus.com/lotusnotus_en.nsf/dx/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm</guid>
<content:encoded><![CDATA[ "Dotless i" problem is the most profitable area in my revenue stream :) <br /> <br /> Since the beginning of my career, I found and isolated dozens of bugs simply related to 'dotless-i'. <br />  <br /> I have already blogged about it couple of times, but let me sum up the problem. <br /> <br /> There are Turkish characters in our language, as in many others. But two exceptional cases are "ğ" (curved g) and "ı/İ" (dotless-i/dotted-I) characters. The first one is a whole different story that some linguistic experts discuss its necessity. The second one is a serious headache for us. <br /> <br /> <img  alt="Image:&quot;Dotless i&quot;, toLowerCase and toUpperCase functions: Use responsibly!" border="0" src="http://lotusnotus.com/lotusnotus_en.nsf/dx/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm/content/M2?OpenElement" /><br /> Dotless-i, is a lowercase 'i' without dot. The uppercase of this character is the usual "I". There is another character, "I with dot". The lowercase of this character is the usual lowercase "i". <br /> <br /> Have you noticed the problem? This unsymetrical conversion causes a serious problem in programming. We face this problem mostly in Java applications because of (IMHO) poor implementation of toLowerCase and toUpperCase functions. <br /> <br /> In Java, String.toLowerCase() method converts characters to lowercase <strong>according to the default locale</strong>. This causes problems if your application works in Turkish locale and especially if you are using this function for a file name or a url that must obey a certain character set. <br /> <br /> I have blogged about two serious examples before: <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/mystery-solved-error-loading-use-or-uselsx-module.htm" title="mystery-solved-error-loading-use-or-uselsx-module.htm" target="_blank">The compile errors with Script libraries with "i" in their names</a> and <a href="http://lotusnotus.com/lotusnotus_en.nsf/dx/its-classical-also-awful-xpages-is-running-java-huh.htm" title="its-classical-also-awful-xpages-is-running-java-huh.htm" target="_blank">XSP Manager's fault if an XPage is in a database with "I" in its name</a>. <br /> <br /> There is a long history, as I said. For instance in some R7 version, router was unable to send a message to a recipient if his/her name starts with "I". Message reporting agents was not running in Turkish locale until R8. Anyone with Turkish locale could not install Lotus Notes 8.5.1 (it's real!). The list goes on... <br /> <br /> There is almost no beta tester from Turkey and customers don't open PMR for these problems. So these problems are not going up to the first priority for development teams. <br /> <br /> Even Java team has added a special warning to the latest documentation: <br /> <br /> <blockquote><strong>Note:</strong> This method is locale sensitive, and may produce unexpected results if used for strings that are intended to be interpreted locale independently. Examples are programming language identifiers, protocol keys, and HTML tags. For instance, "TITLE".toLowerCase() in a Turkish locale returns "t?tle", where '?' is the LATIN SMALL LETTER DOTLESS I character. To obtain correct results for locale insensitive strings, use toLowerCase(Locale.ENGLISH).</blockquote> <br /> <br /> My point is to give a simple suggestion for all Java programmers. <br /> <br /> If you are using toLowerCase and toUpperCase function for non-textual context, use them as suggested above! <br /> <br /> Use responsibly :) <br />   ]]></content:encoded>
<wfw:commentRss> http://lotusnotus.com/lotusnotus_en.nsf/dxcomments/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm</wfw:commentRss>
<wfw:comment> http://lotusnotus.com/lotusnotus_en.nsf/dx/dotless-i-tolowercase-and-touppercase-functions-use-responsibly.htm?opendocument&amp;comments</wfw:comment>
</item>
</channel></rss>
