The December 2003 Blog
send me a comment

Cheers, Slainthe, Salute, and all that (Wednesday, Dec 31)
[ permalink ] [ e-mail me ] [ >> ]

Here's wishing everyone a Happy New Year! And if any of you happen to wake up feeling a little queasy tomorrow, just remember the words of Dean Martin:

"I feel sorry for people who don't drink. When they wake up in the morning, that's as good as they are going to feel all day long."

That's some good hangover optimism for you. By the way, is it true that the German word for hangover is "Katzenjammer", which means "wailing of cats"? If so, that's quite a good description...

Synchronizing Notes Time (Sunday, Dec 28)
[ permalink ] [ e-mail me ] [ >> ]

Over a year ago I released the ntimeset program to let you synchronize the Notes server time with the OS time on a Windows server. The code for that program wasn't too terribly complex, so I decided to go ahead and add some comments and make it open source (just like I did for dbActivity). Please be nice to it.

As with the dbActivity program, please feel free to turn it into an OpenNTF project if you think there is something worthwhile you can add to it.

One interesting thing about the code is that it uses an undocumented API function (OSSetCurrentDateTime) to sync the time, which takes a few extra steps in C. If you want a real-world example of how to use LoadLibrary and GetProcAddress to call a function from a DLL file, here you go.

It also occurred to me that you could do the same thing in LotusScript, if you wanted to. So along with the source code for ntimeset, I also wrote and published a LotusScript agent that does the same thing. That's two, two, two tips in one.

So I don't want to hear any of you complaining anymore about your Domino server time drifting from the operating system time. Okay? Okay.

dbActivity Program Is Now Open Source (Tuesday, Dec 23)
[ permalink ] [ e-mail me ] [ >> ]

First, the short version of this blog entry:

Due to numerous requests (no really, there actually were numerous requests for this), I have released the dbActivity command line program as open source. I added one piece of functionality to the program -- the ability to use wildcards in the database name parameter, so you could process multiple databases with a single call -- and I added some comments to the code itself so it wouldn't be too cryptic.

I guess that's my Christmas present to everyone this year. And if you don't celebrate Christmas...well, I'm not sure what you want to call it. Just make something up.

And now, the long version of this blog entry:

Okay, I finally got my butt in gear and cleaned up the code for the dbActivity program so I can feel sort of good about putting it out there as an "open source" program (if I release the source code, does that automatically make it "open source", or is there something else I have to do to qualify?). If I had my druthers, I'd have rewritten the whole thing from scratch, but I know I'm never going to spend that much time on a program like this, so I just ended up deleting some unused code, moving a few things around, and adding a fair amount of comments.

I've actually had more people ask me for the source code of this program than any of the other ones on the site, which is a little surprising to me (I would have guessed it would be ScriptSearch or DelStubs). But, If that's what people want, then that's what I'll work on. Ultimately I wouldn't mind posting the source for all my command line utilities, but there really is a lot of clean up and testing I'd have to do for each program before I did. One step at a time, right?

I have to admit that I was a little reluctant to release the code at first, for the simple fact that I'm not a very good C programmer. I feel like I hack my way through all of my C programs, and after suffering through a ton of compiler errors every time I try to make a change, I can [sometimes] eventually get a program that works. But laugh if you will, I don't really care (or I pretend not to anyway). If you can make it better, be my guest.

Which brings me to my next point: if anyone would like to take this on as an OpenNTF project, you're more than welcome to (just please give me credit somewhere). I would do it myself, but I don't think I have the time or desire to really do anything else useful with the code. And I also don't think it's fair to just dump the code out on the OpenNTF site without a watchful owner.

So if you do decide to move this over as a real OpenNTF project, please make sure that you actually do something with it, instead of plopping it out there just so you can have your name on something.

