Sunday, December 30, 2007

Sucky Pro-Life Rhetoric

I just read the following exchange:


MR. RUSSERT: But you said you would ban all abortions.

GOV. HUCKABEE: Well, that's not just because I'm a Christian, that's because I'm an American. Our founding fathers said that we're all created equal. I think every person has intrinsic worth and value...


Now, I'm pleased that Mr. Huckabee is pro-life. And I'm not ragging on him, I'm ragging on every Republican politician within living memory.

Let's make one thing very clear: I am not pro-life because I am a Christian. Christianity is a religion that places ethical demands upon Christians. Pro-life politicians are NOT running for Preacher, Priest, or Pope. Politicians, particularly Republican presidential candidates are not and shall not be in a position to extend any ethical demands of Christianity to the general populace. CHRISTIANITY SHOULD NOT EVEN BE MENTIONED IN THIS CONTEXT.

Several Republican presidential candidates say that they are pro-life. Mr. Bush says he is pro-life. This is good. WHY are these people pro-life? Simply stated, abortion is a procedure for terminating a pregnancy without producing a live birth. This procedure is legal by judicial fiat. Pro-life politicians say they want to change this. Why? Tell us why you think so.

I am pro-life and I'm pro-life for reasons I'll not rehearse here. I'm sick of fellows like Mr. Bush talking about "the sanctity of life" which is code for something, but it isn't a straight reason.

The trouble with talking in code is that all the pro-lifers will recognize the code as will the pro-choicers. Great, we can choose up sides and throw rocks at each other. That's all. Nobody needs think at all, just just have to follow.

Let's suppose Mr. Huckabee has some absolutely killer reasons for being pro-life, trot them out, tell them to Mr. Russert. And let's suppose Mrs. Clinton trots out her reasons for being pro-choice. With the reasons available for everyone to examine, we'll know who's a "true" pro-lifer or pro-choicer and who's just mouthing codewords to get votes.

And if we have the arguments out there duking it out, people will be thinking about these things. I believe in this thing called Democracy and that demands an informed electorate. I believe in reason and the ability of people of good will to discuss disagreements and come to whatever compromises are possible. Generally, we think no compromise is possible in the pro-life vs pro-choice argument. Yes, abortion or not is either killing the unborn or not. But perhaps some accommodation can be made for the unwilling mother? Can nothing be done to avoid unwanted pregnancies altogether?

I don't think pro-life voters are idiots, and I wish Republican politicians would quit treating us like it.

Friday, December 28, 2007

Southern Baptists and Liberalism

I've said before that I'm a Fundamentalist. Sometimes I'll say I'm an Evangelical and blur that distinction that I want to draw into tight focus now. Fundamentalist, like Puritan is a demon-term that is applied to behaviors and attitudes no self-respecting Puritan or Fundamentalist would identify with. So, when I say Fundamentalist, I mean to say that there are certain key ideas that are "fundamental" to Christianity. Did Adam have a navel? I don't care. It's not a "fundamental" of the Christian faith. Did Christ rise from the dead? I do care. You have a right to deny this. But if your religion denies it, it isn't Christianity. If you agree that similar non-negotiables exist in the Christian faith, you are to that extent a Fundamentalist, too.

Over a century ago German rationalism re-examined Christian dogma and rejected certain supernatural elements of the religion, while retaining certain moralistic teachings and rites and forms of Christianity. This redefinition of Christianity is either a rearrangement of trivialities OR constitutes a heretical poseur that's no more Christianity than Islam or Judaism is. Fundamentalism claimed the latter and Theological Liberalism claimed the former. The institutional machinery of a number of Protestant denominations embraced Theological Liberalism and in response the Fundamentalists dropped out. I am a member of a Baptist association that dropped out of the Northern Baptist Convention very early and has historically been somewhat militant and defensive about its Fundamentalism.

The Southern Baptist Convention also saw inroads of Theological Liberalism and many Baptists dropped out, too. Jerry Falwell and the Bible Baptists of the south came out and were separate from a Southern Baptist Convention that was "going liberal." However, something significant happened in the 1970s: The Southern Baptist Convention reversed this trend. Theological Conservatives were able to wrest control of the Southern Baptist Convention from the Theological Liberals. This did not happen without a fight and many Southern Baptists lined up on opposite sides of this conflict. The educational institutions of the Southern Baptist Convention remained solidly within the Liberal camp so that my alma mater, Cedarville University, was asked by the Southern Baptist Convention to serve as a conservative alternative.

Southern Baptists have been active and prominent in Democrat politics for a long time. Mr. Jimmy Carter was a Southern Baptist Sunday School teacher. Mr. Bill Clinton sang in a Southern Baptist choir. Mr. Albert Gore attended a Southern Baptist seminary. Nevertheless, these men have not participated in the resurgence of orthodoxy within the Southern Baptist convention.

So then, it was with interest that I learned that Mr. Paul Pressler claimed that Mr. Huckabee had been a slacker in the war against secularists within the Baptist church. Very interesting. Is Mr. Huckabee one of those Southern Baptists?

Mr. Huckabee has been playing a game of "identity politics" that I strongly dislike. I'd prefer a politician who articulates political positions congruent with my own to a politician who goes to my church. However, if Mr. Huckabee is going to play the game of identity politics, he'd better be the RIGHT KIND OF BAPTIST. Because if he isn't, Republican Primary voters may say "Die Heretic!" and push him off the bridge.

Friday, December 21, 2007

McCain’s starting to look better to than this guy

I am an Evangelical Christian. I have identified with the Religious Right from the late 1970s. I have consistently voted and supported candidates congruent with the aims of the Religious Right AND the Religious Right has heretofore been identified as Conservative in its orientation. I am a Fundamentalist Baptist.

Last year I declared that John McCain is a media hoax and I've thought Mr. McCain's only strength in Republican primary elections came from Democrat crossovers. We saw that in 2000 and we're going to see that again next month, bringing us to Mike Huckabee. I predict Mr. Huckabee will draw a lot of CROSSOVER Democrat votes in the Michigan primary election to throw sand in the works of the Republican presidential selection machinery.

