Thursday, December 31, 2009

TCC: A C compiler in only 201k

One thing that has always irked me is that my Desert Island disc doesn’t have a C compiling suite—mingw (6 megs 7z compressed) is just too big. Well, the next version of Desert Island will have a C compiler.

Browsing around on the Wikipedia, I discovered the Tiny C Compiler, which is a full C compiler which is only 201k in size 7-zip compressed.

Needless to say, the next version of the Desert Island disk will include TCC. In addition, I am very tempted to tweak things to make sure Deadwood can compile and run in TCC.

Happy new year 2010 everyone! I will not post another blog entry until early next week, I mean year, I mean decade.

Wednesday, December 30, 2009

Final MaraDNS snapshot for the 20{0}0s

I have just uploaded what will be the final MaraDNS snapshot for the 2000s: I have added a Changelog with MaraDNS 1.4.02 which I will adjust when I release MaraDNS 1.4.02 early next year, errr decade.

Now that I have updated the main documentation, the next thing I will do is make sure MaraDNS 1.4 passes all of the SQA regressions in the sqa/regressions directory. I will, as needed, revise MaraDNS 1.4 and/or the tests to make sure MaraDNS 1.4 hasn't introduced any new bugs.

Once I do that, I will release MaraDNS 1.4.02.

I will not be online for the new year's holiday, but should continue work on MaraDNS next week.

I have had a very productive 2000s working on MaraDNS, and hope to finally finish up MaraDNS in the early 2010s (ideally, with Deadwood 3.0 in mid-2010 and MaraDNS 2.0 before the end of the year).

Tuesday, December 29, 2009

MaraDNS snapshot update: All docs updated

I have finished the process of going through the documentation for MaraDNS and updating it to be current with MaraDNS 1.4 (removing mentions implying MaraDNS 1.2 is the current version of MaraDNS, etc.)

In addition to uploading the updated documentation on to the MaraDNS web page, the updated snapshot can be downloaded here:

Monday, December 28, 2009

MaraDNS snapshot update

I have updated the filelist to include the Deadwood release bundled with MaraDNS 1.4, and went through the FAQ updating entries for the 1.4 release of MaraDNS.

It can be downloaded here:

Sunday, December 27, 2009

New MaraDNS snapshot

I am continuing the process of updating MaraDNS documentation to be current with MaraDNS 1.4. I've just updated the FILES file with the current files and directories in the MaraDNS top-level directory. Speaking of which, I need to add Deadwood to this file. Anyway, this snapshot can be downloaded in the usual place.

Thursday, December 24, 2009

New MaraDNS snapshot

For Christmas Eve, I'm giving the world another MaraDNS snapshot. This is identical to yesterday's snapshot, but since an error I made resulted in the debian.html file not being updated, I fixed this.

It can be downloaded here:

This will be my last update until next week. Merry Christmas everyone!

Wednesday, December 23, 2009

New MaraDNS snapshot

I am going through the process of removing or updating old cruft from the MaraDNS tarball. This process continues in today's snapshot of MaraDNS:
  • TODO.1.3 and files in top-level directory removed
  • COPYING updated to reflect updates made in 2009
  • README.Debian and debian.html web pages updated to reflect MaraDNS 1.4 release
  • README.RedHat updated to give directions that correctly make a RPM in CentOS 5; RedHat .spec file updated to build RPM again in CentOS 5

Tuesday, December 22, 2009

New MaraDNS snapshot

I have released a MaraDNS snapshot today. This is 1.4 with a single patch: The download page has been updated to reflect the fact I uploaded MaraDNS 1.4.01 to Sourceforge yesterday. I have also removed older patches and build scripts for MaraDNS to keep the tarball small.

In addition, I have removed older 1.3 snapshots of MaraDNS from the webpage and made space for MaraDNS 1.4 snapshots.

MaraDNS 1.4 snapshots can be downloaded here:

Monday, December 21, 2009

MaraDNS 1.4.01 released

OK, for the first time since 2007, I am making a stable branch of MaraDNS. I have released MaraDNS 1.4.01 today, which is MaraDNS 1.3.07 with some minor feature enhancements and bug fixes. It can be downloaded from the MaraDNS download page.

While I have updated some of the documentation to reflect the fact MaraDNS is now MaraDNS 1.4, not all of the documentation has been updated.

To do:
  • Make MaraDNS 1.4.01 available on MaraDNS' Sourceforge download page (Update: Done 20091221)
  • Work on updating the documentation and pieces of the code which assume we're using an older MaraDNS release.

Saturday, December 19, 2009

Deadwood 2.4.10 released

