Saturday, February 28, 2009

Deadwood snapshot update

I have released a new snapshot of Deadwood that adds a test for another parameter: verbose_level

At this point, I have done all of the tests that are easy to implement. I will probably, at this point, no longer be able to make daily releases if things get busy enough at work that I don't have time to work on one of the more difficult tests.

My goal is to have a Deadwood 2.05 release done by mid-March.

It can be downloaded at the usual place.

Friday, February 27, 2009

Deadwood snapshot update; Windows XP is better than Ubuntu

I have uploaded a new snapshot of Deadwood today with tests added for upstream_servers and upstream_port.

I have just moved and haven't been able to get online at the new place yet. The place is supposed to have internet, so I will work with my new roommate and will look at the router this afternoon to see if the issue can be resolved (it could be that the key changed when they changed the ESSID but no one remembers doing this, much less the new key, or it could be that things are broken upstream).

If I can't resolve the issue with internet at home, I will not be able to release Deadwood again until Monday. Update: I now have internet working at my new place; expect to see a Deadwood update tomorrow.

This release can be downloaded at the usual place
While waiting for CentOS 5.3 to be released, I moved things around on my hard disk and reinstalled Windows XP.

It's a relief compared to Ubuntu. Everything works. Without problem. Things that took me days to resolve work out of the box in Windows XP: Getting a password protected screen saver (In Windows XP, it's actually done with "Change session" from the start menu) that doesn't crash the system and getting VMware to work.

When I put in my 50 meg "hockey rink" business card CD, it mounts within seconds. In Ubuntu, it would not mount at all or take over a minute to mount; this is a problem I was never able to resolve. Indeed, I spent a day pulling out my hair and wasting money burning expendable media until I realized this was an Linux-specific problem and not a problem with the media in question.

Sound in VMware isn't a problem; I can have multiple guest operating systems with sound active at the same time. In Ubuntu, only one application can use the sound card at the same time.

The keyboard just works in Windows XP; I needed to tweak configuration files to get it to work in Ubuntu.

Windows XP is a good deal more light and responsive running VMware player than Ubuntu; suspending or restoring an OS would often take two or three minutes in Ubuntu but only takes a few seconds in Windows XP. Windows XP and the Windows VMware client are far more lightweight; I can comfortably run three guest operating systems at the same time with 512 megs allocated for each guest; Ubuntu could only run two and would thrash (swap excessively and have the computer be unresponsive) with suspending or restoring a guest OS.

Comprared to Ubuntu, things work like a dream in Windows XP.

Nothing has changed since this blogger posted this why Ubuntu sucks blog back in 2007. Ubuntu still sucks (for my purposes: Having a good VMware host operating system) and Windows XP is a far better operating system.

I've been using Linux since 1995 and refused to dual boot my machine until 2003. Linux used to be more stable but harder to use; Ubuntu is trying to make another Windows but I just don't think it makes sense to try and shoestring all of the open source projects out there to make an end-user desktop. For example, Linux was never designed to allow someone to just insert or remove a CD without mounting or unmounting it; trying to make Linux do this just causes it to be unable to read media Windows XP can read without problem.

I think the real solution to making a open-source desktop environment is to make an operating system designed to be on the users desktop from the start. There are at least two projects that try to do this: Haiku OS (an open-source implementation of the failed 1990s BeOS) and Syllable (an open-source OS based on ideas from Amiga OS and other sources)

I will let people know how things work with CentOS 5.3 once CentOS 5.3 is available.

Thursday, February 26, 2009

Deadwood snapshot update

I have released a slightly updated snapshot of Deadwood today; I have updated the DwMain man page to remove the BUGS section (this used to mention the "Google bug" which I have since fixed) and added tests for the maradns_uid and maradns_gid parameters. It can be downloaded at the usual place.
I can't wait until CentOS 5.3 comes out so I can wipe Ubuntu from my hard disk. I gave Ubuntu a second chance; the OS was just as buggy as ever.

Wednesday, February 25, 2009

Deadwood snapshot update

I have updated the Deadwood snapshot today:
  • DwMain man page updated to fully document handle_noreply parameter
  • bind_address test fixed
  • Tests added for cache_file, chroot_dir, handle_noreply, and ipv4_bind_addresses
It can be downloaded at this location.

I have slightly revised the design of the blog; the column with blog text is a little wider. The blog is just narrow enough to look nice in what I consider the "lowest common denominator": Internet Explorer 6 with an 800x600 display. The blog also looks OK in Dillo just in case you are still using a Gateway Handbook 486-25 (but consider getting a Dell Mini 9 netbook; they're cheap, just as small, have more resolution, and are a good deal faster).

Tuesday, February 24, 2009

Deadwood and MaraDNS updates; yet another Ubuntu rant

I have added a single test to Deadwood today: a test for the parameter bind_address. I now only have 16 more dwood2rc parameters to make tests for. This work can be downloaded by clicking on this link.

I have also integrated Milan Kupcevic's patch to add dns_port to zoneserver; the latest snapshot with this patch applied can be downloaded at this link.
Ubuntu does it again! Yet another Ubuntu bug, what a surprise.

I don't think I've mentioned on this blog that Ubuntu's build of Abiword crashes when I go to insert -> symbol. Do the folks at Ubuntu do any testing at all? Or do they just foist a beta on unsuspecting users as the latest and greatest release of Ubuntu?

Another issue: Ubuntu's auto-mounter (a.k.a. hal) is really unstable. It either can't mount a perfectly good CD (Ubuntu is a little annoyed with CDs; this isn't a problem when booting from a CD in the BIOS in Windows, but it takes a couple of minutes to mount a CD in Ubuntu for whatever reason), or won't properly umount the CD/DVD when I eject it. Again, do they test anything with Ubuntu?

I'm through with Ubuntu. Next time I install an OS, I'm going to install CentOS or Fedora Core. CentOS 5.3 should come out in a couple of weeks; I'm going to make that my main OS and ditch Ubuntu. Ubuntu is nothing but a headache that makes me want to run to the Linux hater's blog.

Monday, February 23, 2009

Deadwood snapshot update

I have gone through all of the old SQA tests and have updated them for Deadwood 2.

The issue with the tests that didn't start MaraDNS was because they weren't supposed to start MaraDNS; the tests are to see how Deadwood handles the upstream server not replying. I have noted this in the comments for the tests.

My next task is to add tests for all of the Deadwood 2 parameters, namely:

bind_address
cache_file
chroot_dir
dns_port
handle_noreply
handle_overload (DONE)
hash_magic_number
ipv4_bind_addresses
maradns_gid
maradns_uid
maximum_cache_elements
maxprocs (DONE)
num_retries
random_seed_file (DONE)
recurse_min_bind_port
recurse_number_ports
recursive_acl (DONE)
resurrections (This will need a few different tests)
timeout_seconds (DONE)
upstream_port
upstream_servers
verbose_level

It can be downloaded by clicking on this link

Note that the PGP signatures no longer are available with both a SHA-1 and RIPEMD-160 version of the hashes signed; I have looked at the relevant cryptographic literature and feel confident that RIPEMD-160 currently is secure. So, the PHP signatures will from now on just use RIPEMD-160.

Sunday, February 22, 2009

Deadwood snapshot update

A very important part of software design is software quality assurance. This is a process to make sure a program works and doesn't have any glaring bugs. This is a part of software development that many open-source projects neglect; one prominent open source program has, in its FAQ, a point-blank declaration that the writer of the program finds SQA boring, so the program hasn't had any SQA testing.

Indeed, the number of bugs I have experienced with Ubuntu shows that there appears to be a lack of SQA testing all around. It doesn't help that Debian and Ubuntu have policies and bureaucracy that result in many packages being outdated versions of programs with bugs long-since fixed.

SQA testing is important. It gives a program that professional polish that makes commercial software more pleasant to use than a lot of open-source software.

I am now in the process of building a number of SQA tests for Deadwood. Back in 2007, I made a few basic tests then stopped working on them; now that Deadwood has months of real-world testing behind it and looks pretty stable, I've gone back to some more formal testing.

These tests need MaraDNS to run; MaraDNS is used as an authoritative server to have Deadwood get responses from upstream authoritative servers. To run the tests, I put the deadwood-Q-date files in the MaraDNS directory for the latest MaraDNS snapshot.

I have revamped the basic test to work with current versions of Deadwood; this test and the basic TCP test work fine.

My plan this week is to go through the other tests and make sure they work and are stand alone. One test I looked at, for example, assumes that MaraDNS is running; I will update this test to start MaraDNS itself with appropriate authoritative data.

Once I do that, I will make tests for all of the Deadwood parameters where it's feasible to make a stand-alone test.

A snapshot showing this work is available at this link

Saturday, February 21, 2009

MaraDNS snapshot update; Deadwood/MaraDNS todo

I have made a new snapshot release of MaraDNS that updates Deadwood (with files also in the maradns/ tree removed) to Deadwood-2.04.

This is my TODO list for MaraDNS and Deadwood:
  • Look over the SQA regression tests Deadwood comes with; I need to overhaul these tests and make sure they're still relevant and can be used to help test Deadwood.
  • Look at Milan Kupcevic's patch that adds dns_port support to zoneserver
  • Update deadwood-1 (in MaraDNS) to use deadwood-2's buffering in DwTcp

I'm now only using the Chortle font in Windows (and when editing documents in AbiWord); Linux's autohinting when a font has no hints is a lot more primitive than Microsoft ClearType so I'm using Verdana and Bitstream Vera for most everything in Linux.

One of these days I might release a Chortle 2.04 with a "ClearType" version where only "p" is autohinted. I wish I knew more about Truetype hinting, since I would like to be able to set up Chortle's hinting so the X-height is a little bigger at small point sizes. To be honest, I really don't have the time to learn to become enough of a font designer to make Chortle a general-purpose screen and printing font.

Friday, February 20, 2009

Deadwood 2.04 released; MaraDNS snapshot update; Chortle font update

I have released Deadwood 2.04 today. This incorporates a number of improvments since the Deadwood 2.03 release from a month ago:
  • The "Google problem" has been fixed; when there is a chain of CNAME answers leading to an A answer, Deadwood uses the TTL for the CNAME or A answer with the lowest TTL to determine how long to cache the DNS reply
  • Cache size is now determined from one's dwood2rc preferences, not from the file storing the cache.
  • Logging revamped; raw printf statements mostly removed and verbose_level support added.
  • DwTcp now has basic TCP buffering and works.
  • Warnings when compiling in Ubuntu 8.10 with -Wall enabled removed
It can be downloaded by clicking on this link
William Summers provided me with a patch to compile MaraDNS under OpenBSD last week; I finally integrated this patch in to the "HEAD branch" of MaraDNS and it can be seen in a snapshot I uploaded yesterday.

Milan Kupcevic has posted a patch to implement reading the dns_port variable in the zoneserver program, which I will look at next week sometime.
Well, never say never.

I am starting work on the Chortle font again. Basically, in Cleartype, the "p" looks a little weird in the Chortle font. I have added autohinted information to just the "p" letter and the font looks nicer when rendered with Microsoft ClearType at small sizes. Unfortunately, autohinting all of the letters makes the X-height inconsistent, so I might, one of these days, manually fix the hinting so Chortle looks nicer at small sizes on Linux systems (the hinting isn't as important when one is using ClearType).

My work here can be seen by clicking on this link

Thursday, February 19, 2009

On Deadwood's send() implementation; PayPaI looks like PayPal in some fonts

In a perfect world, DwTcp would properly handle the case of send() sending less information down the TCP pipe than we requested it to send. Yes, if I was trying to make this program perfect, I would engineer for this.

I'm not going to.

Two reasons:
  1. DwTcp's stated purpose is to be a basic program that handles the occasional DNS-over-TCP packet. This program wasn't working for over a year and I didn't even notice.
  2. For me to add code that handles partial send()s, I will need to implement a testing suite that can simulate partial send()s (probably by having a wrapper for the raw send() function that can be optionally compiled to only send some of the data we want to send
Now, should the lack of partial support for send() ever become an issue, I will need to have scripts to allow us to test, in a consistent manner, partial send()s, since this type of code, if incorrectly written, can cause subtle errors that will be very difficult to track down.

The current situation of having a loud, obnoxious message telling the user there's an issue with partial send()s is the best way to handle it; this immediately lets them know what's going on. I would rather do it like this than have untested code in DwTcp.

I plan on releasing a DwTcp 2.04 tomorrow with the post-2.03 fixes (Google problem fixed; coding style revision to remove potential infinite loops; cache size bug; DwTcp works again) once I use Deadwood 20090218 for a day to make sure everything works.
Some fonts, notably Arial and Bitstream Vera sans, have a security problem: The PayPaI security problem. With some fonts, "PayPaI" looks like "PayPal"; this is not only aesthetically ugly, it makes the font harder to read and raises security issues.

One time, I was working with a student and reading something on my computer screen using the Bitstream Vera font when she had a hard time something reading something because she thought a "L" (lower case) was an "i" (upper case). I switched the font to a copy of Verdana I had on the computer (a free download) and we continued to read the article.

Other issues with some typefaces: 0 looks like O; l looks like 1 (or I); 5 looks like S

The one change I made to the vector form of Chortle (besides remapping characters and changing vertical spacing) back in 2007 is making the 1 not look like an l.

Wednesday, February 18, 2009

Deadwood update: DNS-over-TCP now works

I have released an update to Deadwood today that implements simple TCP buffering; this is a simple TCP buffer that allows data to be forwarded over TCP. The buffer only allows data to be sent one direction to be buffered; the data is buffered until it is possible to send the data.

While there is data in the TCP buffer, the Deadwood TCP client does not accept any further data on that particular connection until the buffered data is sent and flushed.

The TCP connection in question has the actual buffered data and the socket (incoming or outgoing, basically) and length for the buffer stored. When the buffered data is sent, the buffer is cleared.

While there is buffered data, the program repeatedly does a send() system call to send the data until it succeeds. There is no delay; the send is sent to the kernel as quickly as possible over and over until it succeeds; I wonder if the loop that processes the TCP data should have a 1-ms delay or what not to not hammer the kernel with send() calls while there is buffered data to be sent.

The TCP buffering does not support partial send()s; the data either is sent or not sent. In other words, if send() tries to send 40 bytes of data, and only 20 bytes are sent, the program puts a warning on the standard output that partial sends of data are not supported.

This may be an issue for complicated TCP packets, but seems to work fine for basic DNS-over TCP packets.

In addition, the code doesn't check the output of memcpy when making the buffer.

This code can be downloaded at this link.

Since I last tried using Chortle as a screen font, anti-aliasing and auto-hinting have greatly improved. I have download a package from Microsoft to enable ClearType hinting on Windows XP, and use aggressive hinting in Ubuntu.

With modern sub-pixel anti-aliasing, Chortle is remarkably readable on the screen and I'll use it, as much as possible, as my primary screen font until the end of February, to see if I can break my inability to look at anything besides Verdana for extended periods of time on the screen. I don't like the idea of my eyes and computer screen being bound to a proprietary font (albeit one that is a free download).

Tuesday, February 17, 2009

Chortle 0.23 released: Final Chortle release

Back in 2007 or so, I wanted to make a 100% free font that looked good both on the screen and when printed out. I decided to take Charis SIL, which is itself derived from a version of Bitstream Charter given to the X consortium under very generous licensing terms back in 1992, removed glyphs I wouldn't use (this font only supports Western European languages with some limited IPA support), made the spacing more reasonable (Charis has this really wide vertical spacing), and did some work on bitmap renderings of the font that I finally gave up on, realizing it would never be as readable on the screen as Verdana.

Bitstream Charter, Chortle's ancestor, is a font made my Matthew Carter, who later on became famous for his legendary Verdana, Tahoma, and Georgia fonts that are part of Microsoft Windows. Like Verdana (my favorite screen font; indeed the only proportional font I can stand looking at on the screen), this is a very beautiful and readable font. Unlike Verdana, the font doesn't have good hinting for the screen.

Chortle is a very nice font for writing text to be printed out; it has had problems with looking decent on the screen, which I have resolved by removing all hinting from the glyphs today (Fontforge's auto-hinting is so bad it's best completely removed). It's now readable in Windows XP and looks nice in Windows Vista (clear type really makes fonts look a lot better on the screen)

This will be my final release of Chortle; I did most of my work on Chortle back in 2007, and haven't touched this font for over a year. It's a nice font, and it completely free (both as in free beer and as in free speech).

It can be downloaded at samiam.org/Chortle

Monday, February 16, 2009

Deadwood and MaraDNS snapshot updates

Now that I have done the work XeroBank requested of me, I am getting back to working on Deadwood. I am working on adding basic buffering to the TCP forwarder, so that Deadwood can handle both UDP packets (with DwMain) and the occasional TCP packet (with DwTcp). DwTcp is a general purpose TCP load balancer/forwarder that happens to use the same configuration file as DwMain, allowing it to forward (but not cache) DNS replies, or handle any other kind of TCP data.

It can be downloaded at this location
I have gotten a generous donation to help with MaraDNS development from Chirado OHG, a German consulting firm specializing in the design, implementation, and maintenance of secure IT systems and processes that comply with ISO 27001. I appreciate their generosity, and have added them to the MaraDNS sponsors web page.

Right now, the only unsponsored MaraDNS development I will perform is applying the occasional patch someone gives me and fixing security bugs in MaraDNS. The only supported platform for MaraDNS and Deadwood development is CentOS 5; since this platform will continue to be supported for five more years, this will be the primary development platform for MaraDNS and Deadwood until early 2014. Assistance with using MaraDNS on other platforms will be provided only if one is willing to help sponsor MaraDNS development

William Summers provided me with an OpenBSD patch for MaraDNS last week, which I have finally downloaded in to my 32-bit CentOS 5 VMware virtual machine (in a moment of foolishness, I decided to use Ubuntu 8.10 as my host operating system but all my real work is done in Windows XP and CentOS virtual machines). I will look at this patch in the next day or so.

In the meantime, I have a new MaraDNS snapshot that removes all warnings when compiled with -Wall in Ubuntu 8.10 64-bit (Yes, CentOS 5 is the only supported platform, but I do try to keep my code portable since there's a lot of diversity in the free software jungle), and adds Chirado OHG to the list of MaraDNS sponsors. It can be downloaded at this link.

Sunday, February 15, 2009

Deadwood roadmap; On Ubuntu

I have looked at the Deadwood code in CentOS 5.2, and I'm seeing the same problem I saw in Cygwin a couple of weeks ago: DwTcp (the TCP half of Deadwood) doesn't work. Strange, because the code did work back in late 2007. So, I'm going to have to work on this code before releasing another stable release of Deadwood.




You know, my issue is not with Linux. My issue is with Ubuntu Linux, which is trying to make a desktop OS to compete with Windows. Linux has made a lot of progress for the end-user ever since the mid-1990s, when FVWM was the state of the art for end-user usability.

But, Linux as an end-user desktop is beta-quality at best. There's a number of reasons for this. One is that it's impossible to give Linux programmers the kind of discipline needed to make a stable end-user desktop. People constantly want to branch out in new directions and develop new software instead of making stable the software they have already developed. Since people, by and large, aren't getting paid, people aren't very motivated to the the boring, uninteresting programming that users want.

Linux kernel developers don't want to make a stable API or ABI for drivers; this results in people forced to use unstable and untested kernels to have a system that works with their hardware. Instead of continuing development on KDE3, it has been replaced with KDE4. Unfortunately, KDE4 doesn't even have a GUI-based network configuration program; so a perfectly good desktop environment has been abandoned and replaced by one without basic functionality.

Ubuntu essentially forces me to use Gnome; I tried to use it with FVWM in 2007 and 2008 and found that I couldn't do things like configure my network card with "ifconfig" and what not without some daemon erasing my configuration or making my configuration not work.

So, yes, with Ubuntu Linux I'm forced to use unstable software that crashes. This is very different from the situation in the 1990s, where, while not friendly and needing a lot of training to master, Linux had a lot more stability than the not-protected versions of Windows (Windows 3.11, Windows 95, etc.)

Friday, February 13, 2009

MaraDNS 1.3.13 released

I have released MaraDNS 1.3.13 today; I actually released it in the middle of the night but went to sleep before announcing it. I did the DNS stress test in the middle of the night when no roommates were online and MaraDNS did not crash nor exhibit any other problems. As an aside, newer Linux kernels handle threading much better and the level of resources used (memory, etc.) are a lot less than they were using older Linux kernels.

This release has the XeroBank-sponsored ability to give a bogus IP when a remote server gives a "this host does not exist" reply (which people have been requesting for years now; I would like to thank XeroBank for making it possible for the MaraDNS community to have this feature) via the new notthere_ip feature.

This release also has a test with a "borked zone" which we talked about on the list back in January; sometimes clueless DNS admins have poorly made zone files where NS records for subdomains point back to the parent NS servers instead of being their own nameservers. The test I made tests one possible configuration like this; the result was that MaraDNS was able to, after a bit of prodding, resolve the domain.

I have also updated the internal copy of the web page inside the MaraDNS tarball and the script that updates the download page.

There is no Windows binary of this release of MaraDNS; I am putting Windows support on the back burner. If people want better native Windows support, this is a sponsorship possibility.


One thing that people may observe is that I'm moving towards a sponsorship model of MaraDNS. I've been working on MaraDNS for years and have given away the majority of my hard work. That said, with a job and a girl in my life, I just don't have the time to answer support requests by private email, and getting the same feature requests over and over started to annoy me.

So now, I've finally got a sponsorship model in place that makes it so I can reply to feature requests and private support email in a professional manner; people who ask me for a new feature or for private email support will be told they have a chance to sponsor MaraDNS.

My prices are currently incredibly reasonable; sponsors will also get mentioned on MaraDNS' webpage and their donations make continued MaraDNS development possible.


I have fixed the problem with Ubuntu crashing. I made sure that my VMware images normally don't have poll the CDROM drive to see if it has been attached, and removed the offending gnome-screensaver package which looks to be unstable and to cause the crashes. I now use the xlock command in the xlockmore package to lock the screen; it's not glamorous, using mid-1990s technology to lock the screen, but works and it rock-stable.

I've also disabled all of the Compiz effects; they appeared to also be contributing to the instability I saw the other day.

One issue open-source software has is that there often times isn't a real SQA process in place; people develop and add new features because it's fun to do so, but don't do the boring stuff like fixing bugs. I have seen countless open source projects have a flurry of development, make some interesting but unstable software, then abandon the project before ironing the bugs out or developing a SQA process.

I will not post here tomorrow; it's February 14th, and yes I have a girlfriend in my life today.

Next week, I will post about, among other things, my adventures making a from-scratch image of CentOS 5.2 and adding the VMware tools to this image, about tricks to make VMware images compress better when being backed up, among other things.

Tuesday, February 10, 2009

Linux sucks: My system has crashed three times today

Linux sucks: My Ubuntu 8.10 system has crashed three times today.

Three times.

All three times when I password protected the system. Twice, the system crashed when I inserted a blank CD or DVD while the password protected screen saver was activated. This might have been caused by VMware (which tries to make mounted CDs visible to the guest OS), so I told VMware to not look for a CD and the system didn't crash while the screensaver was active.

The third time, my boss called me in to his office to help him with an email. When I came back out again, my system had rebooted, with messages like this in the logs:

Feb 10 12:24:09 Merequetengue kernel: [ 5852.179340] compiz.real[7047] trap stack segment ip:41024e sp:7fff605b93b0 error:0
Feb 10 12:24:16 Merequetengue kernel: [ 5859.014131] metacity[6971]: segfault at 0 ip 000000000046441e sp 00007fff05278c70 error 4 in metacity[400000+88000]


Needless to say, I'm giving Ubuntu one last chance. I'm going to get rid of Gnome, which makes Windows 3.11 look positively stable, and try using the KDE desktop. Yeah, this means I have to reconfigure all of my wireless network connections again. What a pain.

I can hear the bullshit from the freetards:
  • Oh, my system doesn't crash like this so it must be a hardware problem (No, because my system most assuredly does not crash like this when running Windows XP, or CentOS for that matter)
  • Well, it crashes because you're a clueless Linux newbie (No, I've been using Linux since June 19, 1995, back when you were playing with GI Joe dolls)
  • Maybe you should try harder to make your system not crash (No, maybe Canonical should distribute stable operating systems that don't crash three times a day)
  • You must be a paid Microsoft shill (No, please take your medication when you have paranoid fantasies like this)
  • You really should buy Linux-compatible hardware (Guess what, idiot freetard, I did. I bought a Dell 1420 Linux-compatible computer)
Linux sucks. No operating system worth its salt crashes three times in one day.

I'm happy the Linux haters blog is back again. Linux needs less zealots who think the three crashes I had today were hallucinations, and more people willing to look at and resolve the serious desktop usability problems Linux currently has.

Update: the third crash was not, to be pedantic, a crash; while the screen saver was running, something happened to kill the X process. It was, for all intents and purposes, a crash: I had to reboot my two VMware virtual machines and restart all applications before working again.

Kde4 is crap; no GUI network manager (and no way of installing KDE3, which does have a network manager, instead with Ubuntu); XFCE is also crap, with a very confusing menu on right click and no apparent GUI network manager.

My current workaround is to use Gnome, but to turn off all cutesy effects (right click on root window, change desktop background, then click on the "effects" tab) and to use "xlock" instead of Gnome's stupid screen locker (sudo apt-get install xlockmore then run the command as xlock). I also have detached the optical drives in the VMware guests. I'll let people know whether or not this stops the crashes.

Monday, February 9, 2009

MaraDNS webpage update

I got a report that download links on the MaraDNS web page did not work after Saturday's web page update; I have fixed this issue and people should be able to download MaraDNS from the web page again.

I will make sure the 1.3.13 package doesn't have this issue with its internal copy of the webpage which I sometimes update to the server.

Another report is that the Windows port of MaraDNS only parses the first 1024 bytes of a mararc file. This is an issue I will only resolve if someone is willing to sponsor me working on this; I'm moving away from MaraDNS and towards using Deadwood as a recursive resolver and currently not actively working on MaraDNS, unless there is a security bug, or someone is willing to sponsor their feature request or bugfix.

Right now, I have two geek projects that I am at various stages of resolving:
  • Getting a multiregion DVD player for Linux. The issue is that my girl has a mix of Region 1 (US) and Region 4 (Latin America) DVDs, and we're having issues with only being able to play Region 4 DVDs. I've downloaded a bunch of packages, but still haven't been able to figure out a way of doing this directly (just insert the DVD and go) or indirectly (convert the DVD in to a .mp4 file or what not).

  • There are some lingering issues with the CentOS guest operating system. There was an issue with an attached USB mouse moving far too quickly; the workaround is xset m 1/2.

    Another issue is that the font used for the menubar in Firefox is small and unpleasant to look at; fixing this with gnome-font-properties is not possible because gnome-settings-daemon won't start. I deleted everything gnome-related from the VMware image and the current workaround is to use Firefox as little as possible in the CentOS guest, but instead use it on the host (Ubuntu) or in one of the Windows guests.

    I'm slowly downloading a CentOS 5.2 32-bit DVD, and will probably try reinstalling CentOS 5.2 as a guest OS myself later on this week; homefully the open VMware tools are mature enough to allow me to resize the X window and cut-and-paste between the guest and the host.

Saturday, February 7, 2009

MaraDNS snapshot update: Webpage updated

After finally getting VMware player to work in Linux, I am able to get back to finishing up the XeroBank-sponsored MaraDNS development. I have updated a new version of MaraDNS, which simply updates the MaraDNS.org webpage. I no longer have a roadmap page, since the page is outdated and the most current information about MaraDNS is right here on the blog. I have added a list of sponsors whose generosity make continued MaraDNS development and improvements possible.

The only work I have to do before releasing MaraDNS 1.3.13 is to re-verify that all of the regressions pass, and to perform a standard stress test I like to do before making a new MaraDNS release. The release should be done next week sometime.

The snapshot can be downloaded by clicking on this link



The reason for the delay in making a new snapshot of MaraDNS is because I decided to use Linux again. Ubuntu Linux, even. It took me the last three days to make the appropriate backups, install Ubuntu, and then struggle with getting VMplayer to work in Ubuntu 8.10.

I had a number of problems with VMware player, which I have touched on in previous blog entries. One is that the CentOS 5.2 guest was not correctly set up to handle key repeat speed in a consistent manner. I fixed this by adding divider=10 clocksource=acpi_pm to all of the kernel entries in /etc/grub.conf (in the guest operating system); here is what my grub.conf looks like:


default=0

timeout=5

splashimage=(hd0,0)/grub/splash.xpm.gz

hiddenmenu

title CentOS (2.6.18-92.1.22.el5)

root (hd0,0)

kernel /vmlinuz-2.6.18-92.1.22.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10 clocksource=acpi_pm

initrd /initrd-2.6.18-92.1.22.el5.img

title CentOS (2.6.18-92.1.1.el5)

root (hd0,0)

kernel /vmlinuz-2.6.18-92.1.1.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10 clocksource=acpi_pm

initrd /initrd-2.6.18-92.1.1.el5.img

title CentOS (2.6.18-92.el5)

root (hd0,0)

kernel /vmlinuz-2.6.18-92.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet divider=10 clocksource=acpi_pm

initrd /initrd-2.6.18-92.el5.img


Note that this solution is CentOS-specific; search on vmware.com's web site for the "magic recipe" to add to other distributions' kernels.

Another is that the arrow keys and a bunch of other keys do not work. There are two solutions posted various places on the internet; the one that works best for me is the one where we just define all of the keys that don't work with VMware player. I added the following lines to /etc/vmware/config (in the host operating system):


xkeymap.keycode.108 = 0x138 # Alt_R
xkeymap.keycode.106 = 0x135 # KP_Divide
xkeymap.keycode.104 = 0x11c # KP_Enter
xkeymap.keycode.111 = 0x148 # Up
xkeymap.keycode.116 = 0x150 # Down
xkeymap.keycode.113 = 0x14b # Left
xkeymap.keycode.114 = 0x14d # Right
xkeymap.keycode.105 = 0x11d # Control_R
xkeymap.keycode.118 = 0x152 # Insert
xkeymap.keycode.119 = 0x153 # Delete
xkeymap.keycode.110 = 0x147 # Home
xkeymap.keycode.115 = 0x14f # End
xkeymap.keycode.112 = 0x149 # Prior
xkeymap.keycode.117 = 0x151 # Next
xkeymap.keycode.78 = 0x46 # Scroll_Lock
xkeymap.keycode.127 = 0x100 # Pause
xkeymap.keycode.133 = 0x15b # Meta_L
xkeymap.keycode.134 = 0x15c # Meta_R
xkeymap.keycode.135 = 0x15d # Menu
xkeymap.keycode.107 = 0x137 # Print Scrn


Finally, I had serious problems with sound playback stuttering, making it impossible for me to play back all of a single .mp3 file in my Windows XP guest operating systems. I fixed this problem by adding the following lines to the .vmx file for my Windows XP guest operating systems (this is a modification to the relevant .vmx file on the host operating system):


sound.virtualDev = "es1371"
sound.highPriority = TRUE
sound.buffering = "10000000000.0"
sound.copyDelayFactor = "1000000.0"
sound.directSound = "false"
sound.ignoreOverflows = "true"
sound.maxLength = "2048"
sound.smallBlockSize = "1024"
sound.virtualrealcorrection = "10000000000.0"
pciSound.priorityBoost = "true"


I also have these lines describing sound in the /etc/vmware/config file:


sound.Autodetect = true
sound.fileName = "-1"
sound.maxLength = 64
sound.smallBlockSize = 32


But I don't think this second batch of lines help; I had problems until adding the first batch of sound-related lines to my .vmx files.

And, oh, it's only possible to play sound on one VMware guest at a time, and not while playing sounds from other sources. I only use one VMware guest at a time that needs sound (my CentOS 5.2 guest doesn't), and have disabled all sounds in my host's Gnome user interface.

Now, observe that all of these issues are Linux-specific issues. I tested; the Windows XP 32-bit host doesn't have any of these issues (except for the CentOS one, which is caused by the Linux kernel). This is my annoyance with Linux: Things just work on Windows. Things don't work on Linux without spending days tweaking things, for a variety of reasons, mainly serious problems with Linux's sound architecture.

This is why I'm going to use a minimum of applications in Linux; the only real application I will use is VMware, and just do all my work from inside virtual machines I set up. This way, I only have the headache of configuring a minimum of applications:
  • The VMware player
  • The firewall (I will describe how I set up ufw to protect my system in a future blog entry)
  • The core operating system (including things like the sound card, the networking, the video card, etc.)
To be fair, each release of Ubuntu results in more and more things just working; there used to be issues with getting wireless networking to work that are now as simple as configuring wireless in the GUI to resolve. The video card and sound (except inside VMware) also just worked without any hassle, complete with the default resolution being the resolution of my LCD monitor (As I recall, this was an issue in earlier versions of Ubuntu).

So, yeah, progress is being made in Linux. It might even be ready for the end-user desktop one of these years.

Friday, February 6, 2009

VMware update: Keyboard repeat problem solved

Well, playing around with VMware some more, I have discovered some issues which I have been working on fixing.

One is that the CentOS 5.2 guest had some issues with the keyboard repeat rate being inconsistent. This problem made the system nay-to-impossible to be productive on. After much struggle, and extensive Google searching, and trial and error, I found the solution was to add some parameters to the guest kernel:

divider=10 clocksource=acpi_pm

Edit /etc/grub.conf and add these two parameters to all of the lines marked kernel. Next, reboot the guest OS.

Once I did this, the issue seems to have gone away (knock on wood).

The other issue is with stuttering sound when playing a mp3 in the Windows guest OS. This issue does not appear to affect all applications; I was able to talk to my girlfriend over SkyPE in a Windows guest OS for an hour last night without any stuttering.

I haven't found a solution to this issue yet; some people indicate that VMware player 2.0 doesn't have this issue, so I will see if I get get better results from VMware player 2.0.5 instead of 2.5. I will let people know if I can resolve the Windows sound issue; my gut instinct is that this is caused by Linux, since sound in Linux is a bloody mess.

Update: The sound problem doesn't exist when using Windows XP as a host. So, this is a Linux-specific problem. Did I mention that the sound is a lot quieter in Linux than it is in Windows on the same machine? Linux sound is a disaster; until basic desktop functionality like sound works, Linux will stay in the server back room.

Second update: OK, after much prodding around on the internet, I found some useful information over at Sanbarrow.com. I added the following to the .vmx file for my Windows XP virtual machine, and it appears to resolve the issue:

sound.virtualDev = "es1371"
sound.highPriority = TRUE
sound.buffering = "10000000000.0"
sound.copyDelayFactor = "1000000.0"
sound.directSound = "false"
sound.ignoreOverflows = "true"
sound.maxLength = "2048"
sound.smallBlockSize = "1024"
sound.virtualrealcorrection = "10000000000.0"
pciSound.priorityBoost = "true"

As a related issue, adding this to /etc/vmware/config resolves the keyboard issue, and appears to be the best fix:

xkeymap.nokeycodeMap = true

Final update: The reason why I didn't have any problems with Skype last night is because I was using a USB headset. When a USB headset is connected to a guest OS, the guest OS talks directly to the USB headset and doesn't use the host's sound card, so the stuttering problems don't exist when using a headset.

Indeed, it's possible to have one guest play a song or what not while another guest plays sound through the USB headset at the same time.

Thursday, February 5, 2009

I'm using Linux again!

I'm using Linux again. Now, in light of my numerous rants of Linux's problems, what motivated me to use it again.

VMware.

Basically, instead of having to struggle to make every single half-baked Linux app or Linux port to work, the only things that need to work are the sound card, the networking card, and the VMware client. I don't have to worry about things like, say, Flash working in Firefox (I can just use my VMware Windows XP image and install Flash there where it will simply work), or trying to figure out how to back up my Nokia phone in Linux (I can just do it in VMware with the tools that came with my phone).

The stuff generally just worked, with only a little more bother to get everything going than it would have in Windows; Ubuntu is making progress. There's a bug that bites VMware player for Linux, but the fix has been plastered all over the web. Skype doesn't work, since I'm using the 64-bit Ubuntu and Skype is only available as a 32-bit binary, but it works just fine in the VMware image (the XP version) and I was able to talk over an hour without too many problems with the sound dropping out, which was probably caused by problems with our internet connections.

I have the 64-bit Linux host and a few 32-bit virtual machines. This keeps entropy and bitrot to an absolute minimum; I can have multiple virtual machines for different tasks; I already have two XP virtual machines: One for work (with Microsoft Office) and one for personal use (with SkyPE and a couple of video games). I'll probably set up another one just for transferring files to and from my phone and setting up my phone; it's only about 4 gigs of hard disk space for me to add another VM to use, and a little over 512 megs of ram to run a VM instance.

So, I get the best of both worlds: I get the ease of setup of Windows XP, and I get the stability and security of Linux. Since I'm using VMs, instead of installing all applications on a single real instance of Windows XP, the bitrot that makes Windows slower to start up and run programs is almost non-existent. It's a very nice setup.

I also have updated the VMware image I use for MaraDNS development to use another CentOS 5.2 image that includes the VMware tools (albeit in an outdated form with some annoyances), making it more convenient to use X with the image. Indeed, instead of trying to make the outdated Fvwm1 window manager (that is great for my software development workflow) work with all of the new tools that need Gnome hints and what not, I just use Fvwm1 in the CentOS image and Gnome when I'm in the non-virtual Ubuntu system.

VMplayer has a full screen mode where the only hint I'm not in a virtual machine is when I touch the top of the screen, causing the VMware toolbar to appear (which lets me close, minimize, or make the virtual machine again). With the tools installed on the guest OS (the OS running on VMware's simulated computer), I can seamlessly resize the VMware window, and move the mouse in and out of the window.

It's a very slick setup. Yes, it takes more memory and hard disk space, but I have enough of both. It lets me keep things cleaner and with less bitrot, and lets me work in the environment that is best for the task at hand, instead of hacks trying to fit a square peg in a round hole, such as Cygwin's X server, or trying to use modern Linux applications with Fvwm1.

Tuesday, February 3, 2009

MaraDNS snapshot update: Documentation and test cleanup

I fixed a typo in the documentation ("is" is now "if") for the new XenoBank-sponsored notthere_ip parameter.

I also have run the SQA regressions against the code, including the new test for the notthere_ip parameter. The new test had a bug which I have fixed by using a simple Perl script. Note that this now requires Perl to run the SQA tests; I think I will make the baseline for MaraDNS testing "CentOS 5.2", since it's stable (it will be updated until March 31, 2014) and since I have a portable VMware player image of this OS.

It can be downloaded at the usual place (Do I have to remind you that is a clickable link?)

Monday, February 2, 2009

MaraDNS snapshot update: notthere_ip now documented

I have made some progress on notthere_ip today. First of all, I have changed the code to use DNS compression; this is done by having the answer be a compression pointer to the question, and doesn't require running the expensive DNS compression code.

Second of all, I have made my first pass at documenting this code. The writing needs to be proofread; I use "is" where I should have used "if" in one case, for example. That said, notthere_ip is now part of the mararc man page.

It can be downloaded at the usual place (that's a link to click on guys)

Sunday, February 1, 2009

MaraDNS snapshot update: SQA Test now exists

I have released a new snapshot of MaraDNS with a SQA test for notthere_ip that can be downloaded at this link.

XeroBank's representative asked me if it was possible to get a synthetic IP when a remote DNS server doesn't respond. Yes, it is.

MaraDNS can be configured to do one of four different things when all remote DNS servers don't respond:
  1. Have MaraDNS, in turn, not respond. This is done by putting handle_noreply=0 in MaraDNS' mararc file
  2. Send a SERVER FAIL message. This is done by putting handle_noreply=1 in MaraDNS' mararc file.
  3. Send a bogus "this host does not exist" message. This is done by putting handle_noreply=2 in MaraDNS' mararc file, and not setting notthere_ip
  4. Send a bogus IP. This is done by putting handle_noreply=2 in MaraDNS' mararc file, and also having something like notthere_ip="10.11.12.13" in the mararc file.