I don't like the Arkansas school of Politics. Today my wife got a push-poll robocall from what seems to be the Huckabee campaign misrepresenting Mr. Thompson's position on abortion. (My phone number is well known to Conservative/Republican databases, and I wasn't surprised by such.) I think it is OK for a politician to truthfully say, "I'm against X and my opponent is for X." This is just truth in advertising, not negative campaigning. You might like X and this information will help you vote for the other guy. It's a completely different thing to apply Arkansas spin: "I'm against abortion and my opponent once helped abortionists!" It's sleazy politics to distort an opponent's record in this fashion. If Mr. Thompson is for abortion, show me his votes, quote his words endorsing the practice. Don't repeat agitprop of the pro-abortion activists who dug this up during opposition research. For heaven's sake, don't lie (or say Clintonian half-truths) about the other guy.

Update: I am told that an independent group supporting Mr. Huckabee is responsible for similar calls in other states (NH, SC) and that Mr. Huckabee's campaign has asked them to stop. I am unaware of Mr. Huckabee doing anything to repair this group's damage to the body politic. Political lies damage more than any one candidate, they sew cynicism through the entire electorate. Mr. Huckabee owes it to the Republican party to denounce Common Sense Issues of Colorado, aka Trust Huckabee.

(All candidates who are pro-life should demonstrate how strongly they support this position by stating their reasons for it. Saying, "I was pro-life before he was," is useless.)

Mr. Huckabee has a record as governor that, though pro-life, does not demonstrate much adherence to Conservative principles. It is good to be pro-life, but pro-life politics is painless when you can say Washington won't let you DO ANYTHING ABOUT IT. The politician can mouth pro-life platitudes to keep the Republican base on board while ruling like a Liberal. If I'm tired of Arkansas politics, I'm dead-tired of the Bush school of politics. Mr. Huckabee seems to capture that infuriate-the-Left plus dishearten-the-Right combination of religious platitudes plus free spending that made me hate Mr. Bush.

The Archbishop of Canterbury, Rowan Williams, has expressed his disbelief in the Virgin Birth of Christ and other miraculous claims of Christianity. He has every right to to hold and express this opinion. But he has no right to call it Christianity. Similarly, no Republican candidate has any right to redefine Conservatism in his own image. Mr. Huckabee has every right to be a pro-life liberal. If that is who he is, he should embrace that identification.

Several prominent Conservative voices have pointed out that Mr. Huckabee is no Conservative and has less than impressive foreign policy positions. Mr. Huckabee's campaign has interpreted this as a personal attack. Then his campaign gone on to counter-attack with falsehoods. (Did he learn this tactic in the from another Arkansas governor?) When Mr. Huckabee's operatives say that Mr. Rush Limbaugh just repeats the New York-Washington elite's talking-points, they misrepresent Mr. Limbaugh's record in a fashion that no one who listens to Mr. Limbaugh can believe. Did he learn this tactic from Nevada Senator, Harry Reid? Even if you think Mr. Limbaugh is the anti-christ (he's not) this is stupid politics.

Mike Huckabee is to Evangelical Republicans as Jesse Jackson is to Black Democrats. He has played a divisive game of identify politics. Vote for me because you share the color of my skin or my religion is sucky politics. When Mr. Bush nominated Ms. Harriet Miers for the Supreme Court, the White House used identity politics to hide her lack of judicial gravitas and liberal background. Written large between the lines was the message, "You Evangelical rubes should get on board because she's an Evangelical, too." I didn't buy it and the Republican base didn't buy it, either.

I will not get behind the Mike Huckabee campaign for these reasons.

Update: I have recently learned some more things that I don't like about Mr. Huckabee.

Friday, December 14, 2007

A Modest Proposal

This week at a time when nobody was watching, the Republican Presidential candidates had a debate. I did not see this debate. I've been following this debate season second-hand. We've had talking snowmen and sappy crooning posing questions that Democrats might like to hear of the Republicans, and that the newsies running the debates find interesting. Indeed, in the debate prior to that, questions of no interest to the Republican primary voter, were posed by operatives of the Clinton campaign.

The problem is that the news media does not share the interests of the Republican primary voter. It's my opinion that the Republican primary candidates should route around damage. There's no reason why the respective state Republican Parties should conduct the debates themselves. The video can be distributed via YouTube or some other internet mechanism. If the candidates want to make snarky comments dissing their competitors, they can post them to Scrappleface.

If the drive-by media wants to attend , let them sit in the back and after everyone's discussed the substance of interest to Republican voters, they can ask the respective candidates to repeat their Scrappleface snarks.

Sunday, December 02, 2007

Christmas Music

I like to listen to Jazz Brunch on the local radio station. It's a Sunday morning thing to return from church and listen to tunes that I don't generally hear. Sadly, this ritual works only 11 months of the year. After Thanksgiving, the DJ picks non-stop Christmas Jazz tunes. And it's a lot better to hear Larry Carlton do "God Rest Ye Merry, Gentlemen" than someone else.

My problem is that today's date is December 2nd. Christmas is 23 days from now. Even if I love a genre of music, being force-fed it for three weeks suffices to turn me into a Grinch or a Scrooge or whatever term signifies "zeitgeist non-participant." I remarked to my beloved wife moments ago that I appreciate Christmas songs on the weekend-of Christmas. Then they make sense and I rather enjoy them. But by that time, all the radio stations are utterly burned out on the subject and can only play zombie-like the most shopworn of the standards.

My thought, unspoken, was "Why can't they wait until the weekend of?" And the answer came to mind with the wings of Mercury, shocking in its immediacy. All the Christmas shopping has been completed by that point. There's the rub.

Consider the Peanuts TV special with its "Christmas ought not be commercial" message, but it mere presence reminds us to go shopping. Anti-commercial "meaning of Christmas" message is all good and fine, but that should not get in the way of our shopping. If radio stations were serious about the "meaning of Christmas" message, they wouldn't run Christmas carols non-stop until everyone's sick of them and, coincidentally, all opportunities for shopping are exhausted.

Tuesday, November 27, 2007

End The War

Driving to XP West Michigan tonight I passed through the trendy parts of East Grand Rapids, where I saw these yard signs that say, "End The War." When I see the words, "End The War" I have often thought that that means "Give up and cut our losses."

Here's another way of looking at it. We ended World War II in 1945 and I have every confidence that Mr. Churchill and Mr. Stalin and Mr. Roosevelt each did their level best to end that war as quickly as possible.

From now on when someone says to me, "End The War," I intend to reply, "Yes, we should win it as quickly as possible."

Tuesday, November 13, 2007

The Hollywood Stupid Tax

I've said elsewhere that I believe the death of the Star Trek franchise was due to the Hollywood Stupid Tax, a fact I realized when I saw the Enterprise from the evil-parallel Spock-with-a-goatee universe and noted that those were the only episodes that didn't suck of the entire Enterprise series.

The Hollywood Stupid Tax came to mind again yesterday when I turned on the old-movie-channel and saw the last 5 minutes of "The Dirty Dozen." That movie rocks in a way that only someone who thinks "300" was homoerotic cannot understand. There's a writers' strike on in Hollywood. So, there's an EXCUSE for the plots of all the stories being tired, derivative and repetitive. And what could the American viewing public go to see over Veterans day weekend? Anti-war sermons consisting of 87 minutes of famous-name actors giving speeches to one another. How's the box-office on your latest flick, Mr. Redford?

There's more to it than just further alienating people who already think Hollywood types suck. There's "opportunity cost." Opportunity stands rapping on the door with huge boat-loads of cash in a valise saying, "open up and this money is yours."

Just imagine what a remake of "The Dirty Dozen" would bring in in terms of box-office. Set the thing in Afghanistan and select a dozen guys in federal prison for a suicide mission to someplace in the Afghan mountains. Make them heterosexual, white, male Christians who don't sort their recyclables. Use lots of CGI and roll out an accompanying videogame that plays a lot like Halo. It's a license to make tons of money.

Now, i don't own any stock in any of the big movie companies. But if I did, I'd seriously question the financial stewardship of current management.

Saturday, November 10, 2007

Solving Problems With Unsent Email Messages

I've found that an effective problem-solving strategy is to write an email message describing the problem. This happened in the last 48 hours to me.

First, I have a legacy program that does not have any formal unit tests. It was my first OO project and my inexperience really shows. Happily, I drank the Test-Driven Development (TDD) kool-aid a couple years back so my current code doesn't suck so bad. But living in a TDD mode makes maintenance of legacy code devilish. You get used to "TDD has your back" and when you approach your legacy code with that same fearlessness about refactoring its a high-wire act without a net. Ergo, I resolved to write unit tests for the new work that's required of it and also for any refactoring I choose to do.

More easily said than done. I have some experience with CPPUNIT and have applied it on some of my C++ work with some success. However, everything I have using CPPUNIT works in 32-bit Windows on the Microsoft C++ compiler. And this legacy system is a BORLAND 16-bit Windows application with a 3rd-party GUI library nobody uses anymore called zApp that I don't want to port to 32-bit Windows and the Microsoft compiler. How to add a unit testing framework to that? Pondering this question has kept me up some evenings. But the GLSEC conference this week thrust upon me the urgency to add unit tests and the guys at Atomic who use mock objects to abstract HARDWARE got me thinking.

I saw a way to start, but there were a lot of details that I didn't understand and I wanted some help. So, I started work on an email to a colleague describing what I was trying to do and what I had a hard time understanding.

The mere act of articulating a problem is a magical thing.

I jotted down the first steps I'd taken and where, exactly I was having difficulty. And then an idea occurred. I followed up on that idea to clarify my question and in so doing I found that the idea had solved that difficulty but had raised a couple others a little further along the path to solution. So, I edited my email restating the question as a backgrounder for the current difficulty nettling me. As you can probably guess, I was mid-description when another solution came to mind. And follow-up proved itself, and I edited the email to summarize the current state of my ignorance and so on iteratively until done.

I had a working program, but an email that was a mess of half-finished edits reflecting how much I didn't know at various points in the last few hours. I deleted the unfinished message, declared victory, and went to bed.

This pattern works with more than just emails. If you have a supportive wife, or cubicle-mate, or if you're pair-programming, just describing what you don't know suffices to organize your thinking enough to suggest a solution.

Wednesday, November 07, 2007

How to Break Borland C/C++ 4.52

Now, you're probably wondering why I'm posting about a C++ compiler that was pretty cool 12 years ago, but is now painfully obsolete. Well, believe it or not, some companies make money on software that depends upon this compiler.

Here's the deal. Normal, sane people don't rename their printers to something incredibly verbose. But if you were normal and sane you wouldn't be using Borland C/C++ v4.52. Under Windows XP, click Start | Printers and Faxes and you'll see a list of the printers installed on your machine. Pick one you like, click on its properties, and rename the printer to something like this: "HP LaserJet 4 (but I've added a very verbose description of many long and boring details to blow out memory in a zApp buffer)" Now you're all set.

Suppose you make this oddly-named printer your default printer. Then launch the Borland 4.52 IDE. You should see the Borland copyright splash screen overshadowed by a dialog box that says this:

Fatal error in IDECRTL at 0001:4758 (addr = 0x143f4758)
Borland C++ will terminate
Save editors before exit?

It doesn't matter what you do, Borland will immediately exit. And all you'll have is the unenlightening error message above to guide you. That and a bunch of 8-year-old Usenet posts that will misdirect you to version mismatched DLLs, to reinstall. Reinstalling won't help. Rebooting won't help. You'll have to change the printer name and/or the default printer to something less verbose.

Hopefully, if you see the error message above, the Google godz will wisely steer you to this note. Good luck my friend.

Saturday, October 06, 2007

OK, Maybe I Will Question Your Patriotism

I believe that once you say, "the world would be better off if the US lost a war" you can't call yourself a patriot and your statement to that effect is a valid and reasonable basis to question someone's patriotism.

There's a subtle point here. Consider the following conversation:
A says, "The US would be better off if we lost this war."
B replies, "Yeah, the world would be better off if the US lost this war."

A's statement provides no basis to question his patriotism. However, B's statement expresses no concern for the interests of the US, but of "the world." His silence about what would be good for the US provides the basis to question his patriotism.

We must be clear that though the US is a part of "the world" the interests of "the world" and the interests of the US do not necessarily coincide. If you put the interests of "the world" ahead of the interests of the US, you are no patriot. If you act accordingly, those actions are treasonous.

Friday, October 05, 2007

That's How S/he Expresses Patriotism

I would like to apologize to those whose patriotism I've questioned. I merely failed to properly define patriotism. I had thought that patriotism consisted of things like support for our troops during time of war, saluting the flag, and supporting the democratic process and the foreign policies of duly elected legislators and executives.

However, the semantic scales have fallen from my eyes and I now understand patriotism much better. Henceforth, every time I note the treasonous words and actions of people, I'll say:

"Spitting on our troops is just how Code Pink expresses their patriotism."

"Taking up arms against the US military is just how John Lynd expresses his patriotism."

"Working to secure the defeat the US on the battlefield is just how Harry Reid expresses his patriotism."

"Dishonoring the memory of her son is just how Cindy Sheehan expresses her patriotism."

"Slandering his brothers in arms in fraudulent testimony before Congress is just how John Kerry expressed his patriotism."

"Lying about his military record and atrocities of our troops overseas is just how Jesse MacBeth expresses his patriotism."

"Defrauding the New Republic with admitted lies is just how Scott Thomas Beauchamp expresses his patriotism."

Here's a corollary: "The New Republic, by publishing the lies and saying nothing when they're proven false is just how they support our troops."

Yup, from now on, I shall no longer question anyone's patriotism.

Saturday, September 29, 2007

Truth and Certainty

Last night we had dinner with some college friends. He teaches at the local Christian college and his son and mine are roommates at our alma mater, Cedarville University, also a Christian college. Turns out that when I wasn't paying attention there was a bit of a flap at Cedarville and some profs were dismissed. These sorts of disputes are amusing only if you are far enough removed to see the irony.

I guess the dispute had something to do with "truth" and the university's position on truth. Truth is of particular interest to the Christian educator, since Christian Theistic interpretive frames are so radically different from secular interpretive frameworks. Adding to the irony, pursuant to a search through my class notes to review Advanced Calculus (in case my son asks me a poser I can't answer), I happened upon a blue book from the final exam in a course I took at Cedarville, "Man & Reliable Knowledge." Hmmm, I got an A on that exam, let's reread that essay, I thought. I hope Cedarville University hasn't forgotten what it taught me about truth in 1978.

If you are to dispute something, you must define your terms. I've used a two-fold definition of truth for several years: Ultimately, truth is what God knows. Proximately, truth is what corresponds to the state of the world. Simplistic I suppose, but it works for me.

Since I'm a Christian Theist, I tend to start with the ultimate: God. Truth is what God knows is a neat answer, but it is not immediately useful to someone who isn't God. Chirstian Theology teaches that God is transcendent and ineffable. No man will reach up into heaven and draw God down. Thus, if I am to have any idea what God knows, he'll have to reveal it to me. I believe there is a God and that this God has spoken. If you have a problem with that, OK, just don't call yourself a Christian. (You can't do Christianity without Christ.)

Not only do I believe God has spoken, but I agree with the consensus of Christian theology that teaches God has disclosed himself in General Revelation to all humanity, and Special Revelation to his people. More particularly, God reveals himself in Nature, Christ and the Bible. Again, if you have a problem with that, OK, just don't call yourself a Bible-believing Christian. Truth is transmitted from its ultimate source in God's mind to humanity through these three channels. If you aren't a Christian, you still have access to Truth (in spite of yourself) through Nature. And if you're not a Christian, you'll probably interpret Truth seen in Nature in a fashion consistent with your non-Christianity.

But if you are a Christian, and a Bible-believing Christian, you have two more channels through which you can tune into Truth: the Bible and Christ. Christians often engage in Bible-thumping, and Christians often claim to have a personal relationship with Christ. (And Christians often exhort non-Christians to establish a personal relationship with Christ, too.)

Now, IF, and I say IF, you buy into the paragraphs above, we can say some things about Truth through the contrapositive. Let's suppose you can't attain certainty. Narrowly speaking, that means you are uncertain of your relationship with Christ, or your understanding of the Bible, or your perception of Nature.

None of those things are bad in and of themselves. We should not take them for granted, and we should diligently question and distrust ourselves. We are fallen, finite beings and redemption is an incremental business.

(Healthy self-doubt is one thing, but denial is another thing. When the skeptic says, "there is no truth" or "noone can know anything for certain" there is little doubt in such a denial.)

There is another dimension of this matter: Exhaustive truth versus effective truth. God, being infinite understands exhaustively. I am not God and I am finite. In the last century Modernism suffered mortal wounds as it was proved that axiomatic systems (math) could not be consistent and complete (Goedel) and philosophy delved into various post-rational expressions. Modernism was naive in its expansive claims of truth and certainty. Post-modernism has rightly debunked this naivety.

However, many Post-moderns conflate debunking exhaustive knowledge with debunking ALL knowledge. A Post-modernist may be fully on board with his debunking of axiomatic systems, but he still uses arithmetic to balance his checkbook.

I like to say that Christian Theism is A-Modernist, neither Modernist nor Post-Modernist. We have to agree with the Post-modernist that we can't know everything, but disagree with him that we CAN KNOW SOMETHING. The Christian knows that the finite cannot encompass the infinite. If God reveals himself to mankind, he does so partially. The Bible says it "makes men wise unto salvation." Thus we should expect it to give us EFFECTIVE knowledge of God, but not EXHAUSTIVE knowledge.

Knowing that we won't have EXHAUSTIVE knowledge of God should motivate humility within us and an openness to those parts we don't yet know. But we can also rest in confident certainty of the bits of himself that God has EFFECTIVELY given us.

Sunday, September 23, 2007

It is human nature to choose

Nihilism is a philosophy about nothing. Every philosophy has things to say about God, universals, truth, mankind and the purpose of life. For instance, a philosophy of Atheism has a definite opinion about the non-existence of God. But Nihilism neither affirms nor denies any deity.

When a nihilist contemplates life, the universe, and everything he can deny in turn every unifying principle. After a few hours of doing this, a nihilist will likely grow hungry.

"Everybody's got to believe something. I believe I'll have a cookie."

You thought that was just a humorous slogan on a tee-shirt. But it is more than that: a philosophical manifesto flying under the radar. One thesis that Evangelical Christian scholars advance is that everyone has a world-view and often a world-view is adopted unconsciously. I saw the tee-shirt in the Wireless catalog with that quote, but didn't think it anything deeper than the joke. Indeed, treating everything like a joke is a nihilistic reflex.

A second unexpected, nihilistic reflex is consumerism. If nothing is true or meaningful, except for one's appetites which cannot be denied, then satisfying those appetites becomes much more significant. There are different sorts of appetites that a person encounters: sex, power, and fame come to mind.

The existence of appetites says something to the Christian Theist about the nature of creaturely existence: creatures are not self-existent: we lack something and for that we hunger.

Appetites may be cultivated. Many enjoyable foodstuffs require a cultivated palate. Children are generally revolved by the bitterness of coffee, or the painfulness of peppers. But many of them grow into adults who pay top dollar for Starbucks® coffee and splash Tabasco® hot sauce on their meals. Rail-thin fashion super-models who haunt American culture may be far less appealing in cultures who favor a more Rubenesque form.

Appetites also serve to define someone's identity. A person whose sexual appetites are restricted to members of the same sex declares a "sexual identity" of homosexual. And the same goes for whose who identify themselves as heterosexual or bisexual.

The nihilist believes in nothing but himself and his appetites. And when he feels pangs of hunger for human companionship, community is just another consumer good. It objectifies the "other" in a relationship when he or she is a mere consumer good. Making another person an object is a form of murder.

Since appetites may be cultivated, everyone is vulnerable to advertising. Advertising stirs up appetites in us that we don't know we have. Advertising creates the impression that particular goods are more desirable than others. By linking one good to another in the mind, advertising can lead to perverse appetites. "Winston tastes good like a cigarette should." How exactly should a cigarette taste? Sweet and sort of like vanilla after the fashion of the candy cigarettes they sold when I was a child? They don't sell such candy any more.

When the ancient Greeks spoke of virtue, they recognized something and hoped to instill virtue in their children. Christian parents perceive the character of God in the Ten Commandments and hope to do the same. After-school specials depict disadvantaged kids overcoming adversity, conforming to teacher/coach expectations, then going from zeros to heroes, getting the girl and humiliating powerful antagonists.

But this doesn't change human nature. Instead, appetites are cultivated in the child for the desired behaviors and attitudes. And these appetites war with other appetites within the individual. It is human nature to choose between conflicting appetites. Those choices define whether we regard the resulting individual to be virtuous or not.

This demands of us a bit of consciousness and intentionality. We will be exposed to advertising in all its forms. That advertising may be overt in terms of pictures of fashion models with ad copy overlaid. Or less so in the rants on talk-radio. Or in a preacher's exhortations. We have to pick between them and ask whether the goods represented by each are consistent with what we think best and what we want to become.

So, that's why I really don't need to see your new big-screen plasma HDTV.

Saturday, July 28, 2007

On A Snowman...

There's a minor flap about Republican participation in "the YouTube debate." And at least one Republican candidate has stated that he won't answer questions from a talking snowman. This is rather cute, but it reflects something I detest about American Politics of the last couple decades. You see, I felt George Bush Sr's pain during the 1992 presidential debate: the one where he looked at his watch and some pony-tail guy was asking the US Government to be his parents. That was a complete waste of time to WATCH, much less participate in. And it handed an advantage to the more touchy-feely Slick One.

Message to politicians: you don't win playing the game the other guys try to foist upon you.

Now it's wrong to just sulk and say, "I'm not going to play." Or "This is beneath MY dignity." (particularly when true.) But think back to earlier in the political season. Of how Fred Thompson became the "mirror of desire" to every Conservative. He did two things that are Right Moves:

1) Michael Moore challenged Fred Thompson to a debate. What did Mr. Thompson do? He produced a video and posted it on YouTube wherein he responded to the "humorist," asserting that Mr. Castro is a dictator wont to put people into insane asylums and that Mr. Moore should think about insane asylums.

2) Periodically during this campaign season, Mr. Thompson has written short essays describing the way things ought to be. They sound thoughtful and they clearly define the sorts of general-principles-of-conservatism that have gotten lost. While everyone is trying to claim the mantle of Reaganism, Mr. Thompson has used the non-sound-bite medium of the short essay (delivered on radio, or in blogs) to articulate what exactly he has in mind.

