Friday, October 30, 2009

What did I do today?

So here's a true confession. I know, somewhere inside me, that I am not my accomplishments. When I wake in the morning, I try to remember that place in Matthew 3 where Jesus is baptized. Before he healed the first sick person, before he preached his first sermon -- before he "does" anything at all, really, the voice of his father comes from heaven, "This is my Son, whom I love; with him I am well pleased."

But my natural tendency is to want to do something, to feel, you know, productive. In other words, besides the part that knows I'm not my accomplishments, there's another part that's not really sure. So I feel restless sometimes.

If I spend a day at the office and can't get anything done, I feel frustrated. If I spend a day at home and nothing I try to do succeeds, then I feel like I want to have success at something, even if it's something mundane like frying some chicken parts (yes I am serious). That might not be so bad, but the problem comes when I'm on vacation, as I am today. The lovely Carol is asleep, and I probably should be, too. But what did I do today?

As some of my colleagues would say, "I'm an idiot." I cared for and enjoyed my family (the part that's here, anyway; the ex-teenager is at Big Event); I sought the Lord (not every moment of the day, but some); I obeyed the traffic laws; I stayed within our budget. I even wrote something sorta spiritual this morning, though it was mostly an extract from Merton. In other words, I did "enough" (what an awful word!) for today.

But there's that silly part of me that longs for "something" accomplished. Bah!

Lord, change my foolish heart. Soften it, as you told Ezekiel (36:26) you would. Turn my heart away from seeking vanity. Create in me a pure heart.

And now it's time to practice the discipline of sleep.

Merton on Prayer

From No Man Is an Island starting at page 44:
There are many levels of attention in prayer.

First of all, there is the purely exterior attention. We "say prayers" with our lips, but our hearts are not following what we say although we think we should like to mean what we are saying...

At other times, we think of God in prayer but our thoughts of Him are not concerned with prayer. They are thoughts about Him that do not establish any contact with Him. So, while we pray, we are speculating about God and about the spiritual life, or composing sermons, or drawing up theological arguments. ... if we take prayer seriously we will not call them prayer. ...

Then there is the prayer that is well used: words or thoughts serve their purpose and lead our minds and hearts to God, and in our prayer we receive light to apply these thoughts to our own problems and difficulties, to those of our friends, or to those of the Church ....

There is a better way of prayer, a greater gift from God, in which we pass through our prayer to Him, and love him. We taste the goodness of His infinite mercy. We know that we are indeed His sons, although we know our unworthiness to be called the sons of God....

...there is another stage in prayer, when consolation gives place to fear. It is a place of darkness and anguish and of conversion: for here a great change takes place in our spirit. All our love for God appears to us to have been full of imperfection, as indeed it has. We begin to doubt that we have ever loved Him .... Instead of complacently calling ourselves sinners (and secretly believing ourselves just) we begin to find that the sins of our past life were really sins, and really our sins--and we have not regretted them! ... This is the time when we really learn to pray in earnest....

The man who can face such dryness... finally enters into pure prayer. Here the soul goes to God in prayer without any longer adverting either to itself or to its prayer. It speaks to Him without knowing what it is saying because God Himself has distracted the mind from its words and thoughts. It reaches Him without thoughts because, before it can think of Him, He is already present in the depths of the spirit, moving it to love Him in a way it cannot explain or understand.

from pages 44-50
I cannot say I have ever experienced that last, though I think it's what Paul talks about in Romans 8:26-27

Thursday, October 22, 2009

No flu shot for you!

So my employer isn't having flu shot clinics this year. Instead they gave us instructions on printing out coupons redeemable for a free shot at... various places. Since I live up here, I tried going to the Long'sCVS in San Carlos. Flu shots were supposed to be offered 3pm-7pm.

I called about 4:30 and asked them if they were going to have enough of the vaccine....

The answer was noncommital.

So I got on the train in Mountain View at 5:46 and off in San Carlos around six.

You guessed it--they ran out of the vaccine at about 5:45, according to the pharmacy clerk.

Well, the vaccine might not do any good anyway. (I guess that's what they call "sour grapes.")

Oh, and because of the shortage of the vaccine (though I don't see the connection), my free flu shot coupon expires... today.

Sunday, October 18, 2009

The best dinner-serving time ever

Well, almost. CityTeam's Recovery Center is less than 20 minutes' drive down 101 from our house, and we got there a few minutes after Salina and Katie Jo did. When we signed in, the receptionist confirmed that the chef was out on a break. We chatted with our friends and met "Sol," a recent graduate of the recovery program. Pretty soon a fellow came in, wearing an apron. I asked if he was the "chef du cuisine" (pardon my bad French). Otis introduced himself and we shook hands. He denied being the chef, though he admitted to being the lead cook (my French is worse than I thought). When he heard that our group wasn't all here yet, he wasn't in a big rush. "We can wait for 'em," he said, and headed back into the kitchen.

After a while a bunch of other folks showed up--from another church! It turns out that both our churches were told "I'll hold the 3pm-7pm slot for your group." As we would soon find out, though, there was plenty to do. Around that time, Stephen arrived, as did Tim and Susie.

I headed in toward the kitchen and told Otis about the population explosion we just had. "I'll tell the pantry man the good news," he said. Meanwhile, I headed back to the lobby and brought the two groups into the dining area.

Despite his earlier demurral, Otis really was the chief of the kitchen. "I need two young men to help rearrange the pantry." Two from the "River of Life" group went with the pantry man to restore order. "A team of two over here, and I'll show you how to work the dishwasher." He explained how to deal with the trays, silverware, etc. Stephen and I worked on some baking trays (when you bake a lot of chicken, grease happens!), bowls, strainers, etc. The lovely Carol worked on tables, countertops, etc., along with others from the River group. Around 4:30 there was a lull in the activity.

Otis told us that the big help was needed during and after dinner. I took a break in the dining area with "Jim", one of the residents who was actually assigned to pots and pans for the afternoon. He had a tattoo of praying hands on his left arm, and he told me a little of his story: his mother was a preacher, and he was baptized as a 10- or 11-year old. He asked me if we were from a church group, and we talked about our spiritual lives. The lovely Carol joined us after a while. It turns out that Jim used to drive a forklift and is now interested in getting a class-A license to drive trucks. "How can we pray for you?" Carol asked. He told us a couple of things and added, "We could pray right now!" We held hands and prayed for each other.

Pretty soon Otis came out of the kitchen, asking Jim to be in charge while he took a break. "Rock and roll in 5 minutes," he said, and headed toward the lobby. There was an announcement for the residents to come in for dinner. (There are not a lot of them.) They ate quickly, and some took positions near the doors. "Victor" was in charge of the water and the cups. He had a "Mel's" T-shirt on -- it said "original" too. We talked about the chain, the movie, and Philly cheese steaks. "A high-fat kind of deal," I remarked, and Victor stuck two thumbs up. "Yeah!" he said. I think he's got a fast metabolism.

Somewhere in there the folks from the River group loaded up 50+ dinner trays. They reminded me of grade school. I arranged the trays for rapid pickup -- stacked two deep on each of two shelves, and one deep on the serving counter. The lovely Carol worked with the dessert person behind the counter, to accelerate the whole process. Soon we were ready.

The door opened and the guests filed in. Victor led everyone in a short prayer, and the guests walked the by trays, each taking one. Otis watched them to make sure that once a person touched a tray, they took it. Can't have people touching a bunch of different trays; it would slow the line down to a crawl. "You touched it, you bought it!" he said.

I stood near Victor, keeping watch over some donated rolls/pastries (one package per guest) and, when Otis left, also over the line. "You touched that one; it's yours!" I called out to one guest. He didn't resist.

They were mostly men. Some had wheeled walkers -- I saw one put his tray onto the walker (he had a white hand-towel for it). He looked like he'd been a manager in a tech outfit -- I don't know how many tech workers have been laid off in Santa Clara county in the past year.

The room filled up pretty quickly. Victor told me that they don't usually get that many people. He explained to me about watching over the water spigot and the cups. Guests aren't allowed to help themselves to water; he's the only one authorized to touch the urn, because who knows what viruses these folks have on their hands. Someone came up to report major spillage; another guest had lost control of his tray.

Victor couldn't leave the water, so I trotted over there to see what was going on. It was the former tech manager. First, I asked him, did he get enough to eat? Yes, he was done. Not all that much had spilled onto the floor, and I tossed about half of it back onto the tray in a couple of seconds. "If you have a dustpan or something I can help clean..." he began.

“Idiot! Don't take away the guy's dignity,” I thought to myself. I told him I'd look for one, and took off with the tray. Otis said there ought to be a dustpan somewhere in the dining area, so I looked. No joy, but I did see mops in buckets. Grabbing a 3' length of paper towel (no perforations!), I raced back to the guy's table. We both picked up what was left on the floor, then I squeezed out a nearby mop so he could finish while I ran the garbage over to a trash can. He stood up and wielded the mop; when I got back, the floor looked fine. I thanked him and ran the mop back to its bucket.

Pretty soon, people started lining up for seconds, waiting first for everyone who hadn't yet had anything. The last guest come in, and the "seconds" people told him, "Go up to the front!" He hesitated, so I walked him up to where he could get his dinner.

Dinner was soon over, and the guests were gone. I gave Jim a hand with the dishes, mostly running stuff from the sinks to the storage shelves. I asked him about his daughters -- two are local, and he has three grandchildren nearby. Others worked various cleanup tasks. I'm sure Tim took at least a few hundred photos.

It was pretty cool working with the residents. They're asking the Lord to help them get their lives back together. They aren't pretentious -- they know they need help. And the staff: they're great. They're pros. They're serving the Lord and bringing glory to him.

What a great thing, to be a part of that!

Saturday, October 17, 2009

Some people knew it would take a million...

Reading James Fallows in the upcoming Atlantic, I came upon his piece "Blind into Baghdad" from nearly six years ago. About half way down you'll read someone quoting General Eric Shinseki:
Guys like Shinseki, who had been in Bosnia [where he supervised the NATO force], been in Kosovo, started running the numbers and said, 'Let's assume the world is linear.' For five million Bosnians we had two hundred thousand people to watch over them. Now we have twenty-five million Iraqis to worry about, spread out over a state the size of California. How many people is this going to take?
Thomas White
Secretary of the Army during Gulf War II
quoted in "Blind into Baghdad"
(J. Fallows, Atlantic, January/February 2004)
Wow, 200,000 US soldiers for 5 million Bosnians, and there are 25 million Iraqis. That's a million US Army regulars required, assuming the world is linear -- which it's not. I'm sorry, but Donald Rumsfeld is clearly a traitor, sending our boys (and girls) into Iraq in insufficient numbers, with insufficient armor. How many deaths is that criminal responsible for?

Heck, by the 2004 election even I knew that "W" had to go. Looking at recent history I just feel ill.

On the other hand, as I told a friend last week, "As a Christian I am not worried. No world lasts forever, much less a nation-state. But as an American I'm quite concerned" about our future.

Sunday, October 11, 2009

Quote without comment: Cox on Dawkins

I think of Richard Dawkins as the kind of Jerry Falwell of the atheists. In a way, he’s a kind of fundamentalist.
Harvey Cox

Friday, October 09, 2009

Daily Bible reading

What's the connection between technology and spirituality? On one hand, it's reasonable to wonder whether people are out of touch with the spiritual world because of the pervasiveness of entertainment media. On the other hand, there's . These folks offer 13 reading plans -- they'll send you an email every day or every weekday, depending on the plan you choose. You can get through the Bible in a year, or the Proverbs in a month (but you could just read chapter 1 on the 1st of the month, chapter 2 on the 2nd, etc). I'm on the lazy man's plan -- New Testament in a year, weekdays only.

If you prefer a pure hardware solution, Tyndale's excellent One Year Bible is pretty nice. Please feel free to refer to my daily essays, which are keyed to those readings.

So why did you mark this with the "computers" label?

Well, as it turns out, those emails you get from don't have a chapter of Bible text in them. Instead, they have pointers to a website; you click on the link and read the text from somewhere else -- I think.

So back before I started using an http-enabled email client, I wrote this little procmail script to go out and get the text from that website. The recipe looks like this:
* ^From:.* (or something like this)
* B ?? http://
URL=| grep http: | sed -n -e "1s/ *//gp"

TEXT=| lynx -dump "$URL" | grep -Fve http -e '['

| ( echo "$TEXT"; cat; )
See, "URL" gets the blank-stripped "http://..." string; we pass that as a parameter to lynx to get the text, then we remove the lines that contain '[' or 'http' and replace the message body with the Biblical text. Thank you !

So procmail and lynx are technological aids to spirituality too.

Other reading plans

There are a lot of 'em. Some of them involve charts and checklists; others are websites: There's also Our Daily Bread which gives you a little reading but doesn't take you through the whole Bible in a year or even a few years.

Wednesday, October 07, 2009

Phone bill processing: MySQL, Python, bash

Here's an automated phone call I was actually glad to get: it was Verizon telling me we were close to exceeding our "shared minutes". Well, I wasn't glad about being close to the edge, but I was glad to know about it so we could do something about it.

I went to the website and grabbed the call information: one of our lines had used 297 minutes already. "Drilling down" to that line, I got a list that looked kind of like this (numbers, etc., have been changed):
Date Time Number Minutes Desc
12/11/2008     7:35 PM     2025558713     2 Paris
12/11/2008 7:35 PM 2025558713 1 INCOMING
11/11/2008 7:19 PM 2025558713 1 Paris
12/11/2008 6:32 PM 2025559062 1 INCOMING
12/11/2008 4:34 PM 2025554587 1 INCOMING
12/10/2008 7:58 PM 2025553291 4 ATLANTIC CY
12/10/2008 7:54 PM 2025555994 1 ATLANTIC CY
12/10/2008 1:11 PM 2025550001 1 DATA
12/10/2008 1:03 PM 2025553862 2 EL CENTRO
[[... about 180 lines elided...]]

Unfortunately, this doesn't quite tell me what I want to know, viz., which numbers were the "heaviest" in minutes?

Fortunately, I have a Linux box, in my case SuSE 9.3 at home, and OpenSuSE 10.2 at the office. I snarf'n'barfed it into a file named "297m.txt" and considered how to process it.

A few possibilities came to mind:
  1. shell script -- using 'dc' or 'expr' to add up the times
  2. Python -- use dictionaries (one entry per phone number)
  3. MySQL -- using "SELECT PhoneNum SUM(mins) GROUP BY PhoneNum"
One could write something in Perl, Java, or C, but why bother? I think it was the great Brooks (in the Mythical Man-Month?) who said that you should use the highest level language that could be appropriate.

The shell (bash)

This is perhaps the least elegant of the three solutions we'll consider, but it has a sort of retro appeal, particularly if you're running on a 20th century computer, or one that just doesn't have a database or Python.

So... how to keep track of data? The shell has arrays, but it's a lot easier to just create one file for each phone number and add the numbers up in each one.
rm -rf purgeme # a directory to put the files in
mkdir purgeme
grep '^[1-9]' $INPUT | while read date time ampm num min city; do
# The grep gives you lines that begin with a digit..
# The "read" takes "words" from each line; note
# that you need a shell variable for each word --
# one for "7:35" and one for "PM" for example

echo $min >> purgeme/$num
# The above says: to the file named PHONE_NUM, append
# a line containing the number of minutes. So for the above
# sample data, the file named '2025558713' would have 3 lines:
# 2
# 1
# 1


# OK, now we have a bunch of files in the "purgeme"
# directory. We're going to have "dc" calculate the
# totals for each file. To do this we'll put a '+' at the
# end of each line in the file. We give "dc" a "0" to start
# with, add each number in, and finally we'll say "p" so that
# he'll give us a total. The whole thing goes into `backquotes`
# so that we have the result of running the program.
# OK, here goes:

for f in purgeme/*; do
echo ${f#*/} `{ echo 0; sed 's/$/+/' $f; echo p; } | dc`
# We put the phone number first (that "#*/" stuff
# says to remove everything from the beginning of
# "$f" until the first '/') and then the total
# calculated by "dc" (explained above)

done | sort -k2nr | head
# OK, the "done" is the end of the "for" loop. We
# sort the for-loop's output -- "-k2nr" means the key
# (thus 'k') is in field #2, numeric (the 'n'),
# and reverse order (the 'r'). The "head" means
# we only want the first 10 lines (the Top Ten phone
# numbers, as defined by minutes, that is).
When run on the phone bill data, the result is:
$ ./
2025553788 196
2025553291 141
2025555994 67
2025555521 57
2025556932 54
2025553799 45
2025555876 44
2025559980 38
2025557102 32
2025556930 23
As it turned out, the -3788 number is in our vendor's network, so that 196 there didn't push us toward our limit. The -3291 number, and the -5521 number, though, did. We were able to modify our calling patterns and avoid the onerous over-limit charge. Whew!


I've become rather a Python fan, which doesn't mean that I'm any good at it. But fortunately, this problem is simple enough that a few lines of Python will handle it:
#!/usr/bin/python -tt
fonebill = open("../297m.txt", "r")
mapping = {}
for a_line in fonebill:
(date, hrs, ampm, nr, mins, where) = a_line.split(None, 5)
# because some lines are blank or something
# Actually, this catches the headings "Date Time..."

# DEBUG CODE #print "nr", nr, "mins", mins
mapping[nr] = mapping.get(nr, 0) + int(mins)
# I don't know how to sort a dictionary, so make a list.
alist = []
for a_num in mapping:
alist.append((a_num, mapping[a_num]))
alist.sort(lambda x,y: cmp(y[1], x[1]))
for (x,y) in alist:
print x,y
We can run it like this and get results:
$ ./ | head
2025553788 196
2025553291 141
2025555994 67
2025555521 57
2025556932 54
2025553799 45
2025555876 44
2025559980 38
2025557102 32
2025556930 23
That "| head" you see there is so that we get only the Top Ten phone numbers (and the total of minutes for each).

No surprises -- the numbers and their totals match what we got using the other method. It's nice when computer science actually works.


This is in my view the most elegant and tersest solution. So here's the deal. You need access to MySQL server somewhere. If you're on a reasonably current GNU/Linux distribution, you can probably get one right on your desktop or laptop. The client program is called simply "mysql". You might have to install it (using "sudo rpm..." or "sudo apt-get...") and you might have to start the server (on my box it's "sudo /etc/init.d/mysql start")...

What makes this program so easy in MySQL is that we can create a temporary table, stuff our data in there, yank it out, and then pitch the temp table. Here is the unvarnished truth -- the commands I gave MySQL to produce the desired report:
  • use test
    Use (d'oh!) the database named "test" -- in other words, if you refer to table XYZ rather than <DATABASE_NAME>.XYZ, MySQL will interpret that to mean test.XYZ. The database "test" is world-writable I think in a default MySQL installation. By the way, "use" doesn't require a semicolon as a statement terminator.
  • create temporary table fb (nr INT(10), mins INT(10));
    Create a temporary table (really!) named "fb", for fone bill. It contains two up-to-10-digit INTeger fields, named "nr" (for NumbeR) and "mins" (minutes).
  • load data local infile 'xxx' into table fb fields terminated by ' ';
    This says to load the table "fb" with data from a file. In this case it's a local file (meaning here on the MySQL client). If not local, you have to supply the filename as it would appear to the server. I don't like to do that, because the server is likely running as another userid (like "mysql" maybe?) and it isn't necessarily allowed to read the file/directory that has the data. But it's my file, so I know where it is and certainly have permission to read it, hence I prefer "local".
  • select nr, sum(mins) as tot from fb group by nr order by tot desc limit 10;
    The "select" statement is the workhorse of SQL. Let me break this one down for you.
    • select nr, sum(mins)
      So we're going to select the phone number (nr), and we're going to add up (sum) the minutes (mins)
    • as tot
      This means we're going to refer to the column as "tot" rather than "sum(mins)"
    • from fb
      We're selecting from the table named "fb" -- i.e., the temporary table we created above.
    • group by nr
      Whenever you have a "sum" or "avg" or "min" (etc) in a table, you have to answer the question "of what group?" -- hence you need a "group by" clause in your SELECT. We're saying here to add up the "mins" among entries which have the same "nr" value.
    • order by tot desc
      If you don't say "order by" then MySQL will spit out the result in whatever order it feels like. Here we want to order by the value of "tot" (which is the sum of the minutes for each phone number) and we want the largest number first, hence I specified desc (for "DESCending").
    • limit 10;
      says we only want the first ten results.

You can probably think of several improvements, but here's the actual script that invokes MySQL with the above commands.

awk '{print $4,$5;}' ../297m.txt | grep '^[0-9]' > xxx
# That "awk" thing prints the 4th and 5th "words"
# from each input line. The result is fed to
# "grep", which gives us only lines that begin with digits
# (because we don't want that "Date Time Number..." line).

# The following line runs mysql giving parameters "-t" (tabular
# output) and "--local-infile=1" (because we're going to
# tell it to take something from a local inputfile soon).
# The "<< ThatsAllFolks" means "Feed this script
# to mysql's stdin from here until you see 'ThatsAllFolks'"

mysql -t --local-infile=1 << ThatsAllFolks
use test
create temporary table fb (nr INT(10), mins INT(10));
load data local infile 'xxx' into table fb fields terminated by ' ';
select nr, sum(mins) as tot from fb group by nr order by tot desc limit 10;

Running it gives this result.
$ ./ 
| nr | tot |
| 2025553788 | 196 |
| 2025553291 | 141 |
| 2025555994 | 67 |
| 2025555521 | 57 |
| 2025556932 | 54 |
| 2025553799 | 45 |
| 2025555876 | 44 |
| 2025559980 | 38 |
| 2025557102 | 32 |
| 2025556930 | 23 |
Now perhaps I should have said
select nr as 'Number Called', sum(mins) as Minutes
so that the table would have nicer headings, but hey, it's only ASCII "art" anyway.

I enjoyed writing that; I hope it was interesting, helpful, or entertaining.

Sunday, October 04, 2009

Power of prayer?

Just put this post on waywords. I hope you enjoy it.


by request of the ex-teenager

The trickiest part is getting the temperature right on the griddle. Then it's just a matter of paying attention; don't be distracted by things like making coffee or setting the table—do that before or after cooking.

Start the griddle preheating. Don't turn the stove up too high! At our house, putting the big burner at about 40% will work if you get started right away.

  • 2 eggs
Start whipping the egg whites in your KitchenAid® or other mixer; you want soft peaks but if you overdo it, not to worry. If you're watching your cholesterol, discard one of the egg yolks (the pancakes will still taste fine).

If you can place your sifter safely above the egg yolk(s), do so; otherwise sift into a separate bowl:
  • 1+1/3 C flour
  • 2 tsp baking powder
  • 1 tsp salt
  • 2 Tbs or more sugar
If you used a metallic measuring cup for the flour, now would be a great time to melt
  • 2-3 Tbs butter or margarine
in the cup on your griddle.

Combine the dry ingredients, egg yolk(s), and
  • 1+1/3 C milk (dairy or soy)
and mix until more or less uniform.

Stir in the melted butter.

Check the egg whites -- whatever state they're in at this point, they're probably done. Add them to the rest of your ingredients. You don't have to fold them in real carefully like you were making some kind of French cake or something; just mix them in.

The griddle is almost certainly at the right temperature; a drop of water should dance on the surface. Place about ¼C of batter, maybe a little more, onto the griddle at a time; turn once, when bubbles break and stay broken. (If you're not sure, lift a pancake edge and check the color; be aware that the heat under your griddle may not be uniform.)


When it's just the two of us at home, I used ½C flour (and an equal amount of milk), just 1 egg, and slightly lesser amounts of everything else. The main thing is the consistency -- keep flour and milk roughly equal and use about 1 tsp of baking powder for ½C of flour, 2 tsp for 1–1½C flour, and adjust the sugar, salt, butter as you feel like. For 1C or more of flour I'd use two eggs.

Saturday, October 03, 2009

A cinematic trend I like

Some decades ago, an InterVarsity staffer asked, perhaps rhetorically, when the last time I saw a movie casting married sexuality (as distinct from the one-night-stand variety) in a positive light?

At that time, I had to think back... to, ah, Donald Sutherland and Mary Tyler Moore in Ordinary People. Today, the lovely Carol and I went to see "Julie and Julia," which incidentally celebrates the happy sex lives of two married couples. It seems to me that this sort of thing is becoming more common, though that may just be my rose-colored glasses (yeah right).

We did enjoy the film. But I ate leftovers (thank you Shelly!) for lunch and made fried rice for dinner.

So how does pornography affect ...

I wrote earlier that I wondered how pornography affected the sex drive of middle-aged men.

Part of the answer appears in Doidge's book, The Brain that Changes Itself, on page 104. For at least some men, "pornography... initially helped them get more excited during sex but over time had the opposite effect." Doidge explains further:
Pornography is more exciting than satisfying because we have two separate pleasure systems in our brains, one that has to do with exciting pleasure and one with satisfying pleasure. The exciting system relates to the "appetitive" pleasure that we get imagining something we desire, such as sex or a good meal...

The second pleasure system has to do with the satisfaction, or consummatory pleasure, that attends actually having sex or having that meal, a calming, fulfilling pleasure.

ibid., p. 108
What pornography does is like creating the smell and sound of a fresh, crisp apple (say) or the aroma of a juicy steak -- while simultaneously sewing your lips shut so you can't ever have the apple or the steak.

This chapter in Doidge's book is not for the squeamish. It is, however, a healthy corrective for the thought that pornography is a victimless crime. The victims are first the consumers, then their wives/girlfriends, and (though Doidge doesn't say so) to a lesser degree every woman they come into contact with. And Dr. Doidge isn't a preacher or a scold, though he does advocate healthier practices.

True confession time: If I could press a magic button and somehow make all pornography and only pornography disappear forever from the internet, I'd press it. You're probably thinking all kinds of things about what pornography really means, how could you possibly know what effects a particular image will have on a particular man, etc. But before you condemn me as a moralistic scold (I wouldn't be scolding, just censoring), read the chapter -- I mean the chapter in Doidge's book, not some Bible chapter.

Oh, and I'd probably start looking for a button that could remove pornography from any other electronic media because of my own weakness, which I know is not uniquely mine. (The Marriott Corp. knows, too -- it gets them lots of money from business travelers and their employers.)

I'd do it for the same reason I'm against cigarette advertising targeted at kids (or at anyone else for that matter): that a society has a duty to its less capable members to protect them from those who want to exploit them. And don't kid yourself--a man addicted to pornography is no master of himself, any more than some teen-ager is when s/he gets hooked on cigarettes of any kind.

Facebook: Stopping certain apps from posting on your wall

So I finally figured out how to do this. Suppose for example that you don't want to see a lot of postings from FarmVille. If you move your mouse to one of the postings, a "Hide" thing will appear in the upper right of the posting, as you can see at left.

Now if you click while your mouse is on the "Hide" thing, or maybe it has to be on that little triangle (I'm not sure), you'll get a little menu -- allowing you to hide postings from this person, as shown in the photo at left (I smudged the name out on purpose), or from the application (FarmVille). I selected "Hide Farmville." When I released the mouse button, the posting was replaced...

by what you see at right.

Another example: "Which Friends Character Are You?"

Step 1: move the mouse near the entry you want to delete. "Hide" will appear in its upper-right corner as shown here at right.
Step 2: click on the "Hide" thing, then select "Hide <name of application>". Unless, that is, you want to hide all postings from a particular person instead.
Step 3: When you release the mouse button, you should see this (at right) in place of the entry you wanted to delete.
Step 4: If you change your mind, you'd better do it really really fast! Click on the "Edit options" thing before it disappears!