The February 2003 Blog
send me a comment

End of the Month, Do You Know Where Your Links Are? (Friday, Feb 28)
[ permalink ] [ e-mail your comments ]
Just in case you've been bookmarking this particular page for the blog (, please note that it won't roll over to the March blog unless your bookmark is for The /blog page actually serves as a redirection to the current month's blog page, which isn't exactly how other people do it, but that's how it's done here. Here's why.

Have a good weekend.

Updated NodeReader (Thursday, Feb 27)
[ permalink ] [ e-mail your comments ]
I made a minor update to the XML NodeReader class. Guiseppe Maio sent me an e-mail to tell me that he was having problems with multiple instances of a NodeReader, because the global ceCurrent variable was static -- when the ceCurrent variable changed in one instance of the class, it was changing in the other instance as well. Doh!

I have no idea why it was static in the first place (probably a code remnant), but I made the change to the code and reposted it as version 1.1. Hope it works better now.

Java Reflection (Tuesday, Feb 25)
[ permalink ] [ e-mail your comments ]
In the tip I posted yesterday, I mentioned that I used reflection to figure out what the methods of the BASE64Encoder and Decoder classes were, but then I never actually said how I did it. I guess that was kind of rude. Because I felt so bad about it, I went ahead and posted another tip describing how to use Java reflection to get information about a Java class. I hope that makes everything all right.

Java Base64 Classes (Monday, Feb 24)
[ permalink ] [ e-mail your comments ]
I just discovered some undocumented Base64 encode/decode classes in the standard Java distributions (here's some sample code). I say it's undocumented because it's not in the Java docs...maybe Sun has some documentation elsewhere that I haven't seen. I have no idea why this kind of thing would be hidden, since Base64 comes up fairly regularly with Internet things like e-mail and HTTP authentication.

Grid Computing (Friday, Feb 21)
[ permalink ] [ e-mail your comments ]
Here's a neat set of projects: has several grid computing projects that aim to fight cancer, anthrax, and smallpox. Set up like the SETI@Home project, this is a good way to donate your unused processor cycles to a worthy cause.

But don't load it on your servers...

Automatically Reboot When Domino Crashes (Thursday, Feb 20)
[ permalink ] [ e-mail your comments ]
New on the site is a batch file that will automatically restart Domino when it crashes. The link and the batch file itself will give you more information (hint: you have to tell Windows that the batch file is your default debugger). I've got this set up on a production server that crashes intermittently, so it will reboot itself after a crash, and then it pages me to tell me it's just restarted. Pretty handy if the server goes down after hours.

Unfortunately it only works on Windows NT/2000, but then those other platforms don't ever crash, do they? ;-)

TransformWSDL Servlet (Wednesday, Feb 19)
[ permalink ] [ e-mail your comments ]
I just added some servlet code that allows you to specify a WSDL file URL and transform it using nice little XSL file I found. Even if you're not into the whole SOAP/Web Services thing right now, it might be a good excuse to play around with servlets on your server, if you're not currently doing that. Or an excuse to look at XSL.

Also, I just added several more blogs to my links page. Man, that's getting to be a long list, and I know I don't even have everyone...

BBS Talk (Tuesday, Feb 18)
[ permalink ] [ e-mail your comments ]
Ed Brill was talking about BBS's yesterday. Wow, that brings me back. In the early 90's I was a sysop for an engineering firm, programming a TBBS system using TDBS (a Clipper/dBase-like relational database language). The company who made the software was eSoft, which is now a VPN and firewall vendor. It's funny that the company history doesn't even mention that they were a major BBS vendor back in the day. eSoft and Galacticomm were the big ones. eSoft went from TBBS to their "IPAD" product when the Internet started wiping out all the BBS's, and I guess the IPAD turned into their current firewall product. Not sure what ever happened to Galacticomm. And I wonder if this Phil Becker is the same one who used to run eSoft...I can't imagine it is, but I guess you never know... (Update: it IS the same Phil Becker. Cool!)

Just for fun, I just dug out an old Boardwatch magazine from '95 (I'm a packrat) and saw that it's got a ONE BBSCON convention preview in it -- I actually went to one of those in Tampa! At one point I remember talking to one of the guys from Prodigy about PGP. Boy, those were the good ol' days, back when you programmed using Notepad (or even DOS Edit) as your editor, and you had to choose between a PPP and a SLIP connection when you signed up with an ISP.

And Ed, we had six blazing v.34 modems, hooked up using a DigiBoard. You could connect at 33.6 on a good day, if you also happened to have a USR Sportster. None of that old 14.4 stuff.

Let's see, that was roughly 10 years ago. In another 10 years, how many of the terms and products and companies that are so common to us today are going to be as foreign or antiquated as a lot of the things I just mentioned?

Blocking Ads (Wednesday, Feb 12)
[ permalink ] [ e-mail your comments ]
Here's a neat little tip about blocking ads by modifying your hosts file. Ned also mentioned this technique a while ago, along with some cool Python code to make the blocked pictures less annoying.

Remote Desktop on OS X (Monday, Feb 10)
[ permalink ] [ e-mail your comments ]
The other day I mentioned a program called rdesktop that allows you to use a Linux machine as a Windows Terminal Server/Remote Desktop client, and I wondered if it would work on OS X. Well apparently, there's no need to even try. Justin Knol just wrote to tell me that Microsoft already has with a free RDC client for Mac. There you go. Thanks Justin.

In other news, I added an archive page to make it easier to take a quick look at my old blog entries. I'm not sure why you'd want to do that :-), but Ned Batchelder has an archive page, and I thought it was a cool idea.

I'm Not Sure I See That... (Friday, Feb 7)
[ permalink ] [ e-mail your comments ]
Apparently a researcher in Japan is studying invisibility. Wild stuff, especially the picture.

