Sunday, March 25, 2007

MaraDNS snaphost: MaraDNS now has BIND zone file support

MaraDNS 2007.03.25 released

OK, I finally have a usable bind2csv2 parser. This parser has only undergone the most basic of testing.

What this parser is is a script to convert BIND zone files in to MaraDNS 1.3 compatible csv2 zone files. The script is written in Python, so people who need BIND zone file support will need Python on their system. The program was written in Python 2.2.3, and hopefully will work with more recent versions of Python.

The name of the script is, and it is in the tools/ directory.

This script is not complete yet. In particular, the $ORIGIN, $TTL, and $READ directives have not been implemented yet. Note that the csv2 parser has has support for these directives since last summer; it's very simple to add these directives to the python script.

Currently, the script has support for the following RR types:

A, NS, CNAME, PTR, SOA, MX, AAAA, SRV, TXT, SPF, HINFO, MB, MD, MF, MG, MR, MINFO, MFSDB, RP, X25, ISDN, RT, and GPOS. There are stubs for supporting WKS, NAP, PX, and LOC, but the code for these RRs has not been written yet.

If a TXT field uses \xxx excape sequences, these will become literal '\xxx' sequences in the csv2 zone file.

To use the script, run bindtcsv2 thusly: -c zonefile

Where zonefile is the file you wish to convert from a BIND to a CSV2 zone file. The python script will output a file with a name like zonefile.csv2, which (hopefully) is a csc2 zone file MaraDNS 1.3 can parse.

If zonefile.csv2 already exists, will erase and replace the already existing zonefile.

I am now asking for people to help me test this script by sending me BIND zone files to test parsing with.

Friday, March 23, 2007

Chortle hotfix; kerning; More on DjbDNS

OK, I thought I was done with the Chortle font for now. I was wrong. It seems that a fontforge bug ate all of the non Latin1 characters in the Chortle typeface I released yesterday. Hence, I have a hotfix to restore these characters. In addition, I have improved the metrics with the italic letters a little, and have updated the font version number in that field. As always, it's at Now, hopefully, I have a version of Chortle that doesn't need to be updated for a while.

It would seem that Microsoft Word 2000 doesn't use the kerning tables included with a font. Hence, I have to make the metrics of the letters as good as possible without using kerning. There does seem to be a way of changing the kerning in Microsoft Word, however. I'll have to experiement with this when making pages with really large text, such as title pages.

A DjbDNS user very politely asked me to detail the bugs that I pointed out in yesterday's blog. I will detail the first two bugs here and the other three in later blog entries.
  • Djbdns has the 'akamai djbdns' problem where the DjbDNS resolver can not resolve some domains.

    In January of 2006, there were known issues with resolving and with DjbDNS. They may or may not work today; djbdns certainly hasn't fixed the issue that caused the problem.


  • DjbDNS is broken when someone has to change their hosting provider, and their current hosting provider refuses to help.

    In more detail, djbdns does not periodically check the upstream DNS servers for a given domain to make sure that the domain in question is still using the same name servers. This is a problem when someone changes hosting providers, and the old hosting providers keeps the outdated DNS records in their DNS server. DjbDNS will continue pointing to the old provider until either the old ISP deleted their records, or DjbDNS is restarted.

I have had two very unpleasant experiences with DjbDNS advocates over the years, and one unpleasant experience with DJB himself. In more detail
  • The first email I got when I first announced MaraDNS in 2001 was a flame from a DjbDNS advocate, telling me it was not worth my time to write MaraDNS because DjbDNS is a good DNS server.
  • I once got in an edit war in Wikipedia over whether DjbDNS is open source. This person wanted to redefine the term "open source" to make DjbDNS open source, even though the Open Source Definition is unambiguous and doesn't cover licenses that forbid redistribution of modified programs.
  • DJB flamed the Bugtraq moderator for approving a posting describing MaraDNS on that list

So, yes, I have had some rather unpleasant experiences with DjbDNS advocates and even DJB, even though I supported DJB in some of his flame wars against the BIND developers in 2001.

