 Bob Balaban | Bob Balaban January 26 2010 01:00:00 PMGreetings 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! Bob Balaban January 24 2010 01:00:00 PMGreetings 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 Bob Balaban January 23 2010 08:48:38 AMGreetings 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! Bob Balaban January 7 2010 03:40:35 PMGreeings, 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. Bob Balaban December 25 2009 11:03:13 PMGreetings, 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! Bob Balaban December 16 2009 08:02:14 AMGreetings 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!
Bob Balaban December 4 2009 07:45:57 PMGreetings, 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... Bob Balaban November 23 2009 09:35:20 PMGreetings 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 a full 1-hour speaking slot on Lotusphere Thursday, and the adoration of hundreds of fellow-geeks. 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. See Ed Brill's blog post on it: http://www.edbrill.com/ebrill/edbrill.nsf/dx/lotusphere-2010-lotusphere-idol-submissions-have-re-opened?opendocument And also Paul Mooney's blog post: http://www.pmooney.net/pmooney/pmooneynet.nsf/d6plinks/PMOY-7Y45H6 Be there, or be square! Bob Balaban November 11 2009 06:22:54 AMGreetings, 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 event, thanks to the organizers and sponsors for pulling it together. Here's a PDF copy of my slide deck, plus most of the code samples (some of that is proprietary...). Enjoy! 3slugCOM.pdf CPPDemo.cpp Module1.vb NotesCOM.h Program.cs (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) Follow me on Twitter @LooseleafLLC 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. Bob Balaban October 29 2009 07:27:54 AMThe 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: And a Birds-of-a-Feather together with Paul Mooney: Get the full agenda here: http://www.tristatelug.org/tristatelug/tristatelug.nsf/NewAgenda?readform Attendance is free, register and come on by! Bob Balaban August 29 2009 08:05:12 AMGreetings, 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 IBM is not the only offender. It's making me crazy, so let's clear this up right now, ok? 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!! Don't believe me? Lets go to the dictionary: prem⋅ise /Pronunciation [prem-is]: Logic. a proposition supporting or helping to support a conclusion. Law. a. a basis, stated or assumed, on which reasoning proceeds. b. an earlier statement in a document. c. (in a bill in equity) the statement of facts upon which the complaint is based. etc. (there's a verb form, too). Now PREMISES: premises, a. a tract of land including its buildings. b. a building together with its grounds or other appurtenances. c. the property forming the subject of a conveyance or bequest. 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. 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. Ok? Can we all try to get this right now? Thanks! Geek ya later! (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) Follow me on Twitter @LooseleafLLC This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval. Bob Balaban August 23 2009 04:45:00 PMI 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. 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... Background: 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). 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. 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. 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. 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." 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). 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. Then, final bit of tech-surprise: I asked, "How do I get all the books from the broken one to the new one?" "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." 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. Thanks, Tech Support Guy! Thanks, Amazon! They figured out how to use computers to make my life easier. How cool is that? Geek ya later. (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) Follow me on Twitter @LooseleafLLC This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval. Bob Balaban August 16 2009 06:39:18 AMGreetings, 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 the work, so that I don't have to. 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, [Silly]). 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++...). 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. 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 completely evaluate the expression, we can stop once we know that 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: if doc.IsValid() AND DocIsWhatIWant(doc) then ' something ELSE ' something else end if Because there are 2 sub-expressions here connected by an AND, the "then" part of the block should only be executed if BOTH 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! 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: dim preserved as variant dim respIdx as Integer respIdx = 0 preserved = FillArrayWithStuff ' might be an array, might be NULL If Not Isnull(preserved) AND Isarray(preserved) AND If respIdx <= Ubound(preserved) Then values = preserved(respIdx) ' do more work End If 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. 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. 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). 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: dim preserved as variant dim respIdx as Integer respIdx = 0 preserved = FillArrayWithStuff ' might be an array, might be NULL If Not Isnull(preserved) Then If Isarray(preserved) Then If respIdx <= Ubound(preserved) Then values = preserved(respIdx) ' do more work End If ' ubound End If ' isarray End If ' isnull So, here's one case where the fact that LS is not "lazy" made more work for me. Sigh. I need a nap. Geek Ya Later! (Need expert application development architecture/coding help? Contact me at: bbalaban, gmail.com) Follow me on Twitter @LooseleafLLC This article ©Copyright 2009 by Looseleaf Software LLC, all rights reserved. You may link to this page, but may not copy without prior approval. Bob Balaban August 9 2009 07:06:21 PMGreetings, 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 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). 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. 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 The Queen (tip, don't ask about Diana or Camilla. Touchy.). 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). 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. Geek ya there! | |