I have a friend who recently confessed to me that he doesn't think he's a conservative any more. I asked if he was wavering in his Conservatism or in his Bushism? Look at what Washington Republicans and even Lansing Republicans have been doing for the last few years. They've failed to express any principles that define why they're Republicans, and in the case of Washington, they've proven just as profligate at growing government and spending money as the Democrats ever were. Mr. DeVos lost the governor's race to a fairly inept Democrat because he uh ...why was he running? If the only difference between a Republican and a Democrat is that they'll cut the same pie differently and hand out goodies to different people, it makes little difference to me.

Republicans hereabouts did some finger-pointing about failing to "go negative" in local races after the Democrats handed us our butts in the last election. Yes, the other guy WAS a convicted criminal, but dammit boys, what were you FOR?

Mr. Reagan won elections by "going positive" on what SPECIFICALLY he believed government should do (or better, NOT DO). Where are the principles of Conservatism articulated by Republican politicians? Don't say that you can't get into the nettles of political philosophy in a "sound bite age." Mr. Thompson demonstrated the power of the short essay in drawing support to himself.

We need something better than the politicians we've been getting. Leadership is about ideas as much as it is about political fundraising. I think Republicans have done well when they've articulated Conservative ideas. And we have the means in hand to articulate our ideas on the Internet.

