Thursday, May 24, 2007

Phosphor Green

My first computer was an Epson QX-10 (see it here too). I was 12 when I got it, back in 1995, and it was already ancient then. It wasn't a PC compatible, and did not even run DOS. Instead, it ran something that predated DOS, an older operating system called CP/M. With its simple CP/M software and elegantly straightforward 8 bit Z-80 hardware, in a cute chassis, it meant to me what old Apple computers must have meant to their owners. The QX-10 was the last, best 8-bit home computer.

I spent many months in the cool glow of its green monochrome screen, learning to program. Gosh I loved that computer. At first I used my electronics skills to keep it running, but when it finally deteriorated past the point of my ability to repair it, I am ashamed to say I cannibalized it for parts. Like Shel Silverstein's story of The Giving Tree, where a boy cuts from his favorite childhood tree until all that's left of it is a sad stump, I chopped pieces from the computer to build other projects, until there was nothing left. When I was 12 it seemed impossible that anyone could understand the entire workings of such a complicated device; now at 23, with much greater electronics experience, I look back and realize that I could keep such a simple computer in repair forever, if only I had left it intact. The only thing I still have from it is a 3 inch long piece of black plastic and silicon - the Z-80 CPU that was at the heart of the system.

Nostalgic Apple II owners and Commodore 64 enthusiasts can now download emulators of their old systems, but no one ever made an Epson QX-10 emulator. I suppose it just wasn't a common enough system.

However, while perusing a computer museum site, Dave's Old Computers, I found he has CP/M emulators (scroll to the very bottom of the page). I always thought that a CP/M program would be for CP/M on a QX-10, or CP/M on a Kaypro, etc. In other words, since CP/M runs on many different computers, I assumed that the programs would need to be both written for CP/M and be for that particular type of computer. But it seems that any CP/M computer can run a program for any other CP/M computer, at least as long as both computers use the Z-80 processor. So even though it might not be emulating the QX-10 per se, it seems to run the programs anyhow.

With emulators in hand, I went looking for CP/M software. I found the CP/M Commercial Software Archive, which even has a version of dBASE II, the environment I first learned to program on. I was disappointed that I couldn't find Valdocs in their downloads section. Although it was written years before Microsoft Office was ever thought of, I could do anything with Valdocs that you can do today with Word and Excel, and I often got compliments on how nice my homework assignments looked when I did them with Valdocs. I kept many of my old disks, but in agreement with Murphy's law, it happened that the disks I still have are mostly blank or worthless, while important ones, such as my own copies of the Valdocs disks, are all missing.

There's still a surprising amount of CP/M software around. The Unofficial CP/M Web Site even includes source code downloads. By far the most eyebrow-raising download of all is option to download the entire source code for the CP/M operating system itself! There is also a "mostly finished" version 3 of CP/M which was being written for the Motorola 68000 processor. The nice thing about this version is that the source code is in C, so it could be compiled for something other than the 68000 as well; one of these days I would like to try taking that C code and porting it to another computer. That would be fun.

Communications

I have a story that makes people's cell phones ring.

It isn't even a very important story. Just one of those stories that begins, "so, something interesting happened to me today on the way to your house..."

Except that I can't get any farther than that line without my listener's cell phone interrupting the conversation. I am in mid-sentence; her cell phone rings, and I wait patiently for her to finish talking to the random caller. "Sorry, what were you saying?" So I begin again; but I don't get any farther than I did the first time, when her phone rings again. It's the original caller, who thought of something she forgot to say before she hung up. I wait again, but it's no use. The second call does not even finish before a third call comes in.

This has become so commonplace that it wasn't until the second time I tried to tell the same short story, to a different friend, at another house, when I once again could not tell the story because of phone interruptions, that it even occurred to me to be upset over this treatment! If everyone does it, is it still rude?

My fiancee is infamous among our friends for never answering her cell phone. But I never get mad at her when I can't get through. "I'm not a slave to my phone," she says. Damn straight.