Note that I'm not counting the flames I got for posting my DjbDNS rant there; I was asking for flames and I did get some productive discussion, which I feel is worth getting flamed over.

- Sam

Thursday, March 22, 2007

MaraDNS 1.3.04 released; Chortle update

I have just released MaraDNS 1.3.04. This has a number of bug fixes and improvments in the development branch of MaraDNS compared to the last last release. From the changelog:

  • Remco pointed out that MaraDNS is not RFC4074 section 4.2 compliant. Fixed.
  • Update of recursive server to make it more robust against certain DOS attacks.
  • The port range that the recursive resolver binds to can now be changed in the mararc file.
  • FAQ and SQA updates

DjbDNS is harmful

DjbDNS is harmful to use because the code has not been updated for over five years. This, in spite of the fact DjbDNS has the following bugs:

  • There are problems resolving some domains with DjbDNS' resolver. This is the 'akamai djbdns' problem.
  • DjbDNS does not correctly periodically check upstream DNS servers to make sure a given domain has not moved.
  • The list of root servers included with DjbDNS is out of date.
  • DjbDNS can not compile in Linux without using a special incantation.
  • There is a denial of service problem where a remote attacker can clear DjbDNS' recursive cache by sending a single "packet of death" to a dnscache server.

It is not feasable for a third party to fix any of these bugs because of DjbDNS' restrictive non-open-source license, and DJB appears to have no intention of fixing the bugs in his program.

In fact, MaraDNS has a better security record than DjbDNS. MaraDNS also has had denial of service problems. The difference between MaraDNS and DjbDNS is that the bugs in MaraDNS are fixed.

More information about DjbDNS' problems can be found in the MaraDNS advocacy document.

There is also a problem with the DjbDNS user base, who have all the fanatism of Jihadists.

To be fair, here are some criticisms about MaraDNS that I added to the MaraDNS Wikipedia article:

MaraDNS has limited support for being a slave DNS server. While MaraDNS includes a tool that can receive zone files, this process needs to be automated via an external program, such as crontab, and MaraDNS needs to be restarted to load the zone in question.

While MaraDNS can resolve almost any site that other DNS servers can resolve, it does not resolve all names the same way other DNS servers do. CNAME and ANY records, in particular, are resolved differently.

MaraDNS spawns a thread for each recursive DNS request that is not already cached.

I have updated the Chortle font, and have released version 0.21 of this font today. I'm hitting the point where I'm looking at this font too much and starting to second-guess myself. So, I'm taking a break from my embedded Linux project and will be working on MaraDNS (and my day job as an English teacher) for the time being.

Wednesday, March 21, 2007

Why I am working on this font

The reason why I am working on making the Chortle bitmap is because Linux does not have a really readable porportional bitmap font. The way I have been working around this is by enabling hinting in Freetype, and using Microsoft's Verdana font. This is obviously not a long-term solution; Verdana is a proprietary font that one can not just add new glyphs to.

So, I'm trying to make a screen font that is as readable as Verdana, while preserving the metrics of the Bitstream Charter/Charis font that I used for my printed documents. It's a lot of work; more work than I envisioned when I started this font. Last night, I decided that, at the larger 17 pixel size, the Chortle bitmap is more readable if I put more space between letters:

This seems to be more readable than the older version of the 17 pixel font:

The update, as always, is available at

I also want to use this font in a version of Linux for older computers.

Tuesday, March 20, 2007

Chortle font update

I have released an updated snapshot of the Chortle font today.

When I was comparing Chortle with the original version of Bitstream Charter given to the X consortium in 1992, I noticed that the spacing for the bold italic font was a lot tighter. See for yourself:

Here, the top is the original Bitstream Charter. The middle is Charis SIL. The bottom is the version of Chortle that I had this morning. You can see that the lettering is a lot tigher with Charis; this causes letters to overlap each other. I have made the lettering a little looser. You can see there is too much space around the "o"; I have since updated Chortle to have less spacing around "o" (and "e", the right of "b", the left of "d", the right of "p", and the left of "q"). "e" still has a little too much space on its right; I will update the Chortle font.

