Main navigation

On December 12, 2013 I started this blog with the idea that I’d post something every day for a year.

Except for two days, October 31 and November 1, I did.

It was a fine experiment. Now it’s over. I’m not done with blogging, just with this blog. Thanks to everyone who followed along, even if just occasionally, and to all who left comments.

You can still find me at iCaspar.net. Unlike this blog, where I published something, anything, every day without much regard for whether it was really interesting or readable, I’ll spend a little more time on posts for the iCaspar blog. So, while it won’t be daily from here on, I hope it will be better material.

Somehow, yesterday under two and a half feet of snow, the dog managed to sniff out the half-frozen carcase of some small animal that had died and partially rotted on the hill out back. He was supposed to be out taking a pee, but instead he ate most of whatever it was. He brought us back a bone, because we sometimes give him bones when we have ribs for dinner and he wanted, I’m sure, to return the favor.

By 4:30 he was starting to feel that tinge of regret in his stomach. You know, that tinge of regret you get later in the evening on Thanksgiving. That regret. He started whimpering to go out again.

We were reluctant to let him out. We didn’t want him to go back and eat more of whatever it was, like you sometimes do later in the evening on Thanksgiving. But he seemed very earnest about needing to go, so we let him.

Then I had to blow more snow out of the driveway. You can’t have a crazy-ass dog running around when you’re trying to snow-blow. You’d end up grinding up the dog and spraying him all over the neighbor’s yard. So we kept him in for about 45 minutes. It turned out to be too much. When I came back in, Brooke was mopping up diarrhea in the living room. All the windows were open to air out the smell. We started lighting candles with whatever fragrance we could find.

Then the power went out.

We got out the flashlights, lit more candles and continued to mop in the dark. We wondered if we ought to close the windows, but decided to keep them open.

The power came back on 20 minutes later. Eventually, the smell dissipated. For the rest of the evening we let him go out every half hour when he whined. Then every hour or so through the night. This morning he was still sick. At least three times.

There’s not really a point to writing this down and posting it for all to see. Except, you might draw from it a cautionary tale to remember when you’re thinking about getting a dog.

We got something over a foot of snow last night and it’s still coming down steady.

My alarm went off at 6 am simultaneously with the phone ringing. The phone was the school’s robo-caller announcing that school is closed and tonight’s winter concert is rescheduled for tomorrow night.

I thought about going back to bed, but the kid, who normally requires being dragged out of bed for school, had heard the phone ring and had gotten up. Also, the three cats and the dog did not understand that snow days are for sleeping in and wanted fed at their usual breakfast time.

Bonfire of the Vanities by Tom Wolfe. An edge-of-your-seat account of a cast of characters most of whom deserve what’s coming to them. And yet, watching their deserved fates unfold is like watching a train wreck in excruciating slow motion.

Outliers by Malcolm Gladwell. Wherein Gladwell discusses his now famous 10,000 hour rule, making the case that there’s more to the stories of runaway successes than meets the eye.

Intuition Pumps and Other Tools for Thinking by Daniel C. Dennett. By “intuition pump,” Dennett means “parable.” As you’d expect, a lot of food for thought. These aren’t just random, though. Dennett’s point is to debunk the idea that human consciousness involves a separation of body/brain and soul, and that free will and a deterministic universe are not mutually exclusive.

The Sixth Extinctionby Elizabeth Kolbert. The world has seen five mass extinctions over the past 500 million years. Kolbert explores the very real possibility that humans may be responsible for the sixth.

Bird by Bird by Anne Lamott. A book of advice about writing. Everything from “Shitty First Drafts” to why publication isn’t all it’s cracked up to be. Plenty of observations about getting through life in spite of being totally screwed up most of the time.

The Sense of Style by Steven Pinker. Also a book of advice about writing, but from the perspective of cognitive science. Pinker looks deeply at what makes good writing good that goes way beyond what your eighth grade English teacher told you about diagramming sentences.

Writing Down the Bones by Natalie Goldberg. Of the three books about writing on this list, this one sticks mostly to just the advice about writing. While it has more than a few bits of good advice for writers, it wasn’t as interesting.

The Assassination of Margaret Thatcher by Hilary Mantel. A collection of short stories. I admit to having only really “got” half of them. Maybe because I’m just not British. Maybe because I’m just not as smart as I thought. But the ones I did get were skin-crawlingly good.

Small Victories by Anne Lamott. A collection of autobiographical stories about how Anne has found grace in unlikely places and people.

What to Do When It’s Your Turn by Seth Godin. A couple people are getting copies of this for Christmas.

Our friend Regina had made plans to be with us today and tomorrow. She emailed this morning to say she wasn’t feeling well and couldn’t make it.

Naturally, we are disappointed. We always enjoy her visits, and since she keeps coming back we can only assume that she enjoys coming. We hope she feels better soon.

In lieu of company, I will instead start on my Christmas card list this afternoon. It will be the earliest I’ve ever started on a Christmas card list. Most years I start it on December 26, or even December 30.

I’ve written before about blocking semalt.com and other referrer spam. In most ordinary cases, the couple lines added to the .htaccess file suggested in the previous post will do the trick. However, I’ve come across a situation where blocking sites like this using .htaccess doesn’t work. Specifically, it doesn’t work when you’re running certain kinds of caching.

Why? Because when you’re running behind a caching layer, pages are served from the cache instead of by the Apache webserver. Unless semalt happens to be the first thing to hit your index page after a cache purge, the cache just serves the page it has in memory. The .htaccess file is never consulted about any of this. But when the page loads, even from memory, semalt gets tagged as the referrer when your WordPress (or whatever) script loads. Tilt!

This isn’t really a problem if you’re running on your own VPS or dedicated server. You just move the referrer check from .htaccess out to the Varnish config. If you’re running your own VPS or dedicated server and have access to your etc/varnish/default.vcl file, there’s a pretty easy how-to for getting this done on Omninoggin.

But, if you happen to be in a shared hosting environment and don’t have access to the Varnish config, the tactic of last resort is to block the offending sites within WordPress itself. It’s less than ideal, because you’re actually having to process the spam requests within the PHP environment, and that takes more server resources than blocking it farther up the line. (But, if you’re in a shared hosting environment, you’ve already made the decision to trade off some of the ideal for cheaper hosting. Shared hosting with any site caching is about as primo as shared hosting gets, so you can’t complain too much.)

To minimize the resources used by these unwanted page requests, the trick is to recognize and deal with them as early as possible in the WordPress page-load cycle. With that in mind, I’ve written a quick and dirty plug-in, based on a couple lines of code provided to me by Ivan Yordanov, one of the tech support gurus at my awesome host, SiteGround.

It’s a “Must Use” plugin. That’s different than the usual WordPress plug-ins that you download from the plug-in repository on wordpress.org. You have to install it manually. I’ve coded it this way because MU plugins load before any other plugins or theme files, and can be hooked earlier in the page-load cycle, before any other output happens and before WordPress starts building the page.

This is offered on a “use at your own risk/your mileage may vary” basis. To use it, copy it and save it in a file called referrer-blocker.php (or pick your own name, so long as it’s extension is .php). Save the file in your wp-content/mu-plugins/ directory. (You may have to make that directory, since it’s not part of the usual WordPress install.)

<?php
/**
*
* Referrer Blocker mu-plugin
*
* @author Caspar Green <http://iCasparWebDevelopment.com>
* License: GNU 2.0 or later
* Creative Commons 4.0 Attribution-ShareAlike
* Use at your own Risk. Your mileage may vary.
*
* This plug-in is for use in special cases where WordPress is operating
* behind a cache (such as Varnish or Google Pagespeed) in a shared hosting
* environment, where pages are served from the cache rather than from Apache
* and where the shared hosting environment restricts access to the cache configuration.
*
* This plug-in is meant for use as a mu-plugin (see http://codex.wordpress.org/Must_Use_Plugins).
* It must be manually saved to the wp-content/mu-plugins/ folder. (Most users will need to
* create this folder, since it isn't installed with a default WP install.) Once installed,
* it cannot be deactivated or uninstalled from WordPress admin.
*
* Hat-tip to Ivan Yordanov @SiteGround Hosting (http://siteground.com) for pointing out this work-around.
* The idea for how to use php to block referrers behind the cache is his;
* I just turned it into a plugin.
*
*/
add_action( 'muplugins_loaded', 'iC_referer_blocker' , 1 ); // We want this to run RIGHT NOW!
function iC_referer_blocker() {
// Add the domain names of referrers you want to block here.
// Remember, the longer the list the more time it takes to check!
$bad_referrers = array(
'semalt.com',
'buttons-for-website.com'
);
$ref = getenv( "HTTP_REFERER" );
foreach ( $bad_referrers as $referer ) {
if ( ( strpos( $ref, $referer ) ) !== false ) {
header( 'Location: http://' . $ref ); // Send them back where they came from.
}
}
} // end iC_referer_blocker()

Quadrennial \kwä-‘dre-ne-əl\ adj 1: consisting of or lasting for four years 2: occurring or being done every four years

I’d estimate that I already knew ¾ of the words that came up over the year. Of the remaining ¼ I can remember only a smattering. I suppose if I haven’t had any use for them up to now I’m not likely to need them.

The one new word I can recall a few months later is stridulate. It means (usually referring to insects like grasshoppers or locusts) to make a shrill sound by rubbing the legs, wings, or other parts of the body together. And indeed, it did come up when we were preparing to teach insect life cycles to kindergarteners last October.

I’ve been keeping the financial records for the church for the last two years. Why I’m doing that is a long story. But I am.

Today, though, I’m beginning the transfer of the records to the new bookkeeper. The transition will take a few weeks. I’ll be on hand until the W-2s from 2014 are all mailed. But for regular record-keeping, I’ll be turning things over by mid-December. Then I’m done.