July 07, 2009

Telemarketing Hall of Shame: San Francisco Opera

In just the lat couple of months, I've been bombarded by telemarketing calls originating from the San Francisco Opera Association (415-551-6319). I received at least one call attempt on each of the following dates:

7/6/09
6/9/09
6/3/09
5/28/09
5/25/09
5/2/09
5/1/09
4/30/09
4/25/09
4/20/09
4/17/09

I've sent them an email pleading to be put onto their Do Not Call list. I sure do hope they take note of it. I just now placed a call-block on their phone number in my Verizon Wireless account settings, so at the very least they'll go right to voice mail.

Fingers crossed...

July 06, 2009

Camera Lens Calculators are back in action!

A long, long time ago I had written two on-line calculators to help photographers answer the following questions:

  1. How far away from my photographic subject can I be and still fill up the frame of the photo with that subject?

    This question gets at how large a focal length your lens needs to be in order to photograph a distant object without it appearing the size of a pin-prick in the resulting image. If you find yourself wondering whether you need that 300mm lens in order to capture a water buffalo at 500 meters, this calculator will be very useful to you.
  2. When doing macro photography, how much of my camera sensor area will be covered by the subject at a given distance?

    This is for photographers working on extreme close-ups who want to fill the entire area of the camera's image sensor with the subject of their photograph (a flower, an insect, etc.). This calculation will tell you whether or not you have to have a 'true macro' lens (one that has a macro ratio of 1:1) in order to pull it off.

The calculators are available here. Enjoy!

PS This would not have been possible (or at least as easy as it was) were it not for the Internet Archives. The old version of my calculator page had been lost when I migrated to TypePad as my new weblog platform of choice, but luckily a snapshot of my website from April of 2005 was available, allowing me to pull the original formulas out of the digital dust bin.

June 12, 2009

HOWTO: Remove auto-complete entries from Firefox form fields

After submitted this feature enhancement request to the Mozilla bug database, I received a comment on the bug informing me that the feature already (more or less) exists.

