The Latest Blog
send me a comment

Ode To My Maglite (Tuesday, Nov 19)
[ permalink ] [ e-mail me ] [ ]

My MagLite, 20 years old today This is my Maglite.

It turned 20 years old today. I know that because I emailed the serial number to Maglite support and asked them when it was made. They look up the number in their database and give you the date of manufacture. 11/19/1993. That's my big guy's birthdate.

A few things about this. First, I don't have any other electronic devices anywhere near this old that are still in regular use. I do have some clothes that old that might get worn occasionally (don't judge), probably some tools, definitely some books, but nothing that plugs into the wall or uses batteries. I turned on the Maglite as recently as a few days ago.

TRIVIA: I still used the original bulb up until this year. The bulb lasted 19 years. Even more impressive, vowe suggested that I check the endcap for a spare when it burned out. Spare was there, and it works! After all this time I don't even have to buy a new bulb.

Second, I continue to use it despite the fact that I've got a few other flashlights that are much brighter. I have a little $4 Chinese flashlight that I use sometimes (when I can find it) that puts out a lot more light, but the old Maglite is always the first thing I go for. I've dropped it and gotten it wet and probably even used it as a hammer; it has kind of an Old Reliable feel to it. It would be part of my Zombie Apocalypse Kit if I had one.

Third, it has that intangible brand loyalty thing going on. If this thing ever [somehow] breaks, I will go right to the store and buy another one. Maybe two (cause I kinda like the MAG-TAC line). I'll probably give one to each of my kids when they move out of the house someday. And then they'll be like "Really Dad, a flashlight?" and I'll be all "It's not a flashlight, it's an heirloom!" and they'll talk about it in counseling 5 years later. Whatever, I'm doing it anyway.

It mostly comes down to quality. I can buy cheap throwaway flashlights that are brighter and newer, but they're just... disappointing. This thing has good heft, it takes a beating, and it lasts forever (in flashlight years). I'll always pay extra for that.

Any comparison or metaphor to software, technology, or life in general is an exercise left to the reader.

Domino Designer JVM Settings: A Little Deeper (Friday, Aug 30)
[ permalink ] [ e-mail me ] [ ]

Every user of Domino Designer in Eclipse (aka DDE, aka Domino Designer 8.5+) probably already knows how to adjust their JVM settings to give DDE more memory. Andrew Pollack did a nice writeup on it way back in 2008, and there's now an IBM technote on the subject.

But, like most things, it's good to delve a little deeper into the topic so you can really understand what's going on. Here are the IBM suggested settings and what they mean:

vmarg.Xmx=-Xmx1024mMaximum Java heap size (memory used by the JVM) is 1024MB. The lowercase "m" at the end is quite important; don't leave it off or make it capital.
vmarg.Xms=-Xms512mInitial (and minimum) Java heap size is 512MB.
vmarg.Xmca=-Xmca512kBlock size used for increasing memory allocation is 512kB (note that this value is in kilobytes, not megabytes)

The technote includes some helpful additional information:

So that's good stuff right there. Maybe all you need to know. If you want to see some screenshots to back up the instructions in the technote, the TLCC page on this subject is a handy reference. If you want a bit more detail, please keep reading below.

