Home » apache » Page 5


So you think Linux is unproven?

I’ve had arguments at work with one of the managers as to whether Linux is up to the task of running an enterprise-class Web server. When I mention my record with Linux running this site, the manager dismisses it, never mind that this site gets more traffic than a lot of the sites we run at work. So I went looking this afternoon for some sites that run on Linux, Apache, and PHP, like this one does.
I found a bunch of small-timers.Read More »So you think Linux is unproven?

An easy way to get Debian 3.0 before you can buy it

Debian 3.0 hasn’t officially been released yet, but that hasn’t stopped people from making unofficial installation floppies and CDs.
I just built a Debian 3.0 system that will be hosting this site and another (I’m not going to talk yet about the other site, but it won’t be hosted by R. Collins Farquhar IV–do I hear cheers?–and it won’t be fiction). I used this 185 MB CD image to do the install. The system used up a whopping 88 megs when I finished initial installation. After I installed Apache, MySQL and PHP4 to make a usable web server, disk usage rocketed to 118 megs. Not shabby at all in this era of multi-gigabyte installs.Read More »An easy way to get Debian 3.0 before you can buy it

Possibly the first Apache worm

I just found this article describing a worm that attempts to infect vulnerable Apache servers running on FreeBSD.
This doesn’t have much effect on Linux or other Unix variants (other than probably crashing lots of Apache sessions, which the machine may or may not recover gracefully from) but chances are this is just a harbinger of things to come.

You should upgrade to Apache 1.3.26 or Apache 2.0.39 immediately to avoid any problems, especially if you use FreeBSD. I’ve been running version 1.3.26 on Debian here for about a week without any issues, as I’ve come to expect from Apache.


Sorry about the downtime today. I upgraded to Apache 1.3.26 to close a denial of service hole (since I never, ever write anything the least bit controversial–ahem–except on days that end in -ay) and then I neglected to restart it.
Welcome back to your normal, everyday life, Dave.

Incidentally, last week’s outage appears to have been due to a power failure. Steve DeLassus recognized it and e-mailed me in vain, but seeing as I’d sworn off e-mail for the week it didn’t do much good. I’m not overly concerned about it; my Linux servers’ uptime is measured in years as long as Ameren keeps the current flowing.

CSS and XHTML and standards

Our Unix/VMS admin popped his head over his cube the other day and asked me if I’d tried a particular site on our corporate intranet under Galeon in Linux. I hadn’t; I’d never had occasion to use the site. I was booted into Wintendo at the time, which is normal, since I’m basically an NT administrator. Personal beliefs about Windows aside, administering NT pays the bills, and computers are tools, not a religion.
But my workaday browser is K-Meleon, a lightweight browser based on the Mozilla project’s Gecko engine. It’s small, it’s fast, it’s standards-compliant, and it’s easy to tell it to ignore the JavaScript code that creates popups and popunders. So I tried visiting the site in question with K-Meleon.


This made me mad. TCP/IP, HTTP, and HTML were all intended to be cross-platform. The first graphical Web browser was written on a NeXT, for crying out loud! NeXT! How many people today even know what NeXT was?

Of course, when you use Microsoft Web servers serving up pages using Microsoft tools, all the rules change. Microsoft doesn’t even care about previous versions of its own browser. Rule #1 of Web design, which most designers have sadly forgotten, is that you test your site with several different browsers, and preferably several versions of them. It’s easy to make multiple versions of Netscape happily coexist on a machine, but Microsoft has made it next to impossible for more than one version of IE to exist on a machine without resorting to multi-booting. With IE4, IE5, IE5.5, and IE6 all in widespread use and the wretched IE3 unfortunately not extinct, that’s a burden.

A couple of days later, the site’s administrator came back with a snippy response: Use the company standard Web browser.

This, to a Unix and VMS administrator. The only time he ever runs Windows is to fill out his timesheet, since we use a Windows-only app to do it. He’s got a beat-up Micron Pentium-166 in the back of his cube for that purpose. While he could do his job with a PC running Windows and a decent Telnet client, he’s much better off running Linux. He can develop shell scripts locally before sending them up to our big Digital Unix box. Running Linux makes him more productive.

But forget him being able to do his job. He needs to run Windows and Internet Exploiter so he can log into this Web site.

While we’re at it, forget that Internet Exploiter has security holes big enough to drive a truck through. Forget that keeping IIS patches up to date is a full-time job in and of itself. Let’s be Microsoft lackeys. All hail Gates and Ballmer.

I guess the few remaining Mac users at work are going to have to get PCs so they can use this intranet site as well. While I can think of reasons to replace Macs with something else, the inability to display a Web page isn’t among them.

Want to know why it’s a really bad idea to code for just one browser?

Internet Exploiter users can’t read this paragraph, so, those of you who, like me, use a real Web browser written by someone other than an imperialistic monopolist, can share in a dirty little secret. Want to know how to sabotage inept browsers and encourage the use of standards-compliant browsers like Opera and the Mozilla family? Use the tag. Simply nest something inside and , and those who have yet to be liberated from the Evil Empire won’t be able to read it. (Remove the leading and trailing spaces–I had to put those in because some browsers don’t interpret the less-than/greater-than sequences either. Hmm…)

If you want to really be nasty, code your pages so that the only thing visible outside of those tags are the words, “This site can only be viewed with something other than Internet Explorer.” You’ll hack a lot of people off, but you’ll make your point.

Quick question: What’s the first line of the paragraph immediately preceeding this one? If your answer is, “Want to know,” you’re running a Microsoft browser. If your answer is “Internet Exploiter users can’t read this paragraph,” you’re not. There are two paragraphs here nested in non-standard tags. Browsers not made in Redmond correctly ignore this tag and display the text.

There are plenty of sites on the Web that ignore non-IE browsers for no good reason, and who could easily support everything by just following industry standards.

So, for security, what’s wrong with .htaccess files? They work, they’re easy to use, and they don’t tie you to any particular OS or browser on the client side. Especially on a corporate intranet, they’re great.

For layout, what’s wrong with sticking with standard XHTML and CSS? It’s easy to create beautiful pages that look beautiful in any modern browser (not just the one you happen to have installed on your machine), and remain perfectly readable in text browsers and ancient versions of the old standbys. Here’s a great tutorial on basic text styling, a more complete tutorial, some tips on converting existing content, and a site with several elegant layouts you can steal and adapt.

You can even do a cool trick to give your users a choice between your design and the preferences they set in browser setup.

It’s not incredbily difficult to make a layout that looks extremely good and is easy to navigate, plus is readable on all browsers, plus allows the user to gracefully resize it. The end result is files that are smaller than old-school HTML, so the pages download and render faster.

XHTML and CSS are all the rage now, with tutorials in the popular press, and with bloggers flocking to it. It goes a long way towards solving the complaints I had about HTML when I was learning it (let’s face it, when you’re used to designing in QuarkXPress, HTML 3.0 is just plain clunky) so talented designers can do some really impressive things with it.

I’m going to start moving in that direction. It’s time we all did. It’s time to take back the Web. Install Netscape 6.2 and Netscape 4.79 on your machine so you can check your pages in them. At the very least, install OffByOne to ensure your pages are viewable in a third-generation browser (it’s just 1.2 megs in size, so it won’t kill you).

XHTML and CSS are cool if you’re the artsy type, but they’re more than just cool. They’re the right thing to do. I hope I can find the time…

As as for that Intranet site at work? If using it ever becomes part of my job, I’ll re-code it and store it on an Apache server, protected by an htaccess file to show how easy it is to develop cross-platform apps on the Web. After all, it’s what it was designed for.

Not that I expect anyone to listen. It’s distressingly hard to find people who think for themselves, rather than just repeating everything that Microsoft tells them.

More Linux tricks

OK, I gotta tell this joke.
Osama bin Laden gets taken out by a daisy cutter. He’s standing up there at the pearly gates, where he’s met by George Washington. “You tried to harm the country I birthed!” he said. And he sucker-punched him.

“You tried to take Americans’ liberty, so they gave you death!” screamed Patrick Henry, who popped out of nowhere. Then he threw an anvil at him.

Thomas Jefferson and James Madison came out and started tag-teaming him, followed by 68 more freedom-loving Americans wielding assorted large and heavy objects.

Finally, John Randolph decided he’d had enough, so he picked up this bloody pulp that used to be bin Laden, and threw him over to the gate for his fiery judgment.

Bin Laden looks up at an angel standing there. “This isn’t the least bit like what I was promised!” he cried.

“I told you there’d be 72 Virginians waiting for you when you got here!” the angel said. “What’d you think I said, genius?”

Let’s talk about some Unix/Linux tricks. Since yesterday’s mention of top drew some positive response, I might as well talk briefly about a few more tricks.

First, the shell itself. If you can’t remember a command, type the first letter or two and hit the tab key twice. You’ll see all the possible combinations. Tab completion also saves you keystrokes and works on filenames too. Let’s say I’m editing /etc/apache/httpd.conf, here’s the key sequence I’ll probably end up using:


It saves me more than half the keystrokes. It also lets me be lazy–as long as I remember roughly where the file is and what letter it starts with, I’ll find it quickly.

Steve DeLassus asked me once a couple of years ago why I didn’t use that trick. I said because I’d get addicted to it and hate not having it in Windows. Out of necessity I started using it. I hate Windows command prompts now.

If you want to see your disk usage, or how much space you have free, use the du and df commands. (I never have problems remembering that last one for some reason.)

If you need to see what’s inside your computer, remember the /proc subdirectory. This is Linux-specific, because each Unix variant has its own nuances about /proc. By viewing the file /proc/pci, you’ll get detailed information on the PCI devices in your computer. By viewing /proc/interrupts, you’ll find out what IRQs are in use and what’s sharing what. The /proc/scsi and /proc/ide trees will give you information on the disk subsystems. By poking around inside /proc, you can find out more about a PC than the old standby Norton Diagnostics for DOS used to tell you. Your Linux installation CD can be a valuable diagnostic tool–just boot a troublesome PC with it and hit ALT-F2 (or CTRL-ALT-F2 if it’s a distribution that uses a GUI-based installer) to switch to a console. Or use a single-floppy Linux distribution.

And as for learning this stuff, the only thing I can recommend is total immersion. I asked Charlie, our Unix sysadmin at work, how he learned Emacs. “I just set my edit variables to emacs and lived with it,” he said. “And after about a month I liked it.”

I think I’ll stick with nano or pico or joe or ee, personally. I know enough vi to be able to use it in an emergency. But his approach works for all things Unix. Either dual-boot the PC you have or pick up a cheap second PC. It’s not difficult to find an old Pentium, complete, for under $100 and a price pressure from cheap LCDs has had the nice side-effect of pushing the price of conventional CRT monitors way down. There’s enough good free Linux software out there now that you can live in Linux for long periods of time and still get the same things done in Linux that you would in Windows while you gain valuable and marketable skills.

While you’re at it, eat lots of salmon and blueberries (not necessarily together). They’re supposed to be good brain food, and that can’t hurt.

Once you’re starting to feel like you know something, pay IBM developerWorks a visit. They’ve got a certification prep series up there. You may not wish to spend the time and money to get certification, but by reading the series, you’ll get a good idea of what you know and don’t know, and you’ll learn some more good stuff in the process.

Linkfest Friday…

Let’s start things off with some links. Web development’s been on my mind the last few days. There’s a whole other world I’ve been wanting to explore for a couple of years, and I’ve finally collected the information that’ll let me do it.
Redirecting virus attacks — Your neighbor’s got Nimda? Here’s how to get his IIS server to quit harassing your Apache server. (Suggests redirecting to a bogus address; I’m inclined to redirect either to or www.microsoft.com, personally.)

DJG’s help setting up MySQL. Apache, MySQL and PHP are a fabulous combination, but bootstrapping it can be a painful process. People talk about writing a sendmail.cf file as their loss of innocence, but I’ve written one of those and I’ve tried to set up the LAMP quartet. The sendmail.cf file was easier because there’s a whole lot more written about it.

Short version: Use Debian. Forget all the other distributions, because they’ll install the pieces, but rarely do they put the conduits in place for the three pieces to talk. It’s much easier to just download and compile the source. If that doesn’t sound like fun to you, use Debian and save some heartache. If you’re stuck with the distro you have, download ApacheToolbox and use it. You’ll probably have to configure your C/C++ compiler and development libraries. That’s not as bad as it sounds, but I’m biased. I’ve compiled entire distributions by hand–to the point that I’ve taken Linux From Scratch, decided I didn’t like some of the components they used because they were too bloated for me, and replaced them with slimmer alternatives. (The result mostly worked. Mostly.) You’ve gotta be a bit of a gearhead to take that approach.

Debian’s easier. Let’s follow that. Use this command sequence:

apt-get install apache
apt-get install php4-mysql
apt-get install mysql-server

Next, edit /etc/apache/httpd.conf. There’s a commented-out line in there that loads the php4 module. Uncomment that. Just search for php. It’ll be the third or fourth instance. Also, search for index.html. To that line, add the argument index.php. If you make index.php the first argument, access to PHP pages will be slightly faster. Pull out any filetypes you’re not using–if you’ll never make an index page called anything but index.html or index.php, pull the others and Apache will perform better.

Got that? Apache’s configured. Yes, the php installation could make those changes for you. It doesn’t. I’m not sure why. But trust me, this is a whole lot less painful than it is under Red Hat.

But you’re not ready to go just yet. If you try to go now, MySQL will just deny everything. Read this to get you the rest of the way.

Once you’ve got that in place, there are literally thousands of PHP and PHP/MySQL apps and applets out there. If you can imagine it, you can build it. If HTML is a 2D world, PHP and MySQL are the third and fourth dimension.

Am I going to be playing in that world? You’d better believe it. How soon? It depends on how quickly I can get my content whipped into shape for importing.

This is the holy grail. My first editing job was doing markup for the Digital Missourian, which the faculty at the University of Missouri School of Journalism believe was the first electronic newspaper (it came into being in 1986 or so). By the time I was working there in the late summer of 1995, it had been on the ‘Net for several years. About eight of us sat in a room that was originally a big storage closet, hunched in front of 486s, pulling stories off the copydesk, adding HTML markup, and FTPing them to a big Unix cluster on the MU campus. We ran a programmable word processor called DeScribe, and we worked out some macros to help speed along the markup.

No big operation works that way anymore. There aren’t enough college students in the world. You feed your content to a database, be it Oracle or IBM DB2 or Microsoft SQL Server or MySQL or PostgresSQL. Rather than coding in straight HTML, you use a scripting language–be it PHP or ASP–that queries the database, pulls the content, applies a template, and generates the HTML on the fly. The story goes from the copy editor’s desk to the Web with no human intervention.

There are distinct advantages to this approach even for a small-time operation like me. Putting the content in a database gives you much more versatility. Some people want overdesigned Web sites. Some want something middle-ground, like this one. Others want black text on a gray background like we had in 1994. You can offer selectable formats to them. You can offer printer-friendly pages. You can even generate PDFs on the fly if you want–something some sites are doing now in an effort to gain revenue. If you have content from various sources, you can slice and dice and combine it in any imaginable way.

I can’t wait.

Optimizing a Linux box in-place

Here’s the Linux bit I promised yesterday. I wrote it much earlier, so I might as well throw it out there.
Our test firewall at work is an old Pentium-200 running Red Hat Linux and a commercial firewall app. (No, I won’t disclose which one. Security, you know.) It’s a bit slow. A P200 is severe overkill for the firewall built into the Linux kernel (Steve DeLassus and I made a firewall out of the first PC he ever bought, a 486SX/20 of 1992 vintage, which, save the loss of the original power supply in an electrical storm, has never required any service), but this commercial package does a lot more than the simple firewalls built into Unixish kernels do.

It had 72 megs of RAM in it and swapped mercilessly. Its speed seemed to be OK once it was booted, but seeing as this is a testbed, it tends to get rebooted an awful lot. I needed to do something for it.

So I trekked into the PC graveyard to see what I could dig up. I found a Compaq 386DX/20. I left that alone. That’ll be useful if I ever need to pillage a pair of Compaq drive rails, which has happened before. Unfortunately those rails are worth more than the rest of the computer. I also spotted a Mac SE. That’ll be handy if I ever need a doorstop. Then I found a Pentium-75 and another Pentium of unknown speed. I opened them up. The 75 had a pair of 16-meg sticks. I opened up the unknown Pentium and looked inside. Ugh. Socket 4. That meant it was a Pentium-60, or, at best, a Pentium-66. It had a pair of 8-meg sticks.

I pulled the memory sticks out of the 75. The 60 didn’t have anything usable in it, save a pair of hard drives, both 540 megs, one a Quantum and the other a Seagate. I took the Seagate because it was easier to unbolt. I don’t have any way of knowing at this late date which of those drives was the better performer, and it probably doesn’t make much difference anymore.

The idea was to add some memory, and put in a second hard drive dedicated to virtual memory. Since the likelihood of the machine needing to read data from a drive and simultaneously hit virtual memory was fairly high, I wanted the virtual memory on its own drive. Furthermore, Linux’s partition-read
mechanism isn’t terribly efficient. This doesn’t matter for SCSI drives, which re-order I/O events, but for IDE drives it matters a lot. So getting the swap partition onto a dedicated drive was likely to improve performance a fair bit. (If this were a production system, it would probably have a SCSI
drive in it.)

So I swapped in the 16s for the 4s and found an empty bay to hold the 540, which I put on the second IDE channel as master (another performance trick), and booted Linux. The next trick is to use your favorite disk partitioning tool (I like cfdisk, but I can navigate plain old fdisk) to blow away whatever partition is on the new drive (this one was /dev/hdc) and create a single partition. I just made it the size of the drive, since 2.4 can deal with large swap partitions and Linux is smart enough to use whatever virtual memory it needs, not just automatically use all it has available. Then I set
it to type 82. Linux can do swapfiles, but a filesystemless dedicated swap partition gives better performance.

Next, I edited /etc/fstab. I found an entry for the swap partition pointing at /dev/hda2. I changed that to /dev/hdc1. That means I now have a small swap partition just sitting on the first drive unused, but that’s not a big deal to me. The system’s not using the disk space it has. While I was there, I noticed the CD-ROM drive was pointing at /dev/cdrom. I asked Charlie, our Unix/Linux guru, if Red Hat had some intelligence I didn’t know about. He said /dev/cdrom was just a symlink. I changed the entry to read /dev/hdd, which is where the CD-ROM drive ended up after my shuffle. Better to just code things directly than try to track symlinks, in my estimation.

Next, I issued the command mkswap /dev/hdc1 to initialize the swap partition. Then I rebooted and listened.

Indeed, during boot, the second drive was getting activity. I logged in and ran top, then hit shift-M to have a look at memory usage. The firewalling software was eating up a lot. But swap usage was down.

I decided to try cutting memory usage down a little more. I loaded /etc/inittab into vi. Red Hat by default gives you six virtual consoles. This machine has little need for more than two. Pulling the extras saves you a couple of megs. Near the end of the file you’ll see several lines that look something like this:

1:2345:respawn:/sbin/mingetty 38400 tty1

I commented out the last four of those. Hit the i key to put vi in insert mode, scroll down to those lines, add a # to the beginning of them, then hit ESC, then hit ZZ (shift-Z twice) to rapidly save the file, no questions asked. (I know, vi ain’t friendly, but it’s there.)

Then I had a look at /etc/rc3.d to see what daemons were running. I found apmd, sendmail, and gpm running. That was a waste of a couple megs, not to mention a possible security risk. I vaguely remember all three of them having had security issues in the past, and sendmail is one of those programs that should never be running unless you need it. Yes, this machine’s just practice, but Hall of Fame catcher Johnny Bench found that if he got sloppy and just let wild pitches go while he was warming up pitchers, he wasn’t as sharp at blocking potential wild pitches during the game when
it counted. So he worked just as hard during practice as he did during the game. Now he’s considered the greatest catcher of all time.

So I applied the Johnny Bench principle and disabled them with the following command sequence:

mv /etc/rc3.d/S26apmd /etc/rc3.d/K26apmd
mv /etc/rc3.d/S80sendmail /etc/rc3.d/K80sendmail
mv /etc/rc3.d/S85gpm /etc/rc3.d/K85gpm

I rebooted to find memory usage down by about 4 megs and the system booted a little faster. It was also more secure.

Total downtime: About 45 minutes.

That was time well spent. I may end up having to just bite the bullet and get some memory, but the system will perform better with these changes no matter how much memory is in it. And, more importantly, performing this exercise made me notice something I hadn’t noticed before. It let me tighten up security.

Had I blindly just ordered some memory to put in the system, or a new PC, like some people unfortunately advocate, I wouldn’t have necessarily noticed that as quickly.

Speaking of Linux, I did finally get Apache, PHP, and MySQL all talking together on my church’s 486. I used phpWeblog, which is an awfully nice package. Pages load in an acceptable two seconds. I notice the machine is paging, so a little more memory will probably help that. It’s amazing that people are throwing away Pentium-class machines when even a 486 has enough power to be a decent intranet server.

Not everyone’s so fortunate as you and me. Give ’em to someone who can use them if you don’t want them.

PC slumming

Slumming. I spent a portion of the day Saturday messing around with an old 486-133. The DCE at church asked me what it would take to build an intranet. I said an old PC. So he handed me an old 486-133. I can’t shake this machine. I built this computer back in 1994 or so for a law firm. I performed several upgrades on it, including the 133 MHz upgrade (it started out as either a 33 or a 66, not sure which). Three years ago or so, when it was obsolete, the firm called me and asked me to haul it away. I asked my church if they wanted it. They did.
This 486-133 is available because it lost its old job to an old Pentium-200 I scrounged up and rebuilt. Trying to run anything more than a simple fileserver is pushing the limits of this machine. But I like pushing the limits. So I decided to see what I could do with it. I took it home and opened it up. Hmm, It had a 72-pin and 4 30-pin SIMM sockets free. I tried out an old 8-meg SIMM I had. It didn’t like it. I thought I remembered seeing some old 30-pin SIMMs laying around…. I found some. I put them in. It counted to 20. Nice.

I tried out a 420-meg HD I’d salvaged from somewhere or another. The system detected it as an 850. Curious. I disconnected the true-blue 850 in the box. It still detected the 420 as an 850. Mislabeled, perhaps? I’ve seen stranger things. So I started to install Linux. I was able to partition the drive, but then it emitted a click-o’-death when Debian tried to initialize the swap partition. So I did what I should have done in the first place. I took off the cover. Next time someone asks me how a hard drive works, I’ll be able to show them. So the 850 flew solo.

Then I added the last from a stash of old DEC Etherworks 3 NICs I had (one of my employer’s clients handed me a bag of them months ago and said, “Donate them to your cause.” I’ve been giving them away one by one ever since) and installed Debian 2.2. Debian installed a lot slower than it does on a Pentium.

