<?xml version="1.0" encoding="ISO-8859-1"?>
<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>In Theory...</title>
<description>Bob Balaban&#8217;s Blog</description>
<link>http://www.bobzblog.com/tuxedoguy.nsf/</link>
<language>en-us</language>
<lastBuildDate>Tue, 26 Jan 2010 14:00:00 -0400</lastBuildDate>
<item>
<title>I will be speaking at &quot;EntwicklerKamp&quot;, March 8-10, 2010</title>
<pubDate>Tue, 26 Jan 2010 14:00:00 -0400</pubDate>
<description>
<![CDATA[ 
Greetings Geeks! Gelsenkirchen is in Germany, not far from Dusseldorf. This will be my first appearance at this event, and I've heard great things about it, both from speakers and attendees, so I'm ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/i-will-be-speaking-at-entwicklerkamp-march-8-10-2010</link>
<category>I will be showing up</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/i-will-be-speaking-at-entwicklerkamp-march-8-10-2010?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/i-will-be-speaking-at-entwicklerkamp-march-8-10-2010</guid>
<content:encoded><![CDATA[ Greetings Geeks!  <br /> <br />Gelsenkirchen is in Germany, not far from Dusseldorf. This will be my first appearance at this event, and I've heard great things about it, both from speakers and attendees, so I'm excited to finally be able to go myself.<br /> <span style="text-decoration:underline"><br /> </span><a href=http://www.entwicklercamp.de/EntwicklerCamp/Home><span style="text-decoration:underline">http://www.entwicklercamp.de/EntwicklerCamp/Home</span></a> (Currently the site is mostly in German only, though some of the speakers will be presenting their sessions in English) <br /> <br /> My topics will be:<br /> Real-world Web Services (what happens when you sail beyond the edge of the documented world)<br /> Advanced Programming with Notes/Domino COM classes (stuff you NEVER thought you could do from .NET or even C++ programs)  <br /> <br />Geek ya later!  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/i-will-be-speaking-at-entwicklerkamp-march-8-10-2010</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/i-will-be-speaking-at-entwicklerkamp-march-8-10-2010?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Everybody: February 14, 2037 at 1:30pm (plus or minus)</title>
<pubDate>Sun, 24 Jan 2010 14:00:00 -0400</pubDate>
<description>
<![CDATA[ 
Greetings Geeks! This might sound stupid, but bear with me before making up your m ind. I was fortunate to have the opportunity to present a Lotusphere10 session on the Best Practices track with m ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/everybody-february-14-2037-at-130pm-plus-or-minus</link>
<category>Everything will be done</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/everybody-february-14-2037-at-130pm-plus-or-minus?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/everybody-february-14-2037-at-130pm-plus-or-minus</guid>
<content:encoded><![CDATA[ Greetings Geeks! <br /> <br /> This might sound stupid, but bear with me before making up your m ind. <br /> <br /> I was fortunate to have the opportunity to present a Lotusphere10 session on the Best Practices track with my friend and colleague,<a href=http://www.pmooney.net/><span style="text-decoration:underline"> Paul Mooney</span></a>, titled "Meet the Grumpies: Eschew Obfuscation". A PDF of the slides we used (there aren't many of them, as most of the session was ad-lib or audience Q&amp;A) are posted below. Most of the session was devoted to people (initially myself and Paul, but then audience members chimed in too) offering up things that made them grumpy. Not just any things, but things related to software development, admin and deployment. Even the sound guy at the back of the room mentioned that speakers who ask him to do things he hasn't been told about in advance make him grumpy. And rightly so, sorry! <br /> <br /> One of the topics that came up as grumpy-making was unrealistic deadlines set by managers who are running to schedule, not to functionality or quality. Especially when they keep asknig: "When will it be done". So I offered a possible reply. Just say "It will be done on February 14th, 2037, at 1:30 PM, plus or minus". Then it was suggested (from the audience) that EVERYONE (yes, including you) should use this as the canonical "when it will be done" date. I just love that idea (note that the "plus or minus" gives you huge flexibility on actually getting the work done). <br /> <br /> So, remember this date, when (I guess) EVERYTHING will be "done": <strong>14 Feb., 2037, 1:30pm (local time, plus or minus)</strong> <br /> <br /> To be somewhat more responsible, let's note that a REAL technique for dealing with this unhappy situation is to set many, short-term deadlines, rather than rely on one "Everything is done" deadline (after all, your definition of "done" may not be the same as your manager's). For example, if you're a developer working on a new piece of software, set milestones for "spec complete", "design complete", "first working demo", "UI frozen", "first draft of documentation" (hoo hah!), etc. <br /> <br /> Geek ya later! <br /> <br /> <a href="http://bobzblog.com/tuxedoguy.nsf/dx/BP201-Meet -The Grumpies- Eschew Obfuscation.pdf/$file/BP201-Meet -The Grumpies- Eschew Obfuscation.pdf" title="BP201-Meet -The Grumpies- Eschew Obfuscation.pdf"BP201-Meet -The Grumpies- Eschew Obfuscation.pdf/>BP201-Meet -The Grumpies- Eschew Obfuscation.pdf</a>   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/everybody-february-14-2037-at-130pm-plus-or-minus</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/everybody-february-14-2037-at-130pm-plus-or-minus?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Never done this before....</title>
<pubDate>Sat, 23 Jan 2010 09:48:38 -0400</pubDate>
<description>
<![CDATA[ 
Greetings Geeks! Everyone recovered from Lotusphere yet? I may do a #LS10WrapUp post over this weekend (or I may not), but for now I'm breaking new ground: a rare blog post with no technical content ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/never-done-this-before....</link>
<category>music</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/never-done-this-before....?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/never-done-this-before....</guid>
<content:encoded><![CDATA[ Greetings Geeks! <br /> <br />Everyone recovered from Lotusphere yet? I may do a #LS10WrapUp post over this weekend (or I may not), but for now I'm breaking new ground: a rare blog post with no technical content or Lotus/IBM-related news. I just felt like telling you about a song I really like. <br /> <br />I picked up on Flogging Molly's "The Worst Day Since Yesterday" on an episode of "StarGate/Universe". You can hear the music<a href="http://www.youtube.com/watch?v=sDSud7vAH_0&amp;feature=PlayList&amp;p&iacute;7A5BA9187EAFAF&amp;index=0&amp;playnext=1"> here</a>. (We won't go into the sexist nature of the group's name now. Maybe another time).  <br /> <br />Disclaimers: this topic has nothing to do with Lotusphere, my trip home, Lotus, IBM or anything else. I just like the song. <br /> <br />Geek ya later! <br /> <br /> <br /> <br /> <br />  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/never-done-this-before....</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/never-done-this-before....?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>&quot;First Question&quot; &#64;Lotusphere?? Vote now!</title>
<pubDate>Thu, 7 Jan 2010 16:40:35 -0400</pubDate>
<description>
<![CDATA[ 
Greeings, Geeks! Lotusphere2010 is just around the corner (festivities begin on Sunday the 17th, at Disney World, FL). Those among you who are repeat collaborators (i.e., have been to a few recent Lo ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/first-question-lotusphere-vote-now</link>
<category>IBM</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/first-question-lotusphere-vote-now?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/first-question-lotusphere-vote-now</guid>
<content:encoded><![CDATA[ Greeings, Geeks! <br /> <br />Lotusphere2010 is just around the corner (festivities begin on Sunday the 17th, at Disney World, FL). Those among you who are repeat collaborators (i.e., have been to a few recent Lotuspheres) may know that on the final day of the conference (Thursday, Jan. 21st this year), Lotus puts a bunch of real live developers on stage, and lets the audience ask questions about the products. The session is called "Meet the Developers" officially, though when I worked at Lotus/Iris (quite a while ago, now) we called it "Beat the Developers". <br /> <br />Those of you who have been to a few of these sessions, and who have been paying attention, may remember that it has become a kind of unofficial tradition that I have asked the first question of the session. This has noathing to do with getting favored treatment from Lotus or anything -- I have just been lucky at getting there early and positioning myself at the right microphone (there are usually 3 in the room) to be called upon first (Note: Last year -- LS09 -- Brent Peters, who had taken over moderating the session from Kevin Cavanaugh, violated "tradition" and started the questions from the *wrong* microphone, so I (technically) did not get the First Question. I think I got the Third Question. I hope Brent will get his act together better this year and do it right). <br /> <br />Now, to the point! I've been pondering what my Question (whether it's the first one or not) should be. For the past many (I forget how many, maybe 5?) it's been all aobut the LSX Toolkit (read about the saga <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/huzzah-new-lsx-toolkit-is-posted-part-1">here</a>). For various reasons, I have decided (really, do NOT try to change my mind about this) that this year, I will NOT ask about the LSX Toolkit. Done. Finito. No Longer Of Interest. Boring, even. <br /> <br />So, having made that decision, I said to myself: "Self! What should my Question be instead??" I have a few ideas, but I want to open the topic up to The Geekdom in general. <br /> <br />GEEKS: What do YOU think my Question (whether it be the First one or not) should be about? This is a family-oriented blog, so refrain from foul language in your responses, please. I promise to seriously consider all sincere entries. The criteria I care most about are: <br /> <br />a) Not BORING  <br />2) NOT LSX Toolkit-related <br />iii) I'll consider topics related to DXL, but I find this fairly boring now, so it would have to be *good* to win <br />d) No personal attacks on actual people will be considered (even Paul Mooney or Bill Buchan), after all, we're all friends here. "Attacks" (legitimate criticism) on products is fair game <br />5) Please, no marketing-blah-blah-blah <br />vi) Better if it's something a lot of people care about <br />g) I'll consider both admin and dev topics, but everyone knows i am biased towards dev <br /> <br />So, go forth and cogitate! <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/coming-to-lotusphere-2010-meet-the-grumpies">Eschew obfuscation</a>! <br /> <br />Geek ya later! <br /> <br />PS: YES! I will be giving away "Lotusphere Veteran" buttons. They are currently in production. Quantities limited, you have to meet strict standards to get one: You have to ask for one, and you have to (truthfully, I hope) answer one question: "How many Lotuspheres have you attended?" Honor system, no real consequences (other than to your karmic destiny) if you lie, but don't. <br />  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/first-question-lotusphere-vote-now</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/first-question-lotusphere-vote-now?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Update on US COBRA health insurance subsidies</title>
<pubDate>Fri, 25 Dec 2009 00:03:13 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! Last April I published some info in this bloc about how people (US residents) who had been laid off and who had adopted the COBRA insurance continuation plan could receive a US Gov ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/update-on-us-cobra-health-insurance-subsidies</link>
<category>COBRA</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/update-on-us-cobra-health-insurance-subsidies?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/update-on-us-cobra-health-insurance-subsidies</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> Last <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/relief-for-the-cobra-bite?opendocument"><span style="text-decoration:underline">April I published</span></a> some info in this bloc about how people (US residents) who had been laid off and who had adopted the COBRA insurance continuation plan could receive a US Government subsidy of their monthly premiums. <br /> <br /> At the time, the subsidies were only for a maximum of 9 months, most peoples' (including mine) expired at the end of November, meaning that the December premium went back up to full rate. <br /> <br /> However! The US Congress recently passed an extension to the subsity program. This was not related to the "health care reform bill" passed by the US Senate yesterday, it's a different bill. What I heard on the news is that the extension is valid for an additional &nbsp;6 months, although I'm not completely sure about that. <br /> <br /> I phoned the administrator of my COBRA plan, and the nice lady I talked to there said she knew about the extension, and that they were working on implementing the change to their billing systems. In my case (YMMV) this means that I have to pay the full amount for a couple of months, then when they get caught up with the new law, they'll credit the amount of the subsidy for the months I've already paid to future payments. <br /> <br /> This is great news, the subsidy is worth a lot of money (to me, anyway). Of course, remember that COBRA plans in general are only valid for 18 months, after which you have to go get another provider, or signup for another plan (either through a new employer, if you have one, or individually). <br /> <br /> As always, don't take anything I say about this (or anything!) as gospel. Check it out for yourselves. <br /> <br /> Merry Christmas to all, and a Happy New Year. And remember: "War is over, if you want it." (John Lennon). <br /> <br /> Geek ya later!   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/update-on-us-cobra-health-insurance-subsidies</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/update-on-us-cobra-health-insurance-subsidies?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Coming to Lotusphere 2010? Meet The Grumpies!</title>
<pubDate>Wed, 16 Dec 2009 09:02:14 -0400</pubDate>
<description>
<![CDATA[ 
Greetings Geeks! If you will be attending Lotusphere 2010 (January 17-21), make sure to come by the session I am pressenting with Paul Mooney: BP201 Meet &#8220;The Grumpies&#8221;: Eschew Obfuscatio ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/coming-to-lotusphere-2010-meet-the-grumpies</link>
<category>Lotusphere</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/coming-to-lotusphere-2010-meet-the-grumpies?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/coming-to-lotusphere-2010-meet-the-grumpies</guid>
<content:encoded><![CDATA[ Greetings Geeks! <br /> <br />If you will be attending<a href=http://www.lotusphere.com> Lotusphere 2010</a> (January 17-21), make sure to come by the session I am pressenting with <a href=http://www.pmooney.net/pmooney/pmooneynet.nsf>Paul Mooney</a>:  <br /> <br />BP201 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Meet &#8220;The Grumpies&#8221;: Eschew Obfuscation! &nbsp;  <br />Wednesday, 8:30am, Dolphin Northern A-C <br />Who are they? They&#8217;re a group of very, very experienced Notes/Domino Admins and Developers, who love the product, warts and all, and know it very, very well. Speakers Balaban (dev) and Mooney (admin) will debate tactics, techniques, testing and best practices in general, and they will welcome a few special guests to do the same. Much of this session will be open Q&amp;A, but don&#8217;t ask for an opinion unless you want an honest (and maybe grumpy) answer! You will learn to recite The Grumpies&#8217; motto: &#8220;Be positive when possible, be &nbsp;grumpy when necessary.&#8221;<br />  <p>We'll also be graced by the presence of a couple of "guest Grumpies". You'll hear about what we like, and what makes us grumpy. You'll have a chance to ask lots of questions and maybe even rant on a bit about what makes <em>you</em> grumpy. Hope to see you there. <p>Geek ya later! <p>  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/coming-to-lotusphere-2010-meet-the-grumpies</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/coming-to-lotusphere-2010-meet-the-grumpies?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>New &quot;Admin Bootcamp&quot; announced for Lotusphere10</title>
<pubDate>Fri, 4 Dec 2009 20:45:57 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! Lotusphere10 approacheth! There are lots of cool sessions and activities beyond the usual terrific content. One of the new "programs" being piloted this year is something called "Ad ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/new-admin-bootcamp-announced-for-lotusphere10</link>
<category>Lotusphere</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/new-admin-bootcamp-announced-for-lotusphere10?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/new-admin-bootcamp-announced-for-lotusphere10</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br />Lotusphere10 approacheth! There are lots of cool sessions and activities beyond the usual terrific content. One of the new "programs" being piloted this year is something called "Admin Bootcamp". Basically, it's a selection of 4 2-hour Jumpstart sessions, all delivered in the same room on Lotusphere Sunday, and all on admin topics. <br /> <br />There will be lots of other Jumpstart sessions available on Sunday, and also a few "Show And Tell" sessions, all of which will be 2-hours long. <br /> <br />Here's a link to the Admin Bootcamp description on the IBM Lotusphere site: <a href="http://www-01.ibm.com/software/lotus/events/lotusphere2010/admin-boot-camp.html">http://www-01.ibm.com/software/lotus/events/lotusphere2010/admin-boot-camp.html.</a> <br /> <br />Hope to see you there <br /> <br />Geek ya later...  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/new-admin-bootcamp-announced-for-lotusphere10</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/new-admin-bootcamp-announced-for-lotusphere10?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Lotusphere Idol submisssions are re-opened!! Want to be a Lotusphere speaker?</title>
<pubDate>Mon, 23 Nov 2009 22:35:20 -0400</pubDate>
<description>
<![CDATA[ 
Greetings Geeks! I was fortunate enough to be a judge in the first 2 Lotusphere Idol contests (Lotusphere 08 and 09). Here's the deal: You give a 5 minute slice of a presentation. If you win, you get ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/lotusphere-idol-submisssions-are-re-opened</link>
<category>Lotusphere</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/lotusphere-idol-submisssions-are-re-opened?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/lotusphere-idol-submisssions-are-re-opened</guid>
<content:encoded><![CDATA[ Greetings Geeks! <br /> <br />I was fortunate enough to be a judge in the first 2 Lotusphere Idol contests (Lotusphere 08 and 09). Here's the deal: You give a 5 minute slice of a presentation. If you win, you get a full 1-hour speaking slot on Lotusphere Thursday, and the adoration of hundreds of fellow-geeks. <br /> <br />If you didn't submit when the original Lotusphere2010 Call for Abstracts went out, well, you still have time. Submissions for Idol are now being accepted through December.  <br /> <br />See Ed Brill's blog post on it: <a href="http://www.edbrill.com/ebrill/edbrill.nsf/dx/lotusphere-2010-lotusphere-idol-submissions-have-re-opened?opendocument">http://www.edbrill.com/ebrill/edbrill.nsf/dx/lotusphere-2010-lotusphere-idol-submissions-have-re-opened?opendocument</a> <br />And also Paul Mooney's blog post: <a href="http://www.pmooney.net/pmooney/pmooneynet.nsf/d6plinks/PMOY-7Y45H6">http://www.pmooney.net/pmooney/pmooneynet.nsf/d6plinks/PMOY-7Y45H6</a> <br /> <br />Be there, or be square!  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/lotusphere-idol-submisssions-are-re-opened</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/lotusphere-idol-submisssions-are-re-opened?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Materials from TriStateLUG Presentation on COM</title>
<pubDate>Wed, 11 Nov 2009 07:22:54 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! I had the privilege of attending the Tri-State LUG meeting this week in New York, where I presented a session on advanced Notes programmability using the COM interfaces. Great even ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/materials-from-tristatelug-presentation-on-com</link>
<category>Lotus</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/materials-from-tristatelug-presentation-on-com?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/materials-from-tristatelug-presentation-on-com</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> I had the privilege of attending the <a href=http://www.tristatelug.org/tristatelug/tristatelug.nsf><span style="text-decoration:underline">Tri-State LUG</span></a> meeting this week in New York, where I presented a session on advanced Notes programmability using the COM interfaces. Great event, thanks to the organizers and sponsors for pulling it together. <br /> <br /> Here's a PDF copy of my slide deck, plus most of the code samples (some of that is proprietary...). <br /> Enjoy! <br /> <br /> <a href="http://bobzblog.com/tuxedoguy.nsf/dx/3slugCOM.pdf/$file/3slugCOM.pdf" title="3slugCOM.pdf"3slugCOM.pdf/>3slugCOM.pdf</a> <br /> <a href="http://bobzblog.com/tuxedoguy.nsf/dx/CPPDemo.cpp/$file/CPPDemo.cpp" title="CPPDemo.cpp"CPPDemo.cpp/>CPPDemo.cpp</a> <br /><a href="http://bobzblog.com/tuxedoguy.nsf/dx/Module1.vb/$file/Module1.vb" title="Module1.vb"Module1.vb/>Module1.vb</a> <br /> <a href="http://bobzblog.com/tuxedoguy.nsf/dx/NotesCOM.h/$file/NotesCOM.h" title="NotesCOM.h"NotesCOM.h/>NotesCOM.h</a> <br /> <a href="http://bobzblog.com/tuxedoguy.nsf/dx/Program.cs/$file/Program.cs" title="Program.cs"Program.cs/>Program.cs</a> <br /> <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) <br /> Follow me on Twitter @LooseleafLLC<br /> This article and all included code samples and presentations ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/materials-from-tristatelug-presentation-on-com</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/materials-from-tristatelug-presentation-on-com?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Tri-State LUG, New York, November 9</title>
<pubDate>Thu, 29 Oct 2009 09:27:54 -0400</pubDate>
<description>
<![CDATA[ 
The Tri-State Lotus User Group will be holding an all-day meeting on November 9, hosted by IBM (590 Madison Ave, NY). I will be doing two presentations: Advanced Programming with Notes/Domino CO ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/tri-state-lug-new-york-november-9</link>
<category>TriState LUG</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/tri-state-lug-new-york-november-9?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/tri-state-lug-new-york-november-9</guid>
<content:encoded><![CDATA[ The Tri-State Lotus User Group will be holding an all-day meeting on November 9, hosted by IBM (590 Madison Ave, NY). <br /> <br /> I will be doing two presentations: <br />  <br /> <form action=http://www.tristatelug.org/tristatelug/tristatelug.nsf/><span style="text-decoration:underline"><br /> </span><a href="http://www.tristatelug.org/tristatelug/tristatelug.nsf/SessionBySlotLookup/1-2-4"><strong><span style="text-decoration:underline">Advanced Programming with Notes/Domino COM Classes</span></strong></a> <br /> Did you ever wonder how to write standalone programs that use both the Notes back-end classes, AND the front-end (UI) classes? Did you ever want to play with the Notes objects using VB.net or C#, while maintaining your ability to call-out to CAPI entry points? Did you ever want to learn how to invoke Notes UI from a C++ program? If your answer to any of these questions was a "yes", then come to this advanced (code heavy) session and learn all about COM and how to make it work for you with Notes/Domino. There will be lots of samples, and we will spend lots of time in the Visual Studio debugger, looking at code. This session is not an introduction, it is for code geeks only.  <br /></form><br /> <br /> And a Birds-of-a-Feather together with Paul Mooney:  <br /> <form action=http://www.tristatelug.org/tristatelug/tristatelug.nsf/><span style="text-decoration:underline"><br /> </span><a href="http://www.tristatelug.org/tristatelug/tristatelug.nsf/SessionBySlotLookup/1-3-5"><strong><span style="text-decoration:underline">Meet "The Grumpies": Eschew Obfuscation!</span></strong></a> <br /> Who are they? They're a group of very, very experienced Notes/Domino Admins and Developers, who love the product, warts and all, and know it very, very well. Speakers Balaban (dev) and Mooney (admin) will debate tactics, techniques, testing and best practices in general, and they will welcome a few special guests to do the same. Much of this session will be open Q&amp;A, but don't ask for an opinion unless you want an honest (and maybe grumpy) answer! You will learn to recite The Grumpies' motto: "Be positive when possible, be grumpy when necessary."  <br /></form><br /> Get the full agenda here: <a href=http://www.tristatelug.org/tristatelug/tristatelug.nsf/NewAgenda?readform><span style="text-decoration:underline">http://www.tristatelug.org/tristatelug/tristatelug.nsf/NewAgenda?readform</span></a>  <br /> <br />Attendance is free, register and come on by!  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/tri-state-lug-new-york-november-9</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/tri-state-lug-new-york-november-9?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Ok, we have to clear this up rightnow! &quot;On premise&quot; MAKES NO SENSE!</title>
<pubDate>Sat, 29 Aug 2009 09:05:12 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, geeks! I've seen it, you've seen, we all have, especially in the literature around cloud computing: "On-premise" vs. "in the cloud". The discussion around LotusLive is full of this, though ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/ok-we-have-to-clear-this-up-rightnow-on-premise-makes-no-sense</link>
<category>Lotus</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/ok-we-have-to-clear-this-up-rightnow-on-premise-makes-no-sense?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/ok-we-have-to-clear-this-up-rightnow-on-premise-makes-no-sense</guid>
<content:encoded><![CDATA[ Greetings, geeks! <br /> <br />I've seen it, you've seen, we all have, especially in the literature around cloud computing: "On-premise" vs. "in the cloud". The discussion around LotusLive is full of this, though IBM is not the only offender. It's making me crazy, so let's clear this up right now, ok? <br /> <br />Note to IBM and all marketing people (and managers, and executives who give presentations or interviews about this stuff): "On premise" makes NO SENSE! The correct word is PREMISES!! <br /> <br />Don't believe me? Lets go to <a href=http://dictionary.reference.com/browse/premise>the dictionary:</a>  <br /> <br />prem&#8901;ise&#8194;&#8194;/Pronunciation &#91;prem-is&#93;: Logic. a proposition supporting or helping to support a conclusion. <br />Law. a. a basis, stated or assumed, on which reasoning proceeds.  <br />&nbsp; &nbsp; &nbsp;b. an earlier statement in a document.  <br />&nbsp; &nbsp; &nbsp;c. (in a bill in equity) the statement of facts upon which the complaint is based.  <br /> <br />etc. (there's a verb form, too). <br /> <br />Now PREMISES: <br />&nbsp; &nbsp; &nbsp;premises, a. a tract of land including its buildings.  <br />&nbsp; &nbsp; &nbsp;b. a building together with its grounds or other appurtenances.  <br />&nbsp; &nbsp; &nbsp;c. the property forming the subject of a conveyance or bequest.  <br /> <br />So, clearly, the term for "I have computers of my own right here in the building" is "on-premises", NOT "on-premise", since you can't have computers hosted in a logical proposition. You can, of course (and often do) have computers maintained in a building. <br /> <br />In the movies, does the sherrif ever roll up to someone's house and order them to "vacate the premise"?? NO! That would be funny, perhaps, especially if the house in question were on the campus of a law school, but such an order would not be cause for people to move out. "Vacate the premises", on the other hand....yer outta there. <br /> <br />Ok? Can we all try to get this right now? Thanks! <br /> <br />Geek ya later! <br /> <br />(Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) <br /> Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/ok-we-have-to-clear-this-up-rightnow-on-premise-makes-no-sense</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/ok-we-have-to-clear-this-up-rightnow-on-premise-makes-no-sense?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>I have a new article in The View</title>
<pubDate>Wed, 26 Aug 2009 11:55:29 -0400</pubDate>
<description>
<![CDATA[ 
http://www.eview.com/eview/VOLR6.nsf/CurrentIssue/94FF3BDCF710A7A78525761E004CF5DD?OpenDocument (requires subscription to read the full article) I've written quite a lot for The View in previous yea ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/i-have-a-new-article-in-the-view</link>
<category>LotusScript</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/i-have-a-new-article-in-the-view?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/i-have-a-new-article-in-the-view</guid>
<content:encoded><![CDATA[ <a href=http://www.eview.com/eview/VOLR6.nsf/CurrentIssue/94FF3BDCF710A7A78525761E004CF5DD?OpenDocument>http://www.eview.com/eview/VOLR6.nsf/CurrentIssue/94FF3BDCF710A7A78525761E004CF5DD?OpenDocument <br /> <br />(requires subscription to read the full article) <br /> <br />I've written quite a lot for The View in previous years, though it's been 2 or 3 since my last piece. They asked me to take one of my old articles (from 1999, on LotusScript performance tuning) and update it. The revised article (edited some of the text, re-ran all the samples, etc.) is now posted on the eview.com site. <br /></a>  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/i-have-a-new-article-in-the-view</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/i-have-a-new-article-in-the-view?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Technology enables excellent customer service (Amazon.com)</title>
<pubDate>Sun, 23 Aug 2009 17:45:00 -0400</pubDate>
<description>
<![CDATA[ 
I had a very good experience with Amazon's customer service the other day, and thinking about it, I realized that a big part of what enabled Amazon to deliver that good experience to me (and, I assume ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/technology-enables-excellent-customer-service-amazon.com</link>
<category></category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/technology-enables-excellent-customer-service-amazon.com?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/technology-enables-excellent-customer-service-amazon.com</guid>
<content:encoded><![CDATA[ I had a very good experience with Amazon's customer service the other day, and thinking about it, I realized that a big part of what enabled Amazon to deliver that good experience to me (and, I assume, to lots of other customers) is the technology infrastructure they have in place. <br /> <br /> Of course, I know virtually nothing about what systems Amazon uses, but I can infer a lot of the functionality based on what I observed. Let's see if I can splain... <br /> <strong><br /> Background: </strong>I bought a Kindle e-book reader from a friend. I had to "register" myself with an email address with Amazon to officially become the new owner of the device. Over the following couple of months, I bought a few e-books using the device itself (a big part of the value proposition of Kindle is that it is SO easy to just buy a book -- you record a credit card number, the device uses an embedded cell phone to call Amazon, you can browse or search the catalog, purchase and download the book (and other stuff too, like music). Very easy). <br /> <br /> Then, one day, the Kindle broke. Nothing legible showed up on the screen, only black streaks. I figured if I could contact Amazon, I could maybe send it in for fixing (for a few bucks), or whatever.  <br /> <br />The hardest part of the whole experience, frankly, was searching the Amazon.com site to figure out how to contact Kindle tech support. Eventually I landed on the right page, and encountered the first of a few new (to me, anyhow) interesting bits of technology. Instead of the toll-free phone number that I expected, it was a web fom. Groan! I was expecting to have to email in a problem report, and wait a (long) while to hear back. But no! You enter your phone number in the form, and when you submit, Amazon calls YOU. My phone rang 2 seconds after entering the number. After that, it was 2 minutes or so on hold to get to the first-level support person. <br /> <br />I described the problem. The support person said they would have to pass me on to 2nd-level support. Ok, fine. It was a surprisingly short 2 more minutes on hold before the next person picked up. And surprise! They actually ALREADY KNEW what my problem was (how many times have you entered your credit card, frequent flier number, or other info, then been passed to an operator who asked for it all over again?). Refreshing. <br /> <br />He asked me a couple of questions, to confirm that it was really broken. He asked me for my amazon.com login id, which I gave him (it's an old email address that I don't use anymore, not the same email that I used to "register" the Kindle). Then he made a surprising leap. He asked, "Did you receive the Kindle as a gift?" He'd looked up my account and seen that there were no Kindle books in any recent orders, and no registered device. I explained that I had bought it from a friend. "Have you purchased any e-books for it?" I gave him the other email, and he said,"Ok, I see all your recent purchases for the Kindle. No problem, we'll send you a new device right away." <br /> <br />From this, I infer that their tracking and accont history systems are pretty sophisticated. Tech Support Guy was able to verify my ownership without asking for credit card numbers, passwords or my birthday, even in my non-standard situation. Secure? Pretty much. He would only ship the new one to the address listed for my Amazon account. That account has a credit card listed on it, and if I didn't send the broken one back by return box within 30 days, they would charge me for the new device (perfectly reasonable, IMHO).  <br /> <br />They shipped the new Kindle by 2nd-day express, and emailed me a link to a return-label PDF, which I printed out and pasted to the return envelope for the broken Kindle.  <br /> <br />Then, final bit of tech-surprise: I asked, "How do I get all the books from the broken one to the new one?"  <br /> <br />"Easy!", said Tech Support Guy. The new one will be pre-registered to you when you get it. The "archives" tab will have links to all the books you previously purchased, click on the ones you want to download to the device, and pick up reading where you left off."  <br /> <br />Now THAT is intelligent application design, IMHO. It's not a backup of the device (after all, you don't modify books you buy, at least not yet); but of course they still have copies of all the books on Amazon.com, and they remember what I own. The server has some kind of web service which allows my device to download (or re-download) anything I've already paid for. Tech Support Guy also explained that I could log in to Amazon.com via browser on my laptop, download anything I'd already bought, and transfer it to the Kindle via USB cable. That would be how I would have to do it if I were not in North America (the cell phone in the Kindle doesn't work elsewhere). They really have all the bases covered. <br /> <br />Thanks, Tech Support Guy! Thanks, Amazon! They figured out how to use computers to make my life easier. How cool is that? <br /> <br />Geek ya later. <br /> <br />(Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) <br /> Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.  <br />  ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/technology-enables-excellent-customer-service-amazon.com</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/technology-enables-excellent-customer-service-amazon.com?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>&quot;Lazy Evaluation&quot;: When Being Lazy Causes You More Work</title>
<pubDate>Sun, 16 Aug 2009 07:39:18 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! I have always held that being "lazy" is not a bad thing. In fact, I often tell people that I'm lazy, and that this is why I became a software developer: I want the computer to do t ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/lazy-evaluation-when-being-lazy-causes-you-more-work</link>
<category>LotusScript</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/lazy-evaluation-when-being-lazy-causes-you-more-work?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/lazy-evaluation-when-being-lazy-causes-you-more-work</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> I have always held that being "lazy" is not a bad thing. In fact, I often tell people that I'm lazy, and that this is why I became a software developer: I want the computer to do the work, so that I don't have to. <br /> <br /> Being "lazy" (if you define the word as meaning "don't do more work than you have to") is not a bad programming principle. It's really just another way of saying "KISS" (Keep It Simple, &#91;Silly&#93;). <br /> <br /> Recently, though, I got bit by a LotusScript program I was working on because I forgot that LotusScript isn't as "lazy" as other programming languages I regularly use (Java, C++...). <br /> <br /> But, to tell you that story, I have to tell you about a thing called "lazy evaluation". It's a principle that applies to the runtime evaluation of "if" statements in a program. In virtually all programming languages, an "if" statement is a critical control-flow influencer, and an important part of the logic a developer is implementing. Usually the word "if" is followed by a boolean expression. The expression can be of arbitrary complexity, nested parenthetical sub-expressions, whatever, but the expression, in the end, needs to evaluate to a value that can be interpreted as either "true" or "false" (thus, boolean). In some languages, the defintion of "true" is more, um, flexible than in others. The most relaxed definition says that "true" is anything that is non-zero, while (in most languages) "false" is zero. <br /> <br /> So, you can have an "if" that contains lots of logical "AND"s and "OR"s, and as long as the whole thing can be computed down to a numeric value that represents either T or F. Most compilers take advantage of some standard optimizing intelligence that says, "we don't have to <em>completely </em>evaluate the expression, we can stop once we know that &nbsp;the expression will never be TRUE. Thus, "lazy evaluation", it won't do more work than it has to. Here's a pseudo-code example: <br /> <br />  &nbsp; &nbsp; if doc.IsValid() AND DocIsWhatIWant(doc) then <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' something <br />  &nbsp; &nbsp; ELSE <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' something else <br />  &nbsp; &nbsp; end if <br /> <br /> Because there are 2 sub-expressions here connected by an AND, the "then" part of the block should only be executed if BOTH &nbsp;conditions are TRUE. With most compilers, the generated code will test the first sub-expression, and if it's FALSE, it won't bother to test the second, because it "knows" that the entire expression will certainly fail. Lazy evaluation, it works for me! <br /> <br /> So. What's the problem?? The problem is that LotusScript does NOT USE lazy evaluation. Here's an example similar to the one that bit me: <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dim preserved as variant <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dim respIdx as Integer <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;respIdx = 0 <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preserved = FillArrayWithStuff &nbsp; &nbsp;' might be an array, might be NULL <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Not Isnull(preserved) &nbsp;AND &nbsp;Isarray(preserved) AND If respIdx <= Ubound(preserved) Then <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;values = preserved(respIdx) <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' do more work <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If <br /> <br /> Here's what's happening with this code: I have a "preserved" variable that gets computed by the FillArrayWithStuff() function. If there's nothing for it to do, it returns a NULL. So my next bit of work has to be controlled by a test for IsNull(), then I want to make sure that when "preserved" has something in it, the thing is an array. THEN I want to be sure that the index I'm about to apply to the array is within bounds. <br /> <br /> In Java, or C or many other languages, the sub-expressions here would be evaluated left-to-right. If preserved is null, they stop right there. If it's not NULL, but is not an array, don't even bother to check the array bounds. <br /> <br /> HOWEVER, LotusSCRIPT DOES NOT WORK THAT WAY!! LotusScript ALWAYS evaluates ALL the sub-expressions. Why? Because Visual Basic (from which LotusScript was cloned) does it that way (or at least, used to). <br /> <br /> So, the first time I ran this code where "preserved" was NULL (not an error condition, it was set up that way on purpose), LotusScript threw an exception on the Ubound() call. I had forgotten that LotusScript is not "lazy". I should have coded it this way: <br /> <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dim preserved as variant <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dim respIdx as Integer <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;respIdx = 0 <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; preserved = FillArrayWithStuff &nbsp; &nbsp;' might be an array, might be NULL <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;If Not Isnull(preserved) &nbsp;Then <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If Isarray(preserved) Then <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; If respIdx <= Ubound(preserved) Then <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; values = preserved(respIdx) <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;' do more work <br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; End If &nbsp; &nbsp; &nbsp; &nbsp;' ubound<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End If &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' isarray<br />  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;End If &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ' isnull<br /> <br /> So, here's one case where the fact that LS is not "lazy" made more work for me. Sigh. I need a nap. <br /> <br /> Geek Ya Later! <br /> <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) <br /> Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval. <br />   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/lazy-evaluation-when-being-lazy-causes-you-more-work</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/lazy-evaluation-when-being-lazy-causes-you-more-work?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>UKLUG! (Finally) decided I&#8217;m going</title>
<pubDate>Sun, 9 Aug 2009 20:06:21 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! UK Lotus User Group are having a get-together in Edinburgh in October. This is another in a series of "User Group" meetings/conferences (ILUG, IAmLUG, UKLUG) of previous years that ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/uklug-finally-decided-im-going</link>
<category>UKLUG</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/uklug-finally-decided-im-going?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/uklug-finally-decided-im-going</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> UK Lotus User Group are having a <a href=http://www.uklug.info/><span style="text-decoration:underline">get-together</span></a> in Edinburgh in October. This is another in a series of "User Group" meetings/conferences (ILUG, IAmLUG, UKLUG) of previous years that have been a raging success. For those of you who don't (yet) know, Edinburgh is NOT in England. It is the capital of Scotland, a real, honest-to-goodness country to the north of England. Scotland is part of Great Britain, which consists of the countries England, Scotland, and Wales (Wales is to the West of England). Great Britain, in turn, is part of the country known as the United Kingdom, or UK (full name: United Kingdom of Great Britain and Northern Ireland). <br /> <br /> As you may have guessed by now, UK is the superset (geek term) of Great Britain and that part of the Irish Island that includes the "Six Counties" of Northern Ireland. "Northern Ireland", for the geographically challenged amnog you, is a chunk of property north of the Republic of Ireland, across a bit of water from GreatBritain. <br /> <br /> Yes, it's all confusing, I admit. If you have any questions about how this all came about or why it still is the way it is, ask <a href=http://www.royal.gov.uk/Home.aspx><span style="text-decoration:underline">The Queen (tip, don't ask about Diana or Camilla. Touchy.)</span></a>. They used to have a whole Empire, consisting of chunks of property that are now India, Pakistan, Bangla Desh, Myanmar, Sri Lanka, Kenya and Nigeria (and probably some I forgot, like South Africa, Rhodesia (now Zimbabwe), maybe even Tanzania, not sure about that one... for sure,. they got around). <br /> <br /> ANYWAY. Edinburgh is the ancient capital of Scotland, and site of the forthcoming UKLUG2009. I didn't get a speaker slot :-(, and nobody's paying my expenses for me :-( :-(, but I'm going anyway. Why? Because it's going to be the epicenter of the Yellowverse in early October, that's why. You should go too. I suspect and anticipate epic levels of awesomeness. <br /> <br /> Geek ya there!   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/uklug-finally-decided-im-going</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/uklug-finally-decided-im-going?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>The 2-Headed Beast: Debugging Domino Java agents with Eclipse</title>
<pubDate>Fri, 31 Jul 2009 06:47:50 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! This topic just keeps coming back. You have a Java agent for Domino (or Notes). You want to debug it. There's no Java debugger in Designer (ok, let me clarify that: Designer 8.5x - ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse</link>
<category>Lotus Domino</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> This topic just keeps coming back. You have a Java agent for Domino (or Notes). You want to debug it. There's no Java debugger in Designer (ok, let me clarify that: Designer 8.5x - also known as "DDE", Domino Designer in Eclipse - has a Java debugger. But (as of this writing) you can't use it as you'd expect, you have to use the "remote debugger", which I do not recommend). <br /> <br /> Eclipse (plain, vanilla Eclipse) has a nice Java debugger, but how do you debug an Agent when the agent program needs the Notes/Domino infrastructure? There IS an answer: use the pattern I created back in 2004 called "The 2-Headed Beast". <br /> <br /> The 2-headed beast is called that because it's a Java program with 2 "heads": One for debugging in Eclipse, one for running as a Java agent. Each "head" is a small piece of code which adapts the class to one environment or the other, then invokes the "business logic" of the program, so that the important code is common to both cases. <br /> <br /> You can debug the class in Eclipse, then just import the .java or .class file into Designer to configure as an agent. It works! <br /> <br /> As I said, I first developed this technique back in 2004, and presented it at a Lotus Advisor Devcon. I've done versions of the same presentation at DNUG, Lotusphere and The View Devcon, the latest such being back in 2007. <br /> <br /> Anyway, a PDF of the full presentation, and the associated Java code examples can be found elsewhere in this very blog: <span style="text-decoration:underline"><br /> </span><a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/here-are-the-files-from-my-view-presentation-java-agents-in-eclipse"><span style="text-decoration:underline">http://www.bobzblog.com/tuxedoguy.nsf/dx/here-are-the-files-from-my-view-presentation-java-agents-in-eclipse</span></a> <br /> <br /> Enjoy! <br /> Geek ya later <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)  <br />Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/the-2-headed-beast-debugging-domino-java-agents-with-eclipse</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/the-2-headed-beast-debugging-domino-java-agents-with-eclipse?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Ignore: Setting up for Technorati...cuqai2jedg</title>
<pubDate>Tue, 14 Jul 2009 17:39:00 -0400</pubDate>
<description>
<![CDATA[ 
cuqai2jedg cuqai2jedg Nothing to see here, folks. Move along. ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/ignore-setting-up-for-technorati...</link>
<category>Technorati</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/ignore-setting-up-for-technorati...?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/ignore-setting-up-for-technorati...</guid>
<content:encoded><![CDATA[ cuqai2jedg  <br />cuqai2jedg<br /> <br /> Nothing to see here, folks. Move along.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/ignore-setting-up-for-technorati...</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/ignore-setting-up-for-technorati...?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Geek-o-Terica 9: Memory Sub-allocator (or, why your server&#8217;s memory usage only goes up), and Happy Father&#8217;s Day</title>
<pubDate>Fri, 26 Jun 2009 01:12:42 -0400</pubDate>
<description>
<![CDATA[ 
I did an exploration of product memory management many years ago. I worked on a couple of different Lotus products (1-2-3, Notes) that had sophisticated memory-management packages in them. All of them ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-9-memory-sub-allocator-or-why-your-servers-memory-usage-only-goes-up-and-happy-fathers-day</link>
<category>Lotus Notes</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-9-memory-sub-allocator-or-why-your-servers-memory-usage-only-goes-up-and-happy-fathers-day?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-9-memory-sub-allocator-or-why-your-servers-memory-usage-only-goes-up-and-happy-fathers-day</guid>
<content:encoded><![CDATA[ I did an exploration of product memory management many years ago. I worked on a couple of different Lotus products (1-2-3, Notes) that had sophisticated memory-management packages in them. All of them were what you might call "sub-allocators", basically they grabbed big chunks of memory from the operating system, and broke up the big chunk into smaller chunks for program code to use. <br /> <br /> This past Sunday was Father's Day, a nice, family-oriented holiday, essentially invented by Hallmark. I got to thinking about my father, and also about my father's father. He was an ordinary, yet interesting man, born either on the boat over from the Ukraine (or maybe Byelorus, the people who knew for sure have been dead a long time, and nobody's sure), or shortly after arrival in 1900. His name was Sam. My father relates that Sam went into the clothing business in New York City as a young man. When the Depression hit hard, in the early 1930s (editorial comment: it was MUCH worse than the one we're in now, bad as that is...), Sam got laid off, and had the guts to start his own business. He formed a company to buy large amounts of fabric from the cloth manufacturers (this was when the United States still had a textile industry, now long gone), and sell that cloth in smaller chunks to the clothing makers of New York's Garment District. One of his sons, my Uncle Ed, joined the business. My father, Al, did not. Al went to college, then got drafted into the Army during World War 2. <br /> <br /> My grandfather used to be a sub-allocator, though he never would have called it that. The analogy works really well. Sam thought of himself as a broker: he'd get enough money together (couldn't have been easy in the early 30's) to buy big bolts of cloth, haul a sample case around to the clothing manufacturers and sell them what they needed. He tended to specialize in cloth for women's dresses. Sam's company lasted until the mid 1960s, I remember going to visit "the office" once or twice. Rolls of cloth everywhere. <br /> <br /> How is that like memory management in Notes or 1-2-3 (does anyone still use 1-2-3?)? There were 2 &nbsp;problems with memory allocation in earlier versions of Windows: it was slow, and each chunk that you would get from the OS represented one "system handle", regardles of the size of the chunk. And system handles were a finite resource, you couldn't get more than (in one version of Windows NT, as I recall) 4096 of them. When they were gone, you were "out of memory", and you'd mostly likely crash. The other problem with it was that it was slooowwww. Not so much <em>getting </em>&nbsp;the memory, but "freeing" it, or retuning memory you no longer needed back to the system was very slow. Why? Because of something called "free block consolidation". &nbsp;The OS would try to figure out when you told it you were done with a particular block of memory, what other "free blocks" there were (if any) adjacent to your's, so it could consolidate them together, raising the odds that the next big allocation would find a contiguous chunk of the size needed easily. Otherwise, the system's memory would become "fragmented", and allocating new chunks would become much more difficult. <br /> <br /> So what does sub-allocation do for you? Say 3 pieces of a program each want around 100KB of memory for a little while. They could each go to the Windows API and request 100KB, but that would use up 3 (scarce) system handles. But what if, instead, we had a "memory manager", a "broker" (we could name it Sam) who, instead would track requests for memory allocations. "Sam" could request say, 64MB of memory from the OS all at once, then break that big chunk up into 3 100KB blocks as requested, using only 1 system handle. If we wrote Sam to be clever enough, he'd hve an efficient way of knowing which bits of his big 64MB chunk were being used, and which were not. And when the 3 program tasks were done with their 100K bits, they could "free" them with a call back to Sam, who could efficiently consolidate them back into his pool of available memory. <br /> <br /> We (the 1-2-3 and Notes product teams) did write such memory managers (we didn't call them Sam, though), and they worked a whole lot better and a whole lot faster than the Windows API did. <br /> <br /> One interesting side-effect of using a memory sub-allocator in a product is something that people who pay careful attention to system memory usage often notice. If you use a system monitor (say Windows Task Manager) to track system memory usage, and then run some kind of performance test suite (maybe a browser client hitting a web page over and over, or hitting different web pages over and over to avoid the page-caching optimization), you see what might appear to be strange behavior: memory usage goes up, up, up, up, and then plateaus, but rarely does it go back down again. <br /> <br /> Why does it happen this way? Well, Sam could have told you. The sub-allocator grabs memory from the OS in bug chunks, and parcels it out in smaller chunks. If it's block gets used up, it goes back to the OS for another (big) block. Both big blocks would be notieced by TaskManager. But sub-allocating out of those blocks is not registered by Task Manager, because it's done only within the program. When a task (HTTP server, for example) asks for a bunch of memory to process an outgoing web page, it gets a sub-allocated block. When the HTTP task returns ("frees") that smaller block back to the memory manager ("Sam"), the memory manager does NOT go return it to the OS. First of all, it's too small, it doesn't represent (usually) a full "handle's worth" of memory that was obtained from the OS in the first place. Secondly, Sam is going to keep it around because he knows that it's probably going to be needed again, laer, for something else. <br /> <br /> That's why you see (at the system level) more and more memory going to the product's process, and only once in a while (when Sam has an entire big block of memory that he got from Windows free again, and decides he doesn' need it anymore) does the number go down again, maybe when the server is idle for a while. <br /> <br /> So, there you have it. Yet another example of art imitating life. Here's to my father Al, on Father's Day, and here's to my Grandfather Sam, sadly now no longer with us. I love you, Dad. <br /> And here's to all fathers out there, everywhere. Happy Father's Day! <br /> <br /> Geek ya later! <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)  <br />Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/geek-o-terica-9-memory-sub-allocator-or-why-your-servers-memory-usage-only-goes-up-and-happy-fathers-day</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-9-memory-sub-allocator-or-why-your-servers-memory-usage-only-goes-up-and-happy-fathers-day?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Geek-o-Terica 8: LotusScript, To Delete, or Not to Delete?</title>
<pubDate>Mon, 15 Jun 2009 23:41:32 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! I have written at length recently about garbage collection in both LotusScript and Java (see Geek-o-Tericas 3, 5, and 6 especially). I went on (and on...) about how and why you nee ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-8-lotusscript-to-delete-or-not-to-delete</link>
<category>Geek-o-Terica</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-8-lotusscript-to-delete-or-not-to-delete?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-8-lotusscript-to-delete-or-not-to-delete</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> I have written at length recently about garbage collection in both LotusScript and Java (see Geek-o-Tericas <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-3-taking-out-the-garbage-lotusscript"><span style="text-decoration:underline">3</span></a>, <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-5-taking-out-the-garbage-java"><span style="text-decoration:underline">5</span></a>, and <a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-6-now-it-gets-complicated-java-garbage-collection-notes-and-threads"><span style="text-decoration:underline">6</span></a> especially). I went on (and on...) about how and why you need to use the "recycle()" call in the Java classes for Notes, and why that call doesn't really exist in LotusScript, which has a more robust and automated gc mechanism integrated with the Notes classes. <br /> <br /> But, I neglected to mention the built-in LotusScript "delete" function, and since I've received 1 or 2 questions about it, I decided to do another (not so long, I hope) post on that topic. <br /> <br /> "Delete" in LotusScript is very close in function to recycle() in Java: it destroys an object instance, and causes it to be garbage-collected immediately. If the object you delete is a Notes back-end (OR front-end) class object, then all of the memory associated with that object is freed. <br /> <br /> Ok, that was easy! But the question remains: why would you ever need (or want) to use delete, when the LotusScript gc mechanism is invoked after every statement anyway? <br /> <br /> I have only ever needed it in one particular situation, having to do with (wait for it...) NotesAgent.Run() and NotesAgent.RunOnServer(). Why? Because there's a cute trick you can use to pass "parameters" to agents that you invoke from LotusScript, <em>and</em>, which you can also use to get back complex results from an agent. BUT, you need delete. <br /> <br /> So, let's say you have an agent that you want to invoke from a pice of LotusScript code. Maybe the agent is local, or maybe it lives on a server somewhere. The first thing you need to do is "navigate" your way to the agent. Typically you'd do that by using NotesSession.GetDatabase() to get the database containing the agent, then NotesDatabase.GetAgent() to get an instance of NotesAgent. <br /> <br /> If you want the agent code to execute on the same machine as the code that invokes it, you will be using NotesAgent.Run(). If the target agent lives on a server, you can use NotesAgent.RunOnServer() to have the agent code run on that server (your calling program waits for the agent to finish before resuming in both cases). For both methods, as of Notes v5.02, you may optionally supply the NOTEID of a "parameter" document. This comes in handy when you want to be able to pass runtime info to the executing agent to tell it specifically what to do. You just create a document instance (NotesDatabase.CreateDocument) -- locally for the Run() method, on the target server for the RunOnServer() method. You can put any data you want into the new document, obviously you have to know what the target agent is expecting. <br /> <br /> Then, you have to Save() the document object to disk. Why? Becuase you need a NOTEID (NotesDocument.NoteID) to pass to the agent, and a document object does not acquire a NOTEID until you've saved it. So then you can pass your newlly minted NOTEID to Run() or RunOnServer(). <br /> <br /> The target agent is set up and invoked. That agent can find out what NOTEID was passed to it as follows: <br /> <br />  &nbsp; &nbsp;Dim s as New NotesSession <br />  &nbsp; &nbsp;Dim db as NotesDatabase <br />  &nbsp; &nbsp;Dim currentagent as NotesAgent <br />  &nbsp; &nbsp;Dim noteid as String <br />  &nbsp; &nbsp;Dim parameters as NotesDocument <br />  &nbsp; &nbsp;set currentagent = s.CurrentAgent <br />  &nbsp; &nbsp;noteid = currentagent.ParameterDocID <br />  &nbsp; &nbsp;set db = s.CurrentDatabase <br />  &nbsp; &nbsp;set parameters = db.GetDocumentByID(noteid) <br /> <br /> And off you go. Pretty convenient, huh? But we haven't even got to the REALLY cool part yet! <br /> <br /> What if your agent runs, and wants to pass a bunch of results BACK to the calling agent? You can! Just use the existing parameters document you already have. Your target agent can fill it up with whatever data you want to "pass back", and (of course) you have to call Save() on it again to get those changes committed to disk. Then, in your original calling agent, you have to get the <em>modified</em> version of that document back. You can't just use the NotesDocument instance you created to store your invocation parameters, because that document object still exists in memory,and it does not have your target agent's result data in it. <br /> <br /> THAT is why you need delete! Your calling agent has to delete the original parameter document, then re-fetch it with a NotesDatabase.GetDocumentByID() call (it will still have the same NOTEID it had before). Cool, huh? <br /> <br /> Does it work in Java? YES, with only one small difference: you don't get the "current agent" from the Session in Java, you get it from the AgentContext, which you get from the Session. Otherwise, this mechanism works the same in Java as in LotusScript. <br /> <br /> So, there's the one situation I've come across personally that requires "delete" (thanks to Daniel Lehtihet for suggesting this as a topic). <br /> <br /> Geek ya later! <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)  <br />Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval. &nbsp; &nbsp; &nbsp;   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/geek-o-terica-8-lotusscript-to-delete-or-not-to-delete</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-8-lotusscript-to-delete-or-not-to-delete?opendocument&amp;comments</wfw:comment>
</item>
<item>
<title>Geek-o-Terica 7: Garbage, threads and the CORBA classes in Notes</title>
<pubDate>Sat, 23 May 2009 12:15:00 -0400</pubDate>
<description>
<![CDATA[ 
Greetings, Geeks! I actually thought that my previous Geek-o-Terica post on garbage collection (gc) and java and Notes and threads would be the final one on that topic. For one thing, there's only s ...
 ]]>
</description>
<link>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes</link>
<category>CORBA</category>
<dc:creator>Bob Balaban</dc:creator>
<comments>http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes?opendocument&amp;comments</comments>
<guid isPermaLink="true">http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes</guid>
<content:encoded><![CDATA[ Greetings, Geeks! <br /> <br /> I actually thought that my previous Geek-o-Terica<a href="http://www.bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-6-now-it-gets-complicated-java-garbage-collection-notes-and-threads"><span style="text-decoration:underline"> post on garbage collection (gc) and java and Notes and threads </span></a>would be the final one on that topic. For one thing, there's only so much you can say about it without falling asleep. <br /> <br /> However, I had a couple of requests to map that discussion onto the "other" Java APIs for Notes, the so-called CORBA classes. It's a good point, so here we go. <br /> <br /> First, a brief review of what's different about the CORBA classes. They're different from the "regular" back-end classes for Notes in that they constitute a Java library (NCSO.jar) that does not need a locally installed Notes Client or Domino Server in order to operate. They work remotely with any Domino server that runs the DIIOP server task. The CORBA classes (so named because the remoting technology they use is based on the <a href=http://www.omg.org/><span style="text-decoration:underline">Object Management Group's</span></a> "Common Object Request Broker Architecture" specification). <br /> <br /> The classes in NCSO.jar implement the exact same Java interfaces (Session, Database, View, Document, etc etc) that the "local" classes in Notes.jar do, so you (with a few very minor exceptions) use them the same way. But the implementation is entirely different. When you invoke a method on a "local" object instance, a piece of Java wrapper code calls into the C++ code in Notes/Domino that implements the back-end classes (lsxbe). The C++ code uses the Notes C API, and things rock on. <br /> <br /> The job of the "remote" Java classes is entirely different. Each object instance in NCSO.jar is really just a proxy object: it's job is to assemble the input parameters into a command buffer, format it according to the CORBA wire-protocol specification (IIOP, thus the name DIIOP for the server task), and ship it to the server. Each CORBA proxy object is bound to a "real" back-end object on the server, which is the thing that does the real work. <br /> <br /> This architecture has a number of different implications on how you code your CORBA-based Java app: <br /> <br />  &nbsp; &nbsp;1) You still have to use recycle(). Not so much to protect the memory heap of your local JVM (because there are no "real" back-end classes to de-allocate there), but to recover lsxbe/C++ memory <em>on the server.</em> <br />  &nbsp; &nbsp; <br />  &nbsp; &nbsp;2) There's no (discernable) connection between threads you may generate on your client machine and threads within the DIIOP server task. Since your program is not directly using the CAPI, your CORBA program is not bound by any of the threading rules you have when running on a Notes/Domino machine using the local classes. You can freely use CORBA objects across threads, no init/term required. <br /> <br />  &nbsp; &nbsp;3) You can actually connect to multiple servers using the CORBA classes. You'd do that by creating one Session instance for each server. But you can NOT mix and match child objects across servers, that dog just won't hunt. <br /> <br /> Hope this helps. (Hope this is <em>enough</em> ) <br /> <br /> Geek ya later! <br /> <br /> (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)  <br />Follow me on Twitter @LooseleafLLC<br /> This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.   ]]></content:encoded>
<wfw:commentRss> http://bobzblog.com/tuxedoguy.nsf/dxcomments/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes</wfw:commentRss>
<wfw:comment> http://bobzblog.com/tuxedoguy.nsf/dx/geek-o-terica-7-garbage-threads-and-the-corba-classes-in-notes?opendocument&amp;comments</wfw:comment>
</item>
</channel></rss>