First, 1024m is a very good setting for the max heap, even if you have tons of RAM installed on your machine. This is because the Lotus Notes client on Windows (at least as of version 9.0) still uses a 32-bit JVM. You might be running Windows 7 64-bit with 8GB of RAM, but you've still got a 32-bit JVM. According to the IBM Java documentation, the maximum amount of memory available to a 32-bit JVM is 1.8GB. However, some people have problems setting the memory too much higher than 1024m -- it supposedly has something to do with contiguous memory allocation, but I really don't understand the details -- so 1024m is a safe value. If you have less than 2GB of RAM on your workstation (and I'm really sorry if you do), don't go higher than 50% of installed RAM.

Second, you should set the minimum heap size to be smaller than the maximum heap size (as recommended). There are plenty of web sites that will tell you (especially for Java servers) to set the minimum and maximum to the same value for efficiency. Unfortunately, for a client application like Lotus Notes this can potentially be less efficient. Not only can setting the values equal prevent effective garbage collection, it can also cause heap fragmentation. This document on IBM JVM heap sizing has a very nice explanation.

Third, these JVM settings are normally placed in the jvm.properties file in the Notes framework directory. If you install a FixPack or a new version of the Notes client, your custom JVM settings might get overwritten. Some (many? all?) FixPacks and upgrades reset the jvm.properties file. Every time you upgrade or patch your client, you should re-check the jvm.properties file and reset it if necessary.

Fourth, you can also put these settings in the rcpinstall.properties file. This file is in your data\workspace\.config directory, which has the unique advantage of being editable even if your Windows setup has the Notes program directory locked down. It also overrides any values in the jvm.properties file. Keep in mind that this file might also get overwritten when you upgrade your Notes client -- or if you delete your workspace directory.

I personally prefer to put the values in the rcpinstall.properties file, especially because this has priority over the jvm.properties file so I have much more confidence that the settings will be used. If you're curious about what the final values used by your Notes client are, you can go to the menu option Help - About IBM Notes and click the "Configuration Details" button, then scroll down to the -Xmx setting.

Or, as mentioned in the technote, you can open Domino Designer and use the "Show heap status" preference. A couple things about that preference though: (1) it only works for me if I unset and reset it after I restart Notes, and (2) you need to hover over it to see the actual max heap size, which is labelled as the "Mark" size on my Notes 9 client. The "max" size listed in the heap status bar is usually less than the max heap size.

Mud Run Over, Huge Thanks (Wednesday, Jun 5)
[ permalink ] [ e-mail me ] [ ]

Before anything else, I want to give a huge THANK YOU to everyone who supported me in the mud run by donating to the Myelin Foundation and The Art of Curing Matt. I don't have any official numbers, but I do know that over $1,000 was donated in under 4 days, and that is incredible. You are an amazing and generous community.

Next, I am happy to announce that Chris Miller wins the "Guess The Mud Run Time" prize. He will be receiving a very cool piece of art by Matt Reimer himself: a drawing depicting an inhabitant of Matthewland. Thank you Matt and Troy for offering that as a prize.

If you are morbidly curious about what it looks like for me to participate in a mud run, I have put together a special mud run tips page with bits of advice for anyone else who might want to try this sort of thing. At the bottom of the page is a link to a gallery of pictures that my wife was fantastic enough to take as she tracked me (with a huge grin on her face) at various obstacles.

If you're wondering: yes, I did get pretty dirty. But my face stayed clean and the mud stayed out of my mouth. So that's something.

Finally, for your viewing pleasure:

In the actual video you can hear my daughter yelling "Lie down in the mud Dad!". Children are so precious.

Mud Run Training Day 3: The Outfit (Friday, May 31)
[ permalink ] [ e-mail me ] [ ]

Today is the final day of mud run training (the race is tomorrow, did you sponsor me yet?).

Upon recovering from yesterday's mud-in-the-face bit, I decided it would be better to hold off on any more intentional dirtiness before the race. I have switched metaphorical tactics from "wading slowly into the pool" to "jumping off the diving board". Tomorrow will be the dive.

So today I have been picking out clothes for the race. Here's what I came up with so far:

The rationale is:

That's right, I showed you a picture and offered a rationale for my running undershorts. Please donate so we won't have to do this again.

Thank you for your support.

Mud Run Training Day 2: Mud In Yer Eye (Thursday, May 30)
[ permalink ] [ e-mail me ] [ ]

As part of today's mud run training (and further incentive for you to sponsor me), I increased my dirt-tolerance quotient by allowing my kids to throw mud at my face.

  

I apologize for the slightly large size of the animated gif (I usually try to keep graphics much smaller than that). I just thought it might have a bit more impact that way. Plus, animated gifs are all the rage this year, aren't they?

The kids originally thought that they were allowed to throw the entire bucket of mud on my face... I had to explain to them (twice) that they were allowed only a handful each. I was glad for a nice shower afterwards.

Now, if you haven't donated to The Art of Curing Matt yet, hurry over to my Sponsor Me in a Mud Run page and do it before you forget!

Mud Run Training: Day 1 of 3 (Wednesday, May 29)
[ permalink ] [ e-mail me ] [ ]

First off: huge thanks to those of you who have sponsored me already. If you haven't donated yet, please take a quick look at my Sponsor Me in a Mud Run page to learn about the great cause I am helping to raise money for, and please consider even a small donation. Every dollar helps!

As part of my last-minute training for this event, I will practice getting dirty a little more and a little more each day. Here is day 1:

Hey, you gotta start somewhere. Georgia red clay is very... mushy.

It is also important to set proper expectations. I knew that a mud run would involve mud and general dirtiness, but I'm not sure I appreciated quite how much filth is involved until I looked at a few "What to expect in a mud run" articles last night.

There are frightening stories comparing post-mud-pit to being an unwiped baby, and warning runners who don't normally wear underwear (really?) to buy some nice long spandex. Apparently you have to be very careful not get your shoes sucked off in the pit too -- some folks use duct tape to secure them to their legs -- and people advocate taking a running belly flop leap into the deep mud rather than going feet first.

Horrible.

Some of the important points seem to be:

So it seems that I should wear spandex, rubber shoes, and gloves. If I add a cape I'll be a superhero. I'm considering shin guards and a surgical mask too. Maybe goggles.

Help Me Get Muddied Up (Tuesday, May 28)
[ permalink ] [ e-mail me ] [ ]

Short version: please help me raise money for The Art of Curing Matt. You can sponsor me in a mud run this weekend! Just go to the donation page and follow the instructions. If you have the closest guess to my actual finishing time in the race, you'll win a prize! I don't know what the prize is yet, it might be something silly... your suggestions are welcome in the comments.


Longer version: I know that a lot of people have been asking for donations for various charities recently -- people in the "formerly known as the Lotus Community" and elsewhere -- but please take just a minute to read this.

Troy Reimer is a good friend of mine. I worked with him at SNAPPS a few years ago, he's an excellent programmer, and he's a really really nice guy. You might have met him before, or seen him speak at a conference, or used some of his code. Even if you don't know him personally, you're only one degree of separation away from him as you're reading this.

Two years ago, Troy's 10 year old son Matt was diagnosed with a genetic disorder called Adrenoleukodystrophy (ALD). Click through to the About ALD page on the Art of Curing Matt website for details on what ALD is and what it does to those who have it. Because it's a relatively rare disease, there is a very limited amount of research into treatments and potential cures.

The Reimer family is putting together an art auction to raise money for the Myelin Project, a non-profit organization that funds research for diseases like ALD.

I won't be at the art auction this weekend, but I wanted to try to do something to help raise money and awareness.

On the same day as the art auction, there is a mud run near where I live. People who know me also know that I don't like dirt. Or getting dirty. Especially not intentionally. However, I will allow myself to get covered in mud and other outdoor woodsy filth for a cause. So here's what I'd like you to do:

  1. Go to the Mud Run donation page on this site
  2. Use the big "Donate" link make whatever donation you can (NOTE: I am not collecting any money myself, it is all going directly to the charity)
  3. Click the "Guess The Time" link, and guess how fast (or slow) I will run the race
  4. Give yourself a pat on the back, then go and tell other people to do what you just did

I don't really have any good way to track the money that I'm personally raising -- I'd like everyone to donate directly instead of going through another site that would charge administrative fees -- but I will maintain the list of guesses about my race times. Hopefully that will result in some small amount of competitive activity to keep everyone engaged for a few days.

I will also post pictures this week during my "training" as well as after the race, for the curious.

THANK YOU.

p.s. - yes, this is very last-minute. But every extra dollar you donate is a dollar that the researchers would not have had otherwise.

IMPORTANT: OpenLog and Disabling Lsi_Info (Friday, Mar 15)
[ permalink ] [ e-mail me ] [ ]

This is something that has come up a few times in the past, and I (and other people) have advised about it before, but it certainly bears repeating:

If you are using OpenLog with LotusScript on a Domino server, please set   NoLSIStackTrace=True

This is a global variable that determines whether or not the OpenLog code will use Lsi_info(14) to log LotusScript stack traces. IBM has found that the Lsi_Info function (which is part of the LotusScript language) can cause serious problems on the Domino server. You REALLY need to avoid calling this function on the server.

The good news is that (A) as far as I know it is still okay to use this on the Notes client, just not the server, and (B) if you are using OpenLog it is very easy to turn it off globally or on an agent-by-agent basis simply by setting   NoLSIStackTrace=True. The bad news is, well, you lose debugging info. But the good far outweighs the bad.

DO NOT PANIC. Just go into your OpenLog database, open the Initialize sub in the "OpenLog Functions" script library, and set the NoLSIStackTrace variable there. Then save and close and use the "Design" server task to push it out to all your databases that use OpenLog. There, you're done.

Don't get scared into thinking that you have to stop using OpenLog, just set the variable and push it out. That's the beauty of deploying script libraries using master templates.

1 = 0.99999... (Thursday, Jan 31)
[ permalink ] [ e-mail me ] [ ]

One of my big thrills at Lotusphere/Connect 2013 this year was a few seconds of microphone time at the Closing Session on Thursday afternoon.

John Hodgman was interviewing Steven Strogatz about mathematics and his book The Joy Of X, and the discussion came around to the statement that the number one is actually equal to the number 0.99999... repeating infinitely. Steven Strogatz asked if anyone in the audience had a "favorite proof" of this and, well, I indeed have one.

So I got to stand up, find a microphone, and stumble quickly through the proof. I was amazingly nervous -- being on a mic in a room with a few thousand people explaining a math proof to a well-known mathematician will make you nervous, as it turns out -- and I feel like I wasn't very clear about the whole thing, but John Hodgman made some very funny "WHA?" noises and both men on stage seemed to understand what I was saying and roll with it. And people clapped. So all in all it was a win.

The proof goes like this:

Proof of 1=0.999...

I've always thought that was a neat equation, and quite frankly it's about all I remember from my infinite series and sequences class in college. Math is cool.

Determining Your Sametime Client ID (Thursday, Dec 20)
[ permalink ] [ e-mail me ] [ ]

Upon setting up my Notes 9 Beta client and trying to connect to my test Sametime server, I got this message:

Sametime Client Not Authorized error message

Since I am my own system administrator, I contacted myself. This led to some heated internal discussions, followed by the inevitable Google search.

Apparently this is a fairly well-known message to real-life Sametime admins and the usual remedy is to configure the VPS_ALLOWED_LOGIN_TYPES variable in the server's sametime.ini file using the appropriate Sametime Client ID. Unfortunately, at the time this happened the IBM technote that lists the Client IDs hadn't been updated with the Notes 9 Beta client information yet, which left me with the question of how to determine the ID my Lotus Notes embedded Sametime client was using.

There is information on how to do this using debug settings on the Sametime server, but I wanted to know how to get this information directly from my client. So here is what I did:

In the trace log file, I saw lines like this:

Got client ID [1F954w==] from runtime version property [st852.notes900] 
Client ID succesfully set for Sametime login. Login Type: 4678

The first line is a bit of a red herring; it looks like it should be the Client ID I'm looking for (or a Base64 version of it), but it's not. Maybe it's some encoded form of it or something, I don't know. Just ignore it.

What you really want is the "Login Type" number on that second line. That is the decimal version of the Client ID you need to add to VPS_ALLOWED_LOGIN_TYPES on the server. If you use your favorite calculator program to convert that to hex, you will see that the hexidecimal representation of 4678 is "1246", which is the Client ID you are looking for.

Of course, if you don't have access to make that setting on the Sametime server that won't help you one bit. But if you can get a hold of your Sametime administrator then that is the information they will need.

Mac Font Foibles On Chrome (Saturday, Sep 29)
[ permalink ] [ e-mail me ] [ ]

This has been a week of updates to my MacBook. I bought an SSD drive to replace my original (4 year old) hard drive, which meant that I had to finally update to OSX Lion to get TRIM support. This also meant that I got around to all sorts of minor software updates that I've been holding off on, since everything on my Mac has always worked just fine and I saw no need to update software that already worked. Don't mess with a good thing and all that.

One bit of weirdness I noticed after everything was done is that the web-based inbox of one of my email accounts didn't look quite right. It uses the typical bold-font-for-unread-messages, unbold-for-read-messages scheme, but suddenly it was very hard to distinguish between the bold/unbold read/unread messages on the screen. Other webmail and random websites with bold fonts looked fine, but this one inbox just wasn't right.

So many things had changed, I wasn't sure where to start looking. I not only upgraded my browser, I upgraded my entire operating system, so there were lots of potential points of failure. Maybe there was a new accessibility feature that got turned on. Maybe a change to font-smoothing. Maybe all my system font files got updated and one of them was screwed up.

I finally narrowed it down to this: the problem was with Geneva bold fonts on Google Chrome. Here's how Geneva bold looks on two slightly different installations of the Chrome browser on Mac OSX:

   

I know that looks like a pretty minor difference, but trust me, when you have row after row of bold and non-bold sitting on top of each other, that second version of the bold font display doesn't have nearly enough contrast against the non-bold font. The bold isn't quite... bold enough. It's kind of grey and fuzzy instead of black and crisp.

Now that I knew what to search for, I wanted to see if the problem had been reported. I was going to be a good Internet citizen and report the issue if it wasn't already in the queue. As usual, someone had already noticed this before me and opened a regression bug. What I saw with the Geneva font was a result of the fact that it's one of those fonts that doesn't actually have a bold typeface, so applications like Chrome have to create a 'fake' bold version of the font when it's supposed to be bolded. There are some interesting details about this in comment #7 of the bug report.

Anyway, rather than wait for a fix, I found out that I can globally override a CSS font face in Chrome. Cool, huh? I just had to edit this file:

~/Library/Application Support/Google/Chrome/Default/User StyleSheets/Custom.css

and add this line:

@font-face { font-family: 'Geneva'; src: local('Lucida Grande'); }

Now every time a website serves up Geneva for me on a web page, Chrome will use Lucida Grande instead. Certainly a hack but it'll work for now.

Java APIs are NOT Copyrightable (Thursday, May 31)
[ permalink ] [ e-mail me ] [ ]

Geek developer news: from today's Groklaw coverage of the Oracle vs. Google lawsuit, Java APIs are not copyrightable.

"So long as the specific code used to implement a method is different, anyone is free under the Copyright Act to write his or her own code to carry out exactly the same function or specification of any methods used in the Java API. It does not matter that the declaration or method header lines are identical. Under the rules of Java, they must be identical to declare a method specifying the same functionality -- even when the implementation is different. When there is only one way to express an idea or function, then everyone is free to do so and no one can monopolize that expression."

Groklaw also has a PDF version of the ruling if that's easier to read.

ExportMime Agent (Tuesday, May 29)
[ permalink ] [ e-mail me ] [ ]

The "normal" way to view the raw version of an Internet email in your Lotus Notes client is to open the mail message in a tab, then choose the menu option View-Show-Page Source. This gives you all the mail headers, MIME parts, etc.

If you'd like to do this with an agent instead, here's some LotusScript that will give you the same sort of output:

  • ExportMime.lss
  • There's a function in there that writes the MIME boundaries a little differently than the rest of the MIME content. I wrote this a long time ago so I can't remember exactly what the condition was where this was necessary, but I do remember that my Mac client was sometimes generating invalid UTF-8 output if I didn't do that. It could be a Mac-specific or version-specific thing, or it could be one of those things that never happens to anyone but me. I don't know. Feel free to take that part out and try without it if you're curious.

    Anyway, I thought I published this a while back but I can't seem to find it anywhere, so there you go.

    View Conference in DC, OpenSocial Presentation (Thursday, Apr 19)
    [ permalink ] [ e-mail me ] [ ]

    If you haven't already registered for the AdminDev2012 conference in Washington, DC, you only have two more days before the $100 off early registration discount is gone. They've already posted the session list, and they've got some great topics (and great speakers) lined up.

    I'll be delivering two sessions there: Java debugging, and an introduction to OpenSocial for developers. I'm really looking forward to both sessions, but especially the OpenSocial one. I did a lot of research and work to try to nail down not just the "hows" but also the "whys" on that topic.

    I have to admit, in the past when I've seen demos of gadgets and activity streams and embedded experiences, I just didn't get it. What I saw kind of looked like... an email inbox. Sure, there were embedded videos or buttons or links to collaborative documents or whatever, but in the end it didn't seem to be much different than a well-crafted HTML email or an RSS feed.

    After spending a lot of time working with OpenSocial gadgets and the Shindig server, I have a much better understanding and appreciation of what's going on, and how it's different, and why it's useful. I feel good about the fact that my presentation will give the technical knowledge about how to get started with this stuff; I'm very curious to see if I'll also be able to explain why you should use it.

    Lotusphere Instagrams (Wednesday, Jan 25)
    [ permalink ] [ e-mail me ] [ ]

    I didn't take many pictures (again) at Lotusphere this year, but the ones I did take were with my iPhone and published via Instagram and Twitter. None of my people pictures turned out very good, so it's all just "stuff" pictures. Luckily there's a whole Flickr stream being filled by people who had much better cameras (and camera skills) than me.

    OK Go rockin the Lotusphere 2012 Opening General Session
    OK Go rockin' the Lotusphere 2012 OGS

    Beautiful day at the Dolphin
    Beautiful day at the Dolphin

    Took a quick break to enjoy the weather
    Took a quick break to enjoy the weather

    Stumbling towards Kimonos
    Stumbling towards Kimonos

    Swirly circley LS12 logo
    Swirly circley LS12 logo

    Pretzel Cookie!!!
    Pretzel Cookie!!!

    Atrium at MCO
    Atrium at MCO

    Sitting on the wing
    Sitting on the wing

    Awesome gifts from awesome people
    Awesome gifts from awesome people (not pictured: Wisps!)