I also have finished the 17 pixel bold version of the bitmap font, and am almost done with the 17 pixel bold italic bitmap font.

Wednesday, March 14, 2007

MaraDNS snapshot

I have released a new snapshot of MaraDNS today that fixes a problem with RFC4074 section 4.2 compliance. I have also backed off on the changes to the recursive code's memory allocation; it's time to completely rewrite the code to not use so many threads, and stop wasting time making changes to a codebase I won't be using once the recursor is rewritten.

The snapshot can be downloaded here:
I have also updated the MaraDNS roadmap page.

Monday, March 12, 2007

Chortle 0.20 released

I have released Chortle 0.20 today. This has a number of changes from the last release of Chortle:
  • Dot removed from 0. It didn't look that great in printed documents.
  • Bitmap renderings overhauled. Most serifs removed from bitmao renderings; lower case letters "b", "d", "g", "p", "q", "o", "y" made more round to be easier to read.
  • Unicode versions of fonts removed. All fonts are now encoded with the "MaraIPA" encoding. Now I no longer have to maintain two versions of the same fonts.
  • Bdf non-bold weight name changed from "book" to "medium"
  • 17 pixel version of bold and italic font addded
  • Vector/Outline BoldItalic version of font copied from source, in order to make this more attractive, with Chortle changes to "1", "1/4", "3/4", and middle dot done.
Here are samples of Chortle at bitmap resoltions:

Chortle is available for download here:

Friday, March 9, 2007

Chortle update and sample image

I've been doing a lot of readability (is that a word) testing with the Chortle font. I found that the fully serif font was hard on my eyes after 30 minutes or so of reading. So I starting removing some of the serifs:

This was an improvment, but it was still hard on my eyes after one or two hours of reading. So I improved it some more:

This is clear, but isn't quite readable enough to comfortably read an entire book with; I'm going to have to make a bigger version of this lettering to do that.

MaraDNS update: I have updated the webpage.

Wednesday, March 7, 2007

Chortle update

Last night, I went to so effort to see if the low-resolution bitmap version of the Chortle font would look better if there was more spacing between the letters. Here was the result:

In the image, the first paragraph is the original font. The second paragraph is a version of the font that always has two pixels between letters. The third paragraph is a version where there are between one and two pixels between letters.

After doing a lot of testing by reading a lot of text with all these fonts, I decided that the original version is the best. The version with two pixels between fonts doesn't give the letters enough space to look nice--I can't change the size of the letters because I want to preserve the metrics of the printing/outline/vector font. The version with between one and two pixels between letters has more attractive letters, but the variable spacing between letters makes it hard to read.

In the original version, the serifs and how they almost connect between letters seems to make the font easier to read.

That said, I have all three versions of the font available in a snapshot I uploaded today.

I will update the webpage for MaraDNS Friday. I will also realease Charter 0.2. At this point, the font is ready for me to start working on the software that will use the font--I will change the software to use more sizes when I make more sizes.

My MaraDNS project: Document how MaraDNS allocates and frees cache elements.

Monday, March 5, 2007

MaraDNS 1.0.40 released; Chortle font update

I have released MaraDNS 1.0.40 today. This is the legacy branch of MaraDNS that will no longer be supported for anything besides serious serurity holes after December 21 of this year.

In this release of MaraDNS, I have backported the changes to the UDP code to make it more resilient. No other changes have been done to this code.

MaraDNS 1.0.40 can be downloaded here:

The next thing I need to do is update the MaraDNS webpage.

I have also updated the Chortle font. In this update, I have made some experimental changes:
  • I have put a dot in the middle of the number 0 to distinguish it from O.
  • I have made the upper stroke 1 more angular to distinguish it from l.
  • I have added a BoldItalic typeface (Experimental; the spacing around "i", for example, looks wrong)
  • I have finished the bold, italic, and boldItalic forms of the 15 pixel typeface