I installed Squishdot. I found it could be tweaked to give a very professional look. I also found it horribly confusing because it’s so unlike any other content management tool I’ve used. I messed around with it for a long while, but it was slow. Really slow.

I tried some alternative kernels. No improvement to speak of. I added the noatime parameter to the root partition’s entry in /etc/fstab. That helped a little.

But still, it was swapping out and the CPU was topping out as well. The homepage was taking 18 seconds to load. That’s not good.

Apache serves up static Web pages just fine–no slower than any other computer. But this dynamic stuff might just be too much.

So as a last resort, I compiled a lo-fat kernel. I took 2.2.19 and basically answered no to all but the absolute essentials. Mouse? Forget it. I was half-tempted to leave out floppy support, but that would make maintenance a bit more difficult.

It’s unfortunate that I don’t have any matching pairs of SIMMs laying around. Otherwise I’d swap the board out for a Pentium-75. I’ve got a couple of ancient Socket 5 boards laying around, and at least one Pentium-75 CPU. I’ve got two mismatched 4s, but that’s asking for instability, and I’m not sure if a P75 with 8 megs is any improvement over a 486-133 with 20.

Compiles take a couple of hours. I really should have just compiled a .deb package on a faster machine and moved it over. It seems hard to believe that it wasn’t terribly long ago that a 486 was a perfectly workable computer, and now it feels like a PC/XT. But the 486’s heyday was 10 years ago now. And 20 years ago, the PC/XT wasn’t on the market yet, though its direct ancestor, the IBM PC, was. So I guess it’s not too unreasonable to regard this 486-133 as the Turbo XT of today.

It’s time.

I’m back. I needed some time to sort everything out, regroup, and, well, be something resembling a typical 27-year-old. And thanks to Dan Bowman for pointing out some of the facilities Greymatter has to take care of problems. I’d never felt the need to look for them. But now I know. And should those fail, Apache also has facilities as well. It’s good to be root.
As for Katelyn, I’ve learned to assume that no news is good news. Brad didn’t call me at all on Wednesday, and I saw him at a meeting Wednesday night and we talked, but he didn’t mention anything about her. That means no unexpected changes, which is never a bad thing.

A story. I think I’ll just wrap things up with a story. I went and saw Luke Tuesday night. Luke talked about how people sometimes treat him because of his MDA, which confines him to a wheelchair. It was so sad. Stupid. Pointless. It reminded me of something that happened a few years ago.

I was in college. I was in a fraternity. During my junior year, a young man visited us for dinner. This wasn’t uncommon; people who were interested in the house often visited for dinner. We’d show them around, answer their questions, and whatnot. What was unusual was that this young man had a condition–polio, if memory serves–that left his legs immobile, so he walked with crutches. He moved along just fine. As I recall, he even went upstairs to get the grand tour. There was some concern that if he did move in, he’d always have to live on the second floor, as opposed to the third, to minimize the amount of climbing he’d have to do. But that wasn’t a really big deal.

He left, and someone called a meeting. So there we were, the actives, sitting in the dining room. We talked about him a little, then one guy stood up and spoke.

“You do know that if he does move in here, one of you guys has to room with him.”

“What’s wrong with that, Frank?” I asked.

“Well, I’m not gonna room with him. There’s something wrong with him. Would you want to room with him?”

I pointed at one of the guys sitting at the table with Frank. “Look at Gotsch,” I said. “He’s handicapped in a way, right? His hand’s in a cast, and he can’t do everything you and I can do. And you know what? It’s his own fault his hand’s in a cast, due to his own stupidity punching a wall. Does anyone think any less of him? That guy–” and I motioned outside–“didn’t do anything to cause his handicap. I don’t think any less of him. He can room with me.”

I paused and looked at Frank.

“Assuming he’d be willing to live around someone like you.”

I guess he wasn’t willing, because he never came back. And a big part of me was glad. Not that I didn’t want a roommate–I didn’t want someone to have to go through that garbage.

A couple months later, I moved out too.