Here is my complaint: After using Firefox for several months, form fields with common names - email, address - tend to accumulate a very long list of auto-complete values. Most of them are not very useful and just slow me down. For example, see this street address field (from Senator Barbara Boxer's message submission form):

Greenshot_2009-06-12_08-58-46

What I learned after submitting my enhancement request that it is possible to remove entries from this auto-complete list using a (in my opinion) completely undocumented feature:

Use the arrow keys or mouse to highlight an entry in the auto-complete menu, then press the 'Delete' key. That value will then be removed from the list of retained/suggested values! I would prefer to have an entry at the bottom of the list 'Remove all suggestions for this field' to completely clear the auto-complete list, but one at a time will work in a pinch.

This is particularly useful for those times when your credit card number seems to have been remembered by Firefox when it probably shouldn't!

June 11, 2009

HOWTO: Resolve nxserver error "Wrong version or invalid session authentication cookie."

After a few too many minutes spent digging into this error message and not finding any applicable answers, I looked into the NX session log file in my user home directly to see:

/usr/NX/bin/nxagent: error while loading shared libraries: libXpm.so.4: cannot open shared object file: No such file or directory

Because this is a newly installed server (RedHat/CentOS 5.3), and even though I had installed the 'xorg-x11-xauth' and 'gnome-desktop' packages, this required library somehow got missed. To install this missing library, you need to install the 'libxpm' package. In my case, using yum:

yum install libXpm

And while you're at it, make sure that the full Xorg x11 server is installed. Oddly, 'gnome-desktop' does not depend on this package:

yum install xorg-x11-server-Xorg

May 23, 2009

South Bay Area Mountain Bike Trail Heads map

In an effort to help fellow mountain bikers in the San Francisco and South Bay Areas, I've setup a publicly editable Google Map titled "Bay Area Mountain Bike Trailheads". The idea is to place map pins in the precise locations where you will find the trailheads to popular mountain bike trails. I've often beeb frustrated with directions such as "0.7 miles west of Skyline, there should be a parking area on your right", so I thought that it would be nice to build a map of the exact location of each parking area or trailhead.

Here is the current map:


View Bay Area Mountain Bike Trailheads in a larger map

If you would like to collaborate - add new trailheads and map pins - please add your own favorite place.

March 05, 2009

HOWTO: Run ant in the background

A problem that I'd long since given up trying to fix a while back: Trying to launch a long running ant command in the background. For various reasons, I use ant to launch several long-running tasks (4+ hours). Most of the time, I want these tasks to run in the background. But pressing Ctrl-Z or appending the ampersand character ('&') to the end of the command would result in the process going into the stopped or suspended state on most Linuxes:

> ant run.fetch &
Job 1, 'ant run.fetch ' has stopped

After looking around a bit, and a bit of strace running, I discovered that the ant wrapper script really does not like being disconnected from standard-in, -out, and -error. So instead try redirecting all three:

> nohup ant run.fetch </dev/null 1>/tmp/stdout.log 2>/tmp/stderr.log &

This did the trick - allowing the ant command and subsequent java sub-processes to run unhindered in the background.

Hope this helps.

February 25, 2009

HOWTO: Get Juice Podcast client working on Vista

Just in case someone else runs into this problem: After installing and launching the Juice podcast client on Windows Vista, an error dialog was displayed telling me that I should look for the application error logfile 'juice.exe.log' in the installation directory.

Sure enough, the file was there with the following cryptic contents:

Traceback (most recent call last):
  File "gui.py", line 4, in ?
  File "iPodderGui.pyc", line 3621, in main
  File "iPodderGui.pyc", line 707, in __init__
  File "wx\_core.pyc", line 5301, in __init__
  File "wx\_core.pyc", line 4980, in _BootstrapApp
  File "iPodderGui.pyc", line 1472, in OnInit
  File "iPodderGui.pyc", line 934, in SetLanguages
AttributeError: 'iPodderGui' object has no attribute 'menu'

After a bit of Googling, I discovered that the problem could be fixed by right-clicking on the Juice.exe application, selecting 'Properties' then 'Compatibility'. Check the 'Run this program in compatibility mode for' checkbox and select 'Windows XP (Service Pack 2)' option from the pulldown menu. Press 'OK' and the next time you launch the application, the error should not occur.

Hope this helps someone out there.

February 18, 2009

Palatine High School class of 1989 Reunion Announcement

Yes indeed, it has now been 20 years for the Palatine High School class of 1989, and the reunion plans are now in place! We'll be getting together on Saturday, October 3rd 2009, which is homecoming weekend. The evening activities kick off at Durty Nellie's at 7:30pm. If you can make it to the football game on Friday night, there will be a special 20-Year Reunion section set aside just for us.

For more information, visit the official reunion website:

http://www.classreport.org/usa/il/palatine/phs/1989/

You can also keep up with the reunion events on the Facebook page:

http://www.facebook.com/home.php?#/group.php?gid=30086384914

You can also purchase tickets to the event at the website for $50 per person. Tickets at the door will be $65. I am definitely planning to attend - just need to get those airline tickets booked.

February 16, 2009

HOWTO: Determine LivePerson Status using Java

A recent feature addition that I've been working on for Altos Research requires that our server-side application be aware of our LivePerson on-line support status. Although LivePerson provides sample client-side javascript utilities for this purpose, there are times when your sever app just needs to know if your support representatives are online, busy, or offline.

My solution to this comes from a bit of reverse engineering of the javascript library that LivePerson makes available and is described in one of their help documents.

The solution consists of three classes - one of which is a public domain utility named ImageInfo, which is available for download. The first of the new classes written for this is a simple enum type to hold the possible status values:

public enum LivePersonStatus {
    offline, online, unknown, occupied
}

The work is done using a simple class with a single static method - getStatus - which takes your LivePerson account number as input:

   public static LivePersonStatus getStatus(Integer lpNum) {
        if ( lpNum == null ) return LivePersonStatus.unknown;

        URL u = null;
        try {
            u = new URL("http://server.iad.liveperson.net/hc/"+lpNum.toString() + "/?cmd=repstate&site="+lpNum.toString()+"&useSize=true&d="+ System.currentTimeMillis());
            ImageInfo i = new ImageInfo();
            i.setInput(u.openStream());
            if ( i.check()) {
                int width = i.getWidth();
                if ( width == 40 ) return LivePersonStatus.online;
                else if ( width == 50 ) return LivePersonStatus.offline;
                else if ( width == 60 ) return LivePersonStatus.occupied;
                else return LivePersonStatus.unknown;
            }

        } catch (MalformedURLException e) {
            //LOGGER.warn("URL problem with u: " + u);
            return LivePersonStatus.unknown;

        } catch (IOException e) {
            //LOGGER.warn("URL problem with u: " + u);
            return LivePersonStatus.unknown;
        }
        return LivePersonStatus.unknown;
    }

Once the method returns the current status, you are free to take appropriate action. Enjoy.

February 10, 2009

1989 Palatine High School Senior Brunch Address

Found my original notes in the archives today, and decided to record before it has a chance to disintegrate:

Well, this is it, the end of the year, the last of a decade.
Anow, here we are, eating our breakfast, just itching to graduate.
We're now preparing to celebrate this ceremony we call graduation.

But what is that?

It is a time to laugh? Cry? Shout? Weep? Scream? Sulk?

It's kind of a tough choice. No one ever told us how we're supposed to feel, what we're supposed to say and do. I know on the outside its definitely time to let it all go. All those quiet study hours, test, finals, papers, proposals and outlines.

To hell with it all - all the pressures are gone.

We have nothing to worry about, nothing to remember, no schedule, no lockers, no classes. Because we're done. We made it! But is that all there is to it? Collecting the cards, the cash, the congratulations, the kisses from all our relatives.

For most of us, I doubt it. We've spent too much time here to just shrug our shoulders and walk away. We've won and lost, and we've worked and played the last four years of our lives at PHS. So tomorrow, as we proceed down the aisle, how do we feel? Do we recognize the fact that we're the last of the 80's to graduate?

Of course, it's only human nature to reminisce. I'm sure you've noticed by now how different the yearbook signatures are this year as opposed to years past. No more superficial 'Good Luck's and 'Have a Nice Summer's. Now things have become a bit more emotional - you sit, with pen in hand, trying to put into writing everything you've experienced with your friends. You try to make a statement that will last forever.

You want to say something words aren't very good at expressing - How much you'll miss the high school scene.

Now I don't mean the tests and the finals, or the homework. I mean the games, activities, the dances, the rallies, the victories and the defeats. Because this is the last time for everything - especially for those of use who were involved with PHS. This is the last time we may be able to do all these things we've done.

I know, for myself, that the 2nd of November, 1988 - that will most likely be the last time I ever walk off the game field. Victorious or not. Because it is those things that give this group its identity - "The Class of 89".

So when you march down that aisle, these are the things to remember because "these are the memories that make you a wealthy soul". These are also the memories that will keep the Class of '89 alive, in our hearts and in our minds, forever.

Listening To

Real Estate Stats

  • Price Trend for Sunnyvale 94086
  • Median Price for All Sunnyvale
  • Median Price for Sunnyvale 94086

GA