In preparation for Monday's release of MaraDNS 1.4.01, I have released Deadwood 2.4.10 today. This is Deadwood 2.4.09 with the documentation fully updated to reflect the fact it uses Google's DNS servers as the upstream by default (e.g. The README in the Windows binary makes it clear that you don't need to change the upstream DNS servers).

In addition, I ran the full SQA test in 64-bit CentOS 5.3 in addition to running it in 32-bit CentOS 5.3 to make sure the code has no regressions; in other words, everything that worked before still works.

It can be downloaded here:

Thursday, December 17, 2009

Ways of getting a UNIX environment in Windows

If you're an old UNIX greybeard, and you want to have a UNIX environment in Windows, there are a few options:

Options for cheapskates

The following options allow one to have the UNIX experience in Windows for free:
  • Cygwin is the most well-known option. All of UNIX, including, yes, X-windows, is here. However, it’s a really big download; it’s essentially like having an entire Linux distribution in Windows.
  • MSYS is part of Mingw and has a core UNIX environment in a single tiny 3-megabyte file. This doesn't have some things people may expect with UNIX, such as Perl or Python (or, annoyingly enough, no ‘du’ either), but it does have the Bash shell and Awk, along with the usual ‘ls’, ‘rm’, and what not. It uses a port of the rxvt terminal which allows X-style copy and paste (highlighting anything in the window puts it in the clipboard; middle-clicking or clicking on the mouse wheel these days pastes whatever is in the Windows clipboard); Windows drives are accessed with the directories “/c”, “/d”, and so on.
  • Virtual box along with your favorite Linux distribution.
  • For something a little easier to configure that VirtualBox, there’s VMware player, along with an image of your favorite Linux distro or other free *NIX clone. I like the BagVApp repository of VMware images myself. It’s also possible to make your own VMware images, complete with tools for free; EasyVMX is a web interface for making VMware blank images; VMware’s tools can be obtained by downloading VMware’s free server download.
For-pay options

Wednesday, December 16, 2009

Docbook sucks

This message is my reply to a Facebook message claiming Docbook is better than HTML because you can’t add a table of contents (TOC) to an HTML document.

Docbook sucks. It is too complicated for its own good. In the early 2000s, people were clamoring for a standard documentation format for MaraDNS. I whipped out Perl and made a script to convert a subset of HTML (which I call “ej”) in to *ROFF man pages, along with a couple of other scripts to make HTML documents and ASCII text files.

People complained because it wasn’t docbook. I told them I looked at docbook; my rant (which I didn’t publish) was that the language was too complicated and the tools too primitive for my tastes. I still use this subset of HTML for documents that are converted in the *ROFF man pages (such as Deadwood’s man page).

HTML is the universal text markup language and using anything else is foolishness. And, yes, making a TOC for HTML documents is easy (as long as the HTML document is structured). Just last week I made a tutorial in a word processor, converted it to HTML, and added a TOC like this:

cat Tutorial.html | awk -F\> '/<\/b><p>/ {a=$2;sub(/<\/b/,"",a);gsub(/[ -]/,"",a);print "<A name=" a "> </A>"} {print}' > foo.html

mv foo.html Tutorial.html

cat Tutorial.html | awk -F\> '/<\/b><p>/ {a=$2;sub(/<\/b/,"",a);b=a;gsub(/[ -]/,"",a);print "<A href=#" a ">"b"</A><br>"}' > TOC

vi Tutorial.html
{move cursor down to area just past the BODY tag}
:r TOC

And, oh, points directly to some ads asking me to buy their books (Update: To be fair, you can read this book for free on their web page). No thank you. I can spend five minutes whipping up an AWK script to add a TOC to a HTML document; did I mention that the GAWK manual is a free download, not a $40 download? (Update: Again, one of the books is free to read on their webpage)

Final update:

Another cool linky:

Monday, December 14, 2009

New MaraDNS snapshot

By mistake, when I made the new MaraDNS snapshot last Friday, I called MaraDNS Deadwood in the note about * characters in zone names terminating MaraDNS. Fixed.

It can be downloaded here:

My plan is to release MaraDNS 1.4.01 one week from today (December 21).

Friday, December 11, 2009

Deadwood 2.4.09 released; new MaraDNS snapshot

I have released Deadwood 2.4.09 today; this is Deadwood 2.4.08 with a couple of minor bugs fixed and with the default DNS servers set to be Google's new public DNS servers.

It can be downloaded at

I have also updated the MaraDNS snapshot to update the Deadwood download link, update the version of Deadwood included with MaraDNS to be Deadwood 2.4.09, and add a note in the mararc man page that putting a * in a csv2 zone name will make the program terminate with a fatal error.

Thursday, December 10, 2009

New C-evo maps

I have made a couple of preset maps for C-evo today; both are very small maps. One is best for a 1-player game against the AI; there are a number of starting positions but the human has a better island. The other has three starting positions on a tiny map.

Also included is one of the “Total fairness” C-evo maps.

The main reason I have made these maps available is because I had a small file with just one map which was only about 800 bytes in size; since the Desert Island CD uses the ISO filesystem with a 2 kilobyte block size, making this file a little bigger (any size 2048 bytes or less) doesn’t increase the amount of space the file takes up on the disc.

It can be downloaded here:

Wednesday, December 9, 2009

Why Google has made public DNS servers available

Google has made public DNS servers available for one simple reason: They want to resolve using their IPs (74.125.93.xx) instead of other IPs. Notably, if you use OpenDNS, a request for resolves to OpenDNS’ 208.69.36.xx IPs.

This takes, or has the potential to take, ad revenue from Google, so Google responded by having very easy-to-configure (how hard is it to forget “” and “”?) DNS servers that don’t include any ads—besides the ads Google themselves include in their search result.

They made the DNS servers geek-friendly: Their DNS servers do not redirect NXDOMANs (DNS replies saying “this host name does not exist”) to an ad-filled page, but correctly forward NXDOMAIN replies on to the end-user.

There’s a good reason OpenDNS’ president is scared of Google’s DNS servers; by offering for free (ad-free) what OpenDNS offers, they have undercut OpenDNS and, quite frankly, OpenDNS’ days are numbered. Yes, they do offer spam/phish/adult content filtering, but the market for that is smaller than the market for “My ISP’s DNS servers suck, give me something more reliable”.

Disclaimer: I sent my resume to OpenDNS a few months ago and never heard from them; while I didn’t get hired at Google, I had a very pleasant experience interviewing with them a few years ago.

Tuesday, December 8, 2009

C-evo tutorial finished

While I finished all of the essential writing for the C-evo Tutorial yesterday, I spent some time this morning cleaning up the wording (removing typos, simplifying one paragraph that was a little hard to understand, etc.) and have uploaded the tutorial here:

Monday, December 7, 2009

C-evo tutorial made

I have spent a good deal of the last 24 hours working on a C-evo tutorial. It can be downloaded at

Sunday, December 6, 2009

New Deadwood snapshot: Google DNS servers

In today's Deadwood snapshot, I have updated the default DNS servers in the documentation and example dwood2rc files to be Google's newly-announced public DNS servers. More information about these servers is here:

The snapshot can be looked at here:

Saturday, December 5, 2009

I found a couple of websites with small games

Last night, I found a couple of places where I can look at and download small games.

The quickest way to find small games is to go to a website hosting files from the “demo scene”. One very significant part of the “demo scene” is coming up with tiny little demos or fully playable game whose .exe fits in a given size, such as 4k, 32k, or 96k. 4k gives you a very basic Tetris clone; 32k can give you a remarkable playable game in the vein of a 1980s or early 1990s Amiga or Atari ST game. 96k can give you a small but complete full game; there’s even a playable First-person shooter that fits in 96k (but, alas, can be finished in about 15 minutes).

The website I used to find demos was; the page which starts to list the tiny playable demos is at this link.

The one I like the most is a 32 kilobyte PacMan-style game. This got a few bad reviews when it first came out, but ignore them; the game has since been updated with sound added to the main game and the collision bugs people complained about have been fixed.

Some other notable demo games include a Tempest clone with 21st century graphics and sound, complete with configuration menus in only 96k (but the extensive eye candy sometimes makes gameplay a little difficult, and the screen moves around while playing in a way that can give you a headache), a 32k clone of a late 1980s platform shooting game which while beautiful and groundbreaking for its time, has hard-to-use controls, and a 32k clone of a late 1980s platform jumping game that, while amazing, is a very challenging game and the controls are a little awkward.

Another place to find tiny games is, a listing of thousands of Windows freeware games. Finding diminutive games is a little harder at this site; there is no way to sort games by size. However, each game has its download size listed, which makes it possible to browse for small games.

There are a few tiny gems here; one I like is a simple little late 1980s shooter called Light-Z which 7-zip compresses down to 174k.

I’ve decided to put that 32k tiny Pac-Man style game on the next version of my Desert Island Disc. I would like to have precisely seven games; I haven’t decided whether to make the seventh game the 21st century Tempest clone or the simple shoot-em-up Light-Z.

Friday, December 4, 2009

Javascript Manic Miner

I found a version of Manic Miner more suitable for putting on the next (2010) version of my Desert Island CD: There is a Javascript implementation of Manic Miner out there.

I was able to scrape all of the files needed to play this, and after using PNGCRUSH and advpng to make the PNG files as small as possible, I was able to get this entire working Manic Miner implementation to fit in under 32k (7zip compressed).

Unlike other Manic Miner implementations, where the authors take a sadistic delight in hiding the cheat codes from users (I don’t understand why Andy Noble changed the cheat code for Manic Miner), this one is easily modified with a text editor to change the initial level or give the player unlimited lives; these are even variables easily set at the beginning of the program.

So, I’ve gotten Manic Miner down from 450KB to 32KB. Like I said before, I’ll put wedding photos in the newly opened up free space or another tiny video game if I can find something usable out there.

Thursday, December 3, 2009

Desert Island future plans

Right now, I have the following games on my Desert Island CD:Of these six games, I am going to delete two for the next Desert Island release: Cultivation and Manic Miner.

Cultivation doesn't have compelling graphics, IMO, and its gameplay is a bit far-fetched for my tastes.

Manic Miner's problem is that it's a faithful copy of the original 1983 game, and like the original game, it's, as TVTropes calls it, "Nintendo Hard". After struggling for an hour, I was able to get past the first screen, and even on to the third screen, but there's no way to save the game so I have to go back to the first screen every time I start the game up.

There is supposedly a cheat code for it (802926) which lets one jump past levels, but it doesn't work. So, out it goes. Andy's take on Tetris is nice (and my fiancée likes it), but I'm ditching his take on Manic Miner (which, yes, is faithful to the 1983 game, but we've moved beyond that).

There's a couple of other takes on Manic Miner for the PC out there but I don't like either of them either -- one of them has the audacity to ask for a shareware registration fee for the game. As a programmer who despises freetards myself, I agree people should get compensated for their work, but when original Manic miner creator Matthew Smith flat out says "if they are making money then I want my share", I don't feel it's ethical to make a shareware Manic Miner without giving Matt his cut.