So, let look at the new version of the Chortle font:

Here, you can clearly see the dot in the zero. I have mixed feelings about this dot. It looks fine on the screen, but doesn't look as good as the zero without a dot in the printing font. I have already experimented with making the dot smaller. I may get rid of it completely from the printing font and only have it visible on the screen.

I have also made the angle in the upper stroke of the number one more pronounced, so you can not confuse it with the l. Again, I'm not sure this is as attractive as the original "1", but the change is not as great as the change with the zero, so I will keep this change.

These changes do not affect the metrics of the font.

I have also finished up the bold 15 pixel bit map font, the italic bitmap font, and even now have a bold italic font. Since I've already shown you the bold bitmap font, let me show you the italic font:

If you look closely, you will realize that this font is, by and large, an oblique font instead of an italic font. This is because, at low screen resolutions, it is very difficult to make an attractive true italic font. So, instead, we have this mostly oblique font (the "f", "o", and "l" come from the italic font, however).

I have also made a bold italic bitmap font:

This was done rather quickly; I had FontForge generate a bold italic font from the bold font, then quickly corrected the obvious errors. I am not completely satisfied with this typeface. However, I feel it is more important to work on the Roman, Italic, and Bold fonts at other sizes before trying to make this more readable.

But, before doing all that, I need to get back to MaraDNS, update the webpage, and finish up the changes to the memory allocation.

Chortle, as always, can be downloaded here:

Friday, March 2, 2007

Another list of Free fonts

Here is another list of free fonts.

Note that these are "free beer" fonts. These are not open source fonts.

Here are some websites for some bona fide open source fonts:

And, finally, some more lists of truly free fonts: an index of open-source fonts; SIL's index of OFL fonts; yet another open source font list

Thursday, March 1, 2007

Chortle update and sample images

Here is a sample of the bitmap version of the Chortle font:

As you can see, this font is quite readable but could be improved.

One issue is the the letters are a little closer together than they are in, say, the Verdana font. There is one pixel between each letter in this font; this makes the font a little cramped looking. Another issue is with the "m", "i", and "T" letters: They are asymmetrical. This is because Fontforge doesn't allow me to change the width of a bitmap version of a letter without changing the width in the vector form of the letter.

The thinking is this: We want the bitmap version to resemble, as much as possible, the high-reolsution version of the font. However, this is not possible at the small resolutions typical of computer screens, because the width on the screen has to "snap to" an integer count of pixels.

Indeed, here is a naïve rendering of the above bitmap font on a computer screen, where the characters are placed, as close as possible, to where the characters would be on the printed document:

While this is still readable, it's a little more difficult to read because there is more spacing between some letters, such as "qu" in "quick" and "la" in "lazy".

Another issue is with diagonal strokes. The "x" is a little hard to read because this letter has both diagonal strokes and serifs. The "s" used to also be difficult to read, but I revised it this morning to not have any diagonal strokes in it. I tried removing the diagonal strokes from "y", but decided that it's better to keep the diagonal strokes in this letter. Indeed, the "y" in the Verdana font has diagonal strokes (but doesn't have strokes in the X11 "Misc" font).

Here is the bold version of this font:

As you can see, this is incomplete. In particular, the uppercase accented letters haven't been done yet. As I mentioned yesterday, the letters with diagonal strokes ("A", "M", "W", "v", "w", "x") look a little darker than other letters. Strangely enough, the "z" doesn't have this problem. You may also notice that the lower case "y" doesn't have diagonal strokes; once we make this font bold, it's nay to impossible to keep "y" readable without removing the diagonal strokes. Like the roman font, some letters, such as "r" and "v", suffer because we can't make these letters wider.

Anyway, in addition to getting to the bottom of MaraDNS' memory management, my next project is to finish the bold font, then work on the italic font, then do all this work again at other pixel sizes.

Again, the URL for the Chortle font is here: