" /> CTDATA: October 2003 Archives

« September 2003 | Main | November 2003 »

October 30, 2003

Port Authority: Temporary World Trade Center PATH Station to Open on November 23, 2003

The Associated Press reports that the Port Authority of New York and New Jersey has announced that temporary World Trade Center PATH station will open on Sunday, November 23. The temporary station will be located in the same physical space that the old station occupied. Although a significant portion of the original PATH station survived the September 11 terrorist attack, it has been totally rebuilt.

According to the article:

On the restored platform for Tracks 3 and 4, Gov. George Pataki stood with trade center leaseholder Larry Silverstein and his architects, Daniel Libeskind and David Childs, and looked, two platforms across, at the space where the towers stood....

The 16-month $253 million restoration of the temporary station involved gutting the train tunnels down to their iron frames and installing nearly 7,000 feet of track and 50,000 tons of steel. The station connects to six subway lines, although the permanent station will connect to a dozen lines, ferries, buses and a transit hub on Fulton Street.

Finally Got Newsmonster Running on a Linux Laptop

Dave Aiello wrote, "Regular readers of CTDATA.com will remember my attempt to get Newsmonster running on a Linux laptop during this past April. I gave up in frustration because Newsmonster insisted that my laptop did not have Java 1.4.1 on it."

"My laptop sure as heck had Java 1.4.1 on it. I installed the Java 2 Platform, Standard Edition myself. Over six months later, I finally realized that because the Newsmonster code runs entirely within Mozilla, it was looking for the correct version of the Mozilla Java Plugin, not the J2SE environment."

"Realizing this was a critical breakthrough, but it didn't result in an immediate solution to my problem. Read on for the complete details of what it took to get Newsmonster to run...."

Dave Aiello continued:

I downloaded the latest Java Runtime Environment for Java version 1.4.1 as an RPM, careful not to move up to 1.4.2 because it more recent than the version of the J2SE SDK that I'm currently using. I installed JRE 1.4.1 and configured it to work with Mozilla. Then, I logged into my laptop as the root user and installed Newsmonster. So far, so good.

When I logged back in as myself and tried to use Newsmonster within Mozilla, I was able to run through the Newsmonster Welcome Wizard. But the key portion of Newsmonster, the Aggregator, failed to run with the following message:

Unable to start aggregator: applet.setUseProxy is not a function.

That error message stumped me. So, I posted a question on the Newsmonster mailing list. Within 15 minutes, I got a response suggesting that I upgrade the JRE from J2SE 1.4.1_05 to 1.4.2_01.

Because I'm using J2SE 1.4.1 for a Tomcat-based web application development effort, I decided I didn't want to have the 1.4.1 SDK running on the same machine with the 1.4.2 runtime environment. I concluded that the problem was probably related to the runtime environment point release (1.4.1_05). So, I downgraded to 1.4.1_01 to see if it would solve the problem.

After uninstalling the 1.4.1_05 RPM, installing 1.4.1_01, creating a new symbolic link to the Java plugin for Mozilla, and restarting Mozilla, I am happy to report that Newsmonster is working on Linux.

So I learned that Java SDKs and runtime environments are completely separate from each other, at least on Linux. I also figured out that Newsmonster is sensitive to the particular version of the Java runtime, and to some extent, the version of Mozilla.

This is hard-earned knowledge. I hope that finally having Newsmonster running on Linux produces productivity benefits that justify my effort.

October 29, 2003

Getting Ready for the Holidays by Building an Amazon.com Wish List

Dave Aiello wrote, "The continued expansion of Amazon.com has made it even more enticing to establish a Wish List for yourself this holiday season. In order to help readers of CTDATA.com identify some best practices in setting up a Wish List, I added some new items to mine over the past few days:"