I'd still rather people tried to reach me by phone than email. Oh, how I hate email. I check my email twice a week; inevitably I find my inbox stuffed with frantic messages because one professor or another has some urgent business and has to reach me right away, and they've gotten themselves all in a tizzy because they can't understand why I haven't replied to their emails in two days. I want to say to them, "Hello? It's called the telephone? Ever heard of it?"

I met an old-timer at NASA who shares my astonishment that people put so much stock in email. He illustrates his point with a hypothetical question:

"Suppose I told you that you've won $10,000. All you have to do to claim your prize is get in touch with me by the end of the day. What would you do?"

"I'd call you."

"You wouldn't email me?"

"No."

He then poses the same scenario over again, but lowers the amount in question each time. Most people draw the line at $50. When $50 is at stake, an email will suffice. But for larger amounts, people want that assurance that they got through. The difference between a phone call and an email is that if you physically talk to someone on the phone, you know they got your message. "So why," he asks, "Do people conduct important business deals, over a medium they don't trust further than $50? It's insanity."

You expect this sort of thing from the older generation; but I am a young person, and I agree with him!

Monday, May 14, 2007

Programming Contest

I've had Mac-envy ever since I started my undergraduate research program last summer. That's where I learned that Macbooks are what the real computer geeks are all carrying now; all the cool kids have one.

They are, unfortunately, out of my meager price range; so when one of my favorite websites announced a programming contest, the offerred grand prize really made me take notice: A shiny new Mac Book Pro!

I looked at the contest rules and thought, "I can do that!" Given that the site is very popular, I'm sure that I'll be competing against a large number of other contestants. But the contest is in C++, and I'm at the top of my game right now, having just wrapped up a very challenging C++ program for NASA last month. My brain is still in "C++ mode," so I dived in with both feet (well, both hands really; it's hard to type with your feet). I've been coding like a madman all week, pulling out all the stops, exploiting every C++ trick I know up to the hilt. I finished the submission just a few minutes ago, and had to blow on my hands because my fingers were smoking. We're talking serious hacking here, three cups of espresso and a bottle of aspirin and go! go! go! Yeah baby.

So... I submitted it. All there is to do now is wait and see if they like it. I hope so; I don't need any validation as a programmer but I really, really want that MacBook. Wish me luck!

Saturday, May 12, 2007

How I Decide What Level to Write at

When writing about complicated subjects, it's difficult to maintain a balance between giving enough depth to make the topic interesting, and glossing over some details to make the article easy to read. Some advice on the subject boils down to targeting your writing to the lowest common denominator - dumbing it down, if you will, but in a good way. Yet I don't think this is the right approach for a blog with a technical focus. I'm not writing this blog for everyone; I'm writing it because I think reasonably intelligent people will enjoy reading it.

So what I actually do is that when I write a sentence or paragraph, I ask myself whether it would make sense to an overwise intelligent reader at 2:00 in the morning, who is tired and not thinking clearly, but who likes to stay up sometimes and read blogs. I figure if that person can at least make sense of it, then the cognitive effort required to read the words is low enough for anyone else to cruise smoothly over the page. It is not hard for me to put myself in that person's shoes, since I only write blog entries at 2:00 in the morning, when I am tired and not thinking clearly.

Tuesday, May 8, 2007

Offline Blogging

I'm writing this blog entry offline.

When I first moved in, my professor warned me that he didn't think the signal from his wireless router reached the far bedroom in which I'm staying. “That's ok,” I said, “I'm getting 2 bars; not great but it's a usable signal.”

After I'd been using the network for a few days, I happened to mention to him that I'm getting horribly slow speeds on his “linksys” wireless network. “I don't have a Linksys router,” he said. “What?” I asked. “I don't have a Linksys router. I have a D-Link router.” “But... then how... who...” “You must be getting a neighbor's signal.” “Ah. I see.”

Since my connection to a neighbor's internet was both unreliable and slow, I would much rather be on my professor's cable modem connection. I was pretty sure the lack of a signal from his router was a configuration issue rather than a signal limitation, so I went to go check the configuration. At this time it was well after midnight, and not wanting to disturb my professor's sleep, I resolved to hack into the router rather than wake him up and ask him for the password.

In the pitch-black living room, I used the light of my laptop screen to illuminate the mess of cables around his router and cable modem. I'd have to have a copper hard-link until I got the wireless working. I found a spare ethernet port on the router and plugged myself in. Turn on DHCP... then run ipconfig, good: it gave me an ip address. Now that I had a link, I needed to access the router's configuration page. Nine times out of ten, the ip address of a router is 192.168.1.1. I opened up my Firefox web browser and typed in that address. It popped up and asked me for a username and password. So far so good – I wasn't in yet, but at least I knew there is a router at that address.

I never get discouraged when I see a dialog for a password and I don't know it, because I've learned a few very simple facts: 1. most users never change the default passwords, 2. default passwords are remarkably easy to guess. Besides, I had a gut feeling the login would be “admin/admin.”

That brought up the router configuration page. Now, to check the “wireless” section. I clicked on it, but instead of any configuration options, I was treated to this helpful message: ~!@ #$%^ &*()_

The software that is loaded on home network appliances has never been particularly well-written, but lately it has been getting even worse. In this case, the router's configuration software is so badly broken, that it returns a page containing random binary garbage, instead of the wireless configuration page.

Upgrading the firmware on the router to fix this problem would be more work and more intrusive than my original intentions, so I prepared to give up for the night. Then I noticed that the color scheme of the configuration page was purple and grey, rather than the blue and grey D-Link would use. Guess which router company favors puple over blue? Yep, Linksys. I missed the Linksys logo when I first logged in because their broken software just loads an empty image box where their logo goes. But a quick check of the ip addresses on my interfaces showed my error: I should have been on 192.168.0.x if I wanted to connect over my copper ethernet. What I used, 192.168.1.x, was my wireless interface. Darn it, I broke into the wrong router. Sorry neighbor dude! How embarassing – like walking into the Women's bathroom by mistake.

With the correct IP address in my browser, I got to another login screen, this time for the D-Link router. “Admin/admin” didn't work here. Hmmm... maybe, “administrator/password”? Nope. I tried a few more obvious combinations and failed. Time to back up and think about this analytically. Now I know that most login systems don't allow blank passwords, but some do. So perhaps I had been overthinking it. Had I failed to guess the password simply because there wasn't any? Indeed. “Admin/[blank]” worked like a charm.

Once I got into the right router, the only thing I could see that might be wrong was that WEP encryption was enabled. Considering that the router login was admin with a blank password, I highly doubted my professor had been in these configuration pages at all, so I don't think he deliberately enabled WEP. While I would be taking off a layer of security by turning off WEP encryption, if neither he nor I could access his wireless network at all, than the WEP security was clearly not doing any good. As bad as it is to have your wireless network unsecured, WEP has caused me nothing but trouble. Every time I try to use it to secure a network, I've had to turn it back off again because half of the computers I want to connect, can't.

With WEP turned off, the wireless network began working again. Still no internet. Why not?

At this point it's best to approach the problem in stages. Can I ping my own address? Good. Can I ping the router? Good. Can I ping http://www.google.com/? No. What's between the router and google? Ah, yes, the cable modem. Cable modems are notorious for crashing and needing to be rebooted, so naturally they are designed without an accessible reset button and with no on/off switch to power cycle them. How hard would it have been to put a watch-dog timer in the hardware that reboots the modem if it can't ping out? These devices are designed with the assumption that nothing will go wrong. If these companies would admit to themselves that software is inherently unreliable, it would be the first step to making devices that are reliable.

I unplugged the router and waited five seconds before plugging it in. Instead of connecting me to the internet, the router flashed its power and link lights over and over. What the heck does that mean? Turning it off and on again did not stop the flashing. Hmm... If the router has a configuration page, surely the cable modem has one too. How to access it? In the router configuration page, the local network is 192.168.0.x; but the outside network is 192.168.100.x. If that is the network the router is using to talk to the cable modem, that would put the cable modem at 192.168.100.1.

The cable modem didn't require a password, because it doesn't have any user-changeable options. It does show status though. It said “LAN: Up” “USB: Down” (no USB is plugged in) and “CABLE: Down”. Bummer. The modem's event log page had more bad news: “DHCP failed” “Timing Sync Failure” “Failed to receive....” “Failed to receive...” (In other words, the cable modem's not getting any response from the cable company.)

Well, fiddlesticks. After all that, I still have no internet.

It turned out that the cable company was having technical problems; cable internet service was down in the entire area for nearly 24 hours.

Thursday, May 3, 2007

Giant Mackerel Gets Married

Lent is a time when Catholics try to identify something in their lives that is a bad habit, and sacrifice it for a month. I gave up Reddit.com for Lent. Actually, what I gave up was wasting time on the internet. I'm not sure there's a distinction.

It didn't go so well. I think I ended up reading Reddit more when I was trying not to, than I ever did before or since the Lenten period. At one point I reached Reddit link number #999. That's like sitting down to eat a few Cheetos, and ending up eating a whole bag instead of dinner.

It seems that all bad habits share a common feature - they involve consequences such that one might decide a priori that the activity is not worthwhile, but when broken down into pieces, each infinitesimal step does not entail enough harm to cause someone to stop. One more potato chip, one more cigarette (thank God I don't smoke), reading one more Reddit article - I used to think this kind of procrastination was my own peculiar personality flaw. I'm beginning to realize I'm not as alone in this as I thought.

In a remarkable expression of candid self-awareness, one of the founders of Reddit blogs about this very problem. In that well-written post, Aaron Swartz characterizes the basic problem: people might rather do things more substantial with their time, but "reading bite-sized blog posts is by far easier," and "looking at photos of sunsets or reading one-liners takes no cognitive effort."

I took a Bioinformatics class last year that was co-taught by professors from computer science and biology. The biology professor wanted to underscore the importance of the discovery of DNA, or perhaps just had a chip on his shoulder; he took pleasure in baiting the minority of computer science students in the class by telling us that the invention of the computer is nothing, completely irrelevant, compared to the enormity of the discovery of DNA and genetic engineering, and that we should all stop studying computers and study biology instead. Rather than let him irritate me, I only smiled - because it is laughable that he would say this, while not realizing his whole syllabus relies on a third technology which eclipses both in significance: the web.

So what do we do with the greatest invention of all time? What are we using the internet for? If you have Ruby (a computer language) installed on your computer, I can save you the trouble of reading 999 reddit links to find out. This Ruby program (from my Downloads page) rips every current reddit title and runs a modified Markov learning algorithm on the titles. Then it uses what it learned to generate sample titles in reddit "style". What results is a hilarious mis-mash. I'll leave you with a few of the most interesting tidbits it generated (these are machine-generated; I didn't make these up):

Giant Mackerel Gets Married
Giant Mackerel Gets Even Creepier
Baby Marmosets Are To Analyze Software Patents
Cockatoo Guarding Chocolate Good, Morbid Obesity Soaring
Even worse than one peep jousting: Two peeps
Anarchy On Sudafed Claims First Free Gps
Extreme D.I.Y. - Solitaire
Doomsday For How Blogging Can Die Of Education
Reddit Users To Prevent Manatee Deaths? Prevent Manatees!
Ask Reddit: what modern world?
I Read Reddit Users Are Small. [pic] This Pathetic Story
Anatomy Of Yoda [photo]
sex-mad? Mabye. Obsessed? With Chainsaw Could possibly be stopped
Grindhouse: Good movie or faked orgasm?