<<  Page 9 of 14  >>

Linux web fonts

A couple of quick tips for improving the way the web looks under Linux:

1. Set your web browser’s default fixed-width font (“monospace font”) to Inconsolata. It is clean and highly readable. It first might be necessary to install the font, in which case hopefully your distribution has a package for it, as mine did. (Hat tip to commenters at Greg Kroah-Hartman’s Google+ page for this recommendation.)

2. For the “Georgia” font (one of Microsoft’s “core fonts for the web”, originally released as freeware, and used by a high proportion of websites), turn down the level of “hinting” with which the font is rendered. Most fonts seem best with “full” hinting, but this one I like better with “slight” hinting. This can be accomplished by inserting the following lines into one of your fontconfig files:

<!-- Slight hinting only, for "georgia" font -->
  <match target="font">
    <test name="family"><string>georgia</string></test>
    <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>
    <edit mode="assign" name="rgba">      <const>none</const> </edit>

(The second ‘assign’ line turns off subpixel rendering, which in this case seems to give the font too much color fringing.) This drastically alters the appearance of the font; before the change it looks like this:

and afterwards it looks like this:

It was the appearance of the uppercase D in the former that got me looking into this. This is of course a matter of personal preference, and others will no doubt prefer the first version in general, but that D is just wrong: it shouldn’t be blurred vertically like that. And to me, the whole change seems like an upgrade. (I still might prefer the first version if I were using a display where the pixels were larger.)

For completeness, here’s the entirety of my local fontconfig file:

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
  <match target="font">
    <edit mode="assign" name="rgba" >     <const>rgb</const> </edit>
    <edit mode="assign" name="hinting" >  <bool>true</bool>  </edit>
    <edit mode="assign" name="antialias"> <bool>true</bool> </edit>
    <edit mode="assign" name="autohint" > <bool>false</bool> </edit>
    <edit mode="assign" name="hintstyle"> <const>hintfull</const> </edit>

<!-- Disable Autohinting for bold fonts -->
  <match target="font">
    <test name="weight" compare="more"><const>medium</const></test>
    <edit mode="assign" name="autohint">  <bool>false</bool></edit>

<!-- Slight hinting only, for "georgia" font -->
  <match target="font">
    <test name="family"><string>georgia</string></test>
    <edit mode="assign" name="hintstyle"> <const>hintslight</const></edit>
    <edit mode="assign" name="rgba">      <const>none</const> </edit>

I’m not an expert as to where, in general, this file should be placed, but “.fonts.conf” in your home directory is a good place to try. See the above-linked Wikipedia page for more possible locations.


When I first read Shannon’s 1948 paper “A Mathematical Theory of Communication”, one set of numbers particularly jumped out at me: the numbers for the difference between the error rate of a communications channel and the rate at which information is lost from it. I recently ran into a free link to the paper (in a blog post by Federico Pereiro), which reminded me of it. As Shannon explains the issue:

Suppose there are two possible symbols 0 and 1, and we are transmitting at a rate of 1000 symbols per second with probabilities p0 = p1 = 1/2. Thus our source is producing information at the rate of 1000 bits per second. During transmission the noise introduces errors so that, on the average, 1 in 100 is received incorrectly (a 0 as 1, or 1 as 0). What is the rate of transmission of information? Certainly less than 1000 bits per second since about 1% of the received symbols are incorrect. Our first impulse might be to say the rate is 990 bits per second, merely subtracting the expected number of errors. This is not satisfactory since it fails to take into account the recipient’s lack of knowledge of where the errors occur. We may carry it to an extreme case and suppose the noise so great that the received symbols are entirely independent of the transmitted symbols. The probability of receiving 1 is 1/2 whatever was transmitted and similarly for 0. Then about half of the received symbols are correct due to chance alone, and we would be giving the system credit for transmitting 500 bits per second while actually no information is being transmitted at all. Equally “good” transmission would be obtained by dispensing with the channel entirely and flipping a coin at the receiving point.

He then goes on to calculate the transmission rate, for this case, as being 919 bits per second. That is, if 1% of the bits are flipped, it results in about an 8% loss in the capacity of the channel. In other words, to transmit data correctly in the presence of a 1% error rate, you have to surround it with error-correction codes that bulk it up by about 8% — in practice, by even more than that, since error-correction schemes are not perfectly efficient.

What is interesting is to consider the implications of this in less formal settings: in news reporting, for instance. A 1% error rate would be very good for a newspaper; even the best magazines, with fact checkers who call around to check details of the articles they publish, can only dream of an error rate as low as 1%. Most of their errors are things that only specialists notice, but they are still errors, and often ones which significantly change the moral of the story; specialists frequently sigh at the inaccuracy of the news coverage of their specialty. But that unattainable 1% error rate would still mean that, at best, one would have to throw out 8% of what is said as being unreliable. That is, if one were interested in perfect truth. People in the news business have long since become inured to the fact that what they print is imperfect, and their main concern is that the errors they make not be of the laughable sort — or at least not laughable to the general population. But if one wants to figure out the world, that is not good enough.

To make things worse, most of the world does not encode information in error-correction schemes to cover for the press’s errors. When anyone does so (and political groups have learned to do so), the scheme they usually use is simple repetition: saying things multiple times, in varying language. That’s quite an inefficient error detection/correction scheme, but is the only one that most recipients can be expected to decode and that can get through a human news system in the first place: people would look at you quite funny if you tried to speak in Hamming codes.