You can talk to your base in codewords like "preserve the sanctity of life" which denote nothing meaningful. (Doesn't sanctity have something to do with church?) Such talk does nothing to move the uncommitted middle and provides nada in terms of post-election mandate.

Incidentally, Mr. Thompson's recent trouble with pro-abortion agitprop stems from the fact that although he has a good voting record on abortion, his essay response was about the attorney-client relationship and not the state's obligation to secure the rights of the unborn.

Politicians have learned to be vague about the specifics of what they think. When the TV coverage allows only 30 second spots, it's impossible to delve into details or be nuanced. But now a lot of people read the Internet and get their news therefrom. The next generation of politicians will be able to communicate with the electorate in a much more detailed and nuanced way.

Last night I was sitting at my dinner table and I heard a knock on the door. Thinking a friend was visiting I waved for him to come in. He didn't. He was a politician going door-to-door seeking votes. I had his opponent's sign in my yard, but I asked him to make his case for my vote and he did a good job. I asked him some "why" questions and he did a better job of selling himself than his opponent had a few weeks ago.

You can't personally go door to door when you're running for a bigger office. BUT NOW, Fred Thompson has repeatedly come into my family room and given me (and everyone else who's read his essays) a thoughtful exposition of how he thinks. Since I've heard him on Law & Order, I can fill in the accent and tone of voice. That's powerful. If you are a politician, make your case, put it in words and blog those words for all to see.

OR you can task focus groups to devise snarky responses to talking snowmen.

Saturday, July 21, 2007

Kudos Google

Google sent a couple of their people to BarCamp2 in Grand Rapids, MI this weekend.

THANK YOU.

First, they raffled off a tee-shirt on Friday night. I put my name in and lo and behold, I got a cool Google tee-shirt with the coyote howling at the moon. I'm wearing it now. Google also brought other schwag: pens, notpads, blinkies. My wife already snagged the notepad. Should have scarfed up two of them. The blinkie was cool, LEDs in the letters of the google logo. I figure the nieces and nephews will be fighting over it.

Second, they also gave away a iPod, I didn't win it, but the fellow who did looked awful darned happy.

Third, one of the Google people gave a talk on Linux systems administration and handed out Ubuntu live CDs and talked about Ubuntu. I learned it was a Debian distro of Linux and thought, what the hey, and I booted it on my work laptop that runs Windows XP. It came up smoothly, detected all the networks and stuff and everything "just worked." I was impressed.

So, my daughter's laptop has been sorta sick all summer. It runs for a while, then flakes out. (I took it in but the fellow was completely useless in diagnosing the problem. Couldn't find anything. That was $40 very mis-spent.) After BarCamp I went to my favorite hardware store and bought a 60GB hard disk, brought it home, installed it in my daughter's laptop, then booted Ubuntu. It booted fine. I told it to install on her new hard disk and walla. Everything "just worked" and has been rock-solid all evening. I'm terribly impressed with the Ubuntu CD the Google guy handed out.

Thank you, Google. You've got some great people working for you!

Sunday, July 15, 2007

Oddball Rites

A couple months ago I read a web page written by someone who was big-O Orthodox and describing what goes on in such a service. It seemed quite strange to me. I thought about how I was raised and thought, no way. But at the same time, I also thought, this is probably as close to whatever it was the apostles did on Sunday as anything I'm ever going to see in this lifetime. It is strange to take the forms and customs of two thousand years ago and look at them through the eyes of a 21st century American.

And I realized that we'd look just as strange with our powerpoint slide shows and our seven-eleven praise songs. But this morning after the first couple songs, they turned down the lights. I knew what was coming. When I was a kid we called them "skits" but in today's worship services they are called "dramas" and there's a drama team and one particular person in our church who is really into that.

My wife is a thespian and I think she sacrifices a lot being married to me. I happen to despise skits in church. I'm not saying they're evil, just that I don't like them. I suspect that if I was merely indifferent about skits in church, she'd really like to be involved. And it's not that there was anything I could pick apart as being unscriptural or untrue about the skits at church. They're just not what I like.

When I look at the "value equation" for church, the repetitive praise songs and the skits don't contribute any lift to the airframe. Same goes for "liturgical dance." What gets my blood pumping are those centuries-old anthems, and content-rich sermons that are sharp enough to cut spirit and soul. I'm OK with the powerpoint slides because they're handy. But it bugs me that the only way I know when the song is done is the copyright notice on the last slide.

This term, "value equation" is one I started using for church when I drank the Rick Warren, "Purpose Driven Church" kool aid. I like it because I am an evangelical. I think I've got the truth and I'd like to make sure everyone else gets a chance to hear it. And if you've got a church service that's chock full of stuff nobody understands, there's not much "worship with understanding" that Luther advocated.

What got me thinking about is that the Pope has decided it's OK to do the "Tridentine Mass" without permission from the local bishop. The first time I heard "tridentine" I thought about chewing gum. I've used the Latin Mass as an example of "what not to do" back when I taught Sunday School. I wasn't ragging on Catholics: I don't think Evangelicals should speak in code that only we understand. We have to translate what we say and do into terms others understand. This is the main reason why I was attracted to a church that does a lot of "dramas" and has "liturgical dance."

Blythefield do a good job of speaking in the language of the people who live nearby and saying things you don't have to be a lifetime Baptist to find important. I think this is more important than whether the church service has the same smells and bells of a 1st century Middle Eastern church service. And I don't think I should stay away because others want to do skits or have dancing girls in church.

I think church liturgy is very important today. Congregations are looking around for ways to use the service to communicate something transcendent to those in attendance. In a more modern era, we saw a greater focus on teaching and the sermon. I'm fine with that. But in these post-modern days, a lot of people are looking for something that communicates transcendence. I think that's why Orthodoxy and the Latin Mass are doing well right now. The trouble with going through motions prescribed a thousand years ago is that it doesn't engage the rational faculties. Yes, there's a feeling of transcendence, but is there any thoughts worthy of it?

Tuesday, June 26, 2007

An Open Letter To Debbie Stabenow

Dear Senator Stabenow,

I note with gratitude that you voted against cloture in the recent immigration bill. Thank you. I have been a voter since I voted for Gerry Ford back in 1976 and have only on two occasions split my ticket to vote for a Democrat in the years since: the first was a conservative Democrat running against a RINO in Maryland (who subsequently switched parties), and the second was a state-level Representative who happened to be pro-life when his opponent was pro-choice.

I held my nose and voted against you when you took Spencer Abraham's seat in the Senate. Frankly, I thought Mr. Abraham's tone-deafness about immigration policy is the signal reason why you were able to unseat him. Now, I'm pleased that I was wrong and you were elected, because I'm sure Mr. Abraham would have been as much a corporate tool as Mr. Bush and the rest pushing the immigration bill.

Whereas I remain a Conservative, I cannot in good conscience call myself a Republican. Because of your vote on the immigration bill I intend to vote for you the next time you stand for election.

Sunday, June 24, 2007

Truth In Advertising

Many years ago I was in Baptist History class by one of my least favorite professors at Cedarville. Despite a well-earned reputation as Dr. Sominex, he said something that has stuck with me for thirty years. His words were to the effect that there is no Baptist “pope” to admit someone to or excommunicate someone from the faith. Rather that the term Baptist implies a set of beliefs and if you don’t believe those things you can’t honestly call yourself a Baptist and if you do believe them you can. He likened it to “truth in advertising.”

I recently heard of someone who criticized a Baptist church in the following story. He was asked if he’s a Baptist or not. He replied by asking, "What does it mean to be a Baptist?" I imagine that the answer was a faithful rehearsal of the Baptist distinctives: Believer’s baptism by immersion, Autonomy of the local church, Priesthood of the believer, Two ordinances of baptism and communion, Individual soul-liberty of the believer, Separation of church and state, and Two offices of pastor and deacon. In response to this, the critic said that he hadn’t heard any mention of love. And this is a valid criticism.

However, I believe that this was an unfair criticism. He was not asked if he was a Christian, but if he was a Baptist. You can be a Baptist without being a Christian, as (a century ago) the members of Fountain Street Baptist Church might testify. Moreover, Baptists, particularly Fundamentalists like me, have a reputation for being censorious. If you consider Christ’s summary of God’s law in the double-love command, this censorious attitude argues most articulately for the non-belief, the non-Christianity, of such Baptists.

The categories of “Christian” and “Baptist” are independent. But if you are a Christian, identifying yourself as a Baptist gives a picture of HOW you are a Christian. If I tell you I’m a Baptist, you’ll know my yard won’t have a half-buried bathtub holding a statue of the Blessed Virgin.

Trouble is that you may also draw some other inferences that are not accurate. I think this is why institutions like the Grand Rapids Baptist Bible College first “got rid of the Bible” and then became Cornerstone University. Instead of standing up and saying, “This is what Baptist means,” and living a positive example thereof, they ran from the word Baptist. I still think they erred.

A lot of Christians did likewise and a lot of Reformed, Presbyterian, Church of God, and other churches became “Community Worship Centers.” Each denomination can point to negatives in its reputation. Certainly an irenic spirit is a Good Thing within Christianity and the blurring of denominational partisan identities takes a step in that direction.

I can see why you might not want truth in advertising. If you’re trying to sell your religion to me, and you make some vague spiritual representation, I’ll be naturally inclined to probe what exactly you believe. The premise is that this will get the proselytizing off to a better start than if you identify denominational pigeon-holes up front. I don’t buy it.

First, you can be partisan without being a jerk about it. If you tell me you’re Catholic or Reformed and I tell you I’m a Baptist up front, we’ve got our theological cards on the table and I’ve got a conceptual framework with which I can lovingly relate to you. I’ll know where the sore points are and can handle them tactfully. I’ll know the things I cannot take for granted. The denominational categories are the result of millennia of careful thought about the theological issues in play and ought not be discarded because of some bozo’s bad example.

And then there are the intentional misrepresentations of the enemy. You know, the Father of Lies. Do we act as if the devil’s slanders are true by running? Think of the word “puritanical.” We commonly identify this adjective with a priggish, humorless sort that bears no resemblance to the Puritanism of Milton or Bunyan. I'm sorry, but the most humorless person I know is emphatically not a Puritan.

So, with this in mind let me remind everyone: I am a Christian. What sort of Christian am I? I am a Baptist. What sort of Baptist am I? I’m a Calvinist. What sort of Calvinist am I? I am a Puritan. What do I mean by this? You can find book definitions for all these things that'll give you a good starting point. After that you’ll have to watch me. If you think my life works and want to know its theoretical framework, those labels will tell you where to look.

Thursday, June 14, 2007

I don't even like opera

This is funny. I ran across, I don't know how, a YouTube video clip of this British TV show. It's a British spin-off of American Idol. I've never watched American Idol. I respond politely when others say nice things about it and I have made snarky remarks about Sanjia (though I've never seen him). I figure anything on "reality" TV is going to be contrived and stupid. So, I clicked on the movie and started watching, wondering what was up. Is this some kind of joke? some ironic bit of trash where some bozo makes a fool of himself in front of a TV audience?

