Bob Balaban's Blog

     
    alt

    Bob Balaban

     

    Drain Google: Sample code to get all your stuff back from GoogleApps

    Bob Balaban  July 26 2010 12:45:00 PM
    Greetings, Geeks!

    Have you tried out Google Apps yet? Are you using any of their facililties for file sharing, email, collaborative web sites, or even for posting videos (YouTube)? If so, the you may have noticed that over time you've accumulated a lot of assets in Google's "cloud".

    But what happens when you want all of that stuff back? What if you gave lots of people free GMail accounts, but then you decide you need to upgrade them to a real enterprise messaging system? Or what if you decide you just don't like GMail that much? What if you decide to move from ad hoc file-sharing on GoogleDocs to an integrated Domino/Quickr "content management" system? What if hosting mission-critical business documents in the "cloud" just makes you nervous?

    Given that broad context, I've written a Java application (runs in Eclipse, or standalone) to log into a specified Google account, find all the objects in GoogleDocs belonging to that user, and download them into a Notes Document Library NSF. I'm posting the source code for that app here, as a sample, to illustrate how it can be done.

    Why? I have a couple of reasons. One, to share some basics about the Google APIs, which I think are a good example of RESTful web services technology. Two, to explain that this is a piece of what I hope to be a larger project (which I'm calling "Drain Google"), for which I'm seeking funding, to create an app that will download ALL of your assets residing anywhere in GoogleApps (docs, sites, YouTube, mail, etc.).

    It Is What It Is

    Legal stuff: This is a sample, no claims are being made as to functionality or reliability. Take, it, modify it, use it, give it to someone else. The sample code is Copyright 2010 by Looseleaf Software. If you make money on my code, you should give me some.

    The sample app relies on the Google Apps Client API library for Java, which you can get here (basic data API), and here (GoogleDocs API). One nice thing about the Google API kits is that they give you source code, so you can compile it yourself, and debug into it using Eclipse. Good stuff!

    The sample does a search on a specified GoogleDocs account, and then does a 1-way download to your computer, storing the document (along with some metadata) in the specified Notes DocLib database. It contains some logic to try to figure out what the source document format was (much harder than you'd expect, since GoogleDocs does not "remember" the original file format of things you upload), and it parses folder tags, translating them into DocLib categories.

    One could take this sample and expand it to do 2-way synchronization with small-to-moderate levels of effort, but the sample as-is does not address that functionality. My long-term goal (see comment about funding, above) is to expand this to include other Google sources (Sites, Mail, Calendar, etc.), and to allow for 2-way synchronization of objects.

    It Isn't a Notes Agent

    This little app would make a nice Notes Agent, but it isn't currently configured that way. I did try, but ran into some....issues with the Notes Java Security Manager that prevented it from working. I couldn't run it in Notes 7, because the Google libs require a newer version of the JRE. Notes 8.5x has the right JRE, but the Security Manager got in my way, and I could not develop a workaround. Maybe I'll blog about that in more detail later. For now, you're limited to running this as a standalone Java application. It takes command-line inputs specifying your Google name, password and the path to the destination Notes NSF. Of course, it uses the Notes Java APIs to store the files in the database.

    All of the code is in one Java class (Documents.java). Not terribly complicated, but not boringly obvious, either (IMHO). I hope you can use it to learn something about how the Google APIs work, and maybe even to have some geekfun. Feel free to post comments and/or questions about the sample to this blog.

    Enjoy!
    Documents.java

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    Want to debug Java agents INSIDE Designer? You can! (sort of)

    Bob Balaban  July 7 2010 02:20:00 PM
    Greetings, Geeks!

    Here's a little something I stumbled upon last night: (using Designer 8.51) a way to actually debug Java agents *without exiting Domino Designer*!

    I'm pretty sure this is not documented, or actually, even supposed to be possible. But, here's the scoop.

    First, this only works if your agent is also set up to be a Java "application", i.e.,it has to have a main() method in it. To see how to do that, visit my previous posts on the "2-headed beast" technique.

    Assuming you've done that, open up the agent (.java) file in Designer. A new menu choice appears in the top menu bar: "Run". Click on that, and select "Debug Configurations". You are now going to set up a debug configuration that tells Eclipse (hidden down below the layers of Designer) how to launch and debug your Java code. You'll want to right-click and select "New" to create a new configuration. You can name it (but in my experimentation, I've found that Designer rarely, if ever, saves these, so you'll have to create the configuration anew each time). See Figure 1 for a screenshot of the dialog that comes up. You want to tell Eclipse that you've got a "Java Application" (that's why you need to be using the 2-headed beast, so that your code is both a Java "main" application AND a Domino agent).

    Figure 1: Image:Want to debug Java agents INSIDE Designer? You can! (sort of)

    You want the "project" to be your current NSF/NTF. Once that's set, you should be able to click "Search" for the "Application" choice and see your Java class name there.  I like to use the "stop in main" checkbox, so that the debugger automatically breakpoints the main() method. But it's not required, you can just set breakpoints yourself, wherever you want by double-clicking in the left-side gutter.

    The first time I tried that, I got an error saying that the program was not compiled to contain line numbers for the debuggerer. If you get that too, just go to the Project menu, select Properties. Click on "Java compiler" in the left on the left side of the dialog box, and change the following options (see Figure 2):
      - Compiler level to 1.5
      - select the "include line numbers" checkbox
      - select the "add variable attributes" checkbox
      -

    Figure 2: Image:Want to debug Java agents INSIDE Designer? You can! (sort of)

    Click "Apply" and "OK". When it asks if you want to rebuild the code, you do.  Designer will usually save these settings, though I've found it confusing - apparently "project properties" can apply to the .java file, OR to the entire agent, and the UI doesn't really make the distinction obvious. Or maybe I'm wrong and just confused....

    So, once that's all set up, you can click the "Debug" button in the configuration dialog, and it will launch your agent. You'll probably be prompted to switch to the "Debug perspective", which I do recommend. For some reason, at least in my workspace, the debug navigation smarticons don't appear (step in, step over, etc). But you can still right-click in the stack-trace panel and get all the choices, the most common of which have FunctionKey shortcuts (F6 for "step over", and so on). It's just like real debugging!!

    Except, well, I couldn't figure out how to debug into a scriptlib. If you have supporting code out on your hard disk, you can add the folder and/or files to the "source code path" in the debug configuration dialog, or even specify it on the fly the first time you elect to step-in to the code. But scriptlibs are in the NSF/NTF, not on disk per se, and i couldn't figure out how to reference them. Anyone know how to do that?? It's worth a classic Looseleaf t-shirt (available in all sizes S to XXL, except for XL) to me to know!

    One other thing I had to play around with: how to get back to the "normal" Designer UI from the Eclipse debuggerer. Here's how I did it:
       - Click on the Window menu
       - Select "Open Perspective", then "Other"
       - Find "Domino Designer" in the big list, double-click on that

    A few caveats:
      - I'm pretty sure this is unsupported functionality, so it may disappear in some future release
      - I'm pretty sure this is unsupported functionality, so it's not guaranteed to always work
      - It's fun to play with, but I think for heavy debuggering I'm still going to just use standalone Eclipse
     
    Enjoy! Geek ya later!

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    I’m speaking at ATLUG (Atlanta Lotus User Group) in August

    Bob Balaban  July 1 2010 04:30:00 PM
    Greetings Geeks!

    I am very pleased to report that I've been invited to speak at the August ATLUG meeting, in Atlanta, on the 26th.

    My topic will be: "Debugging Java Agents for Humans", basically a demonstration of some techniques, collectively called "The 2-headed beast", that allow you to code and debug Domino agents in Eclipse, then paste them into Designer without changing a line.

    So, Come On Over! Should be a rockin' good time. Check out http://www.atlug.org for details. Thanks to Lisa Duke (lisa.duke@simplified-tech.com ) for handling logistics, and thanks to Randy Davison for organizing the meeting. Contact Randy to register or to ask questions. And, of course, thanks to IBM for supplying the meeting room and, um, lunch. And the product, too, of course. :-)

    Geek ya later!

    Two-Headed Beast redux

    Bob Balaban  June 4 2010 05:29:42 PM
    Greetings, Geeks!

    Just a quickie to let you know that my friend and colleague, Chuck Connell, has posted some very cool enhancements to my original 2-headed beast samples on his downloads page. LOTS of other very interesting stuff there too, so go check it out.

    My write-up on Two-Headed Beast is here.

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    I am doing 3 sessions at The View Admin/Developer Conference this week

    Bob Balaban  May 10 2010 04:18:17 AM
    Greetings, Geeks!

    This week is a big annual geekfest here in the Boston area: The View's Admin/Developer conference. This year I am presenting 3 different sessions:

       Debugging Notes Java agents with Eclipse (the "2-Headed Beast" technique)
       Advanced programming with Notes/Domino COM classes (stuff you never thought you'd be able to do)
       Deconstructing Web services: How do they really work and what to do when they don't

    Tuesday is "jump-start" day, and the regular sessions are Wednesday, Thursday and Friday.
    Hope to see you there

    (Added later)
    Here's a .rar file containing the demos for my COM and Web Services sessions:
    BalabanDemos.rar

    And here are the Java samples from my 2-Headed Beast session:
    Agent1.java
    Agent2.java
    DebugAgentContext.java

    Geek-o-Terica 11: View AutoUpdate, Part Deux

    Bob Balaban  April 14 2010 06:19:01 PM
    Greetings, Geeks!

    A little over a week ago I posted on the topic of the View.AutoUpdate property, and made some comments about how it affects the results and the performance of agent (or other) code accessing views. I promised a follow-up post delving a bit more deeply into this topic, and here it is.

    I created a form named "Numbers", with a single field on it, of type number, and name "number"
    I created a view (named "Numbers") with a selection formula including all the documents whose forn field is "number", and created 1 column containing the "number" field from the form. I set the column to sort, ascending.

    Then I created 5 documents using the "Numbers" form, with the values: 2, 4, 6, 8 and 10.

    Then I wrote this LotusScript agent:

    option public
    option declare             ' no kittens were harmed in the creation of this agent
    Sub Initialize
            Dim n As Integer
            Dim s As New NotesSession
            Dim db As NotesDatabase
            Dim doc As NotesDocument, tmp As NotesDocument
            Dim v As notesview
           
            Set db = s.currentdatabase
            Set v = db.getview("Numbers")
            v.AutoUpdate = True
            Set doc = v.GetFirstDocument
            While Not (doc Is Nothing)
                    n = doc.number(0)
                    Msgbox "Number is: " & n
                    If n = 4 Then
                            doc.number = 7
                            doc.save True, False
                    End If
                    Set doc = v.getnextdocument(doc)
            Wend
    End Sub

    Note that I'm setting Autoupdate to "True" (it's the default setting anyway). The agent looks at (and prints out) the number value of every document, as accessed in order from top to bottom in the view. When we get to the 2nd document (number = 4), we change the value to 7 and save the document.

    With AutoUpdate set to True, the sequence that gets printed out is: 2, 4, 8, 10. Notice that 6 got skipped, because changing the value of the second document from 4 to 7 moved that document in the sort order AFTER the third document, which contains the value 6. So the new "next" document is the containing 8, because the getNextDocument() logic caused our snapshot of the view to be updated before retrieving the next document in the sequence.

    Then I reset the value of the document now ontaining 7 to 4 again, and re-ran the agent with AutoUpdate set to False. The sequence that gets printed out this time is: 2, 4, 6, 8, 10. At the end of the agent's run, the view contains: 2, 6, 7, 8, 10, as it should. The difference is, that with AutoUpdate off, our snapshot of the view index remains constant after the change and save of the 2nd document, so the "next" one after that is STILL the one containing the 6.

    That's it, in a nutshell. One final comment: Were this a Java agent, you would change the Set doc = v.getnextdocument(doc) line to:
         tmp = v.getNextDocument(doc);
         doc.recycle();
         doc = tmp;

    Geek ya later!

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    Geek-o-terica 10: "Autoupdating" in views

    Bob Balaban  April 4 2010 09:51:51 AM
    Greetings, Geeks!

    I've seen some stuff flying about recently about whether one should, or should not, disable automatic updates when iterating through the documents in a view using LotusScript or Java back-end classes, and why. Some of the points made greatly surprised me with how wrong they were, so I thought I'd give you my take on the issue.

    Background
    At the level of the Notes C API (where everything that really matters really happens), what is a view? It's a data structure that represents a snapshot of the view's index. Of course, view indexes are changing all the time, some are more volatile than others, but (in the worst case) a view can be subject to change any time a single document is created or updated in the NSF. That doesn't necessarily mean that the view gets re-indexed every time that happens, but it does mean that a "view" living in an NSF on a server, as a data structure that is shared ("used") by potentially many clients at the same time, can change out from under you while you are using it.

    So, what about the NotesView object (View in Java)? It is essentially a wrapper for a view index data structure (called an HCOLLECTION for you C API geeks). Most people use this class primarily for navigation over documents: GetFirst/NextDocument, GetNext/PreviousSibling, etc etc. Virtually all of the navigation methods in the NotesView class translate down to a single C API entry point invocation, called NIFReadEntries (the "NIF" prefix is common to many API calls having to do with views, it stands for "Notes Indexing Facility"). The job of this complex call is to take the provided "starting point", or "position"  in the view (represented by the "current" document, for example), figure out how to navigate relative to that location (next, previous, first child, whatever), and find the document in the view's index corresponding to that new location, or position, given the view's current nesting, categorization, and so on.

    This potentially complex navigation is done based on the "snapshot" of the view index currently held by the "user" (LotusScript/Java program, Notes client, remote C API program...). Now, suppose that my Java program is navigating through the documents in a view, and while it's doing that, some other program, or user, modifies the view from another client? Perhaps a new document was created in the database, and that document matches my  view's selection formula. In fact, perhaps that document just happens to sort to the top of the view, so that all of the other documents in the view have a new "position". Perhaps my own program, inside the navigation loop, makes a change to a document that I see, and re-saves that document. If that change affects the value of a column in the view, and if that column is sorted or categorized, then my current document will actually "move" to a new position in the view.

    The problem is this: when the documents in the view change position while my program is between navigational events in the view, how do I define the "next" document? Is it the document that would-have-been-next before the view changed? Or is it the document that is actually-next given what might be a new location for my "current" document? It's a puzzle!

    One good thing about the NIFReadEntries call is that when invoke it to navigate elsewhere in the view, it tells you if the view has been modified since the last time you called it. It can detect when your current "snapshot" (HCOLLECTION) of the view gets out of sync with the "real" view index on the server. Note that there is NO WAY to prevent the view from being changed, if someone or something somewhere modifies the view contents, it just changes out from under you.

    However, the implementation of the NotesView/View class gives a choice about what to do about this situation, in the form of the "AutoUpdate" property. This property is On by default, here's the logic it follows, for example, in the GetNextDocument() call:
    1. Find the position of the "current" document (it's cached in the document object during navigation)
    2. Invoke NIFReadEntries with the current position and the various navigational options set to get the "next" document
    3. Read the NOTEID and position of the next document (if there is one) returned by the call
    4. Examine the "dirty" flag returned by NIFReadEntries to detect whether the view has changed since our last call to it
    5. If the view has changed, and if the view object "autoupdate" flag is set, then
    6. Update our HCOLLECTION against the view index (this might, or might not force a re-indexing operation on the view)
    7. Re-compute the position of the "current" document in the updated index (it might, or might not have moved)
    8. Call NIFReadEntries again to navigate

    If the "AutoUpdate" flag is off, then steps 6, 7, and 8 are skipped.

    This is a powerful feature, though frankly, I nearly always turn it off when navigating views. From a programmatic point of view, the danger of having it on is that you can easily either miss documents in a view, or visit the same document multiple times, if you're not careful.

    As this post is already pretty long, I'll do a Part Deux posting exploring the ins and outs of AutoUpdate soon.

    Geek ya later!

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    Slides and demos from EnwicklerCamp 2010

    Bob Balaban  March 14 2010 04:21:34 PM
    Greetings Geeks!

    Thanks to everyone who came out to Gelsenkirchen (Germany) for EntwicklerCamp. I did two presentations:

    Real-world Web Services (what happens when you sail beyond the edge of the documented world)
    Advanced Programming with Notes/Domino COM classes (stuff you NEVER thought you could do from .NET or even C++ programs)

    The conference was superbly organized and executed, congratulations and kudos to Rudi Kneght and his minions for an enjoyable and productive event.

    Here are the 2 presentations (in PDF format), and a .RAR file containing almost all of the sample source code (heh heh).

    Note that all of these materials are Copyright 2010 by Looseleaf Software, all rights reserved.


    BalabanDemos.rar
    COMclasses.pdf
    realworldwebservices.pdf

    Geek ya later!

    (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com)
    Follow me on Twitter @LooseleafLLC
    This article ©Copyright 2010 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval.

    I will be speaking at "EntwicklerKamp", March 8-10, 2010

    Bob Balaban  January 26 2010 01:00:00 PM
    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 excited to finally be able to go myself.

    http://www.entwicklercamp.de/EntwicklerCamp/Home (Currently the site is mostly in German only, though some of the speakers will be presenting their sessions in English)

    My topics will be:
    Real-world Web Services (what happens when you sail beyond the edge of the documented world)
    Advanced Programming with Notes/Domino COM classes (stuff you NEVER thought you could do from .NET or even C++ programs)

    Geek ya later!

    Everybody: February 14, 2037 at 1:30pm (plus or minus)

    Bob Balaban  January 24 2010 01:00:00 PM
    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 my friend and colleague, Paul Mooney, 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&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!

    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).

    So, remember this date, when (I guess) EVERYTHING will be "done": 14 Feb., 2037, 1:30pm (local time, plus or minus)

    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.

    Geek ya later!

    BP201-Meet -The Grumpies- Eschew Obfuscation.pdf

    Never done this before....

    Bob Balaban  January 23 2010 08:48:38 AM
    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 or Lotus/IBM-related news. I just felt like telling you about a song I really like.

    I picked up on Flogging Molly's "The Worst Day Since Yesterday" on an episode of "StarGate/Universe". You can hear the music here. (We won't go into the sexist nature of the group's name now. Maybe another time).

    Disclaimers: this topic has nothing to do with Lotusphere, my trip home, Lotus, IBM or anything else. I just like the song.

    Geek ya later!





    "First Question" @Lotusphere?? Vote now!

    Bob Balaban  January 7 2010 03:40:35 PM
    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 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".

    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).

    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 here). 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.

    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.

    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:

    a) Not BORING
    2) NOT LSX Toolkit-related
    iii) I'll consider topics related to DXL, but I find this fairly boring now, so it would have to be *good* to win
    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
    5) Please, no marketing-blah-blah-blah
    vi) Better if it's something a lot of people care about
    g) I'll consider both admin and dev topics, but everyone knows i am biased towards dev

    So, go forth and cogitate! Eschew obfuscation!

    Geek ya later!

    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.

    Update on US COBRA health insurance subsidies

    Bob Balaban  December 25 2009 11:03:13 PM
    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 Government subsidy of their monthly premiums.

    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.

    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  6 months, although I'm not completely sure about that.

    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.

    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).

    As always, don't take anything I say about this (or anything!) as gospel. Check it out for yourselves.

    Merry Christmas to all, and a Happy New Year. And remember: "War is over, if you want it." (John Lennon).

    Geek ya later!

    Coming to Lotusphere 2010? Meet The Grumpies!

    Bob Balaban  December 16 2009 08:02:14 AM
    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 “The Grumpies”: Eschew Obfuscation!  
    Wednesday, 8:30am, Dolphin Northern A-C
    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&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.”

    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 you grumpy. Hope to see you there.

    Geek ya later!


    New "Admin Bootcamp" announced for Lotusphere10

    Bob Balaban  December 4 2009 07:45:57 PM
    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 "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.

    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.

    Here's a link to the Admin Bootcamp description on the IBM Lotusphere site: http://www-01.ibm.com/software/lotus/events/lotusphere2010/admin-boot-camp.html.

    Hope to see you there

    Geek ya later...