For the rest of the information in the world — the stuff not sponsored by any political group — the situation is even worse. In the absence of deliberately added redundancy, one has to use whatever inherent redundancy there is in the information, and mistrust the stuff that isn’t confirmed that way, which is typically more than 90% of it.

This is why reliable sources of information are so valuable: one doesn’t have to regard them with near-fanatical mistrust. It is tempting, once one knows the truth about something, to be liberal in excusing errors in descriptions of it, on the grounds that those descriptions are mostly right. But that is to forget, as Shannon puts it, “the recipient’s lack of knowledge of where the errors occur”, for recipients who are still struggling to find the truth. It may be right to excuse the people who commit those errors, as human beings who perhaps did the best that could be expected of them in the circumstances, but that doesn’t make it right to excuse their work product.

Easy Bread

Bread right out of the oven has a taste that beats most anything that can be bought in a store. Even in stores that sell bread baked on the same day, it has usually been sitting around for hours. But baking one’s own bread is generally a hassle. Bread machines make it much easier, but like all machines, they aren’t quite as easy to deal with as one first imagines. They take up space; they sometimes break; they have to be cleaned. (The one I once owned featured an impeller that had to be dug out of the bottom of each loaf.) Nonstick surfaces make cleaning easier, but don’t entirely eliminate it.

A few years ago, I was sent a pointer to an article by Mark Bittman describing a method for making bread without kneading. It was further billed as a “truly minimalist” bread. But when I tried it, the effort required was not minimal enough for me. There was a lot of rigamarole about flouring the ball of dough, manipulating it two hours prior to baking, and preheating a pot to bake it in. Bittman calls himself “The Minimalist”, but he didn’t minimize this one.

The trick to minimizing it is to bake the loaf in a silicone mold. Stuff doesn’t stick to silicone, so when the loaf is done baking, you just turn the mold upside down and the loaf falls out. No greasing, flouring, or anything else is required for this to happen. I don’t even clean the silicone between loaves; it isn’t left immaculate, but the slight residue doesn’t harm anything.

The minimized recipe uses the same ingredients:

  • 3 cups flour
  • 1/4 teaspoon yeast
  • 1 teaspoon salt
  • about 1.5 cups water

Just about any sort of flour will do; flour without any gluten in it (non-wheat) will produce a dense, crumbly loaf, but that’s not a big deal. The salt can be omitted, or doubled, or whatever; it’s just for taste. Mix the dry ingredients for about a minute (they’re easier to mix dry), then add water, mixing, until the mass is completely wet, but no further. The amount of water needed depends on the type and brand of flour; the number given above is just a rough approximation. There shouldn’t be any mounds of unmixed flour hiding below the bottom of the mixture, nor any parts of the mixture whose surface is dry and which protrude a bit. But don’t add any more water than that, or you’ll get a rather wet loaf. For that matter, even when done right this yields a pretty wet loaf. Not that the wetness matters much; it has no effect on taste and not even much effect on texture.

Anyway, the next step is to wait 12 to 24 hours for it to rise. Or longer, if it’s cold; the original recipe specifies 18 hours at 70 degrees F, but those numbers are not critical. The long rising time is what makes it unnecessary to knead. It also allows for the development of a rich microbial flora, which provides the excellent flavor achieved with this recipe. Or, well, rather, I hope that’s not the case. And I don’t believe it is; the flavor has been quite uniform, which wouldn’t be the case if random germs were providing it. That’s much less yeast than is normally used, but still, it seems, enough to provide the vast majority of the inoculum. But, uh, best not to spit in the stuff while mixing it, or to mix with your hands. The baking will kill most germs that happened to get in and grow, but some might survive in spore form.

The next step is to transfer the mess to the silicone baking dish, and bake at 375 degrees F (190 C) for an hour or so. Exact timing is not critical. If you like a burned, er, “dark” crust, do as in the original recipe and increase the temperature and decrease the time.

The only part of this exercise that still seems like a hassle is cleaning the mixing bowl. Bread dough is sticky and doesn’t wash off easily. I tried doing the mixing in the baking mold, but that didn’t work well: silicone is thin and floppy, and the mold has square corners unconducive to mixing. Besides, when bubbles form in the mold as the bread rises, they form against the walls, so instead of a smooth crust one gets a crust with bubble holes in it. But perhaps it deserves another try. In any case, even as it is, this is competitive with bread machines for ease: probably somewhat worse, but not that much worse.

Once the bread is out of the oven, wait half an hour or so for the heat to continue penetrating into the interior, finishing up the cooking process.

Then, any part that isn’t eaten right away is best sliced up and put in the freezer, for later microwaving. That preserves most of the right-out-of-the-oven taste. The only trouble with doing that with this loaf is that the slices tend to stick; that’s the downside of having a wet loaf. The way to avoid sticking is to pack the slices in a pessimal fashion: instead of trying to pack them tightly, try to pile them up so as to leave space unused, so that they’re not touching each other very much. They’ll still stick, but generally can be pried apart without much trouble. (Still, people with weak hands might want to just pack the slices in a single layer so that they don’t stick at all.)

<<  Page 9 of 14  >>