And the last thing I'll mention is: even if you're not interested in the tool itself, there's one little trick I use in this program that may be interesting to you if you do any Notes API command line programming yourself. I have some code in there that actually swaps the stdout and stderr streams at the beginning of the routine. The reason I do that is because some versions of Notes will prompt you for a password using stdout and stdin if your API program needs to be authenticated in any way, and if you're piping the output of the program to a text file you'll never see the prompt -- unless you swap stdout and stderr like I do in the program. See the code for more details.

That's all. It's late. I'm going to bed now.

My Lotus Notes Christmas List (Sunday, Dec 21)
[ permalink ] [ e-mail me ] [ >> ]

I just posted my Lotus Notes Christmas List to the ND6 forum on the LDD site. I can't wait to see if Santa brings me anything!

Registry Entry for Simultaneous Connections in Windows (Thursday, Dec 18)
[ permalink ] [ e-mail me ] [ >> ]

There's a registry entry in Windows that allows you to increase the number of simultaneous Internet connections to a given server (the default is 2, per RFC 2068). I had heard about this before, but I never applied it to any of my computers.

Today I got a wild hair and decided to find and apply this setting to see what happens. I found some good information at SpeedGuide.net, and I downloaded the registry settings for Win2k/XP.

Then I rebooted and...well, maybe it's my imagination, but everything seems a lot faster when I'm browsing. I can imagine that it would be, since you're normally downloading a whole bunch of stuff from a web page in order to display it (HTML source, CSS files, JS files, images), and if you get rid of the 2 downloads at a time restriction then everything is going to come down all at once.

There are also some other settings you can play with using SpeedGuide's TCP Optimizer (available at the SpeedGuide download page). Maybe I'll try those out later too.

On a somewhat related note (Internet browsing), I had been testing Avant Browser for a multi-tabbed interface to Internet Explorer, but at Erik Thauvin's suggestion I switched over to MyIE2, and I've been very pleased. I still use Firebird almost exclusively at home, but I really need to use IE at work, so at least with something like MyIE2 I've got tabs. Can't live without tabs anymore...

ND6.5 Testing (Wednesday, Dec 17)
[ permalink ] [ e-mail me ] [ >> ]

I've been doing some testing to make sure that some applications that are running on an R5 server will be okay when they're moved over to ND6.5. According to the Notes 6.5 Designer Help, the following things were obsoleted in or left out of ND6:

LotusScript
NotesOutline.AddEntry (supported)
NotesOutline.GetChild
NotesOutlineEntry.IsHidden
NotesDatabase.GetURLHeaderInfo
PROMPT_CHOOSEDATABASE (notesUIWorkspace.Prompt constant - 13)

Java
Outline.addEntry (supported)
Database.getURLHeaderInfo
Replication.CNOTES_REPLCONST_PRIORITYNOTSET constant

@Commands
@Command( [AdminSendMailTrace] )
@Command( [AdminOpenStatistics] )
@Command( [AdminOutgoingMail] )
@Command( [AdminOpenServerLog] )
@Command( [AdminOpenAddressBook] )
@Command( [AdminOpenCertLog] )
@Command( [AdminDatabaseQuotas] )
@Command( [AdminCreateGroup] )
@Command( [AdminStatisticsConfig] )
@Command( [AdminOpenUsersView] )
@Command( [AdminOpenServersView] )
@Command( [AdminOpenGroupsView] )
@Command( [AdminDatabaseAnalysis] )

Form/Page Events
HelpRequest
PostOpen (supported, but should use onLoad)
QueryClose (supported, but should use onUnload)
QuerySave (supported, but should use onSubmit)

Field Events
Entering (supported, but should use onFocus)
Exiting (supported, but should use onBlur)

Does anyone know of anything else to watch out for in the code? I can search for these things using DDSearch, but I want to make sure I'm looking for everything.

(BTW, I cross-posted this to the LDD forums, if you want to look there for any responses as well)

UPDATE: I got a couple responses on my LDD post, and I also found out that several of the @Command( [FileExport] ) options seem to be missing in the 6.x code stream. And I ran across an LDD post by Ben Poole that had some good things to watch out for.

