Fabulous Adventures In Coding
Eric Lippert is a principal developer on the C# compiler team. Learn more about Eric.
I'm back! My Mexican soon-to-be-in-laws are fabulous hosts; we had a great time while we were there. Unfortunately, today I feel like I've been eating burritos for the last ten days. Unsurprisingly, they eat a lot of Mexican food in Mexico! I'm going to stay home from work today and eat soup. Not how I wanted to celebrate my 100000th binary birthday, but I'll live...
Given that, today I'm going to talk a bit about the wedding, and then post an essay I wrote a while back about the binary nature of some biological control systems, just to inject a little technical matter. We'll get back into scripting soon, probably.
Getting from the hotel in Cuernavaca to the wedding itself was only slightly terrifying – the cab drivers there have what could best be described as only a casual relationship with some of the rules I’m familiar with, such as “no U-turns in the middle of busy streets” or “one-lane roads ought to have one lane of traffic”. These are apparently mere guidelines here. The day of the wedding was the anniversary of some famous battle; the marching bands for the parade marshaling directly outside the church did not improve the traffic situation! But at least I got to see some high school marching bands while we were waiting for the rest of the party to find their way through traffic.
The reception afterwards was absolutely fabulous. Outside, a beautiful garden with a water feature (with helpful signage that informed us that this artificial waterfall was in fact the fountain of eternal life, please do not bathe in it). Inside, a huge dance floor. Which was good, because we needed it. There were about 300 guests from all over the world, almost all were enthusiastic dancers. I saw people doing the cha-cha, the meringue, lots of salsa, the limbo, the can-can, conga lines, several traditional Greek wedding dances, east coast swing, lindy hop, Hollywood swing, the hustle, country line dancing, hip-hop, and a great many dances which I can only presume are pop hits in Mexico, because everyone but me seemed to know all the lyrics and associated hand gestures. My Spanish isn't very good, so I had to ask people if they were really singing "I won't be your cow, your cow, your cow!" -- yep, apparently "I won't be your cow" is a traditional Mexican wedding son.
Many of the dances required silly hats as well.
After five hours of dancing, I was tired out; we left while the party was still going strong. I’m sure they went into the small hours of the morning. It was quite the experience. Likely nowhere else will I get the opportunity to see elegant British matrons of a certain age line dancing with hyperactive ten-year olds to "Achy-Breaky Heart" sung in Spanish. My only regret is that I didn’t get to meet more of the groom’s side; I mean, how do you introduce yourself? I suppose “Hi, you don’t know me, but I’m your stepson’s new wife’s father’s sister’s daughter’s fiancé, so that means we’re family. Stop on by next time you’re in Seattle!” would have worked, but it’s a little wordy.
While we were in Mexico, we also visited my old friend Brian's latest project -- an 83 acre ranch overlooking Lake Patzcuaro which he is making habitable by humans instead of bats. We've learned that he has the ability to create puppies with the power of his mind! But that's another story.
[OK, enough fabulous adventures in Mexico for a while; let's get slightly more technical. This essay was written in response to a posting on a mailing list -- the question at hand was whether binary systems could implement what we think of as intelligent life. Specifically, the claim was made that surely some kind of analog feedback system was a necessary part of life.]
The human nervous system isn't an entirely analog system. It is a feedback-controlled system, lots of parts of the human homeostasis system are analog, but some of the most important and interesting parts are not analog.Consider pain, for example. Suppose there's a nerve that carries some kind of analog pain signal from your finger to your brain. Perhaps zero "current" on that nerve would represent "no pain", and then it would vary smoothly up to some maximum that represented "extreme pain".Or, here's another analog system. You could have a system where zero "current" meant "no pain", 100% current meant "pain", and the amount of pain was measured by the average current over a period of time, say, a second. If the nerve was on 100% for 250 ms, then off for 750 ms, then on for 220 ms, off for 780 ms, then on for 200 ms, off for 800 ms, that would indicate a decreasing level of pain. You'd probably want it to be more granular than updates once per second, of course, but in principle this would work.Both of those are analog systems -- the possible signals smoothly vary from 0% to 100%. Neither of them are how nervous systems actually work. If you measure the "signal strength" on pain nerves you see that they actually send groups of extremely short bursts, where the number of bursts per unit time indicates the level of pain. That is, the nervous system communicates pain by sending an integer from the source of the pain to the brain. It's discrete, not analog.
Why is that? You know what my favourite scene in the movie version of The Lord of the Rings: The Return of the King is? It's the one where Gandalf needs to send a message to Rohan in a hurry, so he has Pippin climb up the side of a mountain to light a signal beacon. We then see this great sequence as the beacon wardens set off the seven signal fires on Amon Din, Eilenach, Nardol, Erelas, Min-Rimmon, Calenhad and Halifirien, one after the other.
Listen carefully to the soundtrack at this point. It echoes Gandalf's "White Rider" theme, which was established earlier in a visually parallel set of shots, as Gandalf and Pippin ride up the seven levels of Minas Tirith. But to give it some additional fire, they add these kick-ass violin arpeggios on top of the basso continuo. The whole thing works perfectly; it's a triumph of cinematography!
But I digress. The Gondorian war beacon system sends a single binary bit at extremely high speed over the huge distance from the White Tower in Gondor to Meduseld in Rohan. Suppose the Gondorians wanted to send more information than just "we need help!" -- like, say, how big the opposing army was. They could come up with an analog convention. Perhaps a really big signal fire indicates a really big army, a small signal fire indicates a small army, a medium sized signal fire indicates a medium-sized army.Obviously that doesn't work. There are seven beacon fires. The beacon keepers would have to figure out how big the previous fire was and then set their fire accordingly. Error would accumulate along each part of the process, and the final result might bear little relation to the original input.To send information accurately over long distances without error you need some kind of discrete system. You need signals that are clearly either ON or OFF. Once you've got ON and OFF, you can use them to transmit integers, letters, morse code, whatever you want.That is why nerves are digital, not analog. Nerves need to transmit huge amounts of complex data over the vast distance from your toes to your brain without accruing any error along the way as the signal is picked up by new nerves and forwarded on. All the sensory nerves work this way -- smell, touch, taste, etc., are digital. We are digital machines, we're just digital machines made out of slimy meat instead of silicon.
Dear Eric Lippert
Is there really a Mexican traditional wedding song titled, "I won't be your cow"? What part of Mexico is it from and is there a way of confirming there is such a song? What are the lyrics? Thank you! My email addy is DPouesi@aol.com