31 Jul 2004 raph   » (Master)

Great Hackers

The inestimable Paul Graham has another essay out: Great Hackers. Worth reading. Go ahead, I'll wait.

Back already? Ok, good. I find a lot of what Paul writes to be resonant. I especially liked his section on "nasty little problems" - I think the elimination of nasty little problems, as opposed to genuinely difficult and challenging ones, should be a top priority, especially for free software developers. Longtime readers will not be surprised to hear me categorize the auto* suite as a particularly rich source of such nasty little problems, for all that it does a pretty good job solving a set of real problems, and is a huge improvement over what came before.

Paul seems to be addressing the issues at the scale of individuals or small (startup) companies. I would like to see more attention given to issues at a much broader scale: the interaction between hackers and society as a whole.

One way for society to view its great hackers is as a resource, comparable to a natural resource such as mines for valuable metals, or fertile fields for agriculture. Most healthy societies try to convert the potential of those resources into wealth. They plant good seed and tend the land, rather than salting the fields. Of course, societies vary in the extent to which they do a good job of this; famine is much more common in Africa than in the West.

Societies vary even more widely in their ability to get good work out of hackers. Paul explains fairly well what's needed: mostly, let us do our thing and get the hell out of the way. I think his section "More than Money" tells part of the story. I don't think hackers hate money, but I do think we hate spending time hustling for money. There are plenty of people who do, and they tend to become investment bankers and the like. I don't think those people understand us very well.


There's a fair amount of emotional turmoil in my marriage right now, and I've been taking refuge by spending time with a subject very dear to my heart: font design.

In particular, I've been scanning ATF type specimen books and carefully studying the designs therein. I now have a great scanner (Epson 4870), and the scans at 2400 dpi really pick up the detail, and let you see the quality of the printing.

I was especially surprised to compare the quality across the decades. I have four books, one each from 1912, 1921, 1934, and 1941 (all collected by my father). The printing quality from 1912 is head and shoulders above the rest. As a seat-of-the-pants estimate, I'd say it's roughly equivalent to a 2000dpi digital printer.

I've especially grown to appreciate the work of Morris Benton, the chief type designer at ATF for many years. I get the feeling that he was positively obsessed with printing quality. His father was a very gifted inventor, and worked on many machines used in type design and typefounding. In particular, his pantographic "delineating machine" and matrix engraver not only scaled a single design to many sizes, but could also apply general affine transformations, just like PostScript today.

One of the secrets revealed by close study of these specimen books is how type scaled to different sizes. Most fonts today are designed at one size, then enlarged or reduced using strictly mathematical scaling. Master printers over the centuries, however, have long understood that smaller fonts should have more robust features, while larger ones can be more elegant and refined. Periodically, type designers working with new technologies try to rediscover this fact, but it always seems like an uphill battle, probably because of how much extra work it takes to optically scale a font. Adobe is producing many fine optically scaled fonts now, but one gets the impression they're still a small minority of their entire font catalog. Another important example, from the world of free software no less, is the Computer Modern fonts of TeX, which, while technically way ahead of their time, are not considered especially appealing by serious typographers.

So it's especially interesting to learn that ATF used almost purely automated techniques to produce different sizes of font from a single "pattern plate". I came across an excellent article by Patricia Cost which explains the process in considerable detail.

I'll try to strip out the mechanical and historical stuff and just describe the underlying "algorithm". The scaling happens when a matrix (or mold from which the actual metal type with raised letter is cast) is engraved from a pattern plate.

The pattern plate is a piece of metal about 4 inches high, which contains a raised outline of the letter. Placed in the matrix engraving machine, a "follower," or stylus, traces the inside of this outline. The motion of this follower describes a path.

At the same time, a high-speed drill traces a scaled version of this path, cutting into the matrix. Through the mechanical ingenuity of Linn Boyd Benton, the scale factors can be different for horizontal and vertical movement. Typically, the pattern plate was designed for a 36pt font size. To cut a matrix for a 6pt letter, the x scaling would be a factor of 1.19 of the y scaling.

The path traced by the follower, though, isn't exactly the same as the inner outline on the pattern plate, nor is the outline of the letter engraved in the matrix exactly the same as the path of the drill. The follower has a nonzero diameter, so the path it traces is "shrunk" by half that diameter, so that the width of strokes is reduced by one diameter. Similarly, the cutting tool has a nonzero diameter, so the outline engraved into the matrix is "grown" by half that diameter, so that stroke width is increased by one diameter. When the ratio between these two diameters is the same as the scaling factor, the outlines correspond closely (especially if the letter on the pattern plate has slightly rounded, rather than perfectly square, corners), and stroke weight should be identical (after scaling, of course).

However, by using a smaller or larger diameter follower, it's possible to increase or decrease the stroke weight, respectively. And, after studying the font books, I see that the typefounders at ATF did consistently apply this technique for scaling fonts. A typical recipe would be to use a grow radius of 100/ptsize - 3 units (on a 1000 unit/em grid), while applying a horizontal scaling of 1.18/ptsize + .967 (both additive factors chosen to normalize for 36pt design). It's worth noting that the Computer Modern fonts use a width scaling of about 1.3/ptsize, so the stretch of smaller sizes is even more exaggerated compared to the ATF example.

I want to write this stuff up, but to do it justice will require quite a bit of time, especially to produce the illustrations. In the meantime, this image of two lowercase a's from Lightline should whet the appetite of you type fiends out there. The two images are superimposed with a "difference" blend mode, so you can see two outlines. The sharper image is an 18pt "a", scanned at 2400 dpi, and scaled in the horizontal direction by a factor of 1.15. The fuzzer image is a 6pt version of the same character, scanned at 2400 dpi, then enlarged by a factor of 3x. Thus, 0.001" at that size corresponds to 7.2 pixels. You should be able to see, then, that the 6pt version is grown by a little less than a mil with respect to the 18pt version.

The good news is that it wouldn't be that hard to adapt this process to the present-day practice of digital typography, and that it can be almost entirely automated, so generating a good family of optically scaled fonts wouldn't be that much more labor-intensive than drawing a single good font (which is difficult enough as it is!)

Latest blog entries     Older blog entries

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!