Lord’s Prayer in Blank Verse

Great Spirit, Who created time and space,
we praise You for Your Love and handiwork.
May we support Your labor every day
to manifest Your plan for Love on earth.

We see ourselves each day strive to obtain
our nourishment for body and for soul;
may we grow to be constantly aware
of Your provision for our daily need.

Great Spirit, when our peers fail to assist
us in our efforts to get by and thrive,
please make us grateful that they are alive,
forgiving them as You’ve forgiven us.

And, when the tempter comes to snare
us with the doubts that we are worthy of Your Love,
Great Spirit make a Light shine from above
to show the Path that will deliver us.

Creator Who reigns over us in Love:
You serve us, showing us the way that we
may serve each other, making real Your reign
of never-ending Mercy, Joy, and Peace.

Reciting the Lord’s Prayer is so habitual that my attention can wander. As I have encountered others’ paraphrases, I have found that my attention is drawn more immediately to the meaning. I decided to put what this prayer means to me into my own words. At first, I imagined making it rhyme, but I found that blank verse was sufficient.

— Art Eschenlauer, Pentecost 2020

Creative Commons License
This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

The Archer and the Arrow

The archer took an arrow and drew it on his bow.
He shot it through the bulls-eye, not high, nor wide, nor low.
A hundred other arrows he drew and aimed and shot.
And while most arrows made their mark, alas, a few did not.
      God greets error with compassion and loving forgiveness.
      God loves us in our failure, not just in our success.

For sin is like an arrow that does not know its way.
I make two hundred efforts as I go through the day,
and, though some of my actions work out just as I aim,
the few of them with imperfections tempt me to feel shame.
      For Satan knows our weakness and takes delight in our cries;
      he wants us to despise ourselves, despair, and heed his lies.

But Jesus loves His creatures, whom He will not forsake.
Two thousand years ago, He knew every mistake
that I have made in my life, my errors great and small.
He knew me, and He loved me, and He forgave them all!
      Christ bids us seek completeness, with all heart, strength, and soul,
      but God forgives our imperfections, so we are made whole.

I wrote this in 1994 as a reminder of a lesson that I learned about my perfectionism in particular, but I have found it to be a strong counter-narrative to depression in general.

“Life” (George Herbert)

This is George Herbert’s poem “Life”, published in 1633, with a few modern spellings substituted and some notes below.

“Life” (by George Herbert)

I made a posie, while the day ran by:
here will I smell my remnant out, and tie
    my life within this band.
But Time did beckon to the flowers, and they
by noon most cunningly did steal away,
    and wither’d in my hand.

My hand was next to them, and then my heart:
I took, without more thinking, in good part
    Time’s gentle admonition:
who did so sweetly death’s sad taste convey,
making my mind to smell my fatal day;
    yet sug’ring the suspicion.

Farewell dear flowers, sweetly your time ye spent,
fit, while ye liv’d, for smell or ornament,
    and, after death, for cures.
I follow straight without complaints or grief,
since if my scent be good, I care not if
    it be as short as yours.

Notes and my interpretation:

  • The poet works to come into proper relationship with the fact that life can be very short. I find his treatment to be very hopeful.
  • The places that the poet names the physical senses of smell and taste suggest to me that he is expressing thoughts that are deeply sensed rather than intellectual abstractions. He does not merely think these thoughts, he senses and is fully invested in these thoughts.
  • “posie” (line 1) – a bouquet of flowers (sense 1) or an inscription in a ring (sense 2) [https://en.wiktionary.org/wiki/posy]. Flowers may have a scent, and an inscription may inspire (hopefully wise) deeds – so, a “scent” in this poem may be a proxy for his deeds.
  • “smell my remnant out” (line 2) – (looking ahead to line 17) consider the impact of how he spends his remaining years [http://www.georgeherbert.org.uk/archives/selected_work_43.html]
  • “tie my life within this band” (line 2) the circle of his life on which he reflects, and all of its “flowers” (i.e., his deeds) that it binds together (“band” is a synonym for “ring”).
  • “by noon most cunningly did steal away” (line 5) – (looking ahead to line 11) his life is half gone [ibid.]
  • “my hand was next to them, and then my heart” (line 7) – as the inscription in a ring is next to the skin, he senses the effect of his deeds.
  • “I took without more thinking” (line 8) – it did not take much thought to sense the lesson
  • “Time’s gentle admonition” (line 9) – he accepts the limitation of his time here on what he can do
  • “smell my fatal day” (line 11) – sense the imminence of death [ibid.]
  • “sug’ring the suspicion” (line 12) – making the thought of death less unpalatable [ibid.]
  • “after death, for cures” (line 15) – Some dried flowers are used as herbal medications; perhaps he imagines that his works (or even this poem) can bring healing after he is gone. Indeed, the poet died within the few years between when he wrote this poem and when it was published [ibid.], but his poems have made life more sweet for the generations that came after him.
  • “if my scent be good” (line 17) – if I can sweeten my world as flowers do.

Autumn Transition

Aster with Bumble Bee

Autumn Transition
by Art Eschenlauer

As days grow shorter, yet the bumble bees
contentedly sip nectar from the aster,
not bothered by the imminent disaster
that will befall them with the coming freeze.

Appearances suggest that I can thrive
with little loss of capability,
and, unencumbered like a bumble bee,
can flourish without care while I’m alive.

Inexorably, aging will impact
my cherished capabilities of youth.
One morning I may wake to face the truth
that I have few abilities intact.

Well-trodden ways that held delights for me
must yield to fresh paths of discovery.

License: Creative Commons Share-Alike with Attribution 4.0 – CC BY-SA 4.0

See also “Life” by George Herbert

“Redemption” (George Herbert)

“Redemption” by George Herbert, paraphrased by Art Eschenlauer

As long-time tenant to a wealthy Lord,
not thriving, I resolvèd to be bold
and make suit to the Owner to afford
a new, reduced-rent lease, and cancel th’old.

At Heaven’s manor, thus, my Lord I sought:
They told me that my Lord was lately gone
about some land on Earth, so dearly bought
quite long ago, to take possession.

Returning, knowing of my Lord’s great birth,
I searched accordingly in great resorts;
in cities, theaters, gardens, parks, and courts:

At length, I heard a ragged noise and mirth
of thieves and murd’rers: there my Lord I spied,
who said, “Your suit is granted,” and then died.

I paraphrased George Herbert’s poem “Redemption” (published in 1633 in The Temple; see e.g. https://tinyurl.com/GeorgeHerbertRedemption) because I wanted more modern language (more gender-neutral and less confusing), but I wanted to try to preserve the “feel” and meaning as best I could.

License: CC BY-SA 4.0

Cross Purpose

Cross Purpose:

A response to George Herbert’s “Redemption”

At Heaven’s manor’s door I stood and knocked
to ask my Lord about this mystery.
I hoped my loving Lord would help me see
how, from my sin, my spirit is unlocked.

“My cross is where your condemnation ends,
so you can view your past without despair,
and, freed from Satan’s sway, you can repair
relationships and start to make amends.”

It seems I want to have a better past
with facts that are much less unsettling.
I want my Savior’s precious blood to bring
me far from those regrets which hold me fast.

“My child,” my Lord said,  “that can never be.
Accept your past, and know you live with Me.”

“The peace of God, which passeth all understanding, shall
keep your hearts and minds through Christ Jesus.”
– Philippians 4:7 KJV

The Greek and Hebrew words term translated as “sin” both literally are the archery term meaning “missing the mark”[1].   It is not the error that hurts me the most, but rather the impact on the person whom I have hurt, along with its effect on our relationship (which is changed even though my victim may have forgiven me).  This makes it difficult to be fully present when reconciling with my victims while I am at the same time feeling wracked with guilt.  How does redemption change my relationship with the fact of what I have done?  I wrote this sonnet as I reflected on this question.

I like the sonnet as a way to structure thought: the form classically begins with contemplation of an issue (“the argument”) and then moves on to proposing how the issue might be addressed (“the resolution”) [2].

[1] https://en.wikipedia.org/wiki/Hamartia#In_Christian_theology
[2] https://en.wikipedia.org/wiki/Sonnet#Petrarchan_sonnet


License: CC BY-SA 4.0

Two Days After

Two Days After

Beside a boulder, Mary Magdalene
stands looking through the tomb’s door and dark space
at empty grave cloths lying in the place
where Jesus’ lifeless body last was seen.

And Crucifixion I see all the time
as Christ-within-all suffers at the hand
of scared folks like me who don’t understand
that they themselves are victims of their crime.

An empty tomb! So rare, bewildering.
Her hopes and dreams are shattered; with her there
comes grief and will to show the corpse the care
that, to the living, people would not bring.

So, blind with grief, by Mary now I stand,
Not recognizing Jesus-now-at-hand!

“… she turned around and saw Jesus standing there,
but she did not know that it was Jesus.”
– John 20:14 NRSV

License: CC BY-SA 4.0

John 20:16 Jesus said to her, “Mary!” She turned and said to him in Hebrew, “Rabbouni!” NRSV (Noli me tangere by Martin Schongauer, circa 1473)

When nslookup is missing but python is not

nslookup replacement

Here’s how to look up an IP address when you don’t have nslookup but you have Python:

python -c "import socket; print(socket.gethostbyname('google-public-dns-a.google.com'))"

Of course, this all goes on one line; I think that when you copy the code above it will have no line breaks.

Here’s how to look up a host name:

python -c "import socket; print(socket.gethostbyaddr('')[0])"

In this case, gethostbyaddr returns a tuple so [0] is needed to get the first member of the tuple.

netstat replacement

Unfortunately, a replacement for netstat is not as concise in python – 241 lines at
https://github.com/da667/netstat. But if you have wget or curl and an Internet connection you can do something like this:

python -c "$( wget -O - https://raw.githubusercontent.com/da667/netstat/master/netstat.py )"

tinyurl.com to the rescue:

python -c "$( wget -O - https://tinyurl.com/netstat-py )"


2018.05.01 – updated for python3 syntax


Docker – remove exited containers and dangling volumes

Here’s my dockernuke script which does what it says it does when it says it’s doing it.

echo find and destroy exited containers
echo ---
sudo docker rm $( echo $( \
sudo docker ps -a --filter="status=exited" -q) )
echo ...
echo find and destroy orphaned volumes
echo ---
sudo docker volume rm $( \
sudo docker volume ls -q -f 'dangling=true' )
echo ...
echo "tabula rasa!"

R equivalent to SQL select … group … by … having

In principle,  you can use the R ‘sqldf’ package for embedding SQL in R.  However, sqldf does not allow you to use R functions as aggregation functions.  This post is to help me remember how to translate SQL statements that include groupoing into base R.  Suppose the following test data:

test_df <- data.frame(
  sample      = c(1,2,3,4,5,6)
, sample_type = c(1,1,1,2,2,2)

A single aggregation can be performed to produce a single data.frame.  For example, this SQL:

select sample_type, count(sample) as sample_count
  from test_df
 group by sample_type 
 order by sample_type
having sample_count > 4

can be expressed in R as:

  x <- with(
    # FROM test_df
  , aggregate(
      # SELECT COUNT(sample) AS sample_count
      x = data.frame(sample_count = sample)
          # second column(s) of resulting data.frame
    , # SELECT sample_type
      # GROUP BY sample_type
      # ORDER BY sample_type
      by = list(sample_type = sample_type)
          # first column(s) of resulting data.frame
          # 'by' determines both the groups to be 
          #   aggregated and the order of the result
    , # SELECT COUNT(sample)
      FUN = length
          # R function to mimic SQL 'count' function
, # HAVING sample_count > 4
  x[ sample_count > 4, ]

This gets rather busy when aggregating multiple columns because each aggregation produces a data frame, so you need to “merge” the data frames (analogous to a SQL join):

pseudo SQL (pretending that SQL has statistical aggregation functions)

select sample_type
     , count(sample) as sample_count
     , mean(sample)  as sample_mean
     , var(sample)   as sample_var
  from test_df
 group by sample_type 
 order by sample_type
having sample_count > 4


  x <-  with(
  , {
      by <- list(sample_type = sample_type)
        f = function(dtf1, dtf2) merge(dtf1, dtf2)
      , x = list(
            x = data.frame(sample_count=sample)
          , by = by , FUN = length)
        , aggregate(
            x = data.frame(sample_mean =sample)
          , by = by, FUN = mean)
        , aggregate(
            x = data.frame(sample_var =sample),
            by = by, FUN = var)
, x[ sample_count > 4, ]