The video showed this rather dumpy looking fellow (and I figure that TV makes anyone who's not stunningly attractive look dumpy) in a cheap suit, bad hair, and unfortunate teeth that is too common in Britain. The judges looked bored and skeptical and asked him what he wants to do. He said he'd like to do opera. The judges did not visibly roll their eyes, but I got that vibe.

Then the fellow started singing. But first, I forgot to mention how much I absolutely despise opera. So, the guy starts singing and I'm waiting for a gag.

There's no gag. This guy is incredibly good. The first clue I got was watching the judges, particularly the female judge Amanda Holden. She's struggling to contain her emotions. I did recognize the Puccini tune and I realize this dumpy looking guy is singing this as well as I've ever heard it sung. The judges were utterly impressed. Somehow, and I don't know how, I was moved to tears by the fellow's singing. I don't understand that. I replayed the video a half-dozen times and a stack of soggy kleenexes piled up a dozen deep.

Then I want looking for more info about this guy. I found a half-dozen posts with the video embedded, usually with the introduction, "I don't even like opera, but..." Then it struck me, an utterly incredible degree of talent trumps distaste for reality-tv or opera. The fellow's name is Paul Potts, and I hope we'll be hearing more of him.

Tuesday, June 05, 2007

Men Without Chests

I just read a snippet of a story on one of the milblogs. Seems that some 65 year old former cop and a retired Marine had to get physical with a guy on an airplane and his brother. That a situation that you hear about and hope to God you've got what it takes to do the right thing if you're ever there. The contemporary term is "onions" or "balls," but I prefer C.S. Lewis' term in his essay, "Men Without Chests." There's something about the empty suit that says more about a man than mere gelding.

We read from various places people complaining of how boys are raised to be sissies and that men are no longer manly. Lewis sussed it. When man is the measure of all things, nothing is big enough to be worth risking your life over. This hollows a man out and he's pretty much worthless. I have nothing but scorn for the protester who engages in civil disobedience and then complains that he felt threatened by the authorities. Socrates was man enough to drink the hemlock. He was a man with a chest.

What's most discouraging about this story was when the cop said, "I had looked around the plane for help, and all the younger guys had averted their eyes." Maybe all the young guys with chests must be in Iraq & Afghanistan.

Saturday, June 02, 2007

"Homegrown" Terrorist Plots

I just read a news story about a plot by four individuals named, Russell Defreitas, a U.S. citizen native to Guyana, Abdul Kadir of Guyana, Kareem Ibrahim of Trinidad, and a fourth man, Abdel Nur. Mr. Nur is reported to be a former member of the Parliament of Guyana.

Strangely, WNBC in New York said, "The arrests mark the latest in a series of alleged homegrown terrorism plots targeting high-profile American landmarks."

Does this mean that that WNBC considers Guyana and/or Trinidad to be "home."

Monday, May 28, 2007

Good Riddance Attention Whore

Mrs. Cindy Sheehan has given the American serviceman a gift this Memorial Day. In a post on the Daily Kos, she has announced that she's not going to be using the corpse of her dead son as a publicity stunt any more.

It is ironic that she should now announce her departure from public life, because her 15 minutes of fame elapsed long ago. Sadly, I doubt she'll have the character to keep her promise. Perhaps, she's hoping enough folks like myself will notice her announcement to grant her another 15 minutes.

When Mrs. Sheehan made this announcement, she entitled her post on the Daily Kos, "Good Riddance Attention Whore." The ancient Greeks had an aphorism that came to mind when I read that she had put that title on her farewell essay, γνῶθι σαυτόν.

Sunday, April 29, 2007

Stop Watches and Yardsticks

Recently, I've had occasion to reflect upon one of the initiatives at work. Managers would like to measure what the workers do. Its a two-edged sword. On the one hand, there's the Big Brother aspect that we've been assured is not the case. On the other hand, you can't improve if you don't measure.

I build software. If, instead, I were to dig ditches, we could easily measure the volume of dirt displaced. But what metrics does one apply to the construction of software? Lines of code? Bug Reports? Cyclometric complexity statistics?

Last Tuesday, John Cunningham of Band XI spoke at the West Michigan XP group and described some of his frustrations doing XP within IBM. He would faithfully deliver the numbers to his higher ups that they requested and know they were utterly misleading. I knew exactly what he meant, because I've done the same.

You record the time spent doing tasks and what gets lost is the utter non-value spent in some of those tasks and the absolute priceless-ness of chance encounters that come and go in two minutes. The former are reported to management and the latter are not. They serve to push management a step away from reality.

In short, I object to measurements that mislead, or can be gamed. Once I understood this I sought a metaphor that I could use to communicate what I have in mind. Consider a track meet, what measurement tools are used there? Some officials carry around stop watches and other officials carry tape measures.

In particular, consider the high jump competition. You set the bar a measured distance above the ground and the best athlete is the one who doesn't knock it down. You measure this performance with a tape measure.

But suppose an official who's been watching footraces all day comes along with stop watch and no tape measure. He's perplexed until he notes that the guy who jumps highest also stays off the ground longest. He decides to measure the athlete's performance with just a stop watch.

What would happen then? The athletes would jump differently. But would they jump higher? Subtly, the fact that the measurement has changed will change the way the athletes jump. I don't think those changes will result in higher jumps. Performance suffers due to using the wrong measurement.

It seems silly to measure the high jump this way, but suppose you had lots of cheap stop watches and only a few expensive yardsticks. Or suppose you don't understand the field of endeavor well enough to see how yardsticks are better than stop watches.

Conversely, it'd be silly to take a yardstick or tape measure to a footrace.

So, I'm not saying "don't measure." I'm saying that you have to understand what you're doing well enough to select the correct measurement.

And you have to use, and not misuse the correct measurement.

Let's go back to the Big Brother consideration I touched on earlier. In the UK there is now one video surveillance camera for every 14 people. Those cameras are in place to "catch" wrongdoing. Contrast this with a training context where your coach videotapes your jump to analyze your form, a one frame at a time. He's got a purpose that you and he agree upon. He's not out to "catch" anything except those things you want to correct in order to jump higher. He's your Coach, not your Policeman.

Do you see a cop with a radar gun? Slide into something's radar shadow and decelerate. Then look at your speedometer. You change your behavior so he won't "catch" you speeding even when you're doing nothing wrong.

The relationship between Big Brother and those under his thumb is adversarial, whereas the relationship between Coach and athlete is cooperative. The fact that "Big Brother" even comes to mind speaks volumes of the culture of an organization.

Measurement in an adversarial context is a negative-sum game. In this context, everyone is encouraged by the system to replace reality (that might cast me or my political allies in a negative light) with whatever figures we can spin into a Potemkin village filled with smiling happy peasants, each tugging on their forelocks as the Empress sails by.

The cultural question probably hinges upon a question to the measurement taker that John Cunningham raised last Tuesday: "Do I want to know what's going on, or do I want to impose my will upon the situation?"

Wednesday, April 11, 2007

std::min and std::max versus Visual Studio

Recently, months back I wrote a wicked-cool solution using boost to encode binary data as base64. Sadly, it would not compile, b/c Microsoft did something evil in Windows.h when they defined min() and max(). I'd seen this problem and coded around it before. So I modified the boost code that broke:

C:\dev\sdk\boost_1_32_0\boost\archive\iterators>svn diff
Index: transform_width.hpp
===================================================================
--- transform_width.hpp (revision 201)
+++ transform_width.hpp (working copy)
@@ -142,7 +142,7 @@
}
else
bcount = BitsIn - m_displacement;
- unsigned int i = std::min(bcount, missing_bits);
+ unsigned int i = min(bcount, missing_bits);
// shift interesting bits to least significant position
unsigned int j = m_buffer >> (bcount - i);


But was this the most righteous solution?

Just last week I had to code away from a righteous std::numeric_limits::max() to the less righteous INT_MAX for the exact same reason. Today, this problem recurred. I had a choice between committing my change to boost, or powering through the problem. "OK, Microsoft, you've exceeded your kluge allocation."

The real problem isn't in boost, but in Visual Studio. This sent me googling to this link that said:

The Standard Library defines the two template functions std::min() and std::max() in the header. In general, you should use these template functions for calculating the min and max values of a pair. Unfortunately, Visual C++ does not define these function templates. This is because the names min and max clash with the traditional min and max macros defined in . As a workaround, Visual C++ defines two alternative templates with identical functionality called _cpp_min() and _cpp_max(). You can use them instead of std::min() and std::max().To disable the generation of the min and max macros in Visual C++, #define NOMINMAX before #including .

Therefore, I REVERTED my change to transform_width.hpp. Since I do not #include it doesn't matter where I #define NOMINMAX, so I put it in my project file's manifest of #defines.

It works and I feel more righteous.

Sunday, April 08, 2007

Viewer Discretion Required

I just walked into the family room and the TV was already on. Before the next show came on the warning appeared, "Viewer Discretion Required." The show consisted of videos of people doing stupid things and flamboyantly and visually paying the price for it.

It became obvious that viewer discretion may be required, but for the photographer and the photograph-ee, discretion was pretty much absent.

Friday, April 06, 2007

C++ Templates Are Wizardry

I had to make a fix to a C++ program, and instead of doing the same old thing I had done before, I decided to effect a righteous STL/Boost standard solution. Here's the problem, I had a bunch of named objects and I needed to store them someplace.

I had a map and it worked until my boss asked, "is it case insensitive? does it ignore suffixes?" "No, should it?" "Yes & yes."

Though you wouldn't normally think of it, map requires a comparator to function. C# calls the same thing a sorted list, b/c they don't hide the fact that in order to work, the data structure has to be sorted on keys, and this comparator keeps the keys in sorted order. This comparator was what I needed to make my map work.

If I have two equivalent keys "Thing" and "thing.subthing" and want them to map to the same value, I can do so with a comparator function. Simply declare my map as map and then define a comparator functor that ignores the things like case and the stuff after the suffix character. The first part was a simple Boost exercise:

class comparator
{
public:
bool operator()(const string& s1, const string& s2) const
{
string t1(s1);
string t2(s2);
transform (t1.begin(),t1.end(),t1.begin(), tolower);
transform (t2.begin(),t2.end(),t2.begin(), tolower);
//(more goes here later)
return t1 < t2;
}
};

The boost string algorithm is the way to go here. You should make it your friend. This handles the string insensitive part. If that's all you need. You're done.

Note: you MUST implement a LESS THAN function or the std::map template won't work.

I had to ignore all the stuff to the right of the decimal point. So, I added the following bit:

size_t dot1 = t1.find(".");
size_t dot2 = t2.find(".");
if (dot1!=string::npos)
{
t1 = t1.substr(0,dot1);
}
if (dot2!=string::npos)
{
t2 = t2.substr(0,dot2);
}

I was a little disappointed with this solution. I had hoped to just adjust the end iterators of the transform() calls above. However, it got gnarlie and harder to understand than this. If you know how can replace the transform() call with something using a back_inserter(), let me know.

After I got this working, I was impressed at how unhelpful the compiler and the language were in diagnosing the errors I'd made. I mentioned to a colleague that templates are the greatest thing ever invented, but they require a wizard to use gracefully. He agreed and suggested that if I did this every day, I'd be more efficient at diagnosis. He's right. When you work with something every day, you grok the philosophy of why things work, and you get a feel for why unhelpful compiler error messages say what they do.

Tuesday, April 03, 2007

A Righteous Way To Get The Fonts Directory

Some months ago, I had a bit of a problem where I had to write a program that went to the system fonts directory on a Windows machine. This is usually in "C:\Windows\Fonts" but on some machines the Windows directory can move.

Thus, after a bit of googling I came up with this code that worked consistently until this afternoon.

string result = System.Environment.ExpandEnvironmentVariables("%WinDir%");
result += "\\fonts\\";

This works because on Windows systems, you can find the WinDir environment variable set to the system directory. That quit working today when I encountered a weird interface problem with an ancient C++ program (written well over 10 years ago) that invokes a new, cool .NET program that uses the code above. The failure was an interesting one.

The old C++ code looks like this: (Maybe you can see what the problem was.)

loadParms.segEnv = 0;
loadParms.lpszCmdLine = commandLine;
loadParms.lpShow = show;
loadParms.lpReserved = NULL;

HINSTANCE hinst = LoadModule(exeName, &loadParms);

The loadParms struct has a segEnv handle that references the environment of the child process created by the LoadModule(). However, since it is not initialized to anything, the child process has NO environment defined. Thus the reference to %WinDir% gets nada instead of the correct directory. The newer program worked fine from the DOS command line and failed within the LoadModule() call above. This was the only clue to my problem.

I came into my boss's office chuckling about how the old system goofiness had screwed me over and pointed out the use of the %WinDir% environment variable. He countered that what I'd done above to use %WinDir% in the first place was not as righteous as using the various Environment.SpecialFolder methods/properties to get the same thing. I'd tried to do this months back and I'd failed to google up a better solution than the one using %WinDir%.

But I'd forgotten my earlier failure to find a more righteous solution. It took me a couple hours of googling to remember that I'd done this before without success. Happily, this time, I didn't give up and came upon the clues that yielded this snippet of code:

///
/// get system font path
///

/// system font path
static public string GetFontPath()
{
string systemPath = Environment.GetFolderPath(Environment.SpecialFolder.System);
string result = Path.GetDirectoryName(systemPath)
+ Path.DirectorySeparatorChar
+ "FONTS"
+ Path.DirectorySeparatorChar;
return result;
}//GetFontPath()

This works in two parts, the Environment.SpecialFolder.System gets me to C:\Windows\System32, which is too deep in the directory tree for me. But the 2nd step, invoking Path.GetDirectoryName(systemPath), strips off the "\System32" that is in my way. Then I can add back the FONTS myself.

A righteous hack. I hope this will make the next guy's googling a little easier.

Sunday, April 01, 2007

Write It Now: Relationships

The kind folks who wrote WriteItNow recently sent an evaluation copy to a writers' group that I attend. Since I'm the geekiest fellow there, I snarfed it up and promised to write up a review.

This isn't that review. It's more of a first impression. Just one aspect that I have some opinions upon: Relationshps.

WriteItNow lets you define characters in your novel. I'm working through that right now. Each character has a description, relationships, and personality. The description is just plain flat text, with a drop-down box for sex. This could be improved by adding some structure for eye-color, hair color, height and other physical attributes common to everyone. The Date Of Birth would be better replaced, or perhaps augmented, with an age when story takes place. When I am designing a story, I like to think of it in terms of "today" or "five years from now." If you have in mind to use historical figures in your novel, the Date Of Birth feature will serve you well.

Each character can have a collection of relationships. When you define a relationship, you get a dialog that has two drop downs. The first specifies the nature of the relationship: it says "wife of", "husband of", "aunt of", "neice of" and so on for about 27 choices. When I entered the first relationship, this was a problem, because I wanted the character to be the "tutor of" another character. Not in the list. Hmmmmm. No "mentor of" or "protégé of" either.

Only later did I discover the drop-down let me type in anything I wanted if it was missing from the drop-down.

A nice touch is that relationships can have "start" and "end" dates. But my complaint about birth dates applies here, too. Instead of saying that Chaz and Kim were married 3 years before Kim files for divorce, I have to specify some Saturday in June 2004 and some Wednesday in March 2007. Some specificity is good, but I'd like to hang loose on some details before I make other design decisions.

So, I started defining relationships between characters. And I noticed another problem. If I said, that Kim was the wife of Chaz, it didn't automatically say that Chaz was the husband of Kim. I saw this was a potential difficult thing to put into a program. For instance, if I say that Art is a lover of Jennifer, Jenifer may not be a lover of Art: she might just be stringing him along.

But just now a solution occurred to me. In the bowels of the source code for Write It Now, there must reside a software entity, (called a class) named something by the programmer. I'll name it "Relationship" for now. This class would be responsible for holding everything associated with a Relationship between two characters. Right now, I suppose it holds a string that specifies the type of relationship (e.g. "husband of"), two date objects for start & end, and a reference to a Character object. I here propose a refactoring of that object. Replace the string that identifies the type of relationship with a RelationshipType object.

The relationship type object I'm proposing has a boolean attribute: Reciprocal. Some relationships are reciprocal, others are not: e.g. Chaz is a husband of Kim and Kim is a wife of Chaz, but Art is a lover of Jennifer, but Jennifer has no such relationship with Art. With this distinction in mind, the programmer can associate reciprocal relationships automatically. When I add a "husband of" relationship between Chaz and Kim, it creates a reciprocal relationship "wife of" between Kim and Chaz. If I change my mind and want to I delete a reciprocal relationship, the software must goto the other character and delete its reciprocal relationship, too.

If you buy into the notion of a reciprocal relationship, you also have to worry about the polarity of that relationship. When I look at a relationship between Chaz and Kim from the perspective of Chaz, I want to see "husband of" and when I look at Kim's relationships, I should see "wife of". In graph-theoretic terms, reciprocal relationships are "directed" arcs between characters and this notion of polarity or direction, captures this distinction.

This would entail updating the Edit Relationship dialog to add a checkbox for Reciprocal or not. And also a "polarity" flag to select between "husband of" and "wife of" when displaying the relationship.

This also has an impact on the Relationship drop-down. I don't think free text in the combobox works any more. Instead it has to enumerate all the known relationships plus one called "other" selecting other would bring up a dialog where one defines:
  • reciprocal or not,
  • relationship description (e.g. husband of)
  • reciprocal description (e.g. wife of).
A good thing from the users' perspective is that the drop-down would change from being 27 choices to about half that. And the user would see explicitly what to do when s/he wants a relationship that's not shown on the list.

While writing this, it occurred to me that the WriteItNow folks would also do well to refactor their Date object. Sometimes dates are important to know exactly, other times exactitude is a disraction or should just be a deferred decision. This argues for "fuzzieness" in the specification of dates. The date specifier dialog in WriteItNow have some checkboxes for Month, Day, Week Day, and BC. I'm not quite sure how these work and should start searching the documentation. (They govern presentation of the date. Bad form to confuse data entry and presentation. There's no Help button on the date specifier dialog. It's unclear how the red X is different from the Cancel button, either.)

Instead, I think every Date object needs to recognize the distinction between absolute and relative times. Absolute times are points like 2:57 pm GMT June 2, 1934. Relative times are points like 5 years ago. Let's suppose I have in mind that Damien is 13 when the story takes place. If I write the story is to take place "now," his birthdate can't be specified absolutely. Similarly, I may want to defer decisions about how old he is exactly. I'd prefer to say Damien is between 12 and 15. When I know more, I'll narrow it down.

Same goes for absolute dates. I may want to say that an event takes place "during WW2" but I'm not sure exactly when. I had a story where my hero lost an arm (and a fiance) during a Nazi bombing attack. When exactly? I didn't know more than between 1939 and 1945. And I didn't need to know until later.

WriteItNow will do a better job if it enables the writer to capture artistic decisions in relative terms with some degree of fuzziness. Thus I think its Date object should be refactored to mind these two distinctions: absolute versus relative, and inexactitude. Relative times are tricky, I'll come back to them momentarily.

Fuzzieness can be handled by adopting intervals. Any fuzzy date is really a range between the earliest and the latest times of an event. My hero's injury starts out at [1 Sep 1939 - 2 Sep 1945]. Since my hero is an American I decide he has to be hurt after Pearl Harbor: [7 Dec 1941 - 2 Sep 1945]. So it goes, as I research and refine dates and narrow the range. Exact dates are simply zero-width intervals. In my example, these are all absolute times, but relative times may prove useful. e.g. Damien's age mentioned above.

Relative times are tricky because they are "relative to what." WriteItNow enables the writer to define events. Events seem to be the best candidate for providing reference points for relative dates. What makes them tricky is that you can have multiple narrative tracks in a story. Neal Stephenson's Cryptonomicon tracked WW2 and contemporary events in parallel, for example.

In my current story, I figure Chaz will be found dead in a locked room. (Someone named Chaz should always be found dead at some time in the story.) I figure he'll be married to Kim about 3 years before that, and she'll file for divorce about a month before that. Meanwhile, Art and Damien are establishing a love-hate relationship as tutor and student. I don't know exactly how those two narrative threads will merge. I don't want to decide that yet. I'll want to specify all Kim and Chaz events relative to each other. And i'll want to specify all Damien, Art and Jennifer events relative to themselves.

Where it gets tricky is when I try to harmonize multiple the narrative flows. I'll need to float all the dates in one narrative to let me slide it forward and back to match up with the other. And I need to check for contradictions. Like Chaz getting killed before he can insult Art at a dinner party. Thus the Date object must be made fuzzy to some extent, and must be either absolute or relative. Similarly, when events are "linked" (I haven't gotten to that part of WriteItNow yet), some kind of consistency check between them will be needed.

More on that later.

Saturday, March 31, 2007

21st Century Camping

Last week we pulled the Aliner out of storage. It sat in my driveway this week as I went through it inspecting and setting up for use. This provided me an extra reading room that I used for programming. Worked quite nicely as such, too.

Grand Haven State Park advertises that they have WIFI, so I decided on a little expedition to test this. Last winter the website for the park allowed reservations on 30 March, and that's what I put in.

The first challenge was sneaking out of work. Since I work at home Fridays, that should be easy. But there's a release that occasioned a lot of hand-wringing that resulted in a clutch of phone calls from QA and one big conference call with the product manager and the big boss. The conference call wasn't too long and I got on the road an hour and a half later than hoped. Traffic slowed me and I didn't get to Grand Haven as quickly, either.

The Wifi works (i'm using it now). I was pleased to note not one, but two wireless service providers within range of my laptop. I signed up for a one-day plan, but I could have gotten an hour's access for free.

And I was able to get on IM. I told my colleague in QA that I had to move my trailer, and asked if all was well. I didn't say how far I'd moved it. Later I chatted with my boss noting that it was cold and windy and raining, but that I was warm and snug and had Wifi. He was impressed with the geek factor.

Grand Haven State Park is perfect this time of year. It's cold and windy. And there's almost nobody here. I don't think I'd like it in July with no shade and crowds of noisy teenagers.

I have a friend who writes articles for outdoors magazines. I mentioned my purchase of my trailer and asked about some good camping destinations. In the course of the conversation he sniffed, "if you're using propane, it isn't camping." I suppose you'd say he's old-school. When I tell him about this expedition, I expect to see his head spin around three times or something like that.

Monday, March 26, 2007

How To Get Anna Nicole Smith Off The News

I just heard a guy on the radio profess that he lacked the power to get Anna Nicole Smith off the news. Happily, I have the solution. It's trivially easy to do this. Follow these steps:

1) you'll need guns, lots of guns. (A Matrix-style black leather coat is optional.) and ammo.

2) show up at the nearest TV network.

3) shoot up the place.

At this point, you have two options.
a) save the last bullet for yourself.
b) give yourself up so that you can have this month's "trial of the century." This will keep Anna Nicole Smith off the news for a few more weeks.

Sadly, you can only do this once. If you want to keep Anna Nicole Smith off the news for more than a few weeks, you'll have to recruit help. This shouldn't be hard. On the Internet, you can hook up with anybody about anything.

Sunday, March 25, 2007

Thespians Have Invaded My Church!

I'm no great fan of church drama and dramatic productions. So, this is an uncomfortable time of year for me. Leading up to Easter each year my church goes through a transformation.

This morning, we got to church relatively early. In the foyer outside the auditorium I noticed a lot of people milling about in costumes, apparently from the 1920s or '30s.

When we got into the auditorium, I was instantly consumed with lust. There on the platform gleamed a vintage Packard roadster. (It's odd that when you tell a man you covet his car, he'll smile. How many of the 10 commandments can you violate with that response.)

Around the Packard was a number of set decorations with that '20s or '30s theme. Old Coca Cola signage and so on. It was a remarkable piece of work. I remarked to my wife, "where are the TVs?" Blythefield has three huge projection screens on which videos, the words to songs and sermon notes are projected. None were visible, just the stage props.

When the service started, the thespians invaded the auditorium all in their costumes. Over a hundred of them surged onto the platform. They do this each year, except they wear different costumes each year. They sang and then segued into a song-and-dance routine that was as good as any musical production I've seen in Grand Rapids. I joke about the dancing girls at church, but today both men and women were kicking their legs up.

I appreciated the skill and work that went into the show. That's one of Blythefield's strengths, the show before the sermon. I realized that my opinions notwithstanding, this could be what reaches some people who'd otherwise be consumed with ennui or absent.

One of the thespians is a tall fellow with a beard, you know the kind of beard you've seen in every picture of Jesus you've ever seen. Jesus goes to my church. I see him every Easter season. This year, Jesus was easy to spot because whereas all the other thespians were wearing costumes from the early 20th century, Jesus wore the bathrobe costume we imagine the ancients clothed themselves with.

Then someone flipped a switch and a projection screen unfurled to allow projection of the words to the songs we were to sing. (It wouldn't be church without video, would it?) And after some peppy songs with a solid back-beat, they showed a video on that big screen.

But I found the video confusing. I told you that Jesus goes to our church. But the video showed a different guy in a beard who wore the bathrobe costume. He didn't look like the Jesus who goes to our church. Perhaps Jesus is like Santa Claus: the guy in my church and the guy in the video are just his helpers. (Someday, I'll ask some hard questions about the 2nd commandment.)

Last year, two movies came out, "The Illusionist" and "The Prestige" that each featured magicians. I rather liked the latter, but haven't seen the former. They seem to have set a cultural theme. As Evangelicals are wont, my church has (six months late) latched onto the fad and the Easter show this year has some kind of magical theme or story-line where some kind of magician comes to town in the early 20th century (thus the costuming indicated above). Perhaps next year all the guys with great pectorals will be recruited for a "300" rip-off.

30 years ago, Francis Schaeffer challenged Evangelicals to engage contemporary culture and I suppose that what I just described is what this entails. I think our failure is that we're six months late, and that we're not setting the pace for others to follow.

Wednesday, March 21, 2007

Theorem and Non-sequitir

I recently had occasion to ask myself what exactly constitutes thinking. Since I was trained as a mathematician, I generally regard thinking as something akin to the process of stepping through a sequence of formal steps: starting with premises, then stepping logically to intermediate results and finally arriving at a conclusion.

If reason is reasonable, the conclusion will be as true as the premises and the validity of the steps to the conclusion.

There's a similar process in forensic procedures where cases are made tallying up the arguments in favor of and counter to the point of dispute. When making cases, facts are marshaled to serve as the premises of a reasoned process leading to the advocate's position.

In the forensic setting, we can't count on the neat set-piece logic of the mathematical proof. So, the arguments tend to be more inductive and the logical steps of the argument somewhat less rigorous.

Now, what has this to do with thinking? There's a cartoon that came out when I was in college. I'm wearing it on a t-shirt as I write this. That was the constant temptation when I was getting my Masters' in Mathematics: I'd be in the middle of a proof and realize the next step I needed to take, but I didn't know how to do it. I dearly wished I could say, "then a miracle occurs," to make the missing step. They don't let you do that in Mathematics.

In Law, I think it's a matter of getting away with it. If you try it in law school, it depends on how closely the prof is watching, or in court, how closely the judge is watching. If they catch you, you'll be handed your head.

There's a term-of-art for the unsubstantiated step in an argument: the non sequitir. The step does not follow. It should be cut and dried, but that's not necessarily so.

When I was taking Calculus, the prof would write up proofs on the board and I would not understand the step that he took. My dullness of mind could not perceive how one step followed from another. The ultimate math-prof cop-out is to say, "this is left as an exercise for the student."

So then, it requires some subtlety to distinguish between the theorem one does not understand and the non sequitir. Charity demands that when someone throws something that appears to be a mismash of non sequitir and gratuitous assertions, that it not be dismissed out of hand. But how hard must one work before throwing up one's hands and saying, "I'm not this stupid," and decide that whatever you're looking at is no theorem, but non-sequitir. Is this from a deep thinker or from a braggart dilettante?

One strategy suggests itself. If your interlocutor has demonstrated mastery of a broad spectrum of difficult subjects and familiarity therewith, it suggests the former. Conversely, if he clutches a small handful of facts that he has difficulty integrating with other ideas, it suggests the latter.

Which am I? I suppose it's safest for me to regard myself a dilettante until proven otherwise.

Tuesday, March 20, 2007

The Spinning Sound That You Hear

In the Golden Age of Science Fiction, a Grandmaster named Isaac Asimov decided to write some stories that ran counter to the tired, stale stereotype. You see, ever since the Czech movie RUR, robots had been depicted as sinister things. Man would make machines, the machines would be slaves and the slaves would revolt.

This pattern dominated SF writing from that point forward and became a tired, stale stereotype. Everybody wrote robot stories that cast robots in this same negative light.

Then Isaac Asimov thought that perhaps it might be interesting and novel to break the stereotype. He wrote stories about these two engineer-scientist-troubleshooters who had the job of going around diagnosing and fixing interesting robot problems. And the engine of these stories, the plot device that powered them all was the Laws of Robotics: Robots can't harm humans, etc. The structure of the "positronic brain" was such that it was impossible for the Laws to be broken. These short stories were collected in book form and published as I Robot. It was one of my favorite books when I was a kid.

This same riff persisted in the Caves Of Steel novel and the other stories involving the robot detective R. Daneel Olivaw. Also favorites of my youth.

Times wounds all heels, and in 2004, I Robot made its way to the silver screen. I saw the hypes and thought they showed a movie that it wasn't true to Asimov's central idea. So, I made a point to not see this movie.

Eventually, it made it to cable TV and I told Tivo to record it. What a horrid film. The spinning sound you hear is that of Isaac Asimov in his grave.

It seems that computers are truly a sinister, corrupting force, and you can see it in I Robot, the movie. But not the way you think. Pervasive CGI rendering allows the filmmaker to set up scenes where hundreds or thousands of robots can fill the screen and crawl around the screen like ants. Too many movies just sort of omit things like character and story and fill the screen with CGI. This is the sinister corrupting force of computers in cinematography.

That's bad, but what makes I Robot worse is that the nature of CGI in this film. Filling the screen with a hundred bug-like robots all moving around is just wrong. And when they did use the CGI for things like cars or traffic scenes, it looked obviously fake.

Oh, but wait, after the movie's been going on and on and on, the robots take over. Wow, imagine that. Sure, they say that it's to protect us from ourselves. But you know, robots always take over and kill their masters. If the robots don't think of it themselves, they can get the idea from old Star Trek reruns. And then Will Smith has to get the "plot device" and shoot it into the MCP. oops, that was Tron. Well, you can predict any movie's last minutes once they realize they need to push the Big Red Button and you know everything bad will happen to provide obstacles for the hero en route to said button. And when he stands/hangs/lies next to the Big Red Button, he'll have some Witty Remark that he'll say when he plunges the Plot Device into the MCP or whatever, killing it.

I pine for the Old Days when there were writers who could do better than parody the old tired stereotypes, but come up with novel treatments of something. Like Isaac Asimov did in I Robot, the BOOK not the movie.

Sunday, March 18, 2007

Twelves Gates To The Printer

I have an apartment for rent. My wife wanted some mini-fliers to hand out/put up. That's fine because I did the design in MS Publish last year or so. Since my wife is getting more computer-literate, I put her to work finding the files. Ultimately, we found them on a seldom-used machine named Forrest. Most recent work has been on my main desktop machine named Grant.

OK, we need fliers, but they're on Forrest, not Grant. Mary made the fixes on Forrest. Then it was time to print the fliers. I have three color printers: HP990, HP8400 and HP7400 that we use for fliers, for photos, and for correspondence, respectively. Since Forrest is seldom used, printing has become problematic. First I tried the HP990, and the network flaked out resulting in wasted paper half-printed with the fliers. And the HP990 ink jet printer was out of black ink. I went to Meijer's and bought a replacement. But the network problem persisted.