The New RBOD (Friday, Dec 12)
[ permalink ] [ e-mail me ] [ >> ]

As I've been using the Notes 6.5 client over the past month, I've really come to appreciate the usability improvements that the new client seems to have. Better right-click options, more drag and drop capabilities, etc.

For example, just today I got my first RBOD in the 6.5 client (that's "Red Box of Death", for any non-Notes users in the studio audience). I've seen the old RBOD plenty of times before, which looked like this:

But I was pleasantly surprised to find that the new improved 6.5 RBOD looks like this:

You can see that the new message has just that little bit of extra information that makes all the difference. It's that kind of attention to detail that will keep me coming back for more.

NIFOpenCollection Question (Wednesday, Dec 10)
[ permalink ] [ e-mail me ] [ >> ]

Okay, this one is going to be way out there, but maybe some of you Notes API specialists can answer this for me.

There's a Notes API function called NIFOpenCollection that is used to open a collection of notes (usually views), and the first two parameters it takes are a handle to the Notes database that contains the collection (hViewDB) and a handle to the Notes database that contains the data notes for the collection (hDataDB).

In the C-API documentation for R5 it says:

NOTE: Only the following configurations are supported by NIFOpenCollection for views: the hDataDB argument references the same database as the hViewDB argument, or the hViewDB argument references a LOCAL database, and the hDataDB argument references a remote database. For folders, the hDataDB argument must reference the same database as the hViewDB argument.

So the database that contains the view can be different from the database that contains the data? How does that work? How can you have a view in one database that references documents in another database? How can I make me one of them views?

Stupid User Jokes (Tuesday, Dec 9)
[ permalink ] [ e-mail me ] [ >> ]

I just ran across the Stupid Computer Users section of eHumorCentral. Pretty funny stuff. I'm not sure how much of it is real, but there are some awfully good lines. For example:

Tech Support: "Ok, now click your left mouse button."
Customer: (silence) "But I only have one mouse." 

We've all had those days before...

Finding the Spirit of the Season (Monday, Dec 8)
[ permalink ] [ e-mail me ] [ >> ]

The Christmas season is officially upon us (it starts the day after Thanksgiving in America...not sure how that works for other countries), and that means that I'm supposed to suddenly become jolly and generous. The problem is, in and of itself this time of year means two things to me: germs and crowds. The raging crowds alone are enough to make me incredibly high-strung, but couple that with all the colds and flus and nasal discharges that surround me every winter, and I start entering a near agoraphobic state.

However, every year I try to make myself ignore all that and just enjoy the holidays. One thing that really helps is watching all the corny Christmas movies that are on all month (or that I own on DVD). Sure, some are flops, but overall they help me feel a little more accepting of my fellow man. I also just got a great book called Are You Grumpy, Santa?, which was a good laugh.

Cooking also seems to help get me in the mood. We'll be making some crab dip again this weekend, and I just put a couple of loaves of banana bread in the oven. Just the smell of the fresh banana bread kind of makes me all warm and fuzzy (one of these days I'll give jonvon's recipe a try too). I've heard before that the sense of smell has an incredibly strong association with memories and emotions, so surrounding myself with good smells always brightens things up.

Then, of course, there's the presents. In a weird sort of way, buying things for other people makes me feel good -- even if I end up washing my hands a couple hundred times an hour as I'm doing it. You can even do a lot of germ-free shopping on the Internet these days, as long as you know what you're getting. I was cruising around the IBM Merchandise Site today, and I'm really struggling to figure out who I can buy the Lotus plush monkey for...

But anyway...hmm, I had a point to all this when I started typing, but it seems to have escaped me. Maybe there is no point. Maybe I'm just saying that the holidays are what you make of them, and your attitude is largely up to you. I dunno.

Happy holidays. Enjoy your family and friends.

I Was Looking Through My Notes Release 3 Documentation... (Thursday, Dec 4)
[ permalink ] [ e-mail me ] [ >> ]

Earlier today, I was talking to someone at work about keyboard shortcuts in the Notes client (Control-M to create a new mail message, Control-E to toggle edit mode, etc). I mentioned that I thought the old releases of Notes used to ship with reference cards for all the shortcut keys, but that you can still look in the Help Database to see all the shortcuts you can use.

Since I tend to obsess over things like that, when I came home I started digging through my old boxes and books, and I found a box of documentation for the Lotus Notes Client, Release 3.3. Sure enough, there were tri-fold quick reference cards for various actions in the client, both for Macintosh and Windows/Presentation Manager (that would be Windows/OS/2 to most of us today).

Just for kicks, I went ahead and scanned them for you and stuck them in PDF files (although I zipped the PDFs up so you can view them locally more easily -- no need to open them from this server).

Windows/Presentation Manager Quick Reference
Macintosh Quick Reference

It was also kind of a blast looking through some of the other documentation in there, and reading the names of the old Lotus products that just aren't with us anymore. For instance, I saw references to:

Of course, maybe those products are still around, but they just have new names. Maybe "Lotus Phone Notes" is now "IBM Lotus Touch-Tone Telephony Workflow Integrator" or something. I'll have to head on over to http://www.ibmlotusbrowserenabledinternetwebsite.com and see if I can find any references...

Minor Update to Export Office Docs (Wednesday, Dec 3)
[ permalink ] [ e-mail me ] [ >> ]

I was playing around a little more with the Export Docs from an MS Office Library script, and I made two minor changes. First, I added this line before the OLE document was saved:

  oleObj.Application.Windows(oleObj.Application.Windows.Count).Visible = True

I noticed that Excel spreadsheets were mysteriously being saved as "hidden" windows, so when you opened up the detached spreadsheets in Excel it looked like there was nothing there (until you manually set the window to be unhidden). After I added the command above, everything was fine. I don't think this command has any relevance in the other Office OLE models, but that's okay because the error handling in the script will allow it to keep on going.

I also added the command:

  Call oleObj.Application.Quit

right after the call to oleObj.Quit, just to try to make sure that the background application gets closed when we're done with it. Keep the memory clean, and all that. Once again, the error handling will take care of us if the command isn't relevant.

Sequels to Rudolph You'll Never See (Monday, Dec 1)
[ permalink ] [ e-mail me ] [ >> ]

I love the old Rankin/Bass animated ("Animagic") Christmas specials (Frosty the Snowman, The Year Without a Santa Claus, etc.). I have several on DVD, and I always get a kick out of seeing some of the more obscure ones when they come on TV.

So I got excited this past weekend when I was shopping and I saw that I could get "Rudolph and the Island of Misfit Toys" -- a sequel to the classic Rudolph the Red-Nosed Reindeer -- on DVD for only $4.99. I snatched up a copy, brought it home, and put it right in the DVD player.

Boy, was that a disappointment. As Yukon Cornelius might have said, "I got hornswaggled." It wasn't one of the old Rankin/Bass movies at all. It was more like Rudolph meets VeggieTales, with bad computer animation and a one hour story that was at least 59 minutes too long. (It's probably not even fair to compare it to VeggieTales, which is actually pretty well produced, but the animation was similar and the previews before the movie were along those lines.)

But anyway, I've purchased and/or watched plenty of bad movies before, and this is just the latest one. And I only spent five bucks on it, so that's a pretty small loss.

However, it did get me thinking about how many sequels to Rudolph that other people must have made between the original release in 1964 and now. Here's my list of lesser-known sequels to Rudolph the Red-Nosed Reindeer:

(In case you were wondering, yes, I did make all that up. It was supposed to be a joke. There were actually at least two real Rudolph sequels though: "Rudolph's Shiny New Year" and "Rudolph And Frosty's Christmas In July". FYI.)