Deprecated: Creation of dynamic property wpdb::$categories is deprecated in /home/calvinwr/public_html/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$post2cat is deprecated in /home/calvinwr/public_html/wp-includes/wp-db.php on line 668

Deprecated: Creation of dynamic property wpdb::$link2cat is deprecated in /home/calvinwr/public_html/wp-includes/wp-db.php on line 668

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-theme.php on line 544

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/rest-api/class-wp-rest-request.php on line 960

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/rest-api/class-wp-rest-request.php on line 980

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/rest-api/class-wp-rest-request.php on line 992

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/rest-api/class-wp-rest-request.php on line 1003

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/class-wp-block-list.php on line 199

Deprecated: Creation of dynamic property wtfplugin_1_0::$package_slug is deprecated in /home/calvinwr/public_html/wp-content/plugins/divi-booster/core/wtfplugin_1_0.class.php on line 23

Deprecated: Creation of dynamic property Search_Filter_Post_Cache::$cache_table_name is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php on line 37

Deprecated: Creation of dynamic property Search_Filter_Post_Cache::$term_results_table_name is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php on line 38

Deprecated: Creation of dynamic property Search_Filter_Post_Cache::$table_name_options is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php on line 40

Deprecated: Creation of dynamic property Search_Filter_Post_Cache::$option_name is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/includes/class-search-filter-post-cache.php on line 41

Deprecated: Creation of dynamic property Search_Filter_Display_Shortcode::$plugin_slug is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php on line 20

Deprecated: Creation of dynamic property Search_Filter_Display_Shortcode::$is_form_using_template is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php on line 29

Deprecated: Creation of dynamic property Search_Filter_Display_Shortcode::$is_template_loaded is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php on line 32

Deprecated: Creation of dynamic property Search_Filter_Display_Results::$plugin_slug is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-results.php on line 31

Deprecated: Creation of dynamic property Search_Filter_Display_Shortcode::$display_results is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/includes/class-search-filter-display-shortcode.php on line 34

Deprecated: Creation of dynamic property Search_Filter::$display_shortcode is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/class-search-filter.php on line 87

Deprecated: Creation of dynamic property Search_Filter::$third_party is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/public/class-search-filter.php on line 90

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/calvinwr/public_html/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property POMO_FileReader::$is_overloaded is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 26

Deprecated: Creation of dynamic property POMO_FileReader::$_pos is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 29

Deprecated: Creation of dynamic property POMO_FileReader::$_f is deprecated in /home/calvinwr/public_html/wp-includes/pomo/streams.php on line 160

Deprecated: Creation of dynamic property MO::$_gettext_select_plural_form is deprecated in /home/calvinwr/public_html/wp-includes/pomo/translations.php on line 293

Deprecated: Creation of dynamic property Search_Filter_Register_Widget::$plugin_slug is deprecated in /home/calvinwr/public_html/wp-content/plugins/search-filter-pro/includes/class-search-filter-register-widget.php on line 34

Deprecated: DateTime::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated in /home/calvinwr/public_html/wp-includes/script-loader.php on line 333

Deprecated: Creation of dynamic property WP_Block_Type::$skip_inner_blocks is deprecated in /home/calvinwr/public_html/wp-includes/class-wp-block-type.php on line 347

Deprecated: Calling get_class() without arguments is deprecated in /home/calvinwr/public_html/wp-includes/class-http.php on line 328

Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/calvinwr/public_html/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Deprecated: trim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/calvinwr/public_html/wp-includes/class-wp.php on line 173

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/calvinwr/public_html/wp-includes/wp-db.php on line 3030

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/calvinwr/public_html/wp-includes/wp-db.php on line 3030

Deprecated: Creation of dynamic property WP_Term::$object_id is deprecated in /home/calvinwr/public_html/wp-includes/class-wp-term.php on line 198

Deprecated: Creation of dynamic property WP_Term::$object_id is deprecated in /home/calvinwr/public_html/wp-includes/class-wp-term.php on line 198

Deprecated: Creation of dynamic property WP_Term::$object_id is deprecated in /home/calvinwr/public_html/wp-includes/class-wp-term.php on line 198
You Can’t Plan For Virtue | Josh deLacy
Select Page

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /home/calvinwr/public_html/wp-includes/class-wp-block-type-registry.php on line 167

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /home/calvinwr/public_html/wp-includes/class-wp-block-type-registry.php on line 167

Deprecated: Using null as an array offset is deprecated, use an empty string instead in /home/calvinwr/public_html/wp-includes/class-wp-block-type-registry.php on line 167

I rarely wait more than an hour for a ride. The average, actually, is somewhere closer to half that. Sometimes I get out of one car, wave goodbye, and before I can even walk across the parking lot and pull out my sign, someone else pulls up and offers me a lift. Those are good days.

But in Crookston, Minnesota, I waited for three and a half hours on the side of Highway 2. I started in the early afternoon, on the edge of the 8,000-person town in a near-ideal spot: 35 mph speed limit, gas station across the street, and a wide shoulder and empty church parking lot for eastbound traffic. Drivers had more than ample time to see me, and abundant places to pull over. I thought I’d be in western Minnesota by supper time.

Traffic came in groups every few minutes, bunched together by the town’s last stoplight. Most people smiled or waved, old ladies stared blatantly and unabashedly, and a few drivers honked or gave a happy thumbs-up. No one, to my frustration, stopped. So after an hour, I blamed mid-day short-distance driving and hiked over to the Polk County Historical Museum to kill time until work let out for the day.

A glimpse into the town of Crookston

A glimpse into the town of Crookston

When you enter a building with a full backpack, people tend to ask what you’re doing. I buried the day’s frustration and swapped my story for the town’s. The elderly volunteers explained how–although the population was almost the same now as in 1910–Crookston had evolved from a place where “you were related to half the people in town” to a varied and mutable college community. For the next hour, I heard stories of growing up in Crookston, back when the park used to have a toboggan track all the way to and over the frozen river; of controversial current events, like replacing the outdoor public pool with an indoor one; and small-town portraits, such as the sixty-year old who keeps her property free of pigeons with a 12-gauge shotgun.

When I turned to leave, one volunteer handed me a twenty. “Before you go, you need to stop by Widman’s candy shop and try their chippers. The place is over a hundred years old, and still owned by the original family.”

I had time before the five o’clock traffic rush–a relative term, out in the small towns–so I accepted the money and got directions to Widman’s. A wonder of hitchhiking and couchsurfing and any traveling that puts you in contact with a local is getting the insider’s scoop. A long-time resident knows more than a guidebook, and a local can show you what defines the town, not what defines its tourism.

Widman's Candy Shop and its owner

Widman’s Candy Shop and its owner


A half-pound of "chippers"

A half-pound of “chippers”

My mood much improved, I trekked a mile through Midwest heat to see the old-fashioned candy shop. When I arrived, my backpack again prompted questions about my story. I finally managed to ask about the chippers, and the owner offered me a sample of a giant, ridged potato chip, coated in a quarter-inch of chocolate. They’re a local favorite, and understandably so. I ordered half a pound. But when I tried to pay, the owner refused. “Save it for a meal,” he said. “Keep on traveling.”

By the time I made it back to my near-ideal hitching spot, the traffic had begun. Instead of just a few mothers and elderly couples, I waved to intermittent streams of middle-aged men and high school kids.

This time, people stopped, though none to give me a ride. Instead, a car stuffed with Latino high schoolers gave me two water bottles, and then two black girls stopped to pray for me and feed me breadsticks, water, and a soft drink. Two butch, middle-aged women in a pickup offered me a ride in the wrong direction, and a kid I placed somewhere between “bro” and “thug” gave me two more water bottles and apologized for having a full car. In two hours, I gained: more water than I could drink, more than enough food for the evening, and more diversity than I had encountered in any other day on this trip.

So although my total wait time was up to three hours, although the after-work rush had ended and dark was approaching, and although Crookston offered no convenient place for me to spend the night, I was happy.

And then another van rolled up, this one with a mother and three high schoolers. “Can we invite you to dinner?”

My near-ideal hitchhiking spot. Plenty of room to pull over, a low speed limit, and a gas station on the other side of the street.

My near-ideal hitchhiking spot. Plenty of room to pull over, a low speed limit, and a gas station on the other side of the street.

Dinner would mean a break from the road, a loss of dwindling daylight.
“If you need to keep trying for a ride, I understand, but we’d really like to hear about what you’re doing.”

I squashed my inner planner. “Dinner sounds great.”

“Terrific. We’ll meet you at Happy Joe’s.”

The mother and her husband had promised each other they would never pick up a hitchhiker, especially not with children in the car. Sharing a meal, fortunately, was allowed. So we ate pizza and I learned more about Catholicism and St. Christopher, the patron saint of traveling.

“I couldn’t do something like what you’re doing myself,” the mother told me, “but I’m really encouraged by your trust. It’s inspiring, and refreshing to know that there are so many good people out there.”

Laden with leftover pizza, I returned to the road for one last shot. Half an hour later, and after nearly a full day of waiting and defied expectations, a University of Minnesota student pulled over and gave me a ride out of town.

It is impossible, I realized, to predict the details of a day that depends entirely on strangers. But much to my type-A chagrin, I am learning that unpredictability is not a bad thing. When I hitchhike, I expect apathy. I imagine vice. To be ignored by drivers, hassled by cops, assaulted by criminals–but I cannot predict virtue. Altruism is illogical, and so the generosity I encounter defies my expectations.

Beyond helping a stranger travel a few miles, a few patterns of virtue have emerged, such as dinner offers and invitations to stay the night, but much of the goodness I find remains unique and surprising, and it emerges from equally unique and surprising sources. A drug addict called me her new son and gave me a baseball cap; a Vietnam vet taught me a self-defense technique. A camp host gave me a free tent site, and one waitress let me spend a full rainy day in her diner, even during the Friday night dinner rush.

In time, perhaps, I will be able to expect and predict such goodness. The options and sources of virtue might be limited. But so far, I have been continually surprised and overwhelmed by generosity. Even from an analytical standpoint, the variety of virtue–and here I mean real virtue, not timid obedience or legalistic rule-following–the variety of virtue makes it far more interesting than the commonalities of vice.

Josh deLacy