Then I tried the HP8400 and MS Publish said "there was a problem". Nothing more useful than that. I went to the internet and downloaded the HP7400 drivers and installed them. On the second try it said the install was OK. Then I printed MS Publish and got the same unhelpful message. OK, Forrest had a network problem I wasn't going to fix.

I was able to copy the MS Publish files to Grant. Tried to open and print from there. NO joy. Grant's copy of MS Publish was '97 and Forrest's copy was '02. What to do? I could not find the Publish 2002 install disk, so I couldn't just update Grant and print from there.

I went back to Forrest and checked "print to file" using each of the printer drivers. Then I copied the resulting PRN files to Grant. Now all I had to do was copy each PRN file directly to its printer.

Interesting. Back in the old DOS days it was simple. Just do this:

Copy/b file.prn LPT1:

But none of the printers are hooked directly to Grant. The HP990 is hooked to a wireless printer server with an odd name of LK96c9ea. It has two queues, p1 and p2. A couple years ago, I figured out how to print directly to it like this:

Copy/b file.prn \\LK96c9ea\p1

But the HP8400 printer has an Ethernet port and the HP7400 printer connects via wireless. It took some doing to figure out how to send bytes directly to these printers. I suppose there's probably a way using the DOS Copy/b command, but I couldn't immediately find it. But after a bit of googling I found I could use netcat or nc to send things directly to the printer's TCP/IP address port 9100. What I found worked for me is this:

nc HPM210QY047Z 9100 < file.prn

The first part "nc" is the program netcat, easily downloaded from the net from a number of places. The second and third parts is the printer/port name and port number, respectively. You can get the port name from the printer properties' Ports tab, scroll down the list until you see one port "checked" and click on configure port. The dialog will appear on which you will find the port name (in my case HPM210QY047Z), a protocol (raw) and a port number (9100).

If you ever find a way to get DOS Copy/b to accept a TCP/IP address and port as a destination, let me know.

Friday, March 16, 2007

Writing Generic / Minimalist Code

Whenever I start on any new project, I have this uber-abstract mindset that spins off all manner of what-if things it could do. It's a matter of combinatorics: you know it has to read, will it have to write? you know it has to add, will it have to subtract? And so on. Most such ideas are not practical. This drives my boss nuts.

But this what-if thinking occasionally pulls my chestnuts out of the fire when someone breaks the promise that they'll never ever need so-and-so (but they do).

Thus, I set my course between Scylla and Charybdis. On one hand, I build something inadequate that must be carefully rewritten to be extended. On the other hand, I build something over-engineered and/or bloated. The principles of Object Oriented offer a path between them. One principle is "program to interfaces."

For the last couple years, I've been doing a lot of Test-Driven development. This week, I put Test-Driven to work in conjunction with "programming to interfaces." I created the interfaces for my current project, and before I had anything more than method signatures and parameter lists, I immediately wrote unit tests to thrash out the interfaces.

My intent was to code up just enough to get Visual Studio reverse-engineer it and thereby get UML class diagrams to use. However, it came together so very well, that the next steps were trivial. Before the day was out, I had gotten much further, much faster than I could have possibly dared to think.

There's one thing to understand OO and what it can do for you. It's another thing to take it to the next level. I'm quite pleased with what I've applied today.

reverse engineered from

These unit tests served to give me an immediate feel for how the software would work and this let me tweak the design so as to get the maximum functionality out of the minimum code.


There is in the principals of Object Oriented software development, a Now, when you have a righteous OO design, it'll manifest open-closed characteristics. The design will be closed to modification and open to extension.

Monday, March 12, 2007

For Mature Audiences Only

I just flipped on the telly and saw the disclaimer "For Mature Audiences Only" and it showed a couple cartoon monkeys whacking each other with paddles. Then one came this british television show where these science boffins in white lab coats do strange things like zap women with electricity and inflate hot water bottles with liquid nitrogen.

All good fun. Strange, but I always thought that "mature audiences" were more like the Masterpiece Theatre crowd. Perhaps an incisive discussion of Hegel or Kant? Nope.

Or maybe it's code: The phrase "for mature audiences only" is code for "immature tomfoolery ahead." Now, don't get me wrong, I like this immature tomfoolery. I just dislike the language being distorted.

Perhaps the disclaimer should be "for juvenile audiences, but not children."

Sunday, March 11, 2007

Consubstantiation

This morning during the communion service, a thought occurred.

Let's back up a bit. If you have any sort of Christian identity, you know about this business called "The Gospel." You may also know that Christianity denies "salvation by works," and this Gospel is the way God vindicates his justice while offering mercy to all and granting mercy to some. Some. I don't believe I'll see Hitler in heaven. So, if you have any interest in getting to heaven, you've got to concern yourself with this Gospel business.

The ancients worked all this out and there are Latin phrases that say all that I'll paraphrase here. The gospel requires 3 things of a person:

1) You have to know the story that Jesus Christ died on the cross to pay for our sins and that he rose again on the third day.

OK. I also know the story of the three bears and the Goldilocks girl who ate their porridge, etc. But there's a difference between knowing the Jesus story and knowing the Goldilocks story: Christians think the events of the Jesus story actually happened in space-and-time. This leads us to the 2nd thing.

2) You have to believe the Jesus story referred to above is actually true.

One distinction between orthodox Bible-believing Christians and many who claim a Christian identity is our view of history. A hundred years ago folks claimed that it doesn't matter what happened millenia ago, but it is important to follow the ethical standard of Jesus, and dispense with all that mythological stuff of snakes talking, etc. Today you may hear of those who'd "demythologize" Jesus by denying the space-and-time historicity of things like Christ's death on the Cross and his Resurrection. Christianity has a millenia-old insistence that if you are to be a Christian, you must also believe that the story of Jesus' death on the Cross and Resurrection is more than a useful metaphor containing no more than mythic significance.

The above serve as necessary, but not sufficient, conditions for being a Christian. However, Christian teaching has always insisted upon a third element.

3) You have to believe Jesus died on the cross for you, personally and individually. You have to add something more to knowing the Jesus story's details and to believing them to be true. A Christian needs to make a personal claim that those things count for himself or herself.

This always bothered me growing up. I knew the first two parts quite well, but had difficulty understanding that third part. Baptists like to refer to this third step as "accepting" or "receiving" something. I could never understand this. When I got older, I heard an analogy of trusting a chair: that uncertain moment when your knees are bent, you lower yourself and you find out whether the chair will collapse beneath you or not, and this isn't far from Kierkegaard's notion of the leap of faith.

My own spiritual journey took a good turn one time when I was struggling with these things I didn't understand. And I became quite angry with God and told him that I didn't care if he tossed me into Hell, but I told him what I believed his Word promised and that I was going to hold him to keep the promises of his Word and I was here-and-now claiming them for myself.

Now, looking back at that moment, I can see that I came to the end of myself and that I took a sort of Kierkegaardian leap of faith. It wasn't a blind leap: I had been reading Romans 1-5 and had those facts clearly in view.

All this sounds like I did something to unlock grace, but I believe that grace was driving these events, and led me through this process. It only looked like I was taking charge and actively working out my salvation. Instead, grace was working in me and bringing me along that third bit of transforming a "head knowledge" into a "heart knowledge."

So, this business of becoming a Christian is more than just knowing or believing something. There's this added bit that defies concise explanation and formula. I'm sure you can get a better explanation than the one I gave from any of several Christian resources. And depending upon who you read, it'll differ in the details: "letting go," "accepting," "asking Jesus into your heart," and so on. But there's some kind of extra, supernatural bit that isn't magic or ghostly, that gets added to the facts and belief of them.

And that brings us to this morning as I'm looking at the bread and wine. (Because I'm in a Baptist church, I was looking at a cracker and grape juice.) The communion elements remind me of Christ's body and blood.

I really like the Aristotelian idea of substances, and how a substance's essens and its accidens must be distinguished. Aquinas and the Schoolmen were geniuses to apply Aristotle's essens/accidens distinction to the bread and wine becoming the body and blood of Christ. It makes a sort of sense that the "hoc est corpus" should transmute the former into the latter. And since the elements still taste like bread and wine, the Arisotelian essens/accidens business makes it work. Turn this paragraph into a single word and you have "transubstantiation."

But I do not believe in that hocus pocus stuff. (Baptists have an inconsistency, insisting on maximum literalness in interpreting the Bible, but then spiritualizing wine into grape juice. I've never gotten a decent answer, even when I asked in a Deacon's meeting.)

A second way of regarding the elements of communion is called "consubstantiation." I once asked a Lutheran pastor what this means and I didn't get a satisfactory answer. He claimed "consubstantiation" was a strawman made by Calvinists. So, what follows should be ignored if you find a better Lutheran source. As I understand it now, consubstantiation teaches a mingling of the substances: the substance of the bread and wine becomes invested or haunted or charged or infused with the divine substance of Christ's body and blood. My Lutheran friend is now an Orthodox priest, so what I just said may be biased by the Orthodox notion of Incarnation. I am quite enamored with Orthodox thinking about Incarnation, so my perception is further biased at this point.

Officially, what I believe is stated here, but what occurred to me this morning is that something more than mere symbolism is in play during the Lord's Supper.

The ancients' notion of substances have limited applicability given contemporary atomic theory. The bread and wine are made of atoms made of quarks and gluons, etc. instead of "bread" and "wine" substances or mixtures of earth, wind, fire, and water essences.

This morning, I drew an analogy between the Jesus story and the elements of Communion. Could it be that this something more added to the symbolism and symbols? What I have in mind is not quite consubstantiation, but it is close. There's something extra added to the symbols, something that goes past mere matter to Christ's body and blood.

This isn't something changing the substance of the elements through the priest's hocus pocus, but by the individual celebrant of the Lord's supper recognizing Christ's body and blood in them. My Lutheran friend would hold up a photo and ask, "What is this?" and the answer would be a photo. Then he'd ask, "Who is this?" and the answer would be the person I recognized. Partaking in the body and blood so recognized, I promise to myself and to God that Christ's goodness shall be incorporated and lived out in my life.

This last bit is hard to say and as I reflect upon it, I know I've got some bits wrong. The London Confession of 1689 is much more reliable than my ramblings, and even then you should double-check what it says against the Bible verses shown.