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: