Category Archives: Uncategorized

Herd Immunity: Why it Won’t Happen

COVID-19 is not going away, not now, possibly not ever.  “Herd immunity” isn’t possible,  and even if it was, politicization of the pandemic engenders misinformation and subsequent widespread opposition to the steps needed to achieve it, causing cycles of uncontrolled outbreaks and needless deaths.  Let’s discuss the reasons why these misconceptions persist.  Yes, this is an opinion piece, but backed up with references to scientific data.

Herd immunity;

As a means of reducing the incidence of the disease, “herd immunity,” which some facets of society advocate as the solution, is off the table, because we are not the only herd in the equation:  SARS-COV2 has been identified in white-tailed deer[1], native to most of North America. The deer are not affected by the virus, but are a repository for the virus.  This is a well-known disease vector for other zoonotic diseases like Lyme disease, which pass from an animal repository to humans through arachnid bites.  Even if all humans are vaccinated against the virus, which—in the present political and world economic environment—is never going to happen, the virus will always be in the environment, lurking in the woods, literally.

The good news is, if vaccination levels in humans is high enough, initial exposure through the animal vector, like the “bird flu” SARS virus of the early 21st Century, would be confined mostly to hunters and wildlife management workers, and can be more easily isolated.

The bad news is, the infection can spread person-to-person if not detected and isolated early.  Hunters need to be taught proper handling techniques, but compliance is not likely, considering that hunters tend to be in that segment of the population that currently disregards prophylactic procedures designed to limit spread of the virus, like masks, social distancing, vaccination, and quarantines.

Anti-vaccination politics:

Is it safe? Yes, it is safe: most of the objection on these grounds is fueled by disinformation and extreme exaggeration of the statistics, which include possibly unrelated medical events observed in the vaccinated population, for which there is no correlation.

There is also widespread misunderstanding of how the new technique of using messenger RNA to stimulate antibody production by translating the RNA to the spike protein that is the surface protein of the virus.  mRNA is an intermediate product in the molecular biology central dogma pipeline  and cannot be translated back into DNA in the body, therefore cannot alter our genomes, nor can it replicate, as the complete virus does after hijacking the replication mechanism of our cells.  That part of the virus RNA is missing: only the RNA that translates to the spike protein is present. Hence, the initial reaction to the translated spike protein is controlled, and passes quickly. [2]

Is it effective?  Yes: while cases of vaccinated persons contracting COVID-19 occur at small but statistically significant levels, the vast majority of persons hospitalized with COVID-19 and nearly all of the deaths attributed to the disease have been in the unvaccinated population. [3] Because the virus is rampant in the population, prudence dictates that we continue to use prophylaxis—hand washing, masks, and social distancing—to reduce probability of exposure, especially in mixed vaccinated/unvaccinated and non-compliant populations.

As far as how long it is effective, studies[4] conducted since widespread use of the vaccine indicates variable loss of efficacy over time among the different formulations, leading to recommendations for booster doses three to six months following initial one- or two-dose vaccinations.  Again, this is not unheard of for viral diseases, since viruses mutate rapidly and antibodies naturally dissipate somewhat over time: which is why we get an annual flu vaccination and boosters periodically for other diseases.

References:

[1] https://www.pnas.org/content/118/47/e2114828118

[2] https://www.cdc.gov/coronavirus/2019-ncov/vaccines/different-vaccines/mRNA.html?s_cid=11344:how%20mrna%20vaccines%20work:sem.ga:p:RG:GM:gen:PTN:FY21

[3] https://www.cdc.gov/mmwr/volumes/70/wr/mm7037e1.htm

[4] https://www.thelancet.com/journals/lancet/article/PIIS0140-6736(21)02183-8/fulltext

Quarantine Diaries: Volume 2, Chapter 1; Clouds in My Coffee

[Donald,] you’re so vain
You probably think this [post] is about you…

(with apologies to Carly Simon)

It’s been a long time since the last episode in this diary of the Plague Years: not that I haven’t been writing, but the tumultuous events of the past 100+ days have been impossible to coherently catalog, beginning with the failed Insurrection, the subsequent elevation of Joseph the Pretender to the throne, and the retreat of Emperor Donald I to his castle by the sea, in exile, following the failure of the Republican Party to properly steal the November election, despite widespread voter suppression, and the nearly total dismantling the postal service in an attempt to stop mail-in voting.

Or perhaps, a Deep State Cabal engineered the defeat with massive voter fraud, miscounts, ballot-box stuffing, the dead brought out to vote, and other unspeakable (and possibly non-existent) nefarious tactics.  Why the Republicans assume that all dead people and illegal immigrants vote Democratic, I can never understand.  The death of truth means we will never know for sure, but the Republic is surely mortally wounded, though continuing to stumble forward with the same zero-sum all-or-nothing winner-take-all accept-no-compromises division that has characterized partisan politics for the past forty years since King Ronald I ascended to the Oval Office and started systematically dismantling Government By, For, and With the People, declaring it the source of all problems.  The Party of Trump is a distorted and warped version of the Party of Reagan and is a very long way from the Party of Lincoln.

100 days ago, I took the following notes, but the waves of change were overwhelming, so I didn’t publish then–it’s best to look back from the safety of a more bucolic (by comparison only) future:


We’ve come to the end of a seemingly endless display of vanity masquerading as a presidency.  That’s good news, but there’s bad news.  Trump is going away, but Trumpism isn’t.  Trump has refused to concede, and is ceremoniously inaugurating a shadow government in parallel with the new administration that, at his urging, is being rejected by half of the voting population: the capital of Trumpistan (my terminology) is being relocated to Palm Beach, Florida.  Nearly 48% of the population of the territory formerly occupied by the United States of America (now decidedly Disunited)  is ready, willing, and able to exercise their Second Amendment Rights against the other 52% of us who remain relatively sane and hopeful, though deluded in thinking that the United States still exists as a viable entity and that installing a new administration will fix what’s wrong.

And, there we are.  Pundits have repeatedly decried the insurrection and failed coup of January 6, 2021, stating “This is not who we are.”  They’re wrong.  This is exactly who we are, and therein lies the problem.  The country has become increasingly divided because every one of us has a broad definition of policies and procedures “up with which we will not put,” to channel the phrase attributed to Winston Churchill.

For nearly two and a half centuries, with exception of a half-decade in the middle of the 19th century, the country has generally been willing to suffer through at least four years of the opposite point of view every once in a while, tempered by shifts in the legislative branch every two years that tends to temper the imposition of that point of view, thus keeping the lid on and the pot from boiling over.  That worked fairly well, though the machineries of government were, in accordance with expectations in such an atmosphere, ponderous at best and ineffective at worst.  Laws got made and programs got funded that few people liked but most people tolerated, which kept the ship of state on a more or less even keel–until the latter half of the 20th century, when one of the two official political parties decided to up the ante.

While the Democratic Party focused on issues of civil rights for all segments of society, environmental health and safety issues, and national infrastructure, the Republican Party focused on deregulating industry, reducing taxes on corporations and the rich, and consolidating power.  While the main efforts of the Republicans should have been unpopular with a large segment of the public, especially those whose environments were affected by industrial practice and whose communities lacked in adequate infrastructure due to reduced tax revenues, the Republican Party appealed to the religious beliefs of that very segment of society, promising to enact or preserve laws that reflected the restrictions of those religions, imposing them on everyone.  This created a large class of single-issue voters, who would vote to impose their convictions on all, regardless of issues that had wider affect on the population as a whole.

The central issue that dominated politics for the next half-century would be a battle over the newly-won civil right of women to seek abortion to terminate an unwanted or dangerous pregnancy.  Meanwhile, general health-care costs skyrocketed, wages for working-class stagnated, and infrastructure, built up in the boom after WWII, deteriorated.  Fiscal conservatism, the core political tenet of the Republican Party, gave way to authoritarianism in the quest to hold on to the voting base.   To further cement their electability among the rest of the largely rural base that resented regulation and saw little benefit from city-focused infrastructure, the Republicans vilified the progressive stance of the Democratic Party by calling it Socialist, inferring it would lead to the communist form of socialism, with government control and ownership, as practiced in the failing Soviet Union and in the rising economic power of Communist China, even though democratic socialism in other Western countries meant government regulations and taxpayer-funded projects that brought inexpensive healthcare, generous pay and good working conditions to all.  Taking advantage of the voting power of the smaller and less densely populated large states, Republican legislators used redistricting to dilute the concentration of Democratic-leaning voters in cities across the nation.  The effect is striking in the fact that Republicans have lost the popular vote for President in seven of the last eight elections, but still won the Presidency in four of those elections because of the distribution of electoral college votes.

The other basic tenet of the Republican platform was firm insistence that the Second Amendment of the Constitution meant unrestricted ownership of guns, despite the wording that implied that citizens were entitled to bear arms as participants in a “well-regulated militia.”  The wording was clearly a reaction to the conditions of the colonial period, where the British overseers kept the peace with the aid of Prussian mercenaries rather than volunteers from the colonists.  The phrase“A well regulated militia, being necessary for the security of a free state, the right of the people to keep and bear arms, shall not be infringed” has been interpreted as all but a mandate for patriotic Americans to own as many guns as they can afford.  The obsession with guns in the hands of the public resulted in the United States having the highest rate of death and injury by firearms of any nation on the planet, with mass shootings and street warfare.  And, instead of protecting the republic, the proliferation of military-grade weaponry in private hands has created an underground army ready to overthrow the government if it displeases them.  As we witnessed on Insurrection Day, 1/6/2021, when factions unhappy with the result of an election, and, at the urging of the outgoing President, mounted an insurrection in an attack on the Capitol to prevent the largely ceremonial congressional certification of an election previously certified by the state legislatures.  The inauguration of the 46th President in the history of the Republic found the Capital on a war footing, with more troops from the “well-regulated militias” of the states in place at the Capital than in foreign combat theaters, and many more in state capitals around the country.

Not surprisingly, at the core of the current internal conflict is the fact that the War of 1860-1865 never really ended.  Chattel slavery turned into institutional racism, with laws and practices to prevent the descendants of former slaves from attaining full rights and privileges of citizenship.  Police brutality in dealing with citizens with African ancestry and recent immigrants from other than European countries is pervasive and rampant.  In a country where religious freedom is baked into the Constitution, there are cries to make Evangelical Christianity the official religion, with grudging toleration for Roman Catholicism and the traditional Protestant sects.  White supremacy is rampant, with hostility toward Jews as well as African Americans, Muslims, Sikhs, and other religious, ethnic, and racial groups.

Mr. Trump is not the cause of the growing schism between progressive and conservative factions of our society, but his open approval and encouragement of racism and xenophobia has fanned the smoldering embers of the Civil War of 1860-65 into imminent collapse of the Republic in 2021.  There is no longer a North and South: the racial/ethnic bias and smear propaganda against progressivism labeling it as socialism or worse divides neighbor against neighbor.  The Great Melting Pot of America that celebrated diversity and welcomed ambitious newcomers eager to build a great society of all of humanity is shown as a thin facade, with the fear and resentment and prejudice bursting forth into clear light.  The end isn’t pretty: once the pot boils, you can’t put the spaghetti back in the box.  We, as a society, have to agree to be civil and tolerant or die.

Already, the politicization of the COVID-19 pandemic, with the divide between taking precautions and rejecting all precautions has spread disease and death like wildfire.  Rejection of science to justify unregulated production of greenhouse gases has brought actual devastating wildfire, season after season, and ever more destructive weather events. In the past, climate change has been triggered by transient events: sunspots, volcanism, etc., which is largely self-correcting in a few years or decades.  The current situation, with fossil fuel usage pumping the equivalent of multiple volcanic eruptions into the atmosphere per day, coupled with the emergence of runaway feedback releasing millions of years of stored carbon from the Arctic tundra and ocean bottom and loss of albedo from the melting of the northern ice cap, is shifting the planet toward a climate that may persist for hundreds of thousands of years, with a corresponding mass extinction of life evolved to exist in the relatively stable norm of the past million years, unable to adapt to the rapid change.  The refusal of the pro-industrial political factions to acknowledge the problem, let alone do anything to mitigate it, is suicidal.  Unfortunately, the natural feedback loop has been set in motion during the past three decades since the denial has dominated, so that any aggressive measures instituted in the near future will only serve to slightly, if at all, slow the catastrophic speed of the collapse.

North America is not a safe place to be right now, and won’t be for years or decades to come.  Trumpism is here to stay.  The divisions of the mid-19th century that tore the country apart once have persisted through seven generations: the current rent in the fabric of society won’t heal, either, if we keep picking at it, as we did with the resistance to the civil rights acts and other social reforms in the last 60 years.  During closing arguments in #45‘s second impeachment, it was almost assured that the Republican contingent in the Senate will refuse to convict him of inciting insurrection, despite overwhelming evidence of his long-standing intent to refuse to concede, his blatant stoking of the radical right nationalists, and his refusal to call in the Guard to quell the insurrection once underway.  When it became obvious that the initial surge had failed to decapitate the legislative branch, he called retreat to protect the insurrectionists, as the city appealed to nearby states for assistance.  The Republic is shattered, as certainly as it was in 1861, but more dangerously, as there is no Mason-Dixon Line to bifurcate the factions into geographic divisions.


Meanwhile, 100 days later, the Red States are frantically legislating to make it impossible for non-Republicans to vote in the next election, with much less subtle variations on poll taxes and phony literacy tests: eliminating absentee mail-in voting, closing polling places, prohibiting food and drink in hours-long lines, voting on work days only, etc., essentially declaring the definition of fraud to be when the people chose their leaders instead of the leaders choosing their voters.  Who knows, with climate change, we may be able to soon grow our own bananas and become a true Banana Republic, complete with Dictator For Life and quasi-military coups that actually work.

Of course, this is much more likely while everyone is preoccupied with either a pandemic that is actually killing people or pandemic propaganda from a Deep State to distract and confuse the population in order to mislead them.  The truth is out there, but no one can agree on which version is the *real* truth and which is fake. ‘Nuf said about that, but meanwhile the death rate is up, undeniably, so there might possibly be a correlation with a world-wide pandemic, or it might just be a coincidence. a “cAt of doG,” as dyslexics would say.  $DEITY gets blamed for a lot of preventable calamities these days, whether or not the blamers believe she exists.  Even though the news is mostly still bad, at least the 5:00 am tweet storms stopped when Twitter pulled the plug on the Tweeter-in-Chief.

We’ve passed the first anniversary of the Great Lockdown, when The Machine Stopped.  Keeping isolated, participating in group activities over videoconferencing and putting on shirt, pants, shoes and mask before leaving the house is second nature.  Everything has changed.  The Old Order is gone, perhaps forever.  The New Order may be still-borne and all will collapse as the plague continues to ravage the land with a ferocity not seen in other corners of the planet, except possibly other places where compliance with precautions is seen as a subversive political act.

Clouds In My Coffee…

This new year began with the realization, a few hours before 2021 was ushered in to be a continuation of 2020–the year everyone wanted to forget–that I am slowly going blind, having flunked my biennial eye exam with no arrangement of lenses able to make the eye charts readable.  The medical system moves ponderously, but there is a faint glimmer of hope ahead: I’m scheduled for eyeball reconstruction near the end of April.  Meanwhile, I’ve cranked up the magnification on the computer screen and try not to drive anywhere I haven’t been before, though I’m probably not legal to get behind the wheel at all.  Reading has fallen off markedly, and my computer programming class has stalled: I make a lot of typos, unable to distinguish {} from [] or (), which have different meanings in programming, and there are a lot of them.  And, research involves a lot of reading.  As noted, my writing has slowed as well.

The surgery can’t come any too soon.  I’ve chosen to be rebuilt as a far-sighted person, having lived nearsighted for the past 65 years, ever since my music teacher sent me for an eye exam when I kept knocking over the music stand to get close enough see the notes and got them wrong anyway.  I’d just to like to see what it’s like, and being of an age when I needed readers anyway, but to remove correction to see close, I’ll need a collection of drug-store “cheaters” yet to add correction to read and work on the computer, afterwards.  I may regret the choice, as some have, but the majority of cataract patients choose distance vision.

The Quarantine Budget:

A month or two ago, I fired up the old Windows computer in order to file the annual Federal Income Tax, for which we use a software tool only available on the Microsoft platform (and Apple’s macOS, which we don’t have: the Windows machine cost less than $150, refurbished and upgraded, when we bought it several years ago to replace our out-of-date Windows XP virtual machine installation.)  In the process of filling out the forms, I had an opportunity to go over the financial records for the past year.  Here’s an interesting view of how our life changed, by looking at expense categories for some of our activities in 2019 versus the period March 2020 through March 2021.

Not surprisingly, the fixed household expenses remained pretty much the same.  Fortunately, the Social Security checks kept coming regularly, so the lights stayed on and the bank didn’t come for the house, but a lot of what we call daily life changed a lot:

Combining together the categories of Auto Fuel, Clothing, Groceries, Dining Out, and vacation travel, those expenses overall were cut in half.  But, the distribution was shocking:  Auto Fuel cost reduced 80%, and the rest, except Groceries, were reduced by 90%.  Groceries increased by 30%.  Our overall food budget decreased by 22%, and the drastic reduction in all forms of travel accounted for the other 23% of the 50% aggregate reduction of those expense categories.

Interesting things happened: I had to add more salt in my cooking, since everything was from scratch and we didn’t eat out.  We cut our grocery trips to once a week instead of nearly every day.  We ordered a lot of food on-line, either for UPS delivery or drop-shipment to a pickup site.  I collected a wider variety of ethnic recipes, and ordered spices on-line, adding Spanish, Moroccan, Turkish, and Ethiopian vegetarian dishes to our repertoire of mostly East Indian and Asian Fusion dishes.  We bought lentils, chickpeas, and black beans dried in bags instead of canned, and use our Insta-Pot to cook them for stews, soups, and hummus.  A grandson gave us the sourdough starter he made as a home lab project for remote schooling, and we bought another bucket of wheat berries to feed into our flour mill, so my weekly bread-baking branched out to whole wheat with sourdough and from no-knead round dutch oven artisan loaves to using the European by-weight ingredient ratios and kneading techniques to make cinnamon rolls, batard loaves, and focaccia, baked on a stone.

More medical issues:

Unfortunately, Judy’s battle with adhesions from past surgeries returned with a vengeance this spring.  She had been dropping favorite foods one after the other for many weeks, and finally went to Urgent Care when no amount of GERD remedies remedied anything.  She ended up in hospital for several days, but no nasal-gastric tube and slowly weaned off clear liquids and sent home, stable but not better.  Consequently, she’d been living on smoothies and soft foods, leaving me to figure out how to cook for one with all of the staple stores we have accumulated, and how to eat up recipes for 4-6 servings before they go bad.  She has a consult scheduled with a specialist, but, like all specialties these days, appointments are booked many weeks ahead.  But, life is what happens when you are making other plans, and at the first of this week, we made an emergency trip to Olympia, where she was admitted to hospital and immediately wheeled into surgery, complete with the dreaded NG tube. Now, at the weekend, she is finally back home, slowly recovering.  No resection this time, but a bit more invasive surgery, so the normal light activity rules apply.  We’ve conscripted our son to chauffeur us to Tacoma and back for my eye surgery next week, and to our second COVID-19 vaccination, since she will be on driving restrictions, as will I.  Does this mean we’re grouped with “old people” now?

Van Life in the Age of COVID:

Meanwhile, in the chaos of 2021, the wet winter brought yet another round of fuzzy clumps of mold to our 25-year-old bicycle hauler and stealth camper.  We managed to subdue it long enough to make a couple of forays out on the bicycle: once on a weekend excursion to the Rain Shadow “up north,” and another to the airport for a quick  spin around the industrial park.  The Check Engine light came on and stayed on during our trip north, and we needed front tires and new shock absorbers.  After some thought and, with reluctance to keep throwing money at the old beast, we made a crucial decision: we looked at the availability of newer vans, preferably taller, more suitable for camping.  Our quest took us to Auburn, to the commercial truck dealer, where we traded both our vehicles, the 2015 C-Max hybrid and the 1996 E-150, on a brand-new bare-bones Ford Transit high-roof van, and spent our economic stimulus money on a commercial liner for the interior.

We’re not going to live in the van, and need to haul big items from time to time, so the industrial look is just fine with us.  We didn’t add any extra insulation, since we live in a mild climate, don’t intend to camp in extreme heat or cold, and have a three-season sleeping bag anyway.  We did add wood rails bolted to the structure hardpoints on both sides, to which we we will rig a bike holder and secure the bed frame and cushions we recycled from the old truck, and Judy sewed up a new curtain for the front of the cargo area.  Other than plans for a storage cabinet between the driver’s seat and the bicycle, that’s the extent of our camper conversion.  Even our electrical connection will squeeze through the rear door gasket, so there’s no external indication that it’s a camper.  As of this writing, the liner installation has finally been completed, but there’s lots of work yet to get the bicycle stowage and storage for gear designed and built.  Wood has been cut and the project is proceeding, hopefully to be mostly complete by the time I go under the knife to get my eyeballs refurbished with cloudless lenses.

We’ve started our round of COVID-19 vaccinations, at last, on the eve of the state opening up to all age and occupation groups.  We’re still observing full precautions, however, and probably will for the foreseeable future.  We’re still conducting all of our social activities through Zoom, two to four sessions per week, moving the computer around the house as needed to best support the venue.

So it goes.  We’ve survived the Plague Year 1, but we are a year older.  It shows.  My van-building video (in editing) shows a a slow-moving, slow-talking old geezer explaining how he overcame numerous mistakes, while peering intently to see what he is doing, though clouded eyeballs.  Judy is struggling to get enough calories without overloading her distressed digestive system.  Still, we’re hoping to get out on walks and bike rides when the weather gets warmer, and spending some time between Zoom sessions exploring in our new ride and visiting friends and relatives once everyone is vaccinated and travel restrictions lifted.

The Parkins Report: Events of 2020, Plague Year 1.

Seeking out-of-the-way recreation during the quarantine, in the remote areas of the county. We did meet a friend for a socially-distanced 15-mile ride.[Photo by Lauri Paulson]
2020 has been a year like no other, in the three-quarters of a century that we have been around to observe. Our son objects to our use of the term “Plague Year,” as if that was reserved exclusively for the Yersinia pestis pandemic of the Middle Ages, also called the Bubonic Plague or Black Death.  But, the generic term fits, according to Websters, 2.a. usage, “an epidemic disease causing a high rate of mortality.”

The year started for us with flu-like illness: Judy came down with it almost immediately after we got off the airplane from El Paso on Christmas Day, Larye came down with it on January 1. We recovered, and took part in our normal January and February activities, though we missed our winter bike rides in January. In February, there were news reports of a virulent outbreak of a flu-like respiratory illness at a convalescent home in Kirkland, across Lake Washington from Seattle.  We took a short getaway trip to Ocean Park, on Long Beach Peninsula, in Southwest Washington, the first week in March, taking advantage of a break in the weather to get in a few bicycle rides.

The Machine Stops:  In mid-March, the outbreak in Kirkland was revealed to be the forefront of a world-wide pandemic of an extremely contagious and lethal virus.  In the midst of arranging a venue for a weaving guild workshop at an Olympia fire station, orders came to cancel all activities: the negotiations were terminated, we were shown the door, and regrouped in the parking lot, the last time we’ve had in-person contact with members of any of the organizations to which we belong, with exception of an open-air, all-masked one-person art quilt showing in mid-summer.

The state entered a shutdown.  Public gatherings were banned, events were canceled, businesses closed, schools closed.  As happens with most disruptions from natural disasters, the toilet paper, milk, and bread supply disappeared from grocery store shelves, instantly, and supplies wouldn’t return to normal for months. As the pandemic spread, we began to order food on-line.  UPS shipments arrived weekly, though some items weren’t available from time to time.  We broke out our disaster stores of wheat and started baking bread, and rationing toilet paper.

Letting Go–The End of The World As We Know It:  Our social activities stopped:

  • The Senior Center closed: no more yoga classes, until they resumed by Zoom video conferencing in September.  Larye was called on to lead a session, and had to set up computer and cameras in the low-ceiling basement studio to get enough lighting, but has lead other sessions from the dining room, with table and chairs shoved aside and extra lights.   Our attendance is much lower, and Larye is now elevated to #2 presenter, from #4 in reserve, so leading and attending yoga sessions over the internet from our dining room are becoming commonplace.  Monthly group walks did not resume in April, though  some of the hard-core members may be meeting privately for walks.  It’s harder to make social connections now.
  • The Olympia Weavers Guild canceled meetings and programs, both out of caution and because the meeting place closed.  Workshops were canceled.  Zoom meetings resumed in September, with the usual 60-70 member attendance reduced to 35-40.
  • The Tacoma Weavers Guild canceled meetings, programs, and workshops, to restart in September virtually, as well, with a slight reduction in attendance, but a respectable 40 members showing up each month on-screen.  Both the weaving guilds benefited from being able to show members’ work in closeup, both in submitted photos and just holding up work to the computer webcam.
  • The Ruby Street Art Quilters essentially disbanded, having no formal charter or budget to meet virtually. The Facebook page gets an occasional post.
  • The Mason County Concert Association, for the first time in its 70-year existence, canceled the rest of the 70th-year season and didn’t resurface for the 2020-2021 season.  Like all other public gatherings, it is off-limits by gubernatorial edict.  The 500-seat high school auditorium remains dark and silent.
  • We’re off the Warm Showers bicycle touring hospitality hosting list indefinitely.  Reluctantly, we had to refuse a couple, each from a different country, who were stranded in the United States, unable to travel together to either of their home countries.  They had been caught up in the lockdown and had been staying with another host family in Shelton for weeks.  We don’t know what happened to them.  International bicycle travel has ground to a halt.  Bike tourists are exploring their own countries, or whichever one they found themselves trapped in.  Some hosts are still receiving, but with limited or no indoor social contact with guests.
  • With the closure of the public library, Friends of the Library stopped functioning and has gone silent, the used books sitting on the shelves, well past their “pull date.”  We’ve come to rely on “Little Libraries” scattered around town, and the Senior Center’s ad hoc book exchange in the bus kiosk outside the center, plus the Senior Center’s Nifty Thrifty store, for books and book exchanges.
  • Hypatia in the Woods, which operates a retreat cottage for women artists and writers, canceled spring artist residencies.  Our board meetings resumed by Zoom early on to make decisions about the future of the organization.  By mid-summer, residencies resumed, on an adjusted schedule, with three-day gaps between residents.   But, artist’s presentations and member/artist potluck meet and greet were suspended, though by fall we had one “trunk show” in a member’s garage and one Zoom presentation by another resident, through the Library, whose staff continues to work and, regulations and advisories permitting, operate the on-line reservation system with curb delivery.
  • Our grocery shopping cut back to once a week trips to the supermarket, with precautions like going into a “hot zone.”  Biosafety level 2 and up for everything.  We’ve taken to getting produce from and ordering staples delivered from a regional distributor to the local farm store, a pleasant find in this new age of staying close to home, and a throwback to the village stores of the 19th and early 20th centuries, where you put in an order and it came on the wagon from the city the next month.
  • We continued bicycling, but the trails were closed, so we headed out to the sparsely-populated west end of the county to ride on roads with little traffic except the occasional logging truck.  Bicycling was curtailed sharply with Larye’s late spring injury (details below), restarted with short, infrequent rides in the fall.
  • We started walking around our neighborhood: schools were closed and businesses shuttered, but most residents stayed in their houses, so the streets were deserted.  We discovered trails through the green space and forests around the neighborhood.
  • As areas opened up in May, we drove west to Lake Wynoochee, in the Olympic Mountains, for a hike to a waterfall on a deserted trail.
  • Our six-month dental cleaning and checkup got postponed to nine months, with elaborate biosafety procedures when we did go, including a nasty hydrogen peroxide mouthwash.
  • “Dining out,” once a common part of our routine, became take-away on special occasions, pizza or oriental fare from restaurants we used to “eat in,” and one coffee out, sitting at a curbside table.
  • We finally accepted the inevitable, and canceled our planned group tour to Uzbekistan next fall, realizing the pandemic will not be over, and the physical limitations on long-distance travel because of Larye’s injury.
  • Unwilling to avoid family, and having some obligation for care of grandchildren on occasion, we limited family visits to once every two weeks, with quarantine procedures between, and skip if either of us had other contacts.  Our Olympia family became part of our “pod,” but sparingly.  One of the grandsons started on-site schooling in mid-October, so we are limited to full quarantine distancing visits, and masks indoors.

Down for the Count: In late May, we took a long, fast bike ride, a 30-km loop from Tumwater to Little Rock and back, during a trip to refuel the truck after our western hiking excursion. Later in the evening, Larye had a bout of sciatica that became steadily worse, resulting in a trip to the Emergency Department in Olympia in the middle of the night, the next day.  Pandemic rules were in effect, with face masks, and no family allowed in.

Subsequent trips to chiropractor, doctor, and urgent care added to pandemic anxiety.His condition worsened, got slightly better after several weeks of mild medication, then a relapse, trying to lift our thrift-shop table find to the porch to create an outdoor dining space for visitors.  The relapse was totally debilitating, with a month of heavy medication.  He was able to walk only with the aid of a thrift-store walker.  The doctor prescribed walking, no bicycling, and finally, a course of physical therapy, which got us started back doing our yoga practice at home in addition to the much more rigorous PT exercises and stretches.

Gradually, our walks became longer, starting with a halting 1-km walker push on flat walkways near the hospital, then graduating to trekking poles around our hilly neighborhood, and eventually, up to 8-km, unaided, on the neighborhood trails, to the other side of town, and up the old logging railway west of town.  We took a few tentative bike rides, not much longer than our walks, into the fall, on low-traffic roads, while on travel.

Traveling in Quarantine: We ventured out, cautiously, to test the feasibility of safe travel, spending a few days at nearby resorts in our network in mid summer, and again in the early fall, even camping overnight on one trip.  We get condo units with full kitchen when we vacation, so prepare our own food rather than risking restaurants.  Most shops and restaurants in the resort areas remain closed.  On these trips, we made only one grocery stop, and have learned to use the drive-up windows at coffee shops, something we never did before.  Our one stop where we went indoors to get our take-out cups was anxiety-filled, as the sit-in patrons didn’t use their masks between sips.  We resigned ourselves to limited our “dining out” experiences to eating and drinking in our van or car, possibly for the rest of our lives, and using our cellular data plan for on-the-road Internet connections if the WiFi doesn’t reach the parking lot.

Winter is Coming: As the year wears on and winter approaches, we continue to meet close friends occasionally on our porch, masked, and have pulled one of the low-power oil-filled space heaters from the basement weaving studio and put under the table on the porch for chilly days.  The pandemic is accelerating, everywhere.  We’ve begun ordering food on-line again, either shipped to the house or for pickup at the local farm store, which never has more than two or three customers at a time.  We’ve gotten 5-lb bags of pulses and a 5-kg case of frozen tempeh from Oregon, spices and tea from a shop in Bellingham, and are preparing Costco delivery lists again.  Larye is continuing to cook and bake, having branched out to sourdough whole-wheat bread and cinnamon rolls, and collecting recipes and techniques from around the world via YouTube.

Entertainment in the Time of COVID: With the cool, rainy weather and short days,Judy has retreated to her craft studio, busy making art journals, hoping to sell some locally through a consignment store, and Larye dusted off his marudai, a stand for kumihimo–Japanese braiding–bought for a class that was canceled two years in a row, due to weather and pandemic.  He watched a few videos, dug out pattern books, and has been braiding ties for home-made quilt-fabric face masks.  He is also nearing the end of the first of several on-line self-paced computer programming courses to build proficiency in the Python language for restarting some projects that have been put off for too long.  He has also been an active contributor to the Quora on-line question-answer forum since before the pandemic, answering questions from all over the world about computers, particularly about Linux and programming, answers that have been viewed over half a million times, and a few that have several hundred “likes.”

Of course, we are also glued to Facebook, sharing our photos and status with friends and family, and commenting mainly on the bicycling forums. Our TV watching, at least of the “normal” broadcast and cable channels, is non-existent, but we spend endless hours listening to news on NPR and watching YouTube videos, with on-demand news from cable outlets and from independent, Internet-only venues, and videos on politics, bicycling, medicine, and science, plus how-to and idea videos on our respective interests: journal-making, cooking, and programming.

Attending the Tacoma Weavers Guild holiday party, remotely. All of our social activities have been via Zoom. We’ve taken to moving the computer into the dining room for social events.

Family: Fortunately, we managed to visit almost everyone in 2019, before the pandemic arrived. Since the first lock-down, the world has gone into a tailspin, and our extended family is no exception.  Our school-age grandsons and great-grandchildren were out of school for a time, then sporadic forays into on-line, at-home schooling, with varying degrees of success.  We adopted a “pod” protocol with our nearby family, observing no-contact rules for two weeks before and after visits.  Since on-site school classes resumed, visits are masked or outdoors only.  One grandson graduated high school, without ceremony.

Our adult grandchildren have gone through job losses and change in work. One granddaughter lost her job early on, having been on holiday when the lock-down arrived and quarantined.  She supplemented her savings and unemployment by cooking meals for pickup by friends who didn’t cook.  Finally, this fall, she got a job 1000 km away, moving to a new city and putting her house up for sale.  A grandson, an aspiring musician, went from waiting tables to delivering meals.  He has used his extra time to publish his first music CD and put out a line of logo-wear for his band, during the time of no live music.

A daughter-in-law had her traveling job terminated, pushing up their retirement plans, but delaying their move.  Larye’s aunt Jo turned 100 this fall, and has managed to remain safe at home through the pandemic.  Retired cousins have managed to travel and visit other relatives and friends and stay safe.  But, the COVID has been raging through other families, adult children, grandchildren, and great grandchildren.  Fortunately, they have survived, but after-effects linger. Another granddaughter, a nurse who normally works OB/GYN, now also risks contact with COVID patients: as a health-care worker, she was one of the first to get the vaccine.

Living in Interesting Times: We are considered ignorant fools by our right-wing acquaintances who follow the current conspiracy theories on mass media, because we don’t.  We characterize our political leanings as “Radical Progressive Extremism,” rather than uphold any organized political party, because neither is very organized.  Instead, we focus on living out our days as best we can in the face of the coming climate apocalypse and the decades of political and social unrest that we won’t live to see the end of, nor, possibly, will our grandchildren and great grandchildren.  And, we’re committed to permanent lock-down for the duration of the pandemic, now expected by some epidemiologists to last well into 2024, unless vaccinations become universal.  The much-ballyhooed rollout of the first vaccines seems to have been botched, so the hope of reaching “herd immunity” seems to be lost in the fog of “herd mentality,” pushing the weakest to the outer ring as the dingos circle.

 We miss our carefree life of travel and we miss visiting far-flung relatives, and we miss our in-person gatherings with fellow fiber artists, writers, and book-lovers, but we are aware that all things are impermanent.  We live in the present moment, plan for futures that may never be, but breathe in the reality that is.

A metaphor for the Ship of State–foundering under the Trump administration. (sunken oystering boat at Bay Center, WA, in the intertidal zone of the Palix River)

The old social niceties around the holidays seem so inappropriate in the face of the current situation.  Not only is the world in the depths of a pandemic, but at its worst in the Disunited States, where half the states are suing the other half to overturn an election, an election that promises, if its certified outcome is honored, to end the Age of Trump.

Four years ago, I wrote a blog article (here) outlining our fears of what was ahead.  All that, and much worse, has come to pass.  The Second Civil War, that has been simmering since the Civil Rights Act was passed in the mid-1960s, seems about to burst into flame, not only state to state, but house to house in a country so divided by ideology and contradicting “facts” that civility is all but disappeared and disregard of science is considered patriotic.

Accordingly, at the risk of offending almost everyone, we wish you all a meaningful celebration of the high holidays of the deities of your choice:  Merry Christmas, Happy Hanukkah, an auspicious Solstice (complete with conjunction of the major planets), a contemplative Bohdi Day, a Joyful Twelfth Night, and wishes that we all survive to observe Ramadan in the spring.  We hope that your children safely survived Krampusnacht, and that you resisted the temptation to celebrate Thanksgiving.

Suited up for our December 2020 bicycle ride, in a break in the weather, temperatures in the low 40s F.

The hospitals are full of those who didn’t resist the holiday.  We just had some pumpkin pudding and the rest of the week’s homemade bread, and stayed in all day, just happy to be alive and well, for now.  We celebrate the season with our friends peering out at us from the computer screen at the other end of the table.  Our “virtual holiday parties” were joyful, with our computer monitor perched at the other end of the dining room table, but there were a lot of tears among the throng, also.  When we venture out, instead of greeting strangers with a “Merry Christmas,” the “safe” greeting at this time of year, we cross the street to avoid coming within two meters of them.   We fear, as my high school music teacher used to say, that “If we don’t hang together, we will be hanged separately.”  Time will tell if we have the collective will to survive, or whether Trumpism will persist and end us all.

Wishes for a hopeful New Year.

Namaste.

Judy & Larye

Quarantine Diaries, Chapter 16: The Code Warrior

As the pandemic roars all around us and the U.S. is in turmoil surrounding the election, I decided it was time to return to an activity that makes the world go away for the duration, and something that focuses on what was supposed to be the main thrust of this blog:  Computer programming, the ultimate drugless out-of-body experience.

Warning: for the usual audience looking for tales of septuagenarian bicycling adventures or living with the quarantine, this is going to get a bit technical, since we’re reaching for a wider audience, fellow travelers on the road to code. But, if you are a Python programmer (or just curious about what goes on under the hood in your computer), read on.

The Code Warrior at his battle station. Browser with programming language references on the left, code editing and testing center, and requirements docs on the right, Photo captured by one of the cameras we’re seeking to automate.

As a Unix/Linux system administrator, I write a lot of scripts that are meant to be run from the command line, or embedded in other scripts to be run automatically, so providing a robust and feature-full
option list and argument list parser makes a given script more
versatile. I’ve done those kinds of scripts using the Perl language, but we’re shifting to Python now: I decided to explore a handy Python module called argparse that does just that, and includes an automatic help screen in the process, and find a use for it.

I’m relatively new to Python, having avoided it from its inception in 1991 until 2014, when I haltingly wrote a  script to operate a camera on a Raspberry Pi single-board computer, since the camera libraries were in the Python language.  It works, but I did become more interested in getting fluent in Python.  Python is more than Yet Another Object-Oriented Scripting Language: it has a distinctive style and philosophy to go with it, the Pythonic Way.  And, since languages evolve, a major dialectic shift from Python 2 to Python 3.  So, it’s time for some language immersion while we’re in the midst of the pandemic lockdown.

The core application for which this exercise is designed is a system to record from USB cameras. Since the arrival of Zoom World, where all of our organizational meetings are on Zoom, I have built up a collection of USB webcams from the local thrift store, and use them with Zoom, but would like be able to automate photo and video capture for other purposes, to augment the Raspberry Pi camera I use to monitor the driveway, recording for playback as a timelapse. Here, then, is the skeleton of my command line user interface for the USB camera project, which is inspired by, but not based on the option-rich raspistill and raspivideo programs that come with the Raspbian Linux distribution for Raspberry Pi.

This code snippet is a front-end to a larger script (not provided) that will capture output from USB webcams attached to the host system, built with the OpenCV system library, python-opencv package (for Debian-based Linux distributions), and a modified version of the acapture module.  It took a week or two of research into the OpenCV libraries and some experimentation to get enough insight into how that works in order to design a front-end command interface.  Those image-processing functions now need to be refactored into a back-end for this script, a project for next month.

The resulting system takes command-line options and arguments to control which camera to use, and whether to take or display or save camera output as a still, burst, video, or timelapse, or to display stored images as a slideshow, or single photo display. For simplicity, most of the arguments have default values, i.e., 10-photo burst, 10-second video clip, etc. so if we need a short clip or choice of several photos, we can just call the parent command without explicit arguments and get a standard output.  The script, as written, makes some assumptions about where to store the images and how to organize them, which may change as the total application is fleshed out.  As written, the idea is to store still images with file names serialized, from 0001 to 9999, as that’s a convenient way to assemble still images into a timelapse video.

The concept of having one program that serves multiple purposes makes maximum use of the feature in Unix-like file systems to be able to give a file multiple names, through hard links or symbolic links.  To use this, we make the final program executable and link to these names,  in Linux or macOS. Modifications may be necessary to run in Windows, like adding the “.py” file extension to the script names. File names aren’t hard-coded, but listed as keys in the Capabilities dictionary in the code, so this concept and construction method is adaptable to other application user interfaces, and the getargs() function and associated global constants can be plugged into any other set of programs.  As part of the design document, we list the program names and the arguments they take,

  • usbstill : take a photo, display on screen and save to disk:  ‘camera, imgdir, imgidx,
  • usbburst : take a series of photos, no delay.
    camera, imgdir, imgidx, frames (# of frames)
  • usbvideo : take a video, display on screen and optionally save camera, imgdir, imgidx, duration, scale, record?
  • usblapse : take a timelapse sequence camera, imgdir, imgidx, interval, duration, scale
  • usbslide : playback still photos as a slideshow. imgdir, imgidx, speed (0 = manual), directory
  • usbshow : display any photo resolution, path

The test harness–showHelp()–for this front-end program simply generates usage and help messages using the default values for each option: with the exception of usbshow, which requires a filepath for a  single image file, which prints the usage message and throws an exception.

Here’s the  output of the testing, using the showHelp() function to walk through the commands, with no arguments on the command line.  We’re simulating the command line in this test, so we substitute the command name for the default sys.argv[0] when calling getargs().

The main() function in the code listing below is a framework, the beginning of the main program, with stubs where the image processing and camera capture will go.  Most of that’s done, as a result of experimentation with OpenCV, but needs a lot of work and is beyond the scope of this post, which explores how to use the command line to not only tell the program what to do, but make sure the inputs are reasonable.

The main parts of the argparse module that we use are the ArgumentParser() class, the prog class variable, and the class methods add_argument(), parse_args(), and, in the test harness, print_help()

A lot of the power in Python and other programming languages is the literature–the code libraries (modules) that are either specialized extensions to the language or contributed software that are useful tools to quickly build new systems.  Python has a librarian function, pip, that accesses the master  library over the Internet to install modules not included with the basic Python installation.  Or, you can write your own or modify existing ones and rename them–Python is open source, after all.

It’s always easy enough to get a tutorial and list objects and methods for common modules in docs.python.org, but you can get a good idea of the features in a module by using the Python dir() function:  Here, we exclude the private variables and methods (which begin with an underscore character) to show the public methods.  By convention, objects are capitalized, constants  are in all uppercase, and methods and class variables begin with a lower case character:

>>> import argparse
>>> parselist = dir(argparse)
>>> for item in parselist:
... if item[0] != "_":
... print(item)
... 
Action
ArgumentDefaultsHelpFormatter
ArgumentError
ArgumentParser
ArgumentTypeError
FileType
HelpFormatter
MetavarTypeHelpFormatter
Namespace
ONE_OR_MORE
OPTIONAL
PARSER
REMAINDER
RawDescriptionHelpFormatter
RawTextHelpFormatter
SUPPRESS
ZERO_OR_MORE
ngettext

The primary object used in creating a command line parser is ArgumentParser

>>> parselist = dir(argparse.ArgumentParser)
>>> for item in parselist:
... if item[0] != "_":
... print(item)
... 
add_argument
add_argument_group
add_mutually_exclusive_group
add_subparsers
convert_arg_line_to_args
error
exit
format_help
format_usage
get_default
parse_args
parse_intermixed_args
parse_known_args
parse_known_intermixed_args
print_help
print_usage
register
set_defaults

Most of the rest of the class variables and methods are used internally by those major functions, to  perform data validation, print out usage and help, or handle errors.  add_argument() is an impressive method, providing a way to name options and arguments, constrain the data types and range of values, and make the arguments optional (with the nargs=”*” clause) or mandatory, with default values for optional arguments if not given .  Pre-validating the data greatly simplifies the logic in the rest of the program, since we can assume the input values are valid for the operations to be performed.

Here’s my code, modified slightly to fit in the page format.

#!/usr/bin/env python3
# Code

import argparse
import sys

# "Cameras" is system-specific: modify for number # of attached cameras, with /dev entries.

Cameras = ["/dev/video0","/dev/video2","/dev/video4"]
Scales = {"frames" : 0, "min" : 60, "sec" : 1}
Basecap = ["camera","imgdir","imgidx"] 
Capabilities = {"usbstill" : Basecap,
                "usbburst" : Basecap +   
                ["frames"],
                "usbvideo" : Basecap + 
                ["duration","scale","record"],
                "usblapse" : Basecap + 
                ["interval","duration","scale"],
                "usbslide" : 
                ["imgdir","imgidx","interval"],
                "usbshow"  : 
                ["resolution","path"]
                }

def getargs(myprog=sys.argv[0]):  #
    parser = argparse.ArgumentParser(prog=myprog)
    caps = Capabilities[parser.prog]
    if "camera" in caps:
        parser.add_argument('--camera', type=int, 
                            default=0, choices=range(len(Cameras)))
    if "imgdir" in caps:
        parser.add_argument('--imgdir', type=str, 
                            default='./camera')
    if "imgidx" in caps:
        parser.add_argument('--imgidx',
                            type=int,
                            default=1,
                            help="""Frame number to start: if missing or 1, files in imgdir will be deleted""")
    if "frames" in caps:
        parser.add_argument('frames', type=int, 
                            nargs='*', 
                            default=10,
                            help="numeric frame count")
    if "interval" in caps:
        parser.add_argument('interval', 
                            type=float, 
                            nargs="*", 
                            default=5.0,
                            help="time between frames in seconds")
    if "duration" in caps:
        parser.add_argument('duration', type=int, 
                            nargs="*", 
                            default=10,
                            help="Recording time, units of time")
    if "scale" in caps:
        parser.add_argument('scale',
                            type=str, nargs="*", 
                            default='sec',
                            choices=
                            ['sec','min'],
                            help="unit scale, seconds or minutes for video")
    if "record" in caps:                 
        parser.add_argument('--record', 
                            type=bool, 
                            default=False,
                            help="Save video in file: True or False (default)")
    if "resolution" in caps:
        parser.add_argument('--resolution',
                            type=str, 
                            default="640x480",
                            choices=
                            ["320x240", 
                            "640x480", "960x720", 
                            "1280x960"],
                            help="Display resolution")
    if "path" in caps:
        parser.add_argument("path",type=str)
    args = parser.parse_args()
    return(parser,vars(args))


# /Code

# Test

def showHelp(): # showHelp is a test to display the help screens
    for myprog in list(Capabilities.keys()):
        print("\n>>>> " + myprog + " <<<<\n")
        try:
            myparser,myargs = getargs(myprog)
            myparser.print_help()
        except:
            print("Error: missing required argument.")


# Skeleton for the image capture functions.
# imaging requires installation of OpenCV and 
# python-opencv
# import cv2 module
# this stub just sets up the variables needed by 
# the imaging functions.

def main():
    import os
    import os.path
    import glob

    if sys.argv[0] in list(Capabilities.keys()):
        call = sys.argv[0]
    else:
        call = "usbstill"  
        # default if running from template
    parser,argdict = getargs(call)
    keylist = list(argdict.keys())
    prog = parser.prog
    if 'camera' in keylist:
        camidx = argdict['camera']
    if 'imgdir' in keylist:
        imgdir = argdict['imgdir']
        if not os.path.exists(imgdir):
            os.makedirs(imgdir)
    if 'imgidx' in keylist:
        imgidx = argdict['imgidx']
        if imgidx == 1: 
            #delete existing files in directory 
            #if starting at 1
            files = glob.glob(imgdir + "/*.png")
            for fil in files:
                os.remove(fil)
    if 'frames' in keylist:
        frames = argdict['frames']
    if 'duration' in keylist:
        duration = argdict['duration']
    if 'scale' in keylist:
        scale = argdict['scale']
    if 'record' in keylist:
        record = argdict['record']
    if 'interval' in keylist:
        interval = argdict['interval']
    if 'path' in keylist:
        path = argdict['path']
    if 'resolution' in keylist:
        resolution = argdict['resolution']
    
    if prog == "usbstill":
        # take one photo, store
        return True
    if prog == "usbburst":
        # take frames number of photos
        return True
    if prog == "usbvideo":
        # record video for duration seconds or 
        # minutes, save if record is True
        return True
    if prog == "usblapse":
        # take pictures at interval seconds for 
        # duration seconds/minutes
        return True
    if prog == "usbslide":
        # display photos in imgdir sequentially, 
        # at interval
        return True
    if prog == "usbshow":
        # display a single image at the selected 
        # resolution
        return True
    return False  
# something went wrong--should never get here.

# /Test

Quarantine Diaries — Chapter 15: Falling Toward Fall

The year 2020 is exhausting, to say the least.  First, the pandemic, then a major health problem, then the increasingly dystopian presidential election debacle.  As tempting as it is to get mired down in politics, life goes on, even in the middle of the collapse of our civilization.  It’s been a while since we covered life in general.  In our last episode, we were engrossed in the Zoom world, which is now a “normal” part of life.

Realizing that, even though Zoom is a substitute for getting out in the world with our friends and all the organizations to which we belong, it also frees us from being locked in our house.  The excuse I used for retiring from my Montana job when I did and moving to Washington, even though I had active projects was, “Ah, that room full of servers I manage, down the hall, the room I never go into?  I can not go into that room from anywhere on the planet.”  So, I continued working, remotely, for another five years, though with greatly reduced hours.  Well, the same thing applies to Zoom.  A few weeks ago, we decided to take a break, get out of the house.  We booked a few days at the beach resort we stayed at in early March, the week before The End Of The World As We Knew It.  We left a day early, camped halfway, cold meals to avoid breaking out the cooking kit, and got in some beach walking in the early evening and a bike ride in the morning.  We grabbed some pastries and coffee at a bakery and took a longer beach walk on the way to the resort, where we jacked in to the ‘Net for our evening Zoom session for a board meeting.

The next morning, we rolled out our yoga mats and joined our yoga class back at the Senior Center in Shelton, via Zoom.  Another bike ride before the rain storms hit, so we stayed in and watched the storm the next day.  On the way home the day after, we stopped at the Cranberry Museum during a lull in the stormy weather.  When we drove by two days before, they were harvesting, but not this day, so we hiked around the bogs, in various stages of ripening and harvesting, and learned that the wet harvesting we see is only used for cranberry jellies and juices: the bags of fresh cranberries are dry harvested, but not at that location.  Washington State has a thriving cranberry industry nestled between the dunes on the coast between the Columbia, Willapa, and Chehalis rivers. It’s not big, maybe sixth or seventh behind Wisconsin, Massachusetts, New Jersey, and others, but it’s an important agricultural fixture in the coastal dunes.

After the storms passed and warm weather returned, we got busy with painting the upstairs hallway windows we replaced several years ago.  Much of the woodwork had been painted over by previous owners, so we reluctantly followed suit and painted the window frames as well.  As of this writing, I have one window to go, just the sash, with six lights that need taped, and I’m low on masking tape.

Judy has gotten back into working on her art journals, primarily making envelopes and folders to use as inserts, but it keeps her busy.  I’m spending too much time on answering computer questions.  I’ve been putting off several programming projects for lack of motivation, so I signed up for an on-line class on Python3 (I’ve been programming in Python 2 off and on for a few years, but thinking in other languages and painstakingly translating into Python, so taking a class, even one designed for beginners, is a good way to get immersed in the Python language, as I have done in the past with C, Lisp, Perl, PHP, and Ruby when I was chained to a desk all day and needed to keep busy while waiting for things to break or someone to need assistance.  My homework is probably a bit more embellished with some more advanced features than the minimum requirement, but it’s going well so far.

The programming student in class: Lecture video on right, homework and practice in center, textbooks on left. What did we do before we had wrap-around computer monitors? Oh, yes, the floor-to-ceiling bookshelves on the left.

I’m still in Physical Therapy, working on  healing up the sciatic nerve pathways and getting stronger in the right places so it doesn’t happen again.  Since we’ve incorporated our yoga practice along with the PT “homework,” Judy does them with me, so we’re both getting fitter and stronger.  Our outside exercise is still mostly walking up and down the hills of our little city, and the 8-mile bike ride two weeks ago seemed to go well, so things are looking up, though we’re reluctant to head for the bike trails in the city or ride the busy streets and steep hills around home.  The mile-age “Birthday Ride” isn’t in the cards this year, but there are other goals.  It’s always good to have goals, and back-up goals. We might count the 8-mile bike ride last month the and 8-kilometer hike last week as my 7.7 mile and 7.7 km ride/hike distances, as a consolation to the not-likely 77 km or 77 mile bike ride. But, there’s plenty left in 2020, so, who knows?  It only takes 9.6 miles or 15.5 km to log 77 furlongs, so that’s a definite possibility.

I had a bit of cooking slump for a while, but am back to baking and cooking things from scratch.  Judy likes to bake cookies, but we’re too good at eating them, and too fond of ice cream and cookies after a long walk, so our weight going into winter isn’t ideal.   So it goes: Wednesday was a baking and cooking day, Thursday was computer class homework in hopes of getting my next assignment before the weekend, which I finished Saturday night.  Friday was our virtual trip to Tacoma for the weaving guild meeting there.  We had a Zoom presentation by one of the artists-in-residence at Holly House a while back, from Holly House, and an open-air presentation this weekend, along with another Zoom weaving guild meeting next Friday.  As Calvin & Hobbes used to say, “The Days Are Just Packed.”

We rarely turn on the television.  Well, actually we do, but it’s a streaming device, so more properly, we rarely watch broadcast programming.  Instead, we watch non-network TV news on YouTube, getting programs we don’t get on our TV subscription.  Mostly, we’re hooked into the usual NPR Morning Edition and switch to the satellite NPR talk radio after, sometimes switch back to All Things Considered in the evening, while flipping through YouTube videos on our computers and phones.  We used to joke that we listened closely to the news so we’d know when it was time to head for the border, but the border is still closed, so it doesn’t matter: we have to take a stand where we are and hope we’re not first against the wall when the revolution comes.

The COVID-19 pandemic is ramping up again in many places, so we’re especially careful going out.  Be safe, be well, and maybe we’ll see some of you in 2023, if it’s safe (and permitted) to travel farther by then, and we’re all still here.