So, deleting all this leaves me about 850k to play with. 150k or so of that will be some C-evo stuff (my HOWTO, a couple of small programs to mod C-evo's gameplay, a diagram of the tech tree, and slightly modified Mongol nation graphics); that leaves me with about 700k. Some of that will become wedding photos once I marry my fiancée January sometime; but I need to find one or two more really tiny games with compelling gameplay that doesn't quickly get stale.

Some ideas:
  • An emulator and some old video games. My biggest issue here is finding games the creators don't mind having available on the Internet
  • Win Frotz (under 200k) and a few text adventure games. The issue here is that these kinds of games have no replay value.
Does anyone else know of any good tiny video games for Windows? Replay value is important.

Wednesday, December 2, 2009

New Deadwood snapshot

Sometimes, I can't resolve host names at work. I'm trying to figure out why this is so; that in mind I've added the ability to log all DNS queries sent to Deadwood and replies sent from Deadwood when verbose_level is 100 or more.

I also fixed a bug where certain logging functions added a newline regardless of one's verbose_level setting.

New MaraDNS snapshot

Since there has been some confusion about how to have star records in MaraDNS, I have made the following changes to MaraDNS today:
  • The * character is no longer permitted in zone names. Stars belong in zone files, not zone names.
  • I have added a FAQ entry briefly explaining how MaraDNS star records work
Hopefully, these changes will stop users from incorrectly configuring star records.

It can be downloaded here:

Monday, November 30, 2009

New Deadwood snapshot

In today's Deadwood snapshot, I have updated the Windows reference documentation to have all post-2.3 Deadwood parameters documented.

I have also updated the documentation available on Deadwood's web page.

MaraDNS wish list status

Here is the status of various wish list items people have requested that MaraDNS have over the years:
  • IPv6 (DONE, except for Deadwood's recursion)
  • Multiple views -- DNS answers vary depending on the IP sending the request (won't do)
  • SQL support (won't do)
  • Include other files in mararc (done in Deadwood, won't do in MaraDNS)
  • DNSSEC (won't do)
  • Ability to dynamically load zone files (won't do)
  • DNS curve (won't do)
  • BIND zone file support (mostly done; will finish up)
Note that won't do means I won't implement the feature in question without being paid.

Tuesday, November 24, 2009

I've been making some stuff for C-evo

I've been spending my geek time these last two weeks or so making some stuff for C-evo. Namely:
  • I have taken a tech chart someone else made and compressed it to be only a little over 100k in size
  • I have written some programs that slightly modify the gameplay: The final year, the technology advancement rate, the city growth rate, and the map sizes can now be adjusted.
  • I have written an over-6000-word HOWTO that describes C-Evo's basics; it is geared for someone who has never play a Civilization game before
The files I have made can be looked at here:

Sunday, November 22, 2009

Desert Island update

Earlier this month, I updated my Desert Island disk and changed a few files. Notably:
  • Instead of Doom, we now have six tiny video games: C-evo, David Teach’s Ginny Rummy, a tiny under 400k version of Zillions of Games (only Chess and a couple of variants, no music, no sounds), Cultivation, and two of Andy Noble’s games (Tetris, Manic Miner)
  • I have added a lot of pictures, most notably a nice desktop background picture I took nearly two decades ago and more family pictures
  • I’ve added the text of a 1979 computer article talking about computers in the home
  • Various other minor updates, most notably progress on making sure we correctly use “LORD” or “The LORD” in the Old Testament of my modified World English Bible
  • I no longer have a guide for reading playing cards; this is something I no longer do
  • MSYS update to 1.0.11; 7zip updated to 4.65
  • Spanish accents for a US keyboard added

Invasion of the spammers

A lot of spammers have been trying to put spam in blog comments here. Since I moderate all comments posted here with some strict guidelines (no spammers, no flamers, no completely off-topic posts, no support requests) none of these posts were made visible, but still it's annoying to have seven posts to moderate and have them all be spam.

A lot of spam blogs use CSS to hide the button to report the blog; to report a spam Blogger blog, go to this link (or this link) to report the offending URL.

Thursday, November 19, 2009

Deadwood handling problematic upstream DNS servers

Well, after upgrading to Deadwood 2.4.08 on my system, I was getting a lot more “We could not find the server you looked for” error messages in my browsers. The problem is that the particular upstream servers I use are buggy and send out bad DNS packets which confuse my browsers.

Deadwood has had in place the ability to filter and remove packets like this, which I set up to be disabled in Deadwood 2.4.08 because sometimes filtering causes these packets causes issues (read this thread for the gory details); however with the particular upstream servers I use, setting it to 0 is better.

So, if you use Deadwood and are having problems with your browser or what not reporting it can’t find sites at times, add the following line to your dwood2rc file:

deliver_all = 0

Wednesday, November 11, 2009

Deadwood 2.4.08 released; MaraDNS snapshot update

Since I have delayed, for the time being, my work finishing up the recursive version of Deadwood and releasing MaraDNS 2.0, I am declaring Deadwood 2.4 stable and making it the new stable version of Deadwood.

Deadwood 2.4 has a number of features Deadwood 2.3 doesn't have, most notably RR rotation, TTL aging, and dictionary support for upstream_servers--you can have one upstream DNS servers to recursively resolve "" for you and another, that redirects phishing domains, resolve "" or "" for you.

I have just released Deadwood 2.4.08 today. Compared to Deadwood 2.3, Deadwood 2.4 has:
  • TCP and UDP done by the same service/process
  • upstream_servers now a full "dictionary" variable
  • Full DNS compression and decompression support
  • RR rotation and TTL aging
  • ip_blacklist support (if you have an annoying ISP DNS server that redirects mistyped domains to some ad-filled page, just put the IPs of that annoying page on your ip_blacklist and Deadwood will make it a DNS "not there" reply again)
  • execfile support (Deadwood can now include other files while parsing its configuration file)
  • Merging multiple identical in-flight queries (if you just asked for, and ask for it again, instead of creating a new query for, it will just merge your query with the one already sent)
It can be downloaded here:

I have also updated the MaraDNS snapshot release to have the download page point to the new 2.4 stable release of Deadwood.

Tuesday, November 10, 2009

Deadwood snapshot update

I have updated DwMararc.c to correctly report an incomplete last line as such, instead of giving a vague parse error. I've also updated INSTALL.txt to make it clear you need to enter the "src/" directory to compile Deadwood in Windows.

It can be downloaded here:

Sunday, November 8, 2009

MaraDNS snapshot update

Last Friday, I updated the MaraDNS FAQ to correctly answer the question about NS delegations, and added a question and answer about with guidelines on using MaraDNS for phishing protection.

I finally announce it today. It's here.

Friday, November 6, 2009

C-Evo 1.1.1 on one floppy

In my last blog entry, I noted a number of games that fit in under 7 megabytes. One of the games, C-Evo, I noted fitted in about 2.5 megabytes.

Actually, it fits on a single 1.44 meg floppy. Two if you want sound. What I have done is take the C-Evo installed files, remove the AI development kit (this is only useful if you're both a Delphi developer and have interest in developing an AI for C-Evo), and split off the sound. I then made two files; the core C-Evo game that is perfectly playable, albeit without sound, which compresses in to a 1,384,627 byte 7-zip file, and a file with all of the sounds for C-Evo, which compresses in to a 924,045 byte file.

If you need 7-zip to decompress C-Evo 1.1.1, that will also easily fit on a single floppy. Who needs CD-ROM drives anyway?

Speaking of floppies, the last version of Slackware that could be entirely installed from floppy was Slackware 3.4 from 1998; the last version of Slackware that could have the base system and networking utilities installed from floppy (installing the rest over the network) was Slackware 7.1 from 2002. A base Slackware 2.1 system (1994) fit on four floppies; the entire system only used 70 floppies. Yes, I remember, back in 1995, giving my roommate an entire floppy tray filled with 70 floppies so he could install Slackware on his computer. The base system for Slackware 7.1 needed 16 floppies; at that point it no longer made sense to use floppies any more.

Recently, an artist made artwork showing you would need hundreds of floppies to fit a modern Photoshop install. But, good software doesn't need that bloat. C-Evo shows that a compelling and addicting game can nicely fit on a single floppy; MaraDNS can also easily fit on a single floppy, complete with source code.

Zillions of Games can also easily fit on a single floppy; I have a version thats 400k in size that supports Chess and a couple of Chess variants (notably Capablanca chess). The majority of the space in the 20 meg install file for Zillions is for all of the graphics for all of the abstract games supported by Zillions.

Some other games that easily fit on a single floppy: Cultivation, Andy Noble's remakes of classic games

For people who want to look at the files showing C-Evo 1.1.1 on a floppy, go here:

Wednesday, October 28, 2009

Games that fit in under seven megabytes

One project I do is fitting as much useful stuff as I can on one of those business card CDs. A business card CD is a credit-card-sized CD that fits in a wallet; because of the small size of the CD, only 50 megabytes of data can be stored.

After adding the entire text of the Bible, some music I like listening to, a few applications (most notably 7zip for decompressing files), as well as having it be a bootable CD with a memory tester, I'm left with about seven megabytes (7,000,000 bytes) for games.

What compelling games fit in this very small space? Quite a few. Last time I mastered a Desert Island CD, in June, I added Doom with a random map generator, as well as a small game for playing Gin Rummy. However, since my fiancée doesn't like seeing me play Doom, there are a number of other games I am considering for the next release of the CD. Here's a list of some of the more compelling tiny games out there; I'm looking for games with a high replay value (random map generators are a must for anything using a map):
  • Doom, as mentioned before. 5,692,780 bytes in size with a modern engine using 3d acceleration (Doomsday 1.8.6) and the Doom1 wad file (7zip compressed); 6,203,357 bytes if we include a random map generator.Pros: The first-person shooter that created an entire genre of games. It's all here: Single player, deathmatch, cooperative play. Even a random map generator.Cons: Violent and disturbing imagery in the game; a mouse is needed to fully enjoy the game.
  • David Teach's Gin Rummy. 1,643,935 bytes if we include the full installer, 108,886 bytes for a 7zip compressed minimal version of it; however it's not possible to change the game settings in the smaller version of the program.Pros: Classic card game in a tiny package. Cons: Dated looking user-interface
  • FreeCiv 1.14.2. This is an older version of FreeCiv; newer versions use GTK-Win32, which is a bloated pig. A 7zip compressed copy of the full version of FreeCiv 1.14.2 is 1,872,461 bytes in size; it's only 906,762 bytes in size if we remove all of the languages except English and Spanish.Pros: Network play; highly customizable using the server command line.Cons: No diplomacy at all with AI; no full-screen mode; outdated version of game
  • C-Evo, another open-source (public domain) Civilization clone, has IMHO more compelling gameplay than the older FreeCiv. It's a little bigger, however: 2,521,088 bytes for the most recent version (self-extracting archive)Pros: Fullscreen mode; Good graphics; compelling play.Cons: No network play: the only multiplayer mode supported is hotseat and play-by-email is difficult because only the first player can save the game.
  • Chess variant-playing engines. Engines that can play Chess variants are remarkably small and lightweight if I minimize the number of games supported; if only Capablanca-type variants are supported (8x10 board, rook + knight and knight + bishop added to the standard array of pieces), the tiny version of ChessV 0.9.0 is 174,059 bytes (7zip compressed, as well as all other Chess variant playing engines), Winboard Fairy can be squeezed down to 386,278 bytes, and Zillions can fit in only 394,318 bytes. Zillions needs a registration key; the other two are open-source programs (and play Capablanca chess better than Zillions).
  • People's Tactics is a very enjoyable free war simulation strategy game with a random map generator, play-by-email, hotseat, and single-player support. The binary weights in at 6,083,408 bytes.Pros: Excellent tiny little empire-building hex-based wargame. Cons: Can't be played on netbooks; 1024x768 or better resolution needed to play.
  • Another idea: Including an emulator and a number of games for a 1980s game console. Pros: Lots of different games in a small package Cons: There are serious legal issues with most game image files
  • No list of small games is complete without Kkrieger. More a proof-of-concept than a playable game, Kkrieger is a complete first-person-shooter in only 100,185 bytes (yes, a tenth of a megabyte). The executable is 96k in size, but the zip file also includes directions for playing the game. Pros: Beautiful graphics. A full First-Person-Shooter with a number of different weapons, monsters to zap, and compelling music in a fraction of the size of even Doom. Cons: More a proof-of-concept than a real game; the only supported mode is single player and the game can be finished in 15 minutes. The game also has a low framerate on anything but the highest-end computers.

Tuesday, October 27, 2009

MaraDNS snapshot update

I've updated the MaraDNS FAQ to add an entry describing my support policies regarding MaraDNS name resolution bugs. I have already posted a blog describing the extent of unpaid support I supply for these issues here:

Monday, October 26, 2009

RadioGatún C++ class

I have been working on an off with a C++ class for the 32-bit version of the RadioGatún hash for a couple of weeks so I can become more familiar with C++ classes. I finally, after some trouble, got this class to correctly implement RadioGatún-32. It can be downloaded here:

Sunday, October 25, 2009

Deadwood 2.3.05 released

I have released Deadwood 2.3.05 today. This is a stable release of Deadwood; the only changes from Deadwood 2.3.04 are bug fixes. To wit:
  • Spurious fflush() removed
  • Deadwood now forwards on to the client (but doesn't cache) unusual DNS packets, as long as the ID and question match. This can be disabled by setting a new dwood2rc parameter, deliver_all, to 0
  • Slight revision to code so it will compile in GCC 4.4 without any warnings
  • Documentation and SQA tests updated. Most notably, the deliver_all parameter is documented and the BUGS section of the manpage points out having an incomplete last line is a syntax error.
It can be downloaded here:

Friday, October 23, 2009

Deadwood short-term plans

Here are my short-term plans for Deadwood:
  • There is a bug where dwood2rc files that don't end with a proper linefeed cause there to be a syntax error reported on the last line of the file. Fix.
  • I have updated my development system from CentOS 5.3 to CentOS 5.4; the biggest change is that the current version of GCC is now GCC 4.4 instead of GCC 4.3; update the "no warnings when compiled with the latest GCC" test to use GCC 4.4, and fix any compile-time warnings found. This needs to be done for both the 2.3 and 2.4 branches of Deadwood.
  • Do full SQA recressions, then release Deadwood 2.3.05 and Deadwood 2.4.08

People's Tactics: A fun and free wargame

Back in the 1970s and 1980s, the type of game to play if you were a hardcore player of board games were these hex-based games that simulated wars, usually historical battles. I remember having a lot of fun playing Avalon Hill games with my father, brother, and grandmother as well as a couple of those MetaGaming microgames.

Well, the hobby died out; the rules for these games were too complicated to have a broad market; the market for these wargames dried up in the early 1980s when home computer video games started entering the scene and Dungeons and Dragons took over. The only game with rules simple enough to have general appeal was Axis and Allies, which was published by the Milton Bradley Company in the mid-1980s; the game is still around and is published by what little is left of Avalon Hill.

However, the hobby still lives because there are a number of high-quality, free computer games out there that handle the complicated rules for you, have fog of war—the ability to not always see what your opponent is doing—something that never was possible with those old board games, the ability to easily save games to load at a later time, random map and scenario generators, and play-by-email support.

In my experience, the Windows-only games that aren’t open-source have the most compelling game play (but see postscript below). My favorite game right now is People’s Tactics which is the free “teaser” version of the far more advanced and flexible Advanced Tactics. The game comes with a number of scenarios, has a random map/scenario generator, and even allows you to make your own scenarios with control over pretty much any game parameter.

The rules are simple enough that I was able to go through the tutorial in about 30 minutes. Typical of turn-based strategy games, gameplay is slow: it takes three or four hours to finish a small randomly generated 23x23 map, and maps can be up to 100x100 in size. The game is nice because it runs in a window instead of using full-screen mode, allowing me to easily check my email and perform other tasks on my computer while playing the game.

The game offers a lot of play and, when I get a job with a living wage again, I will pay the $40-$50 to support the author and get the more extensive Advanced Tactics.

Another series of hex-based wargames that are free are games in the Steel Panthers line. “Steel Panthers: World at War” is a tactical-level hex-based turn based simulation of World War II, complete with random terrain and random scenario generators. There is a thriving community with hundreds of user-created mods at Another related free game is “Steel Panthers: World War II”. I have not had a chance to learn these games yet to give a full review, but SP:WaW looks very popular based on the huge number of scenarios and mods available for it.

To download People’s tactics, go to this webpage and look for “Download People’s Tactics” on the left (scroll the page down) or the box with the label “People’s Tactics” on the right (again, you will need to scroll the page down):

Edit: Thinking about it some more, I neglected to remember two compelling open-source turn-based strategy games: Battle for Wesnoth which I enjoy greatly, and, while I haven't played it, Eight Kingdoms looks compelling.

Thursday, October 22, 2009

New Deadwood and MaraDNS snapshots

I’ve made updates to both the “head” branch of both Deadwood and MaraDNS. In the Deadwood update, I have updated the documentation for the 2.4 branch to describe a new dwood2rc parameter added because of yesterday’s bug fix. In the MaraDNS update, I have updated the text of the webpage to spell out how exactly to get MaraDNS support by subscribing then posting to the list.

Wednesday, October 21, 2009

Deadwood snapshot update

Deadwood will now forward on DNS packets upstream which it thinks are invalid packets, since some DNS servers send "name error" packets without a SOA record in the NS section of the reply.

I have made sure that this fix does not allow DNS packets which would cause security problems to be forwarded to the DNS stub resolver (we still make sure the ID and question are the same).

I would like to thank Jakob Blomer at CERN laboratories for reporting this problem, and for supplying a patch.

It can be looked at here:

Tuesday, October 20, 2009

MaraDNS thoughts

I was having a private conversation on the internet with someone who has helped MaraDNS a lot over the years. I told them the following when I mentioned MaraDNS’ future:

I do plan on finishing up MaraDNS 2.0, which should have full ipv6 support, better recursive resolving, and then I plan on finishing up that Python script that converts BIND zone files in to MaraDNS “csv2” zone files. The csv2 zone files already have support for pretty much anything you would see in a BIND zone file; it’s just a matter of finishing up the Python script.

I don’t know when I’ll go back to working on that code, however. Other things are more important. Namely: I need to become really familiar with OO programming to stay competitive in today’s job market. I don’t plan on spending the rest of my life working in an exotic Latin country babysitting Windows computers earning only pennies on the dollar.

Poking around with Google, in addition to finding a lot of really positive things said on Slashdot about MaraDNS (thank you everyone for your kind words), I found a couple of Slashdot comments asking for full IPv6 support; one of the comments asks for BIND zone file support.

MaraDNS right now has full authoritative-only IPv6 support; zone files have native support for AAAA records and, if MaraDNS is compiled without recursion enabled, MaraDNS can bind to and listen on IPv6 sockets. Deadwood, which will some day become MaraDNS’ recursive resolver, has full IPv6 support today for non-recursive DNS queries, and I fully plan on adding full IPv6 recursive support.

I also have been working on and off for years adding BIND zone file support to MaraDNS. I have made a lot of revisions to MaraDNS’ “csv2” zone format to make it easier to convert BIND zones to MaraDNS zone files; I have a Python script that converts BIND zone files to MaraDNS zone files, but the script is incomplete and there’s a lot of corner cases it doesn’t cover. One of my goals is to finish up that script, minimize the corner cases and give MaraDNS good BIND zone file support.

“Plan” being the operative word here. I really need to update my software development skills for the 21st century, and that means mastering OO programming. My beautiful girlfriend has become my beautiful fiancée—I need to do what it takes to get a job making a living wage like I was making during the dot-com boom again. And, sorry, but making people on Slashdot happy doesn’t pay the bills.

Monday, October 19, 2009

Final Schoolbook opening research for 2009

OK, last night I finished up my opening research for Schoolbook. I’ve been spending the last two weeks researching Schoolbook chess and similar chess variants, and discovered the following:
  • White has about a 7% advantage in Schoolbook
  • Of all six Capablanca chess setups in the form RXNBXKBNXR, the Aberg setup, RANBQKBNMR is the most balanced; white only has a 3% advantage in this setup
  • Black can minimize white’s advantage by replying to 1. e4 with 1. e4 d5 2. exd5 Nb6; 1. f4 is handled with 1. f4 c5; and 1. c4 is handled with 1. c4 Mh6(!)
  • I’ve found over 100 pretty mates (mating positions where one side think they are ahead, then the other side finds a mating combination
For people who want to see the research determining that the Aberg setup is the most balanced, or want to see those pretty mates, they are here:
For people who are wondering what I’m talking about, some helpful links:OK, I’m done with chess variants for 2009. Next: Get proficient at C++ and object-oriented programming, so I can update my job skills.

Thursday, October 15, 2009

Du for Windows and other tidbits

While MSYS offers the majority of the classic UNIX command line to Windows, one utility it does not have is du, which lets me see how much space a given directory takes up, and which files are hogging up hard disk space.

I have been using Cygwin to run “du”, but starting up a full *NIX environment (complete with X) to run that one command MSYS neglected to include is a little excessive.

While MSYS doesn’t have du, Microsoft has a free download of du for Windows. Its output is not quite the same output as the classic *NIX du, but it’s good enough for my purposes.

Another option I haven’t looked in to is the GNU coreutils for Windows, whose du output should be more UNIX-like.

In the early 1990s, people began to realize that floppy disks did not have enough space to store anything besides text documents and small images, so work began on making an affordable removable media with more space than a floppy disk.

One of the more successful attempts to do this was the Iomega Zip drive. Zip drives were quite common in the 1995-1999 timeframe, depending on your definition of “common”. They were common in the sense your average geek would have a zip drive, but not common in the sense that, when you bought a computer, it was a given it would have a zip drive. Zip drives were successful because you didn’t need a special connector to use them; you could attach it to the parallel port almost all PCs had in that time frame (or the SCSI Zip drive if you had a Macintosh or, in my case, used Linux before the Paraport driver was made). They were used a lot until compact disc recordables got affordable (hit the $1 per blank disk price point) around 1999 or 2000.

I used Zip drives and Zip disks for storing data offline from 1996 until early 2001, when my buddy Leo started letting me burn CDs on his CD burner.

There were competitors, such as the SyQuest EZ 135 Drive, the LS-120, and higher priced higher capacity options like the Jaz drive, the Orb Drive, the SparQ drive, among others. I actually got an Orb Drive and a few 2.2 gig cartridges for backing up the server we had at work back in the dot-com days.

Iomega still makes high-capacity removable drives and media. Their current technology is something called an REV drive, which uses 120 gigabyte cartridges (about $60 per cartridge). There’s another removable media technology called “RDX” with media up to 500 gigs in size (for $300). With this type of technology, you’re paying for convenience; a terabyte-size notebook hard disk is $127 at Pricewatch right now and a 100-pack of DVD-R (not +R, since -R stores seven more megabytes) media is around $25 at Meritline right now (you can store 500 gigs in 107 discs).

These days I use DVD-Rs to store data; my burner doesn’t support dial-layer blanks, so I just burn single-layer 4.7 gig disks for backups and what not.

My chess variant research continues. I have been doing a lot of computer simulations of various openings in my “Schoolbook” arrangement of the Capablanca pieces. White starts with a 7% advantage, so I’ve been looking for openings where Black can minimize that advantage. 1. e4 d5 2. exd5 Nb6 looks to equalize things for black, 1. f4 c5 appears to give black a strong advantage, and I’ve been spending over a week looking for Black’s best reply to 1. c4; right now 1. c4 Mh6 looks to be Black’s best reply, but I need to do more research on this.

Chess variants are one of those things where it’s trivial to “invent” a variant but difficult to research how to play the variant in question. There’s a reason a lot of strong chess players resist any attempt to change the rules of chess; people have spent centuries in to finding the best moves in chess, and any change, even one as simple as rearranging the pieces in the opening, throws out a lot of that study.

Sunday, October 11, 2009

MaraDNS in the press

Yesterday, I worked on some research seeing what the press says about MaraDNS. The press has a said a lot of good things about MaraDNS. Here are some examples of books, articles, and papers which discuss MaraDNS:MaraDNS is used by a number of ISPs to serve thousands of domains. MaraDNS is used by Boeing. MaraDNS is ready to be used by your business or enterprise.

I have uploaded a new version of MaraDNS today. In addition to adding the above material showing third parties praising MaraDNS to the MaraDNS advocacy page, I have also changed the next version number of MaraDNS to be MaraDNS 1.4.01. The release can be downloaded here

The MaraDNS 1.4 series will be an actively maintain series of releases that continues to use the older recursive code for people who need both an authoritative and recursive DNS server on the same IP. The only changes to this branch will be security and critical bug fixes. I will release this around the same time I release MaraDNS 2.0.

Saturday, October 10, 2009

Clarification about MaraDNS roadmap

Since some anonymous freetard responded to my last blog entry by trying to put some BS on the MaraDNS Wikipedia entry, let me clarify my roadmap:
  • I have no plans to quit working on MaraDNS. “Quit working” implies I will no longer fix bugs or answer email on the list. This is false.
  • My current plan is to continue to fix bugs after the 2.0 release of MaraDNS. I plan on continuing to fix bugs in 2.0 and the upcoming 1.4 release of MaraDNS for the foreseeable future.
  • I will continue to monitor the mailing list and answer questions I deem appropriate to answer.
  • I will still provide for-pay private email support for MaraDNS
  • I will still add features to MaraDNS that people are willing to sponsor
Now, let me give you guys a rant about freetards. A freetard is someone who expects something for nothing. They feel they have an entitled right to download pirated software and media, and that companies who try to protect their intellectual property are somehow in the wrong (or that intellectual property should not exist). They feel they are entitled to free private email MaraDNS support (I get about one idiot like this a month) even though I make it clear I don’t provide this kind of support. They feel I should spend my free time writing MaraDNS “for fun and for free” and try to put untrue negative statements about MaraDNS on the Wikipedia if I don’t give them something they think they are entitled to.

One of the biggest hassles developing MaraDNS is the number of freetards out there. People who don’t lift a finger to help make MaraDNS a better server, but expect me to waste time answering their email asking for the same feature 10 other freetards have already asked for. People whose net contribution to MaraDNS has been to annoy me.

About a month ago, I had an interesting discussion on Slashdot about user’s expectations for open-source software. The conclusion: Many users of open-source software expect to be treated like customers, but are unwilling to pay a single dime for open-source software.

Bottom line: If you want to be treated like a customer of MaraDNS, you first must become a customer of MaraDNS. If you make a modest donation to MaraDNS, I will be happy to answer your email; the charge, for the record, is US $50 per private email support incident, more if I need to add a feature to MaraDNS to resolve your concern.

If you want to be a freetard and send me a private email, I’ll spend about 10 seconds scanning your email to make sure you didn’t make a donation, then send you the “Show me the money” form reply. Yes, this includes bug reports. Yes, this includes feature requests. Yes, this includes whatever discussion you want to have with me about MaraDNS in private email. All of this belongs on the list, not in my personal mailbox—unless you include a check in your email.

Friday, October 2, 2009

An open source developer grows up

A lot of open-source forums are full of naive and innocent people. People who honestly believe that software can be developed and media can be made by nothing more than people working for fun and for free in their free time. Indeed, people point to Linux and say "Look! This great software project made for fun and for free!"

That's not how software development works. Linux? It's very disorganized; there is no central authority to standardize on things like the Desktop interface to use, the ABI for drivers, and what not. This results in Linux being a mess: A hodge-podge of driver ABIs (sound is so bas that it's nay-to-unusable in Linux), desktop GUI interfaces (Qt, GTK, FLTK, Xaw, TCL/TK, Motif and its Lesstif clone, to name just a very few), programs at various stages of development, etc. The only thing Linux can seem to agree on at all is POSIX, which is so old and quaint, the only networking protocol it talks about is UUCP [1].

Linux makes a very good server OS for someone who knows what they are doing, but it is not and never will be an end-user desktop.

For example, the Linux sound system. What happened was that the main developer for Linux's sound system one day grew up and realized that the work needed to make open-source software compared to the reward he was getting was just not worth it. So he tried to make it commercial; other Linux kernel developers wanted to keep everything open source, so they threw out all of his work (never mind that his system was the standard system for doing sound with Linux for years) and reimplemented it, more poorly. Linux's sound is a mess to this very day, with dozens of half-baked audio systems in place, none of which works as good as the original system.

OK, let me go back to why this happened: The main developer grew up. He realized that open source software development for fun and for free is plain simply not worth it. He left the project. No other Linux developer was able to make the same quality of code he did.

Another example: Xconq, which I talked about in this blog posting. Summary: The principal author, after nearly two decades of work on the project on and off, finally lost interest in the project and development just came to a halt without any formal announcement. Many open source projects die like this; the developer loses interest, but never puts closure on the project. Instead of giving the project a proper burial, the project becomes a zombie, dead but pretending to be alive.

Another example: FVWM. Rob Nation realized one day that it was a far more productive use of his time to be with his wife and kids than to work on open-source software, so he stopped FVWM development. He handed over maintenance to other people who, IMHO, did not do as good of a job as Rob Nation developing the software; while FVWM2 has more features than FVWM1, the code is more unstable and more bloated. Indeed, I still use the last release of Rob Nation's FVWM1 today when I'm using Linux. FVWM1 ended with proper closure; FVWM2's development has slowed down but still appears to be actively development (albeit at a glacial pace); the last stable release was done in 2006, but a beta release was done as recently as last month.

Another example: People's Tactics. The developer made a free beer "grogger" wargame for Windows that simulates the old 1970s and 1980s wargames groggers played with hex maps and a zillion tiles on the maps (Squad Leader and other games from Avalon Hill, SPI, Axis & Allies which didn't use hexes but was probably the most popular wargame of this type, etc.) He realized that he should be paid for his work (software development, support, etc.), so removed the website for his older free game, and replaced it with a website for his for-pay Advanced Tactics game.

And, yes, I'm coming to the realization I need to put closure on MaraDNS. This means my next release of MaraDNS (MaraDNS 2.0) will be my last release of MaraDNS. MaraDNS 2.0 will have real Windows service support for the recursive code, in addition to a rewritten thread-free recursive core. I've done about two thirds of this work on and off for two years; I made a lot of progress in late 2007, and even more progress in the first two thirds of 2009, but come September I hit a roadblock when I hit the point of starting to implement full recursion. I have made some progress chipping away at that roadblock, but it's slow progress.

I also hit a point where I realized it is more fun to do things like research Chess variants that no one plays (openings, best opening setup, midgame strategy, etc.) than to finish up my DNS server. Indeed, I feel this software is holding me back; it's written in C (which is next-to-useless on a resume unless you also have C++ or Objective C; come to think of it, with all the companies outsourcing development to India, C development in any form might be useless at this point) in a day and age when the buzzwords people look for on resumes are things like "Java", ".net framework", "PHP", and "SharePoint".

I have been spending my time working on MaraDNS instead of getting my resume out there (it's pretty discouraging in this economy, but I shouldn't give up) or updating my skills. I have been spending my time working on MaraDNS instead of doing what it takes to reach my goals: To have a job making a living wage so I can support myself and my girl comfortably in the US (ideally somewhere where it is sunny like California, my home).

So, yeah, what I'm saying is that I'm taking a break from MaraDNS. I have every plan to finish up the Deadwood code and come out with MaraDNS 2.0. But it isn't going to be the end of 2009. Maybe I'll start work on MaraDNS again next week; maybe I'll just let it rest until 2010 sometime, just as I stopped Deadwood development for most of 2008 and only started development up again in early 2009.

Do I want to finish up Deadwood and release MaraDNS 2.0? Yes. Am I going to do it anytime soon? Probably not. I'm having fun downloading and trying out various turn-based strategy video games; I would rather do that right now (or research Chess variants) than develop a program which has only made a very little amount of money for the amount of work I've put in to the code.

I'm growing up and realize that there are more important things than making programs for fun and for free. Yes, I do want to finish up Deadwood mainly to put closure on the project, but I don't think I'll do any MaraDNS development besides basic bug fixes after MaraDNS 2.0 comes out.

- Sam

[1] UUCP: You don't want to know. I remember when an ISP I worked for dropped UUCP support; UUCP was a nightmare to configure and we simply no longer had anyone who could configure our UUCP servers. The *only* thing UUCP can be used for is email and Usenet.

Thursday, October 1, 2009

Capablanca opening setup research

I have done some research about which Capablanca arrangement of the pieces is most ideal.

In the 2000s, we have had many discussions on the Chess Variants server about what makes for the best Capablanca setup. It has been asserted, for example, that all of the pawns need to be defended in the opening setup, and that any opening setup with undefended pawns gives White a sizable advantage.

What I have done is research a subset of Capablanca setups to see if this is true. Since there are some 126,000 setups where the Queen is to the left of the King and the bishops are on opposite colors with the Capablanca pieces, I have reduced the number of setups to six thusly:
  • The rooks must be in the corners. The king must be in the F file. This is to accommodate the software I used for my testing, which only allows castling if these conditions are met.
  • The knights must be in the C and H files, and the bishops must be in in the D and G files. The thinking is this: Since the knights are weaker in Capablanca setups on a 10x8 board than they are in FIDE chess, placing the knights relatively near the center makes them more relevant in the opening and midgame. The bishops are placed near the center just like they are placed in FIDE chess; this is done so that natural pawn development moves (e4, f4) do not hamper the development of the bishops.
  • The Archbishop (Knight + Bishop), Marshall (Rook + Bishop), and Queen may be placed anywhere in the three remaining files.
Here are the six possible resulting setups:
  • RMNBAKBNQR (I call this arrangement “Notetaker’s Chess”; all pawns are defended in the opening array)
  • RQNBAKBNQR (“Schoolbook Chess”; again, all pawns are defended)
  • RANBMKBNQR (I call this arrangement “Narcotic Chess”; the B pawn is undefended in the opening array)
  • RQNBMKBNAR (I call this arrangement “Opiate Chess”; the D and I pawns are undefended in the opening array and White can threaten mate on the first move with Md3)
  • RANBQKBNMR (“Aberg Chess”; the B pawns are undefended)
  • RMNBQKBNAR (“Carrera Chess”; the original 10x8 setup from the 1600s; the B pawns are undefended)
I ran at least 1,000 games for all of these setups. Only games that ended in a Checkmate or a draw were counted; I made sure to have Joker80 play enough games until each of these setups had 1,000 complete games. Here is the win/loss/draw ratio for White with all of these setups:

SetupWinsLossesDrawsGames played
Numbers may not add up to 100% because of rounding

Since we played 1,000 games with each variant, the scores may be off by as much as 2% or so.

In conclusion, we can see that whether or not all pawns are defended is not a relevant factor in White having more of an advantage. The setup with the lowest White advantage (ranbqkbnmr, White advantage 3%) has one undefended pawn in the opening array for each side, and the setup with the highest White advantage (rmnbakbnqr, White advantage 16%) has all pawns defended in the opening array.

ranbqkbnmr appears to be the most balanced setup (3% White advantage); this is followed by rmnbqkbnar (5% White advantage). ranbmkbnqr and rqnbakbnmr both have an 8% White advantage; ranbmkbnqr has fewer draws, however. Both rqnbmkbnar and rmnbakbnqr give White a considerable advantage (12% and 16%, respectively); I am not surprised rqnbmkbnar has a considerable White advantage, since the D pawn near the King is unprotected, and since White can threaten mate on the first move with Md3. However, it is a mystery why White has such an advantage with the rmnbakbnqr, since all pawns are defended in this setup. It would appear undefended flank pawns don’t give White any significant advantage.

For people interested in this research, I have made a 4-megabyte archive with all of the games played in the course of this research here:
I would like to thank H.G. Muller for modifying Winboard and creating Joker80; this software made this research reasonably straightforward to perform.

Edit: Corrected number of undefended pawns in Carrera and Abera opening setups.

Tuesday, September 29, 2009

Deadwood snapshot update

I am in the process of writing a roadmap where I detail how I will implement recursion in Deadwood. In addition, I have made a Windows binary of this release; Deadwood looks stable and, instead of running in debug mode looking for a crash that I never reproduced, I am running it as a service again.

Rant: Putting closure on a project

OK, one of my rants about open-source projects: A lot of open-source developers have a hard time putting closure on a project. For example, in the 1980s, Stan Shebs created a game called Xconq. He revised it and even rewrote it in the 1990s. In the early 2000s, he posted to the Xconq mailing list a roadmap for Xconq. A few years after this, Xconq languished; it was transferred to Sourceforge around 2005, with the last release being done on June 12, 2005.

In 2006, when someone asked if Xconq was dead on the mailing list, they were told “It's not dead, it's... resting.”. But, at this point, Xconq was dead; while a few CVS changes were done after this, the last CVS commit was done in 2007 and the project has been completely moribund since then.

Xconq is dead.

OK, big deal. A lot of open source projects come and go. My issue is this: As an open-source developer, I have a responsibility to put closure on my projects. When a given open-source project is something I realize I have no interest in working on any more, I let the project go, via a formal announcement. For example, I announced the end of my Kiwi Spam program on October 17, 2001; while I got a couple of emails expressing disappointment the project had ended, I never got a maintainer for the project. Recently, after making a few minor updates to ObHack, my fork of a random map generator for Doom-type games, I announced I would no longer be working on this code. There was enough interest in the code I was able to hand over maintenance duties over to Fritz, who has since then fixed a bug I never fixed and made a couple of releases of ObHack.

Closure is, IMO, very important for an open-source project. It tells the world “I’m responsible enough to know when to start a project, and, just as importantly, when to finish a project.” It allows the community of users to know you’re no longer interested in a project, making it possible for them to become the maintainer if there is still interest in a given project (such as what happened with ObHack).

Everything has a beginning and an end. A responsibly done open-source project is one that knows when it’s time to pack up and go home.

MaraDNS snapshot update: Documentation updated

I’ve updated MaraDNS’ documentation to have the DNS software and the advocacy pages be more up-to-date. In particular, the pages now acknowledge the existence of MyDNS-ng and there is now a very brief mention of GbDNS.

The MaraDNS tarball with these updated web pages can be seen in the 20090929 snapshot available at this location:

Monday, September 28, 2009

New MaraDNS snapshot: FAQ updated

I've updated the MaraDNS FAQ to point out that MaraDNS doesn't resolve names in domains she sub-delegates; this is my follow-up to the concern brought up in this mailing list thread.

Opera users: Please tell what HTML I need to change on MaraDNS' FAQ page to get it to render properly (to get the box with the FAQ questions and answers to be to the right of, instead of below, the navigation toolbar on the left). This page renders fine in IE8 and Firefox 3.5; it's only Opera 10 that seems to have a problem with it (and other pages at render fine in Opera 10).

Update: Opera is having problems with the FAQ overflowing in horizontal size because it uses a slightly bigger font for fixed-width text. The offending <pre> tag is in this FAQ question. I'll see what I can do to fix the CSS to work around this Opera-specific issue.

Second update: Fixed. I've also added the question numbers to all the FAQ answers, and fixed an "otther" to correctly be "other".

Sunday, September 27, 2009

ChessV 0.9.4 released

ChessV is a program written by Greg Strong that can play Chess and a handful of Chess Variants that I’ve been hosting for the last month or so. Since having the program available online has made people interested in working with its codebase, including having Muller convert it to work with Winboard, Greg Strong has worked on the code again and has just released ChessV 0.9.4, which is a bugfix release. The only new feature this version of ChessV has is a special binary that can interface with Winboard.

It is available here for download:

Saturday, September 26, 2009

Spanish accents for US keyboard update

I’ve slightly updated the keyboard layout for my US-keyboard-with-Spanish-accents design to make it easier to input typographic quotes.

The page where I link to this keyboard layout is here:

And the download is:

Thursday, September 24, 2009

ObHack secret spoiler bug fixed by Fritz

A while ago I found a bug in ObHack 006b which I decided wasn’t worth the time to fix.

Well, Fritz has fixed this bug. I have a patch at the following location:

Note that this patches cleanly against 006b, but does not patch cleanly against Fritz’s ObHack 006.4 release. I am sure Frtiz’s next ObHack release will have this bug fixed.

Wednesday, September 23, 2009

I’ve been sick; Spanish keyboard update

I’ve been sick these last few days, so I haven’t been able to make as much progress with Deadwood as I would have liked. However, this morning I finally got around to updating my “US-English with Spanish accents” keyboard for Windows to have the ¡ work correctly, and to have a number of other symbols that I like to use (such as real quotes, as you can see in this blog posting).

The page where I link to this keyboard layout is here:

And the download is:

Sunday, September 20, 2009

Deadwood minor update

I have posted a minor update to Deadwood today. I'm just taking a couple of days to get psychologically in "finish Deadwood" mode and ramp up to spending all my geek time developing the code.

My goal right now, for Deadwood 2.5.01, is to have Deadwood able to look at a remote reply and determine whether:
  • The reply is a complete reply; if there are any CNAME records in the reply, all CNAME records have a corresponding A (or whatever) record
  • The reply is an incomplete CNAME reply
  • The reply is a NS referral. All records with A or AAAA glue are converted in to IPs; all incomplete records (NS referrals without names) are stored as names
  • The reply is a not there reply
The next bit of code I will write is the code to convert A and AAAA glue in to simple IPs.

Saturday, September 19, 2009

Back to Deadwood

I have released a new snapshot of Deadwood today which is a minor update, and the first with code that will be used for the recursive part of Deadwood.

It can be downloaded at this location:

Friday, September 18, 2009

Explanation of Schoolbook 2009 results

Due to an error in how I set up the time controls, Joker80 played very poorly. Joker80's performance in this tournament does not accurately reflect its true playing strength.

I will, for Schoolbook 2010, set up things to have more fair time controls. Right now, I'm looking at doing 40 moves in 20 minutes, with 30 seconds a move for engines that can only do "X seconds per move".

Thursday, September 17, 2009

Schoolbook 2009 tournament

OK, never say never. I told myself I would put Schoolbook Chess, a variant I invented back in 2006, to rest. Well, while taking a break from Deadwood development, I discovered there are a number of computer chess engines out there that can play my chess variant, so I got permission from three makes of chess engines to enter the 2009 Schoolbook Chess computer tournament; the tournament was a six-game double round robin. The final results were:

ChessV 0.9.0 with time handicap: 3
TJChess10x8: 3
Joker80: 0

The games were Game/15 (all moves in 15 minute) games done on a Core 2 Dual 1.5 ghz laptop processor. A reasonable, but not extensive, effort was made to make sure no other processes were running during the tournament. Both engines played (and pondered) at the same time on the same computer.

TJChess and Joker80 played at Game/15 in WinBoard. ChessV 0.9.0 was given 30 seconds to make a single move.

Joker80 lost all four games it played, giving TJChess10x8 and ChessV 2 points each. In the ChessV-TJChess10x8 games, TJChess10x8 won once as white, as did ChessV.

I observe that Joker80 is usually stronger than TJChess10x8, but plays Game/15 very poorly.

In both TJ-vs-ChessV games, ChessV made a castling move TJChess could not recognize (in Schoolbook, it is legal to move the kind two or three squares while castling, and four squares while castling on the queenside). When this happened, I stopped the clocks, set up the board to have the castling move be done, restarted WinBoard, and gave TJChess10x8 10 minutes to complete the rest of its moves.

The actual games, including Zillions of Games save files of all games, are available at the following location:

As an aside, people can download ChessV here:

For people who do not have Zillions of Games, the save files are in a format that looks like a normal Chess score.

OK, I'm done with Chess variants for 2009. We'll see if I have a 2010 tournament.

Time to go back to developing Deadwood.

Tuesday, September 15, 2009

Deadwood news

I haven't made an update to Deadwood for a few days. I still have plans to begin the recursive code, and a pretty solid roadmap of how I will write that code, but life has come up and I just haven't had time these last two weeks to work on it.

What I have done, however, is test the Deadwood code. I have been running Deadwood in debug mode as my only DNS server for over a week and have not had a single crash. I also ran stress tests, again without a crash. The code looks solid; I think the September 9 update fixed whatever it was that was causing the crash I and an anonymous poster saw a week or two ago.

I hope to start work on Deadwood again in a day or two.

Wednesday, September 9, 2009

Deadwood minor update

I've updated Deadwood's Makefile to have a new .c source file: DwRecurse.c, where routines specific for implementing full recursion will be placed.

Tuesday, September 8, 2009

Deadwood roadmap: Implementing recursion

I am now ready to begin implementing recursion for Deadwood.

My plan is to write functions that handle the recursion, then revamp the code that handles in-flight requests to be able to handle recursive requests.

The first code I will write is a function that can compare DNS labels in a string to see if they are the same label. If they are, return a 1, otherwise return a 0 (-1 if some error happens while doing this processing).

After doing that, I will write a function that, if given a DNS reply with NS records, converts the NS records in to IPs if there is sufficient information in the AR section of a DNS reply to do so.

Once I do that, I will make a function that sees if a given reply is complete. A complete reply is a reply where the IP or whatever they asked for is in the answer they give us. A CNAME reply is complete if it includes the requested IP/whatever. A "not there" (SOA in NS section) reply is complete. A reply with an IP is complete.

A CNAME reply without the actual IP or whatever is incomplete. As is a NS referral.

Anyway, I hope to start work on this in a day or two.

Saturday, September 5, 2009

New Deadwood snapshots

Well, I've run a bunch of stress tests with Deadwood, both with gdb and with Valgrind. There are no errors nor (as an anonymous commenter thinks there might be) any memory leaks.

Since this anonymous commenter reports a glibc error (which, sadly, they did not have a chance to save), this indicates that there might be a double-free() situation. What I have done is revised reset_rem() to always make sure a given memory location is a non-null pointer before free()ing it, and making the memory pointer point to null after resetting it. I have also revised the code to initialize all "local" pointers as null pointers before being used.

The snapshot with these changes applied can be downloaded here:

The filename with an 'H' in it (head branch) is the version to look at.

OK, at this point, I'm closing the issue as being unreproducible. If anyone sees this and has a stack trace or any useful information, please let me know.

I have also revised the stable 2.3 branch of Deadwood by removing a spurious fflush from the hash (cache) code. Again, the download is in the same place, with an 'S' in the filename (stable branch).

Friday, September 4, 2009

Deadwood testing update

Yesterday, my copy of Deadwood 2.4.07 crashed in Windows, and I had to restart the service.

I looked at the Dr. Watson log, but the log had no useful information about why Deadwood crashed (it had an exception number of 80000007 and reported "ERROR -> ntdll!KiFastSystemCallRet: 7c91e514 c3 ret"), but appears to be something outside of Deadwood's code).

I ran some stress tests with Deadwood in Linux this morning and was unable to reproduce the crash.

I am going to close this issue as "unreproducible" unless anyone chimes in and reports Deadwood 2.4.07 crashing. It was probably caused by some bug in the Windows kernel or what not. If anyone sees this kind of crash, it would be best to include a stack trace, but I'll live if all you can give me is a Dr. Watson rerpot.

Thursday, September 3, 2009

Another feature to add for Deadwood 3.0

Another feature I will need to add to Deadwood 3.0 before releasing it is giving it the ability to parse legal MaraDNS 1.x files.

This means I have to add every single variable MaraDNS 1.x has in mararc files and adding it to Deadwood. For the most past, the variables will be ignored and do nothing; the Deadwood man page will have, for each of these variables, a description of the variable and the note "This variable does not affect Deadwood and is only here so Deadwood can parse MaraDNS mararc files". For example, we will have a "dummy" csv2 dictionary variable (a pointer to a zone file in MaraDNS 1.2+) which will do nothing in Deadwood.

The most notable change I will have to make is adding support for ipv4_alias to Deadwood 3.0, which will result in the code which parses IPs being re-written.

Tuesday, September 1, 2009

MaraDNS and Deadwood roadmap

At this point, I have implemented, with one notable exception, all of the features MaraDNS 2.0 should have. The one and only feature I plan on still implementing is full recursion for the Deadwood engine.

The following roadmap is completely speculative; I might decide to stop MaraDNS development and only provide basic bugfix support for MaraDNS/Deadwood:
  • Implement recursion for Deadwood, and release this as Deadwood 3.0 (Deadwood 2.0 will still be supported as the Deadwood 2.3 branch for people who need a very small program on embedded devices or a high-performance DNS load balancer)
  • Release MaraDNS which will be MaraDNS 1.3.14 with bugfixes applied.
  • Release MaraDNS 2.0.01, which will be MaraDNS with Deadwood 3.0, and all the old recursive code torn out.
  • Announce EOL timeline for MaraDNS 1.3.07.XX
  • Not implement any new features for MaraDNS for a period of six months or longer after 2.0.01 is released

Monday, August 31, 2009

Deadwood 2.4.07 released

I have just released Deadwood 2.4.07. This is a testing release that emphasizes adding new features more than fixing bugs.

The new features added after 2.4.06 are:
  • execfile support
  • Multiple in-flight queries for the same hostname are merged.
It can be downloaded here:

OK, I'm going to take a break from Deadwood and MaraDNS development for a few days or so.

Sunday, August 30, 2009

New Deadwood snapshot: Almost ready for Deadwood-2.4.07

I have finished up the multiple inflight SQA test and fixed a single segfault I found during the test.

Now, all I have to do before releasing Deadwood 2.4.07 is make sure it works In Windows, verify all of the SQA tests pass, then make and upload the source code tarball and Windows binaries.

In the meantime:

New Deadwood snapshot

I'm working on a test for inflight merging, and have documented the max_inflights parameter.

Friday, August 28, 2009

Deadwood snapshot update: inflight merging code finished

The code hasn't been tested, but Deadwood should now have multiple inflight query support.

Next: Test the code (make a custom DNS server that takes a few seconds to reply and increase Deadwood's timeout in the test)

In the meantime:

Thursday, August 27, 2009

Minor Deadwood snapshot update

I've added code to initialize the "inflight" hash (list of current in-flight DNS requests) and have added a CODE HERE to mark where I will add code to handle in-flight requests. I will also need to make code that removes inflight requests whenever we close a connection.

Wednesday, August 26, 2009

New Deadwood snapshot

In today's Deadwood snapshot, I'm continuing work on merging multiple in-flight DNS requests. It's here:

Tuesday, August 25, 2009

ObHack 006.3 released by Fritz

While I no longer am working on the ObHack codebase (modifications I did to the original 2007 Oblige 2 code), Fritz has taken over maintenance of the code and we have just released Obhack 006.3:

ObHack has a number of features not in to the Oblige 3 codebase, such as Deathmatch and CTF support (unlike Oblige, even single-player maps have some basic Deathmatch support, and there's even a mode which tries to make maps that are both good DM and single-player maps), Heretic support, and what not.

I hope people enjoy the code. Feel free to post suggested features or bugfixes here, but remember that Fritz, not myself, is maintaining the code.

New MaraDNS snapshot

I've updated the web page and have applied a one-line patch to fix the issue described here.

The file can be seen here:

Monday, August 24, 2009

Deadwood update: No Deadwood 2.3.05 release needed

I've looked at the code in handle_expired again and have concluded that the code does not present any security risk. The relevant code appears to be a fossil from the Deadwood 1 days, before I added randomization. The code copies over the Query ID from the local connection to the remote connection, makes a DNS header, then calls make_remote_connection to send a packet to the remote DNS server.

make_remote_connection uses set_dns_qid to make the query ID random before sending it to the remote DNS server.

In conclusion: There is no need to make a new Deadwood 2.3 release; the DNS QID is always a random number. However, the cleanup to make it so it doesn't look like the QID isn't random I'm going to keep in the 2.3 tree; should a bug come up in the 2.3 code, I'll also apply this fix.

New Deadwood snapshots

Doing work on being able to merge multiple in-flight requests together. As I looked over the code, I realized some things didn't work with DNS-over-TCP (resurrections, blacklist_ip), which I think I have fixed (but I'm not going to test this; DNS-over-TCP is a bad hack).

In addition, the code that resent queries when we didn't hear from upstream has been revamped to create a new query ID number every time we resend the query, instead of echoing the local query ID. This is something I have also fixed in the Deadwood 2.3 codebase.

One issue is that, sometimes we will need to keep the DNS-over-TCP connections around while the DNS-over-UDP connections have died. I've redone forward_remote_reply() so that, once this routine sends a UDP reply, it resets that particular local UDP connection so it won't send a reply again. This will hopefully solve the multiple DNS-over-TCP issue.

I think I will have it so DNS-over-TCP connections simply don't look for in-flight requests, but always open up a new request. I'll do this, but put some things in place so we could have both UDP and TCP on the same connection number if this is desirable in the future.

The work can be seen here:

The deadwood-H releases are releases for the next 2.4 release of Deadwood (the "Head" branch); the deadwood-S releases will become the next 2.3 release of Deadwood (the "Stable" branch). I have run all tests in 32-bit CentOS for the next stable release; all I have to do before Deadwood 2.3.05 is to test it in 64-bit CentOS, make a new random prime for both the source code and the Windows compile, make a Windows compile, then Deadwood 2.3.05 will be ready.

Sunday, August 23, 2009

New Deadwood snapshot: Final touches to execfile

I've done a couple of final touches to execfile support in Deadwood today; I have made it so execfile doesn't change directories in Windows, did a bit of final touch-up to the documentation, notably documenting it in Windows.

It's here:

Saturday, August 22, 2009

Deadwood snapshot update: execfile finished

OK, guys, I've decided to not devote any more time to execfile("foo") in Deadwood.

I have finished up the feature this morning; all files parsed with execfile must be in /etc/deadwood/execfile and errors in sub-files are not correctly reported; the workaround is Deadwood -f /etc/deadwood/execfile/filename, which will report the line a parse error is on.

I have also documented execfile.

The one last thing I will do before the next Deadwood 2.4 release is have it so, on Windows systems, execfile uses a different directory besides /etc/deadwood/execfile; probably just the same directory all the other Deadwood files are in Windows (#ifdef the chdir() to make sure it isn't used in Windows).

It's time to go back to merging multiple in-flight DNS requests.

Friday, August 21, 2009

New Deadwood snapshot

I am working on making it possible for the parser to load other files to parse while parsing a dwood2rc file; this makes some kinds of management easier for some sysadmins.

The feature currently works, but I need to harden it against security-type issues this feature can add.

Thursday, August 20, 2009

Deadwood 2.4.06 released: ip_blacklist support

I have released Deadwood 2.4.06; this release of Deadwood has ip_blacklist support.

This is useful if you have one of those annoying ISPs who take "not there" queries or otherwise performs "NXDOMAIN redirection". Simply add the IPs your ISP directs to you when you should get a NXDOMAIN, and Deadwood will convert any DNS response with one of the offending IPs in to a "not there" DNS reply.

Note that Deadwood will not convert cached entries this way; if you wish to use this feature and have used earlier versions of Deadwood, please delete your Deadwood cache first.

It can be downloaded for both CentOS Linux (as source code) and Windows here:

Wednesday, August 19, 2009

Deadwood updates

IPv6 now works with Deadwood and there's a new SQA regression to test the ip_blacklist feature. In addition, the synthetic "not there" reply now correctly echoes the client's ID, and another test caught a floating point exception ("foo % a" in C needs to make sure a is 0 or bad things happen) in some of the code I added before in the 2.4 branch of Deadwood.

I've updated the tests and should be able to release Deadwood 2.4.06 tomorrow.

In the meantime:

Tuesday, August 18, 2009

New Deadwood snapshot

Deadwood now sends out synthetic 0-TTL "not there" replies when given an answer with an IP on the ip_blacklist. Next:
  • IPv6 support for blacklisted IPs
  • SQA regression
  • Release Deadwood 2.4.06
In the meantime:

Monday, August 17, 2009

New Deadwood snapshot: Workaround for ISPs' error pages

Well, surfing the net this weekend, I discovered that those annoying little "error pages" (usually filled with ads) that some ISPs hoist on customers when they misspell a URL or otherwise go to a page without a DNS entry are actually a potential security problem.

That in mind, I have implemented a new dwood2rc parameter: ip_blacklist. Should an IP appear in an answer that is in the ip_blacklist, Deadwood will reject the answer. I have already implemented and documented the new feature, but I need to make these kinds of answers proper "nothere" replies (not actual NXDOMAINs for technical reasons), add IPv6 support (done in some parts of the code but not all of it), add a SQA regression, then I should be done with this feature.

For people who want to try out the feature in the meantime, it's here:

Friday, August 14, 2009

New Deadwood snapshot; new MaraDNS timeline

I have started work on having it so multiple identical "in flight" DNS requests only send one query to the remote server. This is to minimize a possible security problem.

I have decided to revise the MaraDNS timeline. The current MaraDNS timeline is as follows:
  • MaraDNS 1.0 will be supported for critical security fixes only until December 21, 2010. Should a security bug be discovered just before the cut-off date, requiring changes so that the patched version would be released after December 21, I will simply remove MaraDNS 1.0.
  • MaraDNS 1.2 is only supported for critical security fixes, and only until December 21, 2010. As per 1.0, should a security bug be discovered just before the cut-off date, requiring changes so that the patched version would be released after December 21, I will simply remove MaraDNS 1.2.
  • MaraDNS 1.3.07 will be supported only for critical security patches for the foreseeable future. A EOL date will be announced when and if MaraDNS 2.0 is released.
  • Critical bug fixes will be applied to the branch of MaraDNS for the foreseeable future.
  • I have no planned release date for MaraDNS 2.0. Indeed, at this point, I've decided to not even promise that MaraDNS 2.0 will be released. I hope it is, but I just don't like having a commitment to, say, release MaraDNS 2.0 before the end of the year looming over me.
What does this mean? It means that, while I still support MaraDNS (and appreciate all of the donations I have received), I'm not making enough money with MaraDNS for me to commit to releasing MaraDNS 2.0.

I'm having a lot of fun working on Deadwood, and I really hope to finish up the Deadwood code and release MaraDNS 2.0 by the end of the year, but, no promises. Since I'm not making much money doing this, this is "for fun and for free". Timelines and deadlines are not fun. So, I'm getting rid of them.

Monday, August 10, 2009

Deadwood and MaraDNS snapshot updates

I have released minor updates to the MaraDNS and Deadwood snapshots today; both are documentation-only changes. There were a couple of remaining references to the 2.3 DeadwoodTCP service in the README.txt for the Windows version of Deadwood; I have removed these.

In addition, I fixed the HTML a little for the MaraDNS download page and updated the copy of in the MaraDNS tarball.

The Deadwood snapshot can be downloaded here and the MaraDNS snapshot is here.

Sunday, August 9, 2009

Deadwood roadmap: Consolidate multiple requests for the same name

My next plan for Deadwood is to consolidate multiple requests for the same hostname. In other words, if one user asks for "", and while we wait for the answer for "" upstream, another user makes the same request, instead of processing it as a separate request, it makes more sense to attach the new request to the already-in-place request for "", and send the reply back to both requesters at the same time once we get the answer upstream.

Doing things this way improves security.