Mylos

Dissecting the ENUM hype

I have seen some hype building up about ENUM (RFC 2916) recently, suggesting that ENUM will finally make Voice-over-IP (VoIP) leapfrog traditional telephony.

First of all, what is ENUM? It is simply a means for a VoIP program like Microsoft Windows Messenger or Apple’s iChat AV to find how to reach a correspondent from a phone number. First-generation VoIP programs required users to enter the IP address of their correspondent to call them, or to use non-standard or semi-standard directory services like Microsoft’s short-lived ILS. Since most people wouldn’t recognize an IP address if it bit them on the nose, this limited the market to geeks or incredibly determined penny-pinchers. With ENUM, if you know my phone number, say (415) 359-0918, or if you use the ITU-T E.164 international numbering standard, +1 415 359 0918, you would find the IP address of my VoIP phone/program by looking up 8.1.9.0.9.5.3.5.1.4.1.e164.arpa in the DNS. This is the reversed E.164 phone number, with e164.arpa tacked onto it, the way you can do reverse domain name lookup of the IP address 198.144.198.154 by looking up the PTR record corresponding to 154.198.144.198.in-addr.arpa. The .arpa is a legacy of the days when the Internet was bankrolled by the US ARPA, now the Defense Advanced Research Projects Agency (DARPA), and cause no little grumbling from people who would rather have a more “neutral” root e164.int.

This is a clever hack, allowing VoIP clients to leverage the DNS infrastructure, rather than building new protocols or even leveraging existing ones like LDAP. Every modern computer from Palm PDAs to Windows PCs to IBM mainframes have built-in DNS clients (although few support the ridiculously over-engineered new NAPTR resource record introduced for ENUM in RFC 2915). LDAP client libraries are nowhere near as widespread. Implementing ENUM is thus relatively easy, in the order of a few days of work at most, assuming the underlying name client software is not hardwired for IP address resolution only. In a similar way, a few years ago a group of young turks unsuccessfully proposed the ITU set aside an international country code for VoIP calls (the decimal IP address would be encoded as a 12 digit phone number). The old ITU proposal addressed the issue of getting conventional phones to reach an IP address, ENUM addresses how to reach a conventional phone number from an IP phone.

That said, while ENUM simplifies some of the logistical issues of managing a federated namespace or numbering plan, the bulk of the effort in transitioning to VoIP lies elsewhere:

  • Making IP phones as convenient as traditional phones (waiting 5 minutes for Windows to boot does not quite qualify).
  • Providing the same level of resiliency as the old network, for instance in case of power failure (when I was in Telecom school, one of our teachers always insisted on the fact when phones fail, people can die because emergency services are not dispatched any more).
  • Providing gateways between traditional telephony and IP telephony, and finding a sound business model to pay for it.
  • Figuring out how billing and compensation will be handled
  • Increasing competition by allowing direct calls when both users are VoIP capable, without having to know this explicitly beforehand.
  • Improving the ubiquity of IP connectivity, specially residential broadband and wireless.
  • Improving IP network quality of service, since Quality of Service approaches do not scale and end up being even more inefficient than the old network.

ENUM does not address the chicken-and-egg syndrome that is slowing VoIP adoption. A significant proportion of telephone calls is now carried over IP, for instance AT&T and MCI have both declared their intent to migrate over half their voice traffic to IP by 2005. But that is invisible to end-users, and not accessible – you won’t be able to dial an AT&T user by the IP address AT&T uses internally for them. AT&T will not give it to you because then they would not be able to bill you for it the way they can bill other telcos with interconnect agreements.

As the global E.164 numbering plan is controlled by the ITU and delegated to Telcos, ENUM will not by itself make it possible to create new phone numbers that are not controlled by Telcos. A competitive service provider could petition to obtain a number range, the way Vonage obtained US phone numbers for its VoIP service, but telephone billing has assumptions on the structure of phone numbers deeply embedded within it, probably inextricably. After all, it has taken carriers over ten years to learn to bill calls towards mobile phones in Europe differently by detecting they have a leading 6 digit.

Conceivably, the ENUM NAPTR resource records could be served from any domain name, not just one under e164.arpa. One could imaging that in the future, instead of giving a nineteenth-century style phone number (the first Strowger automatic phone exchange was installed in New Haven, Connecticut in 1891), you would give out a domain name (“call me at fazal.majid.info“) or something that looks like an email address. But that is not what ENUM offers (today), in part by design.

An annoying Sony installer bug

I bought a Sony Clié UX50 PDA a few weeks ago. I started noticing that every time I restart my PC (admittedly, not something I do all that often), an incredibly annoying Windows Explorer window set to C:\Program Files\Sony would pop up at the end of the boot sequence.

After a little analysis, it turns out the Sony installer created a registry key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\Palm MulitUser Config with the value C:\Program Files\Sony Handheld\Configtool.exe. Enclosing that in double quotes using Regedit (insert obligatory admonishments about the dangers of Regedit here) fixes the problem. Click here for a screenshot of what it should look like.

Without the double quotes, Windows is thrown off by the space between “Sony” and “Handheld“, and assumes you want to run the command C:\Program Files\Sony with the command-line parameter Handheld\Configtool.exe. As there is no such command C:\Program Files\Sony, Windows just runs the default action for that object, which is to open it in a Windows Explorer window.

I wouldn’t have gone in such excruciating detail about this issue, except:

  • Somebody else annoyed with this bug might find this resolution via Google
  • It shows how sloppy Sony is about testing its software installers (in passing, note the typo “MulitUser” instead of “MultiUser“)
  • That registry folder is where all the startup items that aren’t in the Start menu reside. You might want to have a look at it to see what odd junk resides there, such as obnoxious system tray items like RealPlayer.

Update (2004-01-12):

Sony has an official fix for this problem: PDTREGISTRYUPDATE.EXE.

Bombay Bits

The Economist once called Bombay “The most expensive slum in the world”. When I was a child, we used to fly to India every year, stopping for a day on the way there and back at my uncle’s place in the Khar district of that city, and I certainly agree with the characterization.

German cinematographer and photographer Lutz Konermann shows you can find beauty in that unlikeliest of places, in his collection called Bombay Bits.

P.S. Yes, I know the city was officially renamed “Mumbai” for political reasons by the extremist BJP party in power there, the way Madras was renamed “Chennai” and Poona became “Pune”. Here is an article debunking the controversy.

Debugging DCOracle2 applications

DCOracle2 is the Oracle interface module for Python I use most often. It is advertised as “beta”, but quite suitable for production use, aside from a few minor rough edges. There are a few others, most notably cx_oracle, but I can’t vouch for them.

Debugging applications that make use of DCOracle2 can be challenging, as with any database environment, specially in a multi-threaded server context. I have developed a small utility module to aid in development. When it is imported, it will automatically trace all database calls made through DCOracle2, including arguments such as bind variables. More interestingly, it will also automatically run EXPLAIN PLAN on queries taking longer than 2 seconds (by default), to aid in tuning SQL statements. As a side bonus, if run by itself, it provides a (very basic) SQL shell that does offer command-line history and editing, something Oracle hasn’t managed to provide in SQL*Plus in almost 30 years 🙂

This code works with Python 2.2 and DCOracle2 1.1 and 1.3 beta. It will not work with 2.1 and earlier.

The latest version of the module file can be downloaded here: debug_ora.py, as well as the RCS repository debug_ora.py,vfor those who care about this kind of stuff.

An example run of the module:

% python debug_ora.py scott/tiger@repos
SQL> select ename, job, dname from emp, dept where emp.deptno=dept.deptno;
SQL: Oct-03-2003 17:32:39:897
select ename, job, dname from emp, dept where emp.deptno=dept.deptno
ARG: () {}
SQL: !!!!!!!!!!!!!!!! slow query, time = 0.0 sec
SQL: !!!!!!!!!!!!!!!! execution plan follows
000      SELECT STATEMENT Optimizer=CHOOSE
001        NESTED LOOPS
002 001      TABLE ACCESS (FULL) ON EMP
003 001      TABLE ACCESS (BY INDEX ROWID) ON DEPT
004 003        INDEX (UNIQUE SCAN) ON PK_DEPT

ENAME  JOB       DNAME
------ --------- ----------
SMITH  CLERK     RESEARCH
ALLEN  SALESMAN  SALES
WARD   SALESMAN  SALES
JONES  MANAGER   RESEARCH
MARTIN SALESMAN  SALES
BLAKE  MANAGER   SALES
CLARK  MANAGER   ACCOUNTING
SCOTT  ANALYST   RESEARCH
KING   PRESIDENT ACCOUNTING
TURNER SALESMAN  SALES
ADAMS  CLERK     RESEARCH
JAMES  CLERK     SALES
FORD   ANALYST   RESEARCH
MILLER CLERK     ACCOUNTING
SQL>

Inkjet printers revisited

In a recent post, I railed at the Inkjet racket. Lest I be perceived as doctrinaire, I do believe there are some good reasons to use inkjet printers, just that price is not one of them.

Here are the cases where I think an inkjet printer is preferable to Fuji Frontier or Noritsu prints on Fuji Crystal Archive paper:

Speed

There is no question sometimes speed matters, and the convenience is worth the price, specially if only proofs are required.

Black & white photography

Printing black and white photos on color materials usually leads to subtle, but discernible color shifts. Although Ilford makes a paper designed specifically for use in digital enlargers like the Lightjet, very few labs offer true B&W digital photo prints, the only one I know of is Reed Digital, using Kodak Portra BW RC paper. RC papers are not archival in any case.

Inkjet printers modified to use the PiezographyBW system can yield black and white photos that match or even exceed the quality of gelatin silver prints. If they use carbon pigment inks, they will be at least as archival (the carbon photographic printing technique is quite ancient and is considered one of the highest forms of photographic printing art, along with platinum printing).

More recently, Hewlett-Packard has introduced the No. 59 photo gray print cartridge for use with its Photosmart 7960 printer. This is a well-supported solution, unlike the finicky Piezography process, but unfortunately, it requires the swellable-polymer HP Premium Plus Photo paper to give decent durability, and is limited to Letter/A4 size. The drying time on swellable polymer paper ranges from a few hours to a day, taking away the immediacy of inkjet prints.

I compared prints made on Ilford Multigrade IV fiber base (baryta) B&W paper, Agfa Multicontrast Premium (resin-coated) B&W paper, Fuji Crystal Archive on a Lightjet, and the HP 7960 on both the glossy and matte HP Premium Plus Photo papers. The prints were compared under daylight conditions (overcast sky), under an incandescent (tungsten) light bulb, and under a compact fluorescent lamp. The results are summarized in the table below.

Color casts

Print paper used

Daylight

Tungsten

Fluorescent

Ilford MGIV FB

Neutral

Neutral

Neutral

Agfa RC

Slightly warm

Slightly warm

Neutral

Fuji Crystal Archive

Slightly blue

Neutral

Slightly purple

HP Premium Plus Photo

Strong Blue

Slight purple

Strong purple

The HP prints give better highlight detail than the Fuji, but fall short of the Agfa. The HP solution is not the silver bullet B&W aficionados were waiting for.

Update (2004-01-22):

The color cast seems to be an issue when the printer is new. After a few weeks of use, the ink cartridge “settles down” and seems far more neutral, better than the Lightjet print. It is not clear whether (1) this problem will reoccur with every new No. 59 cartridge, (2) or whether it was a defect in the cartridge I have, (3) or whether it only happens the first few days after a printer is put in service. As HP cartridges include the print head, I suspect it is option 1 or 2. This would increase the cost of the prints further by increasing waste, but the good news is, the grayscale output from the printer is competitive with the darkroom given the superior level of control you get from Photoshop, and this is the first mass-market printer that can really make this claim.

Matte prints

Unlike fiber papers, RC papers seldom have true matte finishes. The so-called “lustre” finish is in reality a process in which the surface of the paper is calendared (pressed by textured rollers) to imprint a pebble-grained finish, which is a mere ersatz of real matte photo paper. As this is not a microscopic finish, it diffuses light unevenly and when seen at an angle, the print is washed out by the reflections from the textured surface.

A printer like the Epson Stylus Photo 2100/2200 using pigmented inks can make durable and almost painterly prints on fine watercolor papers from the likes of Hahnemühle or Crane’s. Many fine art photographers favor this printer for that very reason.