Windows Remote Desktop on Linux (Thursday, Feb 6)
[ permalink ] [ e-mail your comments ]
I ran across a few interesting bits of information about using Windows Remote Desktop on Linux. There's a program called rdesktop that says it "runs on most UNIX based platforms with the X Window System" (although I also read that you should apply some patches first). Sure, you could use VNC or some other remote control product to access a Windows machine from *nix, but rdesktop has one huge advantage: multiple client access via Terminal Server. Here's a guy who's talking about using it to set up a network of diskless 486 machines as Windows Terminal Server clients.

When I get a chance, I'm going play around and see if my Linux box can access my Windows XP Professional machine here at home. I'm not sure if Microsoft significantly changed the Remote Desktop Protocol between Win2K and XP, but if they didn't it should work. And I wonder if rdesktop runs on OS X...?

Still Learning About RSS Feeds (Wednesday, Feb 5)
[ permalink ] [ e-mail your comments ]
A few more things about RSS feeds (if this is boring for you, I apologize).

I got an e-mail from a reader who said that my feed wasn't showing up properly in the FeedReader application. The first parts of my blog entries weren't showing up, and there was a "]]" at the end of all my entries. It turns out (I think) that FeedReader doesn't handle CDATA blocks properly, and it was treating everything from the beginning of the CDATA element (<![CDATA[) to the first right angle bracket (>) as one big unknown XML tag, and throwing it out. My temporary workaround is to add an empty tag (<>) at the very beginning of the entry so FeedReader only throws out the <![CDATA[<> part of the entry as an unknown tag.

Also, I was playing around with designing an RSS reader Notes database, so I was reading through the RSS 2.0 spec. As I looked at all the examples therein, I found out that most of us Domino bloggers are creating improperly-formed RSS docs. All of the <item> and <image> blocks are supposed to be subelements of the <channel> element. My <channel> block had been a separate element, not the parent element. I guess that's so you can have multiple channels in your feed?

So I made some minor changes. Interestingly enough, both versions of the RSS feed validated properly.

(An interesting side-note: as I was looking at other people's RSS feeds, I noticed that Mark Pilgrim's RSS feed has an RSS version number of 3.14159265359. As a guy with a math degree, I found that amusing...)

Intellectual Property (Tuesday, Feb 4)
[ permalink ] [ e-mail your comments ]
I just read that SCO might consider legal action against other Linux companies that it feels are using its intellectual property. That sort of attitude could hurt the Linux movement a lot more than anything Microsoft could come up with. I guess the only thing that Linux has to fear is Linux itself (plus a few lawyers).

You know, it's funny. When I first started this site, I was really concerned about my own "intellectual property". I wasn't sure how much information I wanted to put out on the site, because I was worried about other people taking my code and pretending it was theirs. Don't get me wrong, I still want to get credit for (and maybe someday even make money off of) the content of this site, but the more I started giving away code, the less that bothered me. I started realizing that people will think of me as a better programmer if they can actually see and use the code I've written, and if I share the knowledge that I have it doesn't mean that other people will suddenly become uber-programmers and put me out of a job. On the contrary, would you rather hire someone who read a book about something, or someone who wrote that book?

All that being said, I will get upset if I see my code somewhere with someone else's name on it, but then there's always someone out there who will steal your code -- I even saw a CD for sale one time that contained only code from web sites and magazines and books that other people had written, which I'm sure had some enormous copyright violations. The point is, you can either worry about the 2% of the people who are unsavory and will steal your code, or you can try to help the other 98% of the people who are honest and who actually need your help (and probably make yourself look good in the process). Or, you can stuff your knowledge in a mattress and never let anyone else see it until it's so old that it's worthless to the rest of the world.

secdom.dll (Sunday, Feb 2)
[ permalink ] [ e-mail your comments ]
I finally compiled secdom.dll and added it to the API Samples page, if you want to try it out. It's one of the new samples in the ND6/R6 version of the Notes C API: a DSAPI plug-in that allows you to authenticate Domino web users via a Windows NT account. You can either compile it as a DLL for Windows (like I did) or as a library for UNIX (in which case you'll be authenticating against a UNIX account). A pretty neat concept in any case, although I haven't had a chance to play around with it yet. Just glancing through the code, it looks like it should work on R5 as well as ND6.

And by the way, since everyone else is doing it:

Which OS are You?
Which OS are You?

Learning About HTTP Headers (Saturday, Feb 1)
[ permalink ] [ e-mail your comments ]
So I've been doing some testing at work (yes, I actually have a job) talking SOAP between one of my Notes servers and an Actuate server, and I kept getting errors back from Actuate, even on simple requests. After spending some time cursing and debugging, I finally figured out that it would work if I used a carriage return + linefeed (\r\n in Java) to separate the HTTP header elements instead of just a linefeed (\n).

I cursed some more, thinking how stupid it was that I had to work with this dumb non-standard server (I had been successfully using \n as a line terminator on plenty of other servers), so I decided I was going to send a nasty-gram to someone to tell them how they needed to fix their product. But then it occurred to me that I should probably check the HTTP specs first, just to make sure I had my facts straight.

Good thing I did. As it turns out, the HTTP specification refers to the ARPA text message standard for its header format, which says that CRLF is the correct way to separate elements in a header. Most servers these days will accept just a linefeed as well (probably because that's a common line terminating character in Java, C, and Unix), but apparently there are some that adhere strictly to the standard.

So what does this mean for you? It means I made minor updates to the Java HTTP Proxy and the Java SOAP Tester Client code on this site, so they create proper HTTP headers, and you can rest assured that your headers are properly terminated.