Fazal Majid's low-intensity blog

Sporadic pontification

Fazal Fazal

Immersive panorama

For your enjoyment, a 360° immersive panorama I took of the Louvre courtyard in 1998. As a Java-enabled browser required, I moved it to a page of its own so as not to slow down the loading of this page too much:

Louvre Panorama

Pac Bell White Pages follies

I moved in August 2001. My entry in the white pages still points to my old address, both in the paper and online version. When I called Pac Bell’s customer service, it took 3 transfers and 45 minutes for them just to figure out what happened.

Apparently, it takes two or three billing cycles before the change of address percolates to the white pages database, and the online database is a mirror of the paper directory, i.e. updated only once a year in November.

In France, France Telecom guarantees three days between a change of address and its update in the online directory service. Apparently, in California, even 15 months is too much to ask for.

This leads to an average time of 9.7 months before updates (the seasonality of moves from US Bureau of the Census report SIPP P70-66 does not change this figure much). About 15.9% of the US population moves each year (source: Census report P20-531), and thus we can expect about 13% the addresses in the phone book to be incorrect.

Conclusion 1: batch processing is bad. Just say No.

Conclusion 2: don’t expect big, fat, happy, dumb and technologically challenged Baby Bells to lead the way into the broadband future…

Update (2002-12-19):

I learned yesterday that over half of California households have unlisted numbers. That figures…

End of an era at Nikon

I bought a 24-85mm f/3.5-4.5G AF-S Zoom-Nikkor for my father. This lens is a “G” series lens, which means it does not have a manual aperture selection ring. Unfortunately, the only Nikon camera I have to test the lens against is a mechanical FM3A. I thought the lens would be usable, if only wide open, but it also lacks the mechanical exposure meter coupling ridge, which means it isn’t usable at all except maybe with a handheld meter.

One of Nikon’s main arguments was the compatibility in its lens line (unlike Canon who sacrificed compatibility when they replaced the manual-focus FD mount with the “fly-by-wire” EOS mount). Most newer Nikon bodies (including the $2100 D100) are no longer able to meter with manual-focus AI-S lenses (other than the 45mm f/2.8P), and now older Nikon bodies won’t be able to use newer lenses either.

The two worlds of Nikon manual-focus and autofocus systems will now inevitably diverge.

Update (2002-12-13):

Nikon recently announced they will be producing a new “DX” line of reduced-image-circle lenses specially designed to offer wideangle capabilities to APS-size sensor digital SLRs like the D100. The other shoe drops?

Obtaining tracebacks on other threads than the current thread

Note: this entry was superseded and is maintained only for historical purposes. Among others, the restriction of not being able to find the stack frame for a specific thread has been lifted with changes in Python 2.3.

David Beazley added advanced debugging functions to the Python interpreter, and they have been folded into the 2.2 release.

I used these hooks to build a debugging module that is useful when you are looking for deadlocks in a multithreaded application. It basically has a single function that will return a list of the stack frames for all Python interpreter threads in the process.

Unfortunately, I was unable to find a way to get a stack frame for a specific thread (either by the thread ID or using threading Thread objects), as Python does not save the thread ID in its thread state.

Of course, I disclaim any liability if this code should crash your system, erase your homework, eat your dog (who also ate your homework) or otherwise have any undesirable effect.

Building and installing

Download threadframe-0.1.tar.gz. You can use the Makefile. I’ve built and tested this only on Solaris 8/x86 and Windows 2000, but the code should be pretty portable. There is a small test program test.py that illustrates how to use this module to dump stack frames of all the Python interpreter threads. A sample run is available for your perusal.

For Windows users, a pre-compiled binary for the standard Python 2.2.1 distribution is available: threadframe.pyd. Just copy this file in any location in your Python path and you should be able to run the test script test.py.