(Note: Please consult Dave Aiello's Wish List while reading this article. If you find this article helpful, you now know how to show your appreciation.)

  1. Include items other than books, music, and recorded video.
    Amazon.com achieved early fame through its book, music, and DVD/VHS stores. But, did you know that Amazon has now established a Sporting Goods store with products from partners like Road Runner Sports? This is one of my favorite mail order retailers, where I buy most of my running shoes and exercise clothing.
  2. Include items at a number of price points.
    When building a Wish List, it's a really good idea to include items that are inexpensive in addition to things that would be considered more significant gifts. After all, you want to encourage people to visit your Wish List for any number of gift giving opportunities.

    I added things like a pound of my favorite candy and
    a moderately priced digital camera to a list that had previously been dominated by books and videos priced between $10 and $50.


  3. Add things you need to replace because you've overused them.

    Have you ever used a product until it broke? I've been doing that more and more recently. Over the summer, I broke the lens on my 35mm SLR film camera. I have had my Nikon N50 single lens reflex camera for many years. It's perfect for my film photography needs. But, until I get a new lens, the zoom feature of my original lens is stuck at around 40mm. This is clearly an opportunity for one of the members of my family to get me a gift that they know I'll use regularly.

  4. Link your Wish List to your web site.

    Once you're done adding things to your Wish List, you can publicize it in a number of ways. One of the more effective ways to publicize it is to add a link to it from your web site.

    The book Amazon Hacks from O'Reilly mentions a really simple URL shortcut to any Wish List:


    http://www.amazon.com/o/wishlist/email address of Wish List owner

    This is an example of the kind of time and effort saving hints that are found in the Amazon Hacks book. I recommend it highly.


These are the ideas that came to mind while I was updating my Wish List earlier this week. I hope they help you get the kind of gifts that you want during the upcoming holiday season.

October 24, 2003

Spammers Target Movable Type Comment System

Yesterday, Wired News reported that spammers are now targeting Movable Type-based weblogs by submitting comments containing links that are irrelevant to the original posting. These bogus comments are being inserted in order to fool search engine spiders into thinking that the sites referred to by the embedded links are hot topics in the weblog community.

For example, a spambot may place links to a site where oxycontin is available without prescription on several popular Movable Type-based weblogs simultaneously. If the comments stay on the weblogs and a spider from Google visits the sites, it may increase the PageRank of the site to which the spambot-placed links point.

The fact that Movable Type is the target of spammers indicates how widely this toolset has been deployed. This is what a lot of people who are not programmers would consider a "good problem". But, keeping spam out of Movable Type weblogs where comments are generally permitted is going to be tough until an effective solution can be developed.

Ben Trott, the primary developer of Movable Type, commented on the comment spam problem about two weeks ago. The bottom line is that third party solutions are under development, but it appears that an enhancement of Movable Type that will "prevent" this problem from happening is not likely to be released soon.

October 20, 2003

ESPN Violates Cardinal Rule of Web by Deleting Articles by Fired Columnist

Lots of people in the weblog community have reported that Gregg Easterbrook has been fired by ESPN for using his weblog to make a prejudiced statement about Jewish entertainment executives in a negative comment about the Quentin Tarantino film Kill Bill.

The facts that:

  1. both ESPN and Miramax, the film's distributor, are subsidiaries of The Walt Disney Company, and
  2. both Michael Eisner, Disney CEO, and Harvey Weinstein, head of Miramax, are Jewish and criticized by name in his piece

... did not seem to concern Easterbrook before he was fired.

The most interesting recent development in this ongoing story is that ESPN.com has apparently deleted all of the articles that Easterbrook ever wrote for them. This is a violation of a cardinal rule of web publishing. Selective purges of website content written by a person no longer associated with the site owner often gives readers the impression that something Orwellian is taking place.

The other problem with pursuing a strategy like this is that search engines like Google maintain large caches of content from many websites in order to improve Google's performance, as well as to provide a second source for temporarily unavailable published information. So, many of Gregg Easterbrook's ESPN.com articles are still available in the Google cache.

ESPN is within their rights as an employer to fire Easterbrook. But, they undermine their credibility as an on-line publisher when they delete Easterbrook's articles in an atypical way. Even The New York Times handled recent staff dismissals better.

If you run a business weblog, you need to think carefully about the implications of a situation like that which ESPN faced with Gregg Easterbrook before it happens. What will you do if an employee who has written for your site embarasses the company, and he is subsequently fired? Will you systematically delete all references to him? We suggest that this is not the best approach in many cases.

October 14, 2003

Simplifying Directory Administration with Net::LDAP is Sometimes Harder than It Looks

Dave Aiello wrote, "Recently, I've been writing about my effort to improve the administration of one of my company's servers. This server has an old version of the Netscape/iPlanet/SunOne Directory Server on it."

"Although the Directory Server supports a lot of best practices from a user administration standpoint (such as periodic password expiration), it's rather difficult to manage. Sometimes, active users' passwords silently expired because the directory server would not email them about impending expirations. Theoretically, the server is supposed to notify users of expirations in all cases, but for some reason, this feature didn't work for most of them."

"I decided that I wanted to correct this problem by writing my own Perl-based password expiration warning function. This turned out to be easier said than done in my configuration. Read on for more details...."

Dave Aiello continued:

I let the silent password expiration problem persist for longer than I care to admit. A while back, it was because I just didn't have time to work through the nuances of the Net::LDAP Perl module. But lately, I've had more time and was simply frustrated by some nagging problems with getting even example code to work in my configuration.

The breakthrough came when I realized that the version of Net::LDAP that I am using doesn't work the way I originally thought. I was looking for the contents of an LDAP attribute referred to as passwordExpirationTime, and I was thinking that I could find it by specifying it as follows:

$searchstruct{$_}{passwordExpirationTime}[0]

When I ran the code in a debugger, I found that the version of Net::LDAP I am using was casting the name of the LDAP attribute into lower case letters before putting it into the Perl data structure. You Perl programmers out there will know that:

$hash{passwordExpirationTime} != $hash{passwordexpirationtime};

I was looking for the key in the same mixed case characters that I was using in my LDAP queries. So every time I tried to run the slightly-modified sample code I had written on my server, it didn't work, although ldapsearch worked correctly.

Once I got over this bump in the road, the rest of the program that I was trying to write quickly fell into place. I started working on this problem on Friday morning. I had it fully implemented by Tuesday morning.

After getting this program written and tested, I found out that LDAP attribute names are case insensitive, by definition. The problem I have with this is that most documentation specifies attributes like passwordExpirationTime in mixed case. The command line utility called ldapsearch respects the case of the attributes that you give it. But, the version of Net::LDAP that I have on my server does not.

For CTDATA customers that wondered why I let this problem persist for as long as it did, now you know. As far as I'm concerned, the new LDAP tools that I wrote are a great step forward for us. It will make my life a lot easier. But, a lot of people who are not as close to the problem as I am will probably respond, "So what?"

October 8, 2003

How to Use Command Line LDAP Tools to Change a User's Password

Dave Aiello wrote, "A little while ago, I was troubleshooting a glitch on one of the systems that I administer. I needed to reset an expired user's password, but the GUI front end to the LDAP server wouldn't work for some reason."

"In order to be able to go to bed, I had to figure out how to change the user's password with the LDAP command line tools. The system I am using has an ldapmodify, but no ldappasswd. Read on to see how I did it...."

Dave Aiello continued:

This might not be the only way this can be done, and I may be leaving out command line parameters that are required in other configurations. But, this sequence worked on one of my LDAP servers when I was logged into the machine it is running on.

In this example, the LDAP superuser is known by the common name "Directory Manager", the user whose password needs to be changed has the user ID "cornelius", and the organization is "foobar.com".

The words in italics are meant to be replaced by the relevant values for your installation. (So, you would replace "directory_manager_password" with the actual password.) The bold text is the responses of the server.

$ ldapmodify -D "cn=Directory Manager" -w directory_manager_password
dn:uid=cornelius,o=foobar.com
changetype:modify
replace:userpassword
userpassword:new_password
^Z
modifying entry uid=cornelius,o=foobar.com
In case it isn't clear, ldapmodify will silently wait for input after you invoke it with parameters that are valid to bind to the LDAP server being accessed. The program is waiting for valid LDIF statements.

As you can see, I typed a valid LDIF modify statement and then typed Control-Z and pressed the Return/Enter key. In my installation, ldapmodify sat there after it printed the message that begins "modifying entry". I might have been able to issue another Control-Z key sequence to be sent back to the command line. To be honest, I didn't have to do another another LDAP entry modification. If I find that doing another Control-Z would work, I will update this story.

I wrote this article because I couldn't find an example that would work with my server configuration. So, I spent some time trying to figure out the right syntax to use within ldapmodify, and this is what worked for me.

Update: Yes, hitting Control-Z twice does get you out of ldapmodify cleanly. In case it wasn't obvious, Control-Z is the proper End of File marker on Windows. Control-D would be the EOF marker if you are using UNIX.

October 7, 2003

Matt Haughey Describes a Creative Strategy for Building Profitable Weblogs

On Saturday, Matt Haughey published an interesting article on a.wholelottanothing.org that describes how Google AdSense made his website PVRblog profitable. AdSense is a syndicated advertising service that allows small website operators to share advertising placement revenue with Google. PVRblog is a weblog about TiVo and ReplayTV personal video recorders.

The most interesting aspect of this article is the section labeled "Tips for a successful AdSense site", where Haughey outlines how to build a site that maximizes AdSense revenue. These are best practices for making weblogs pay for themselves. His suggestions are:

  1. Pick a topic
  2. Consider your topic as it relates to the web
  3. Be passionate and write your ass off
  4. Designing for Google and your audience
and equally important:
  • What not to do
This is a great article for anyone who wants to start a weblog that revolves around a hobby and wants to try to make it slightly profitable. These techniques may also apply to business weblogs, although it is not clear if ads from competitors can be screened out of the inventory that can be placed on participating sites.