The Text, Please. Just the Text.

I call this page The Text. It is a series of short posts on a range of subjects. Subjects cover coding and technical matters, food and lifestyle, family and activities, drafts of ideas for further exploration, and more. I include a sprinkle of personal reflections and commentary.

Peruse the ToC to skip around. Use the RSS feed to monitor new posts.

As of November 2024, this page contains 60,059(+/-) words.

Table of Contents

  1. Utility Update
  2. The Terror of Men
  3. On the PageRank Algorithm
  4. Pancake Resilience
  5. The President and the Economy
  6. Harder to Accommodate than to Assimilate
  7. In Praise of the Wealthy
  8. Beet Kvass
  9. Overloaded
  10. On Inefficiency
  11. lrs8
  12. Dead Hangs
  13. Self Deprecation
  14. 16,000 Steps
  15. Chilling Out
  16. Being Pedantic
  17. It's complicated
  18. Tasteless in Comparison
  19. Markdown Vs. Asciidoc
  20. Go the Distance
  21. Just Chilling
  22. Ice Bath
  23. Composing a Tune
  24. Essays with ChatGPT
  25. One Year
  26. In The Rain
  27. RIP Josh
  28. Win Win
  29. Print Books or pbooks
  30. Vim as File Manager
  31. Breaking Bad Habits
  32. Keep Staying Cool
  33. Lots of Walking
  34. More Bad Traffic
  35. Sitting in Idling Cars
  36. On Annual Rituals
  37. Of Madness in Books
  38. A Disturbing Trend
  39. I Want To Hold Him
  40. Bad Habits
  41. Kicked Out
  42. I Get It
  43. What is Wrong?
  44. Of On
  45. Reading for Fulfillment
  46. Set the Tone
  47. On Memory and Time
  48. Process Substitution
  49. Searching for R
  50. On Soup
  51. Staying Cool
  52. On Loneliness
  53. Drinking Beets
  54. Coding with ChatGPT
  55. Small Dreams
  56. HTML Email is Bad
  57. Areas of Expertise
  58. Family Cycling
  59. Won't You Be My Neighbor
  60. Custom YAML
  61. Accidental Redirect
  62. On Writing Longhand
  63. Make Install
  64. Being Cool
  65. On Distance
  66. Traffic
  67. End of Life
  68. Say Less
  69. Mouse Infestation
  70. Rmarkdown
  71. Seasonal Habits
  72. Sentence Line Breaks
  73. Archiving Email
  74. On Traffic Jams
  75. Two Years
  76. No More Backpack
  77. Tough Year
  78. Falling Asleep
  79. Five Years
  80. Lost in Code
  81. So Far So Good
  82. Food Waste
  83. Pre-2007
  84. Boo Boo
  85. On Scat
  86. Floor Sleeping
  87. Multi Posting
  88. See Also
  89. Reconfigure
  90. Parkour
  91. Thanks Kid
  92. And On This Day
  93. Funk
  94. Influence
  95. HIIT
  96. 4303 Days
  97. Eyebrows
  98. Copying
  99. Not Reading
  100. On Digital Minimalism
  101. Reload
  102. On Personal Websites
  103. R Base
  104. Bashing Bash
  105. Older Friends
  106. First In First Out
  107. Water Temp
  108. On Interviewing
  109. resize
  110. Phones Down
  111. syslog
  112. Breathe and Sleep
  113. Database Interfaces
  114. The Word
  115. Alternate Computer History
  116. Site Change
  117. The Move
  118. The Thaw
  119. Frozen Doors
  120. Winter Walking
  121. Winter 2023 / 2024
  122. Screen Recording
  123. On Classification Systems
  124. An Insight
  125. Reading Music
  126. Groff Docs
  127. FreeBSD on the Laptop
  128. Learning and Identity
  129. Friendships in Academia
  130. Winter Bread
  131. A Decision
  132. The Graciousness of Others
  133. The Accused
  134. Waiting for the Rain
  135. A Jarring Scene
  136. Old Friends and New
  137. A Delight
  138. On Hold
  139. Sourdough Bread
  140. Lunch, Shopping, and a Movie
  141. Back to i3, Again
  142. Automake
  143. Summer 2023
  144. On Transitions
  145. No More Podcasts
  146. Back to the Books
  147. On Vulnerability
  148. Plain Text Research
  149. On Sex, Politics, and Religion
  150. 731 Days
  151. Embracing the Cold Front
  152. Second mdBook
  153. First mdBook
  154. How Long
  155. On Disruption
  156. Plain Text Social Science
  157. My Aunt
  158. Smaller in the World
  159. On This Day
  160. Posting Here
  161. On Trust
  162. Automating This Site
  163. Re-reading Thomas Merton
  164. Obsession
  165. New Site Redesign
  166. High School
  167. Reading Patterns
  168. Semantic Line Breaks
  169. Something New
  170. Rejuvenate
  171. My Friends
  172. On Papers as Assignments
  173. On Smiling
  174. Breakthrough Case Update, Day 10
  175. Breakthrough Case Update, Day 6
  176. Breakthrough Case Update, Day 5
  177. Breakthrough Case Update, Day 4
  178. Breakthrough Case Update
  179. The Inevitable Happened
  180. Groff and Troff
  181. On Forgetting
  182. On Ungrading and Learning
  183. Some Automation
  184. OpenURL
  185. Cold Showers
  186. Vim, Ed, and also Markdown
  187. Rest
  188. Breathing
  189. When I Feel Best
  190. Measuring Food with Pandas
  191. Mushroom Hunting
  192. diff, ed, patch
  193. Vegetarian Red Bean Soup
  194. Comical Kids
  195. Knots
  196. I Got Rice
  197. Solo Camping in a Thunderstorm
  198. Ten Miles
  199. When Did I Learn
  200. First Day Energies
  201. Quotes from Didion
  202. Wim Hof Guided Breathing
  203. Timing is Everything
  204. A Timer
  205. Back to Ubuntu
  206. Site Update
  207. 458 Days
  208. A Meaningless Post on Measuring Food
  209. Why Libraries Are Fascinating to Me
  210. Ferment Fail
  211. The Aliens Are Here
  212. Back to School
  213. An Open Science Example
  214. Phoning It In
  215. No Sudo For You
  216. The Liminal Space That Was
  217. The Aha Moment
  218. Mix It Up
  219. Wrong Hard Drive
  220. Larry McMurtry
  221. Professor Suda
  222. Another Anniversary
  223. One Year
  224. On Cooking Shows
  225. Cook's Log, Fermentation Date 28
  226. On Alphabetizing
  227. The Restorative Work of Reading Just Books
  228. Cook's Log, Fermentation Date 11
  229. Font Lode
  230. Be Virtuous
  231. Cook's Log, Fermentation Date 9
  232. Puzzled
  233. Salt the Hash
  234. Not Really a Kobayashi Maru
  235. I Miss John and Neighbors
  236. On Top
  237. Fermented Cabbage
  238. My Sysadmin Work
  239. Back To i3
  240. On File Systems
  241. Loud, Clamorous, Blaring
  242. In My Next Life
  243. You Have Mail, too
  244. You Have Mail
  245. A Good Long Walk
  246. Always the Tinkerer
  247. Fedora Switch Complete
  248. My Desktop after Eight Years
  249. I Will Pass on Time Travel
  250. Citizen Science
  251. On Aging
  252. The Trick to Social Media
  253. On Conservatives
  254. Lullabies and Mixtapes
  255. More Hard
  256. Somewhat Automated
  257. The Dark, Hard Days
  258. On Buddies
  259. Three Quarters of a Year
  260. On Fezzik
  261. On Ebooks
  262. A Good Read
  263. Let's Dance
  264. On Sudoku
  265. On Carrots
  266. Primate Lessons
  267. On Solace
  268. Surreality Polarity Reversal
  269. Dear Mom
  270. Not That 1984
  271. On the Historical Person
  272. A Pictorial List
  273. On Covid19 and Keystone Species
  274. s/awk/R/
  275. s/sed/awk/
  276. On Marriage
  277. On Teaching Linux
  278. Dark Nights
  279. On Revising
  280. On Distractions
  281. A Distro Hop
  282. On Conspiracy Theories
  283. Earth's Holocaust
  284. Come Sail Away
  285. On the Bookshelf
  286. The Chronicles
  287. Past Colleagues
  288. On Consistency
  289. Restaurant Dreams
  290. 35 Days
  291. An Action Under Which Description
  292. The Slow Down
  293. I'd Rather
  294. It's the Little Things
  295. On Research Speed
  296. On Stress Relief
  297. On Sheltering
  298. On Social Distancing
  299. Losing a Walker Friend
  300. When a Baby Cries as a Toddler
  301. Converting Markdown to HTML with Table of Contents Using Pandoc
  302. Switching Window Managers
  303. Remembering Some Text
  304. Some Observations on Usability Pertaining to a Child
  305. Bad Superblock
  306. A Quick Bash One-Liner and Children
  307. Tidyverse Skeptic Too
  308. Make Email Fun
  309. Some Routines I Find Calming
  310. The Product
  311. The Walkers
  312. On Solitude
  313. On Writing and its Tools
  314. Using ed(1), The Standard Text Editor
  315. Keeping it Minimal

Posts

Utility Update

Comparing November 2023 and November 2024, I've:

  • reduced electrical usage by 712 kWh, which is a 72.06% reduction,
  • reduced water usage by 2800 gallons, which is a 57.14% reduction, and
  • reduced gas usage by 4.6 Mcf, which is a 45.1% reduction.

The Terror of Men

My girlfriend ordered a new fridge. After measuring the door frame, she chose a fridge that would fit through her doors.

Two men delivered it today and challenged her about the fit. They threw tantrums, throwing boxes in the street, yelled at her, and cussed a lot.

The fridge fit through the door frame perfectly.

She called the big box store and put in a complaint. I encouraged her to file a police report.

On the PageRank Algorithm

The implicit early bias in the PageRank algorithm is that it modeled itself on citation analysis and bibliometrics, and specifically on two concepts in citation analysis: bibliographic-coupling and co-citation. Bibliographic coupling occurs when two or more works reference a common work. For example, Paper A and Paper B both cite Paper C. Co-citation occurs in the other direction. It happens when two or more documents are cited together by other documents. For example, Paper C cites Paper A and Paper B. These concepts assume a theory of similarity. If Paper A and Paper B both cite Paper C (bibliographic coupling), then Papers A, B, and C share similarities or a similarity. Likewise, if Paper A and Paper B are cited by Paper C (co-citation). While vastly useful, the concepts are not granular enough to show how these papers are specifically similar. Their similarities could be based on shared theories, shared methods, shared findings, or even something more specific. Here is where other information retrieval methods, such as text analysis and tf-idf, bolster relevance in search.

In one of Page and Brin's early papers on PageRank, the authors refer to the library and information scientist Eugene Garfield, the founder of what is now the Web of Science, and then other works on citation analysis and by librarians. Garfield and many others had developed a citation analysis literature based on the assumption that citing behaviors, like described above, can represent similarity. This is helpful because similarity is an important part of relevance ranking. And then Garfield built what is now the Web of Science (WOS) based on that literature and used WOS to test this and related theories. Page and Brin, I suppose being academics first, were influenced by this literature and the Web of Science database, which they surely used in school.

In their paper, Page and Brin highlight the concepts of backlinks (inedges) and forward links (outegdges). Although not perfectly aligned, these concepts correspond to bibliographic-coupling and co-citation. Backlinks occur when a web page is linked to by others, and forward links are the links in a web page to other web pages. Backlinks most resemble co-citation. For example, if web page A and web page B both link to web page C, then they co-cite web page C. Thus, backlinks represent a type of relevance of influence---the more backlinks, the more influential.

These concepts work well for academic literature, because in comparison to the wild web, we can lightly assume a homogeneity in quality, given the peer review process. However, this assumption has faults because there are all sorts of biases in peer review, and these biases are only exacerbated on the web, which doesn't have any gatekeeping.

Although Page and Brin are concerned about the quality of web content, which they discuss in their paper, they argue that "backlinks...provide a kind of peer review." This is like saying that co-citations provide quality control. And this assumption gets promoted when accounting for frequency; i.e., it assumes that more backlinks correlate to more quality control. Even if that works for academic literature, it's a big leap to make the assumption that it works for web content. PageRank cannot measure or account for quality.

The problem with the PageRank algorithm is that it assumes people who publish on the web are, on average, information literate: that they know when information is needed, how to access and evaluate that information through critical thinking and analysis, and how to incorporate that information into new information. It's the information science version of economic's homo economicus but instead a kind of homo informatio. This is an okay if strong assumption to make when it comes to academic literature (researchers cite for a whole host of reasons and these reasons are often biased, too), but it turned out to be a dangerous assumption for ranking web content, where linking is much lazier, at best, and nefarious, at worst. For example, the PageRank algorithm assumes that people link based solely on content and not based on generating sales or ad revenue. In the end, there is much more self-interest involved in linking than in citing, although self-interest has long been a problem in citing behavior, too.

The problem with both citing and linking, as measured above, is not that they assume similarity, it's that they also assume influence (co-citing/backlinking plus frequency) is a proxy for quality. It's a big leap because neither is even a perfect measure of influence, either.

Pancake Resilience

I make pancakes often. I whisk 1.5c flour, 2t baking powder, 1t baking soda, and a pinch of salt, or 1/4t. Then I stir in 1.5c milk, 2 eggs, and 2T of oil. These ingredients form the batter.

Sometimes I don't have all of the ingredients. When a thing like that happens, I adjust. I've subbed water for milk, extra oil for a missing egg, melted butter for oil, or whatever.

Each time, the batter turns out alright. The pancakes are good. They're pancakes regardless of the adjustment. How far can I take this before they're not? Pancakes are so resilient. And why do I think about this so much!

The President and the Economy

It's really interesting and very sad that so many voters blame or critique a president for things a president has no or little control over. For example, it seems many voters blame the current president for a bad economy, or praised the prior president for a good economy. Worse, they voted on those beliefs. However, presidents have very little control over the economy, and the economy is much too complex for any single person to have that much influence, president or not. So it makes no sense to make this the crux of our votes.

There's a serious problem with what people know in this country, and our lack of education and ability to learn hurts us badly.

Harder to Accommodate than to Assimilate

Let me borrow from Jean Piaget's theory of cognitive development and apply it at the macro level. It's probably not valid but so be it. I'm thinking about collective cognitive development or collective learning, folks!

Here's what I'm brainstorming...this is a very rough sketch and maybe a bit harebrained.

What if we apply Piaget's theory to society rather than to the individual? Let's define society as a people that share some substantial mental frameworks or models or schemas of the world and how the world works. More pointedly, let's think of society as a person. Per Piaget, when new information is presented to a person, the person either integrates the new information into an existing schema, or the person modifies an existing schema or creates a new schema to accommodate the new information.

Let's take it as a given that the world is changing quite rapidly and that this entails confrontation with constant new information. Well then, society-as-person has two options: assimilate or accommodate. By far, the more difficult of the two is accommodation. Accommodation is an uncomfortable process because it challenges our worldviews. To accommodate new information, our worldviews or our schemas of the world must change. Or we create new schemas. Assimilating new information is simpler and easier because it requires inserting new information into existing, immutable schemas.

Piaget's theory originally aimed at children, who are much more flexible and open to new information. But adults are not often so adaptable. And so adults struggle to accommodate. They get stuck in a mode of assimilation and try to fit the complexities of a changing world into an unchanging, rigid schema. It's safer for them this way. It's safer to maintain their existing narratives or schemas and contort new information, deny it, or adopt conspiratorial thinking so that their schemas remain stable.

Assimilating new information is not bad, per se. Per Piaget, equilibrium between assimilation and accommodation is needed, otherwise we would neither learn new concepts (constant assimilation) nor would we maintain a stable worldview (constant accommodation).

Under this view, we might ask: what if human development, at the societal level, is at some disequilibrium between assimilation and accommodation? What if in fact there is a battle between these two processes? What if the make-you-know-what-great-again represents an assimilating move? There are all sorts of fears that would motivate half of the country to make that move.

I don't know. This might be harebrained, but it's helping me to think about last week in a more empathetic and non-cynical light. So perhaps I'll continue to think through it for a bit and make the thesis more substantial and sophisticated.

In Praise of the Wealthy

America has achieved new heights in praise of the ultra-wealthy.

The cultural narrative has fully shifted. Wealth signals wisdom and virtue. Deeds and words are not signals of wisdom and virtue. Only wealth is. The wealthy are prophets. Their amassed wealth is evidence of their prophetic visions and their moral triumphs. This is the only evidence needed. Wealth is a yardstick for wisdom and character.

The wealthy have superior epistemological claims. They know what we do not know. They make better decisions than the non-wealthy. Their expertise is unlimited.

The wealthy possess greater credibility than the non-wealthy. They contribute more than the non-wealthy. They work harder than the non-wealthy.

All hail the Wealthy among us.

Beet Kvass

I love beets. If I was given a choice for a final meal, I'd eat boiled or roasted beets, with buttery rice doused in Worcestershire, and sauteed beet greens.

My children like beets, too, and every week I make beet burgers. The burgers are made with ground boiled beets, ground oatmeal, and cooked and then ground, dried black beans. They're pretty delicious. My oldest generally eats three of these burgers. My youngest resisted them for the longest time, but then discovered that they liked them with potato chips layered on the burger. I suppose they needed a bit of texture!

Recently I learned about beet kvass, which is a fermented drink made from fermenting beets in salt water. I ferment other things, and thought we'd give this a try. I brought a few bunches of beets home, cubed them up, added them to several mason jars, and then covered them with salt water. They've been fermenting for about seven days now. We tasted it a couple of days ago, but unfortunately it tasted like salted beet water. Hopefully it works out because by all accounts, beet kvass is awesome.

Overloaded

The more I talk with people about their use of LLMs, the more I think it's used because people are overloaded with a lot of small work. They use it so that they have more time with more meaningful work but will also use it for meaningful work when they still feel strapped for time. Or when there are other pressures on them.

Some folks decry the use of LLMs as well as the environmental damage. But I think the real problems are because we're overloaded and under various pressures to keep producing even though small work keeps rising. This all makes me think that LLMs are mostly a band aid on more systemic issues. We're a band aid culture.

In the end, even though I don't subscribe to it, I get the appeal of libertarianism. There's just so much bureaucracy. I get why that there's so much bureaucracy, too. It's because there's been too much abuse. We did this too ourselves, but the end result is that we live in a world where trust isn't or can't be the default.

On Inefficiency

I'm simplifying and decontextualizing, but there's a lesson here:

In The Birth of the Republic, the historian Edmund Morgan showed that inefficiency in governance corresponded with more freedom and more prosperity.

I just can't help but think about that with respect to academia. Or, I can't help but think about the inverse or the implication of the inverse:

A more efficient (and ergo more hierarchical?) governing model corresponds with less (academic?) freedom and less (teaching?, research?, learning?) prosperity.

lrs8

Last week we hosted the eighth Library Research Seminar, and it seemed to be a smashing success. I don't remember the last time I enjoyed so many presentations at a single conference. It was a joy, too, to see old comrades and meet many new people.

My dissertation adviser and friend stayed at my place. I spent the last morning of the conference catching up on work, and my friend spent that time playing games with my kids. I'll cherish that memory.

Dead Hangs

I've been working on my dead hangs for a couple of years. My children and I have a kind of competition with it. Even though they generally crush me, I can hang for a long time now. It feels good, and dead hangs feel good. I try to do them all the time -- like whenever I walk past a tree branch low enough for me to grab, I'll dead hang. I don't have any pull up bars in the home, but there are a couple of spots to hang from in my home, and I use them daily.

Despite all this progress, I have had the hardest time dead hanging by one arm. I realized I hadn't tried it at all when my middle child started hanging by one arm. They could just do it for forever, and it looked super fun and natural. When I first tried it, though, I couldn't last a second.

So I started working on it. Then yesterday, I was by a tree talking with a friend, and I gave it another shot. And it worked! I hung by one arm for a good twenty seconds or so. Then I switched arms and hung by that one also for a good twenty seconds. It was super exciting, and a day later, I'm still joyful about it.

Self Deprecation

Self deprecation is a great way to stay humble, and it's also a way to stay accessible to people. I realized last year, though, that toxic people don't understand self-deprecation, including self-deprecating humor. Toxic people instead interpret self-deprecation literally. When people make self-deprecations, either out of humility or humor, they interpret it as confessions of ineptitude. Consequently, they think the person is weak.

This has an unfortunate effect on many things, from faculty meetings to politics. It suppresses expressions of humility by the humble. And we need humility more than ever.

Humility is neither a weakness nor does it signal ineptitude. It's a virtue.

16,000 Steps

It was a beautiful day to be outdoors. So my girlfriend and I went on a hike at the Raven Run Nature Sanctuary.

Our hike was just over five miles. I took my shoes off and probably hiked at least a mile and a half with my bare feet. Maybe even two miles. Walking barefoot and using the foot muscles felt wonderful. It also changed my gait. I took shorter steps and used more of my body to walk and to feel the ground. When I got home, I took a deep 45 minute nap.

I've been barefooting more often recently. Last year I started to take my shoes off to walk to and from work. I haven't done that everyday, but I think I'll do it more often now. It's especially nice when it's raining.

I've long loved barefoot walking. In the summer of 1991, just before I left for college, I only wore shoes twice that summer. I worked as a lifeguard then, so it was feasible, but I kept my shoes off even when I wasn't working.

Today was a good walking day. Overall, I walked over seven miles, which as I estimated, equated to about 16,000 steps, or just over. I'm not sure I could get that many steps in everyday, but hopefully I can make it happen more often than not.

Chilling Out

Last month I used the lowest amount of power since I started trying to reduce usage. Specifically, I used 57% less electricity than I did the same month of last year. That's 505 kWh of power compared to last year's 1175 for the month of August (Sep bill date). That's a personal record for this household.

I think I might break my record this month, too. The other day I adjusted the fridge's temperature to the highest cooling setting. I'll be curious how much of an impact it makes. Plus, we've had some really mild temperature recently, and I've been keeping the windows open even more than normal. It looks like the next three days will be hot again, but I imagine that September will be noticeably cooler overall compared to August. So that'll help.

I have one more idea to reduce usage. I usually leave my laptop on and plugged in when I got to bed. I think I'll start to shut it down and unplug it, just so it doesn't draw any power overnight.

Month 2023 Usage (KWH) 2024 Usage (KWH) Change in Usage (KWH) 2023 Avg Temp (F) 2024 Avg Temp (F) Change in Temp (F)
May 831 612 -219 (-26.35%) 58 60 +2 (3.45%)
Jun 799 513 -286 (-35.79%) 66 70 +4 (6.10%)
Jul 942 570 -372 (-39.39%) 72 76 +4 (5.60%)
Aug 1499 551 -948 (-63.24%) 78 79 +1 (1.30%)
Sep 1175 505 -670 (-57.02%) 77 77 0

Being Pedantic

I read scientific literature for facts, but I read novels for truth. Right now I'm reading Donna Tartt's novel The Secret History. It's engrossing.

The main characters are college students at a small liberal arts college in the northeast. There's this one line that struck me deeply:

the young scholar is much more a pedant than his older counterpart" (p. 84).

Pedant can have a pejorative meaning, but it can also just refer to someone who is overly focused on rules and minor details in academic learning. I think that's often just part of the journey of an academic or a scholar. It certainly was part of mine. I think it's an important part of the journey, too, but I'm glad I'm past it.

My turning point to my own older counterpart came early on, when I read Susan Haack's Defending science within reason: Between scientism and cynicism. In this work, Haack quotes the physicist P.W. Bridgman, who described the scientific method as,

nothing more than doing one's damnedest [...], no holds barred (p. 24).

I've been reflecting on that line for well over a decade now. To me it means that there are multiple methods to get the facts and that being pedantic doesn't necessarily entail being rigorous.

It's complicated

As faculty, we have to report whether a student attended, engaged, or participated in a course between certain dates near the start of each semester.

We were recently informed of a new reporting requirement. Now, we also have to report whether a student attended, engaged, or participated in a course if they withdrew from the course before a specified date.

I thought it was kind of funny that I had to read the new requirement a couple of times to make sense of it. I didn't want to spend any more time on this, though, so for the lolz, I asked ChatGPT to represent the logic of these reporting requirements in Python code.

For your reading pleasure:

#!/usr/bin/env python3

from datetime import datetime

# Define the reporting period
reporting_start_date = datetime(2024, 9, 10)
reporting_end_date = datetime(2024, 9, 16)
drop_deadline = datetime(2024, 9, 15)

# Simulated student data
students = [
    {"name": "Alice", "drop_date": datetime(2024, 9, 12), "attendance_dates": [datetime(2024, 9, 11)]},
    {"name": "Bob", "drop_date": datetime(2024, 9, 14), "attendance_dates": [datetime(2024, 9, 13), datetime(2024, 9, 14)]},
    {"name": "Charlie", "drop_date": datetime(2024, 9, 10), "attendance_dates": []},
    {"name": "Diana", "drop_date": None, "attendance_dates": [datetime(2024, 9, 12), datetime(2024, 9, 15)]}
]

def check_attendance(student):
    """Check if a student attended on or before their drop date."""
    if student["drop_date"] is None:
        return None  # Student didn't drop
    for date in student["attendance_dates"]:
        if date <= student["drop_date"]:
            return "YES"
    return "NO"

def report_attendance(students, reporting_start_date, reporting_end_date, drop_deadline):
    """Report attendance for all students."""
    for student in students:
        drop_date = student["drop_date"]
        if drop_date is not None and drop_date <= drop_deadline:
            attendance_status = check_attendance(student)
            print(f"Student: {student['name']}, Drop Date: {drop_date.strftime('%Y-%m-%d')}, Attended: {attendance_status}")
        else:
            print(f"Student: {student['name']}, Drop Date: Not Dropped or after deadline, Attended: --")

# Run the reporting logic
report_attendance(students, reporting_start_date, reporting_end_date, drop_deadline)

Tasteless in Comparison

I don't each much meat. But sometimes when I go out to eat I crave something like a burger or some chicken. It feels less habitual and more like a compulsion when I do this.

I'm always disappointed though. It never fails that I am completely underwhelmed by the dish and wished that I had gotten some vegetarian meal instead. The vegetarian options are usually as good (which means they're "meh") or better than the meat option.

I suppose I'm posting this here to help me be more intentional about what I eat and about eating more vegetarian dishes.

Markdown Vs. Asciidoc

I like Markdown a lot because of its simplicity. But that simplicity means a loss of some functionality. For example, Markdown can only create the most basic of tables. Basic tables are fine for many things, but sometimes tables need (multi-column) headers, footers, titles, and notes and not only basic rows and columns. These things are important because tables are an important visual organization of data.

The need for more functionality has long spurred me to consider using Asciidoc more. I've only played around with it and perused its docs, but I like what it has to offer. It is mostly as straightforward as Markdown (but not quite).

My current annoyance with Markdown started yesterday with my Just Chilling post below. I didn't like the table I created, which I wrote in markdown originally, and so I restructured it in HTML. But it's no fun writing in HTML, especially HTML tables. I think Asciidoc might be a better way forward.

Go the Distance

Yesterday Fitbit informed me that I walked 1,600 miles in the last twelve months. I'd like to increase this to 16,000 steps per day. That would equate to about 7 miles per day or 2,555 miles per year.

I only have so much time, though. Seven miles per day would mean nearly two hours of walking per day. I'm not sure if I can do that, but I think I'll try.

Just Chilling

The average temperature last month increased by one degree compared to the same month last year. Yet I've decreased my electricity usage by 2.72 times, or by -63.24%. Furthermore, I've managed to reduce my electricity usage month over month for the last four months. That's pretty cool!

I enrolled in budget billing long ago. This means I pay about the same amount each month. Currently, $132 per month. I'm not sure when this amount will be adjusted, but my account reports a negative balance of $226.04. I suppose this means that the electricity company will adjust my bill soon and that I might not have to make a payment for a couple of months!

Usage (KWH) Avg Temp (F)
Month 2023 2024 % change 2023 2024 Change
May 831 612 -26.35% 58 60 +2
June 799 513 -35.79% 66 70 +4
July 942 570 -39.49% 72 76 +4
August 1499 551 -63.24% 78 79 +1

Note: Based on my reading of my electricity bill, each month represents the previous month's usage. That is, May represents April usage, and so forth. I suppose then I'll be able to report September (August usage) later this week.

I'm really very curious if I can keep this reduction going during the winter months, especially with the gas bill.

A simple Python function to calculate percentage change:

def perchange(x,y):
    c = ((x - y) / y) * 100
    return c

Ice Bath

Ice punctured my ice bath tub last winter. I finally patched the tub and took an ice bath last night. It felt great and was sorely needed. I sat in it for ten minutes.

The tub is just big enough for me to sit. I think it holds about 75 gallons altogether when full. I filled it with water about halfway and added 50lbs of ice. The water temperature was 50F after a bit. The kids tried it, too, and the two oldest each did a couple of rounds at a minute each. I was impressed.

It felt cold but not nearly as cold as 32F, the temp it would drop to in the winter when I took regular ice baths. Ice is expensive and so I'll only do this once every week or two until the weather changes.

I'm looking forward to the colder months. In the meantime, I still take daily (not cold enough) cold showers.

Composing a Tune

One of my children has been learning the violin. They composed a tune for it, and today my child and their teacher played it together. It was so fun and incredible.

Essays with ChatGPT

Every once in awhile, I'll have a playful idea that I want to think through, something that's not related to my work at all. If the idea has any kind of substance, or if I just want to think through it more, I'll go talk with ChatGPT about it, and if I feel playful, I'll ask ChatGPT to generate an essay based on my prompts and conversations with it. It's become kind of a fun hobby.

In light of this, I've created a new section of my site that's dedicated to essays generated by ChatGPT. The essays were based on my prompts to it and these prompts were based on various playful theses that I've had.

Currently, I've added two essays to the page. The first one is a comparison of two dystopian novels and the second one is on the causes of monsters in film and other creative works. I'll add more at some point. In the meantime, and if interested, see Essays with ChatGPT.

One Year

She has children, dogs, cats, and chickens. I have children. My children vie for her attention and she gives it without wavering. It's because she loves so much.

I once thought I would be disappointed about something, but I hated the idea of that and just felt love instead. It's so radical it's bonkers, to do that automatically. It makes the love flourish even more.

I love her children, dogs, and cats.

I love her.

Who knew that you could learn so much about how to be by learning so much about how to be with someone? That's a regalo.

It's all a gift, like everyday is a gift.

In The Rain

Two days ago it rained heavily, and it seemed like one of those rare rainstorms that wasn't accompanied by lightning and thunder. The kids and I took our bare feet to the street and jumped, splashed, and played while it rained on us. I stood in the rain, raised my arms out, and sent love to my dying cousin. We played in the river of water that ran against the curb. We formed a human dam to see how high the water would rise. While I monitored traffic, the children laid down on the street to feel the water flow around their heads.

RIP Josh

Over two years ago, soon after we left Texas, some of my extended family there were swimming in a pool. My Mom said to my cousin, who had put us up while we were in Texas, that he looked yellow. She had had her own liver problems and thought something might be wrong with his.

Later, he received a diagnosis of bile duct cancer. His Mom was there and helped him and his family through the initial process. A few months later, she died from cardiac arrest. I last saw my cousin at her memorial.

Josh put up a hell of a fight. He had two young children, both of which were his delight and his Mother's delight.

I last spoke with my cousin eleven days ago. The last several months were hard, and I'm not clear on what happened, but something caused some brain damage. My Mom put me on speaker phone, I called out to him, and he called back to me, repeating my name. Then I told him I loved him, and he told me he loved me, over and over again.

My cousin and I grew up with each other, and he was more like a little brother. We spent most of our summers with our common grandparents, and then my brother and I would often stay with him and my aunt and uncle.

Josh sometimes aggravated the hell out of me. He wanted things, fiercely, and that kind of desire worked well for him in life. My aggravation with him went away when I realized that I didn't want things like he did.

But even during those times, he was also someone that I wanted to live near when we would be old people. I don't think that would have happened, but I'm sorry that it's not even possible now. Josh, I'm sorry you didn't get the one thing you most wanted, to grow old with your husband and raise those two dear children of yours.

My little cousin, I have so many fond memories of us growing up, hanging with Jo and Papa, and spending our summers at the pool. You were so generous and obnoxious and a source of tremendous fun and gusto. I will miss you quite dearly. The world already feels less complete without you in it.

Win Win

I wanted a rocking chair for my front porch, but I didn't want to buy a rocking chair for my front porch.

Someone left a rocking chair on the curb a few houses down.

Now it's on my front porch.

It's in great condition.

I've been reading again. I'm currently about a third of the way through John Kagg's book American Philosophy: A Love Story. It's an enjoyable book. In an alternate universe, I became a professor of early 19th century American literature and philosophy. This book is satisfying that craving.

Instead of using my eReader, I bought the book from an online used book seller. I've found it really enjoyable to read pbooks again and haven't touched my now quite uncharged eReader in a few months. The eReader is great, but it's nice to have a book in hand.

Vim as File Manager

I use vim all the time. However, I have a tendency to close the application when I'm done with a particular file. I don't think this is very efficient.

A better use of vim would be to keep it open and use more of its potential. The first step is to start using it as a file manager with netrw.

One of the most basic file management actions is to move or copy a file. It took me a moment to understand the process. To move or copy a file:

  1. Open the current directory: vim . Or if already in vim, use <Esc>:e . to open the current directory.
  2. Navigate to a target directory and mark it: mt
  3. Navigate to source file and mark it: mf.
  4. Press mc or mm to copy / remove (respectively) the source file to the target directory.

I've been using vim for twenty-something years, and I'm still learning new things about it.

Breaking Bad Habits

To help me break my bad habit of checking email first thing in the morning, I wrote a Python script to limit my email usage to one hour a day, from noon to 1pm.

#!/usr/bin/env python3

import time
import subprocess
from colorama import Fore

start_hour = 12
end_hour = 13
hour = int(time.strftime("%H"))
minutes = int(time.strftime("%M"))
minutes_left = 60 - minutes

def get_email():
    mbsync = "/usr/bin/mbsync"
    mbsync_arg = "-a"
    subprocess.call([mbsync, mbsync_arg])

def process_email():
    notmuch = "/usr/bin/notmuch"
    notmuch_arg = "new"
    subprocess.call([notmuch, notmuch_arg])

def email():
    mutt = "/usr/bin/mutt"
    subprocess.call([mutt])

def check_email():
    if hour == start_hour:
        get_email()
        process_email()
        email()
    elif start_hour - hour == 1:
        print(Fore.YELLOW + "Almost there. %s more minutes to check email." % minutes_left)
    elif hour < start_hour:
        hour_diff = (start_hour - hour) - 1
        print(Fore.RED + "BE PATIENT. %s more hour(s) and %s minutes to check email." % (hour_diff, minutes_left))
    elif (hour + 1) > end_hour:
        print(Fore.GREEN + "WAIT TILL TOMORROW TO CHECK EMAIL.")

def main():
    check_email()

main()

It's a pretty simple script and is mainly just enough to remind me to not check my email first thing in the morning. And it only deters me from using mutt, my email client. If I keep the client open, then I can check email anytime. I could also get around it by calling mutt using the full path to the executable: /usr/bin/mutt.

But, it's been enough so far to keep me focused, which is what I want.

I call this Python script in my .bash_functions file:

mutt() {
    $HOME/bin/mutt.py
}

Keep Staying Cool

I continue to make headway in reducing power usage. Compared to last month (June 2024), the average temperature this month (July 2024) increased by 8.6% (70F to 76F) and my electricity usage increased by 11.1% (513 kWh to 570 kWh). However, comparing July 2024 to July 2023, although the average temperature increased by 5.6% (72F to 76F), I reduced my electricity usage by 39.49% (942 kWh to 570 kWh)! This is pretty exciting to me.

Month 2023 Usage (kwh) 2023 Avg Temp (F) 2024 Usage (kwh) 2024 Avg Temp (F)
May 831 58 612 60
June 799 66 513 70
July 942 72 570 76

I've also managed to reduce my water usage by about 55%. In fact, I received a $10 and change refund on my water bill this month.

The difference in gas usage hasn't changed much year to year yet, but gas usage is fairly negligible in the summer months. I did turn down my water heater thermostat to about 110F, which should help a lot. I'll also aim to keep my heating bill low by setting a lower temperature on the thermostat during the winter months and will track it more closely starting in October.

Lots of Walking

So far this year, I've walked 842.88 miles, which is about 120 miles per month. At this pace, I could end up walking over 1440 miles by the end of the year. That's like walking to Santa Fe, NM and then some from my home. Or I could circle the earth in just over 17 years.

But it's just a bit under four miles per day, which doesn't seem like that much.

Maybe I'll aim for five miles per day. My average for this week is 4.6 miles but only 3.7 for the month. On this last day of the month, I'd have to walk 41 miles to bump July's daily average to five miles. Probably not going to happen.

More Bad Traffic

I might becoming a bit obsessed about traffic, especially with how people drive. A recent article in The New York Times (Badger & Blatt, 2024) reported that road deaths have risen considerably since the pandemic. The article doesn't mention it. It's more about the decline in traffic enforcement since the pandemic. But in my view, I've never seen more people drive with their phones in front of their faces (as well as sitting in idling cars with their phones in their faces). People and their phones are a problem.

Source: Badger, E., & Blatt, B. (2024, July 29). Traffic enforcement dwindled in the pandemic. In many places, it hasn't come back. The New York Times.

Sitting in Idling Cars

Is it a new thing or have I just noticed it more often, that people sit in their idling cars for long periods of time? That seems like a lot of gasoline to burn through. I don't get it.

On Annual Rituals

I have only street parking where I live, and street parking where I live requires a parking permit, and mine expires at the end of this month. So every year I walk down to the parking authority to renew my permit and to purchase a guest permit. It's like an annual tradition.

I could do this online, just like I could update my car's registration online every year, too. But I like the excuse to walk the mile and a half walk it takes to get downtown from my home and to take care of these things in person.

Of Madness in Books

I finally finished a book this year. I read Paul Auster's City of Glass. I remember where and when I've read most of the books I have, but I can't recall when I purchased this copy. Probably because I never read it. But I must have bought it at least (two?) decades ago. It's been sitting there all these years and moved in boxes however many times. But I finally read it, and it was great. It's the first work I've read by Auster, and I was probably motivated to read it because of his recent passing.

Don Quixote makes its appearance in the work. That's a book I couldn't finish because Quixote's madness made me too sad. This book made me sad for the same reason, but I felt less connected to and more detached from the main character. Which surprises me because I enjoyed reading it quite a lot.

I'm way behind on reading this year. My goal is one more fiction work before the semester begins.

A Disturbing Trend

I haven't participated in social media for years, but I've commented on three YouTube videos this year. I don't like where this is headed!

I Want To Hold Him

I spoke with my cousin yesterday, probably for the last time. I just want to hold him in my arms.

Bad Habits

I generally start the day early by reading the news and checking email. I need to break these habits because they set the tone for the day and derail getting started on what matters: teaching and research.

For example, my plan this morning was to get some work done on a textbook that I'm writing. But I checked my email first, and that led to a series of tasks. And those tasks took up the majority of my morning.

The tasks could have waited, but I can't help it sometimes because I have this compulsion to keep my inbox clean. I've tried various hacks, but they don't stick. For example, since I use the mutt email client, I wrote a bash script to prevent me from using mutt during certain time frames. But then I eventually just use workarounds to my own efforts to hack my behaviors. Silly me!

I'm going to just have to break these habits by BRUTE FORCE.

I'm envious of the people who don't have such compulsions. Like, when I notice that a colleague has an inbox with hundreds or thousands of emails (or even tens or hundreds of tabs in their browser), I'm seriously a bit jealous of that ability to handle that kind of chaos.

Kicked Out

I was perusing the abstracts of the last three issues of a journal, and then I was kicked off the site for malicious activity. So there's that.

The Error page states:

Please contact us immediately if you believe your IP has been blocked in error.

The contact us text is a link. But that link doesn't work because my IP is blocked from the entire site. Hilarious.

I Get It

Lots of changes at my workplace this last semester. In trying to make sense of it, I thought, follow the money. That finally made me realize that we think about universities wrong these days. Or that I've been thinking about my university wrong. I realized that my university is not a university first. It's a hospital system first but with a university attached to it.

Now I understand the changes to all the regulations and policies.

What is Wrong?

My temporary neighbors refuse to say hello. I've written about this before. It's weird.

Just now, I went outside to remove some vines that were growing on the window screen. The temporary neighbor was sitting outside on their door step looking at his phone. He looked up at me as I walked down the side of my house. I waived hello. He turned away and went inside.

Of On

When I began this page, I had Michel de Montaigne's Essays in mind. And this inspired me to begin the titles of many of my posts with the word On because that's how I remembered the beginnings of the titles of many of Montaigne's essays. Turns out, he started the titles of many of his essays with the word Of instead. As Montaigne might write, LOL.

Reading for Fulfillment

I haven't read a single book this year for fun. I tried to read a few books last semester, but that semester was overwhelming. I would make it partway or about halfway through a book, but I would run out of time on my loan from the public library. Then I would renew or rejoin the wait lists for those books. I decided to pause things after multiple attempts at that.

I will read at least two novels before the end of the summer, though. I need that.

Set the Tone

Yesterday we went to the pool for the first time. It made it feel like the summer has finally begun. Which is sad since the summer is mostly over with.

It also made me realize the fatal error I made this summer. I didn't set the tone.

Next May, I'm setting the tone.

On Memory and Time

It seems like time goes by quickly. But now I think it's just that some memories feel more recent than they are. Sometimes that's disorientating.

Process Substitution

I use the pipe | operator all the time to "pass" the output of one command to the input of another command. For example, one time I needed to check which directories the SHELL used for executables. To do that, I can check my $PATH variable. However, the output is one long line of directories, where each directory is separated by a colon. This is not a very readable output.

To make the output readable, I pipe it to the sed command to replace colons with newlines:

echo "$PATH" | sed 's/:/\n/g'

We can keep adding pipes to the output. If I want to pipe the above output to list executable directories only in my home directory, I simply add the $HOME variable to the grep (aka, search) command:

echo "$PATH" | sed 's/:/\n/g' | grep "$HOME"

In the above cases, piping is a way to filter the data.

In other cases where I need to filter multiple data at the same time, I can use process substitution.

Here is an example where I use sed to filter out specific lines in multiple files, specifically, lines 7-10 in file1 and lines 1-3 in file2. The cat command joins the output together:

cat <(sed -n '7,10p' file1) <(sed -n '1,3p' file2)

If I want to save that output to another file, then I can redirect it to another file using the redirect > operator:

cat <(sed -n '7,10p' file1) <(sed -n '1,3p' file2) > file3

It's stuff like this that makes working on the command line so efficient, especially when working with data.

Searching for R

My first years learning R started in the R Console. This was back in 2008, two to three years before RStudio launched. I remember installing R for the first time and then having a hell of time launching the R Console before I realized that I had to type capital R and not simply r in the terminal. I laughed hard when I caught my error. It's one of the annoying things about the otherwise great package management system in Debian-based Linux systems: the names of packages (e.g., r-recommended on Debian-based distros) are not the same as the executables.

I also remember being confused by the R package install process. For example, I wasn't sure if I should start R as an admin (e.g., sudo R) or as a regular user (e.g., R) before running the update.packages() command. And then I was confused by which download mirror to select. Eventually I figured out how things worked.

When RStudio came out, I started using that for most projects. Even though it's a fine application, has nice functions, and its editor has Vim keybindings, I much prefer the command line and actual Vim. Thus, I've barely used it in recent years and haven't installed it in a while on my systems. My workflow has long been command line centric, but I've been making an effort over the last several years to double down on a command line workflow.

The problem is that nowadays it seems like every web search for how to do something in R turns up how to do something in RStudio. For example, I like knitr for processing documents written in Markdown and R code. This approach to producing reports aligns with Donald Knuth's idea of literate programming, which I've long found interesting. It's completely fine to knit a document directly in Vim. However, a default search for how to use knitr or other packages means you get a tutorial on using it in RStudio. In fact, most web searches these days on anything R related yields results on using tidyverse content in RStudio. It's kind of annoying, and it illustrates how search is largely a function of content and popularity.

On Soup

Soup is my favorite food. If all I could eat for the rest of my life was soup, I could live with that. I worked as a cook for about 18 years. I never seriously wanted my own restaurant, but when I imagined opening one, I imagined opening a soup and sandwich shop.

I don't often buy canned soup because soup is the easiest thing to make in the world. This is what I do for the most basic soup:

  1. Add broth to pot (or bouillon to water).
  2. Add vegetables (whatever I have on hand).
  3. Bring to boil.
  4. Add noodles.
  5. Lower the boil.
  6. Salt to taste.

And that's all there is to it.

Making creamy soups is not much more involved. Blend and add cream.

I like unblended soups, but that's easy, also. Just blend it.

In my fridge, I had a small piece of onion, some carrots, some celery, some tomato, and some cooked beets. I added it to some broth in a pot. Brought it to a boil. Added some spaghetti, which I broke up into pieces as I dropped it into the broth. Then let it low boil for about ten minutes. So good.

Staying Cool

I am working hard to reduce my electricity usage. I set my AC at a higher temperature than I have in the past. I hang dry my clothes more often. Etc. I am seeing some payoffs.

Let's compare last year's usage to this year's. According to my power usage history, I used the following amounts of power this time last year:

Average electrical usage during two summer months in 2023
Date Usage (kwh) Average Temp (F)
May 2023 831 58
June 2023 799 66

In the last two months, I used:

Average electrical usage during two summer months in 2024
Date Usage (kwh) Average Temp (F)
May 2024 612 60
June 2024 513 70

Thus, comparing May 2023 and May 2024, despite a 3.4% increase in outside temperature, I dropped my power usage by over 26%.

And comparing June 2023 and June 2024, though we experienced a 6% increase in outside temperature, I reduced my power usage down by almost 36%.

I'm looking forward to keeping this up (or down)!

On Loneliness

I'm a big time introvert, and I lived a solitary life before I had children.

I never felt lonely in those days. Didn't even understand it, even if I would go days without being very social.

Then I had children. And when they are away, I understand and feel what I didn't before.

Drinking Beets

I make beet burgers about once a week. They are made with a mixture of ground oatmeal, ground baked black beans, and boiled beets. They are pretty yummy. Two out of three of my children think so!

Before I boil the beets, I save the leaves for another dish, like a pasta or sautéed veg. After the beets are boiled, I compost the skins. I thought I was getting a pretty good use out of the whole beet.

Then the kids and I watched a sourdough video. In this video, someone reserved the juice from some colorful vegetables and added that juice to their sourdough. Their baked bread had this really wonderful color as a result.

The children and I loved this idea. Yesterday I reserved the boiled beet water as a substitute for regular water in my sourdough. I made the dough this morning. It is super beet red and very beautiful. I'm excited to see what it looks and tastes like tomorrow when I bake it.

In the meantime, I had more leftover beet water. The children and I went for a long bike ride today. When we got back, I had this idea to drink it. I squeezed half a lemon into it and added a bunch of ice. We slurped it up. It was so delicious and very refreshing. I'm excited to get more out of my favorite vegetable!

Coding with ChatGPT

Using ChatGPT to create some code can be useful at times, especially for quick one-off commands in bash. But I find that I'd prefer to code myself. I enjoy writing code, and using ChatGPT (or some other GPT) takes away the fun.

That said, it's helpful in explaining some code that I don't understand or checking the code that I write for errors or optimizations (that I then check for accuracy). However, I prefer to write the code myself, especially when I'm working on a project.

Small Dreams

My ten year goal is to not have a car anymore or ever again. I'd prefer to walk or ride a bike, and if I need a vehicle, to use a service or rent a car. I might even try to reach this goal sooner. Maybe I can do it in five years.

HTML Email is Bad

HTML emailis awful. Quite awful. So I've been sending a lot of HTML emails lately, because I think it's funny. Don't worry. I've made them absolutely horrible looking.

I prefer to send email as plain text and to render email as plain text in my email client (mutt).

My adventure with composing HTML emails was only temporary, fortunately. Email clients shouldn't act like web browsers. Just the text.

Areas of Expertise

The new regulations were posted today. They decided to define academic freedom, which I don't think, but am not sure, was defined in the prior regulations. It says a lot that they decided to add this definition, especially if I am correct that it wasn't defined in the prior regs.

I find the definition to be a bit vague. Specifically, I have some initial questions:

  • What are the boundaries around our domains of expertise? Who gets to say what my domains of expertise are? Do I get to say?
  • How do we interpret personal viewpoints, especially in contrast to the ability to express our views and perspectives on issues related to our academic expertise?

I think this is all rather confusing.

Family Cycling

My kids and I ride bikes a lot in the summer. My youngest had been riding in a bike seat with me, but yesterday and today they started riding on their own. It was pretty awesome.

I had to learn how to teach them to ride, but they all learned pretty quickly. I can only take a little credit because it helped that they each started on a balance bike.

But I learned some important lessons in teaching them to ride. When I thought my first child was ready to move to a regular bike, we started in all sorts of places: on the sidewalk at the park, in an empty basketball court... But the sidewalk was too narrow for them and the basketball court was too short. The thing that helped was to start them on the street. They needed space on each side to feel safe to meander, and they needed more distance before having to turn around.

I'll remove the child's seat from my bike soon. I'm happy to get rid of the bulky thing, but I'm kind of emotional about it, in a mixed way. Yet it's so cool. My children and I are going to be riding around town altogether.

Won't You Be My Neighbor

My neighbor died about six and a half years ago. New people bought and renovated it and have since used it "for short- and long-term homestays".

Of all the people who have stayed there over all these years, less than a handful have said hello, even after I have said hello or nodded or attempted some kind of greeting. This is hundreds of people, I would guess. Most of those people just turn away. It's very weird.

Custom YAML

I'm editing a manuscript and marking it up with markdown. This is not an Rmarkdown file. It's just plain markdown. I have a YAML in the header with metadata like this:

title: "This is the title"
subtitle: "This is the subtitle"
author:
    - name: "C. Sean Burns"
      affiliation: "University of Kentucky"
    - name: "Generic Name"
      affiliation: "University of Generica"
date: "June 5, 2024"
abstract:
    This is the abstract of the manuscript. It goes here.
lang: "en"

I was having a problem generating HTML from this file using pandoc. The metadata would render to HTML except for the author names and affiliations, which would simply return true:

pandoc file.md -s -o file.html

The solution was to create and use a custom template for the YAML. I had read about this before but hadn't investigated it enough. But now I have! Here's my custom template for the above example file:

<!DOCTYPE html>
<html lang="${lang}">
<head>
  <meta charset="UTF-8">
  <title>${title}</title>
</head>
<body>
  <h1>${title}</h1>
  <h2>${subtitle}</h2>
  <p><strong>Author(s):</strong></p>
  <ul>
  $for(author)$
    <li>${author.name} (${author.affiliation})</li>
  $endfor$
  </ul>
  <p><strong>Date:</strong> ${date}</p>
  <p><strong>Abstract:</strong> ${abstract}</p>
  <hr>
  $body$
</body>
</html>

It's pretty simple. For every field in the YAML that I want in the HTML output, simply enclose the field name in the custom template file. In the case of multiple fields with the same field name, such as with the author and affiliation fields, then use a for loop in the custom template file. And note that the field names are hierarchical, such that affiliation is a child of author and should thus be ${author.affiliation}, and so forth.

To create the HTML output with pandoc, do:

pandoc file.md -s -o file.html --template=custom_template.html

Of course, the file names could be descriptive of the project. And the custom template could do more with the metadata, like using the YAML metadata to add HTML <meta> tags in the HTML <head>.

Accidental Redirect

I was editing an HTML file and wanted to list the <h2> tags in the file with the grep command.

And I made a big MISTAKE because I typed too fast and pressed Enter too fast:

grep "<h2"> index.html

Astute observers will notice that the > tag is outside the right quote mark. Which means I accidentally zeroed out the file because that's a bash redirect! I had done a lot of work on that file, too. Oh, the pain!

The correct grep command is:

grep "<h2>" index.html

But next time I'll just do:

grep "h2" index.html

Fortunately I had the HTML file open in my browser. But when I right-clicked and selected View Page Source, I got nothing. Because I emptied the file!

What did the trick was pressing Ctrl-a to select all in the browser window and selecting View Selection Source. That opened up the HTML code, and I was able to paste that into my editor.

I'm using git on this file, but I hadn't yet committed my changes. Argh!!

On Writing Longhand

I went (late) to a writing retreat this morning. Writing retreats are a great way to focus and get work done, and I need them sometimes, especially since I'm working on a scholarly book.

But, per my decision a few weeks ago, I didn't carry a backpack. By entailment of a late early 21st century life for a professional in the US, that means I didn't bring my laptop. And because the retreat was not near our offices, I didn't have access to my desktop machine.

Instead, I brought a notebook and a pen, and when I sat down to write, the ideas came flowing out. I developed an aspect of my thesis for my book that was implicit in what I had already developed, but writing it out by hand helped me make a more explicit, stronger connection than what I had developed before. It was thrilling.

Make Install

On Debian-based distros, including Debian but also Ubuntu and other derivatives, the common way to install software is through the apt command. And there are corresponding package management systems on other Linux families, like dnf on Red Hat-based systems. These are great software management systems, but using them generally means installing older versions of software (albeit, patched for security updates). That's usually fine, but in some cases, I would like the latest versions of software. For example, Vim 9 was released almost two years ago and is much better than the last stable release, which was Vim 8.2. But Vim 8.2 is the default version on my Linux box right now when installing using apt. Furthermore, there are some plugins that I use a lot that expect Vim 9. Some of those plugins also expect Python3 support, and the apt version of Vim isn't configured for that. These factors mean that the best way to install Vim is by downloading and compiling the source code.

Installing Vim 9

The steps to install Vim 9 (after perhaps removing Vim 8.2 using apt) are:

  1. Install dependencies needed to compile Vim 9 with Python3 support. I already had build-essentials installed but for reproducibility on a new system:
sudo apt update
sudo apt install -y build-essentials python3-dev
  1. I like to compile software from my ~/bin directory. So, change to my ~/bin directory and clone the Vim repository from GitHub:
cd ~/bin
git clone https://github.com/vim/vim.git
  1. Navigate to the new Vim source directory:
cd vim/src
  1. Configure with Python3 support:
./configure --with-features=huge --enable-python3interp --prefix=/usr/local
  1. Compile and install Vim:
make
sudo make install
  1. Then check the version using:
`vim --version | grep -A1 "^VIM"`

Updating Vim 9

The process is fairly similar when updating Vim, but there are a few differences. First, I don't need to clone the repo, but I do need to pull it for updates. I also need to run make distclean to cleanup prior build files. The whole process is:

cd ~/bin/vim
make distclean
git pull origin master
cd src/
./configure --with-features=huge --enable-python3interp --prefix=/usr/local
make
sudo make install

And then I can check the installed version number.

Being Cool

One of my goals this summer is to avoid using the AC as much as possible. I've done some reading, and I think I have the windows, shades, and fans configured to keep the house cool and breezy even when it's hot outside. Plus, I ordered a small window fan to help create a better cross breeze.

I'm pretty excited about this experiment and am also curious by how much it impacts (lowers) my electrical bill.

Also, when it's hot, I'll have a great excuse to take an ice bath. Not that I need an excuse to take an ice bath. I haven't taken once since the winter, and I'm seriously missing it.

By the way, I did my daily WH breathing yesterday, but it was a weird day for reasons, and I forgot to take my cold shower. Yesterday was thus the first time I've missed a daily cold shower in about two and a half years. I was fretting about it last night as I lay down to sleep, but I decided to let it go and be fine with it. Maybe I'll take a second one today to make up for it. :)

On Distance

My friend heard the thunderclap before I did. We were on the phone, and they live a little less than three miles away.

I wish I had the presence of mind to count how many seconds passed before I heard the thunder, but I think it was only two to three seconds.

Given the speed of sound at 74 degrees Fahrenheit, it would have taken about 13+ seconds for the sound to travel to my ears. But that's assuming the sound came from a direction directly beyond them.

However, if I am correct that the time it took the sound to reach me after them was only a couple of seconds, then that means the thunder originated between us but closer to them than to me. More specifically, it was a bit less than half mile closer to them.

Traffic

More and more often, it seems to me, I find people driving recklessly and without consideration of others on the road. Today, I was running an errand, and traffic was fairly congested. There were a couple of drivers who cut in front of me, with little wiggle room, and without signaling. One of these people drove very erratically. This kind of experience often sours the whole driving experience and makes me worry about getting in a wreck. And I am already not a fan of driving or being in cars.

Yet, 99% of all the other drivers would drive okay or would be kind. I just now realized there's no reason I need to let the 1% sour the experience. Instead, I can appreciate that most people were cool.

Same for other areas of life.

Still, that small minority of inconsiderate people can do a lot of damage. So it remains important to be careful.

Same for other areas of life.

End of Life

I guess these were the words the doctor used, conveyed to me by my Mom, that my younger cousin is in "end of life."

Maybe I'm more accustomed to hearing this applied to software.

I kind of despise crossover terminology, even though it has its metaphorical uses, and even though I can't present a better alternative. And I'm not sure who borrowed the phrase from the other, but I'd guess it was the tech field that borrowed it from the medical field. Indeed, a quick, non-rigorous search on Web of Science limited to computer related categories shows that the phrase appears as early as 1998, and as early as 1983 in the health care sciences.

I love you, Josh.

Say Less

Back in 1998, I had an office job. My boss instructed me to write a response to a client's letter, and I wrote a two-page, single-spaced reply. When I showed it to him, he laughed and told me to edit it down to a couple of sentences.

I learned the same lesson years later in a graduate philosophy course. In both cases, the main point was: the more you say, the more you accept responsibility. That kind of responsibility might mean greater commitment to do something or more admittance of fault.

Twenty-six years later, I am still having to learn this lesson.

It's hard because sometimes I want to write a whole lot about something, to get it out of my system or to think through the issue. But the key for me is: once I've done that and made my point, edit out all but the point that I want to make.

Mouse Infestation

I found a lot of mouse feces on my pantry shelves the other day. I had to throw away a lot of spoiled food. Then I cleaned up the pantry and laid some traps, unfortunately. This morning I found the traps were empty and more feces on the shelves. I'm completely bewildered by how the mouse (or mice) is getting on the shelves. I suppose it could be climbing up something, but I removed anything that would facilitate that. My next guess is that it's coming from the wall somewhere, but I can't locate where that might be.

Rmarkdown

I use Vim as my primary environment for R development. This setup uses the following Vim plugins:

  • Nvim-R: Vim as an R development environment
  • ncm-R: R autocompletion in Vim
  • vim-pandoc: pandoc integration
  • zotcite: Zotero integration in Vim

With the Nvim-R plugin, I can run R commands directly within the document. But the plugin shines when writing Rmarkdown (Rmd) files. To produce a report written from an Rmarkdown file in Vim, I use the following command: :Rmarkdown. This command generates the configured output as specified in the Rmarkdown YAML header. (It also assumes that the rmarkdown package is installed in R and pandoc on your system.)

I successfully used this process for a paper recently accepted by Scientometrics.

Another efficient way to create reports from Rmd files is by using a Makefile. I've been using Makefiles to generate my textbooks using mdbook, and I thought I'd apply it to this workflow. This approach allows you to share your research workflow as you intended it, and that's better for reproducibility than just sharing your code and data.

As an example, let's say I have a file named test.Rmd with the following YAML (imagine some R code and text after the YAML):

---
title: "Rmarkdown from the command line"
author: "C. Sean Burns"
date: "May 20, 2024"
output:
  html_document:
    theme: united
    keep_md: false
    df_print: paged
    code_folding: hide
    toc: true
    toc_depth: 2
  word_document: default
  pdf_document: default
always_allow_html: yes
---

[insert text and R code here ...]

With the following Makefile, I can auto generate PDF, HTML, and DOCX files:

all: test.html test.docx test.pdf

test.html: test.Rmd
    Rscript -e "rmarkdown::render('test.Rmd', output_format = 'html_document')"

test.docx: test.Rmd
    Rscript -e "rmarkdown::render('test.Rmd', output_format = 'word_document')"

test.pdf: test.Rmd
    Rscript -e "rmarkdown::render('test.Rmd', output_format = 'pdf_document')"

To generate all three files, run make all in the shell. Or to generate only the HTML file, run make test.html.

Seasonal Habits

I use the mutt email client running in a tmux window. It's an efficient and fast way to manage my email workflow. And that's really important because sometimes a semester can be particularly email heavy. The less time I'm in email, the more time I'm doing something more rewarding and productive.

Now that we're about to start our summers, I don't need to check email that frequently. But as is normal when switching seasons, I'm having a hard time breaking that habit. The mental switch will happen, but it sometimes takes a few weeks.

It's important to break the email checking habit because email interrupts focus. Summers are for reading, writing, and researching, and I need focus for those activities.

Changing a habit often takes simple measures. To curb my email checking habit more quickly, I closed that tmux window for the summer.

Sentence Line Breaks

Over the years, I have found that writing in a text editor frees me up to explore ways of writing. For example, a couple of years ago I discovered semantic line breaks. It's an old convention that originated in the early days of computing. The process involves adding line breaks to sentences after clauses, conjunctions, and other natural breaks in sentences. It works when writing in a text editor because I write using Markdown. When the file is converted to HTML or some other format, the sentences will render as natural paragraphs. I like using semantic line breaks because it makes text editing and version control easier.

However, lately I find that I prefer writing one sentence per line. It still makes text editing and version control easier, but it has other benefits. It discourages me from adding too many clauses and conjunctions, which I tend to do. Consequently, it encourages me to write shorter sentences or sentences with less breaks. I find this funny because I tend to skip over parenthetical clauses when reading but I tend to use them a lot in my writing. So it feels good to write in a way that aligns with how I prefer to read text.

Archiving Email

I archive most of my work email in maildir format, and use notmuch to index and search it. Sometimes I use these tools to look for patterns in my email. At the most basic, I sometimes wonder how much email I've archived.

So far, here's the breakdown. The current year is obviously not over with, but since 2013 when I started my current job, I've archived the following number of emails:

Email counts per year
Year Emails
2013 2319
2014 6286
2015 7513
2016 5682
2017 4383
2018 4604
2019 3817
2020 5721
2021 3425
2022 4805
2023 4924
2024 2762
Total: 56232

I archive based on the calendar year and not the academic year. Therefore 2013 was only a partial year because I started in August 2013. The spike for the years 2014 and 2015 were due to being on a big search committee. I thought at the time that the pandemic slowed email down (2021), but I was on sabbatical during the spring 2021 semester, and I'm sure that explains the big dip. Alternate forms of communication via Teams, Zoom, etc have increased since I started but not enough it seems to put a major dent in the overall average. I used to but for a long time haven't archived email from the learning management system (Blackboard in the early years and then Canvas to today). I could probably still clear some of that out of my archives. Not counting 2013 (half-year) and 2024 (not over with), I've archived an average of 20.6 emails per day in the email heaviest year (2015) and an average of 9.4 emails per day in the email lightest year (2021).

On Traffic Jams

Turns out it only takes an approximate drop of about 7% of the local population to clear up traffic in Lexington. (The university students left last week.)

I still see people driving with their phones in their faces, all the time.

Two Years

I'm a bit of a slow researcher, but I tested that characteristic this morning when I submitted a revision of a paper on a project that I started working on two years ago. Of course I'm not sure if it'll be accepted, or if this means that I'm almost done with this paper, but at least it feels good to make some progress.

One of the nice things about it recently was that I got to totally immerse myself in writing code for the (re)-analysis and editing the paper. I don't often get to do that during the school year. I look forward to being more immersed this summer on other projects.

No More Backpack

I walk to campus when I go to the office, and for a long time now, I've carried my backpack with me. Lately, I've also brought my laptop in the backpack.

But, I've had a great desire to not have to carry anything. So, I moved my old desktop computer back to the office, and installed a fresh new version of Debian Linux so that I could keep my laptop at home. And today I went to the office without carrying anything. This might all seem trivial, but it was very nice to be unencumbered.

Tough Year

This has been a tough year, like very tough. Like push me down to my knees tough.

But I'm thankful. Because this year has also been a gift.

The gift has been, that each time I've been thrown a curve ball, I am quickly reminded by someone or something that there is so much goodness, too.

Falling Asleep

I fall asleep pretty quickly, and I think coherent breath work helps with that a lot.

But recently, I've had these experiences, just as I'm in that early dream state, of standing on the precipice of some chasm, which causes me to jolt awake with a surge of adrenaline.

It's been a pretty frequent going-to-sleep experience, almost predictable.

Five Years

I happened to notice recently that I started this page five years ago today. I've had some kind of website for well over 20 years now, and when blogging became a thing, I tried that multiple times. It never stuck because I thoroughly disliked every blogging platform that I tested out, and I tested many of them.

I don't know if this page counts as a blog, but whatever it is, posting here has worked out for me. I like that it's one page, that it's only HTML and CSS, but most of all, posting here follows a workflow of my own design. It's a work flow that already matches my general workflow, which is heavily based on command line utilities, command line text editors (Vim/Ed), and Bash scripting.

This page, after five years and 236 posts, has a count of nearly 46,000 words and over 6,500 lines of text, not including the table of contents. I like that, and I look forward to adding to it for the foreseeable future. Perhaps one day it'll be the longest, single webpage on the web (that actually has content)!

(Edited on 4/25/2024)

Lost in Code

One of the challenges with being a professor is that your time (or my time) is split among different kinds of jobs: consider the standard teaching, research, and service division of labor. Even within those respective areas, there are specific kinds of work that require different skill sets: writing, analyzing data, lecturing, creating classroom excersises, grading, etc etc.

So, it seems, particularly during the school year, that I don't get the chance to spend a substantial amount of time on any one task that requires a lot of skill. That is, it often feels like I'm jumping around from one thing to another. It's one of my least favorite aspects of the job.

But today I got to spend a substantial amount of time writing code. It seems like it's been forever since the last time I was able to do that.

And I forgot how glorious it feels. The time has whooshed by.

So Far So Good

I'm still doing daily breathwork and cold showers, and I still haven't gotten ill since early November 2021. However, I did get really mucousy this last week, but I felt completely fine. So, not sure what that was about.

Food Waste

Things have changed on the home range, which means that I have total control of the grocery situation. I'm happy to report that, as of now, my food waste is at a near minimum.

I think this achievement was doable for me because of years of experience working in and managing kitchens and restaurants.

Pre-2007

I use my phone a lot, of course, but I'm also tired of it. Oftentimes nowadays, whenever I'm sitting around and waiting on something, I like to just sit, without the phone. It feels good.

And doing so reminds me of life before smartphones. I'm not a nostalgic person, but I'm glad I had that experience for much of my existence.

So far. I'll be 70 before I've lived longer with ubiquitous digital technologies and connectivity than I lived without that.

Boo Boo

Most of the time, I think the peer reviews I receive help me to revise a paper that can be more clearly written. In those papers, the main problem with them is that they don't get my message across well enough.

But a recent review caught an ugly error in my data. It's a revise and resubmit, and after fixing the error, the findings will likely be different. I don't know thus if the paper will be rejected, but I'm really glad it didn't get accepted.

On Scat

I have this weird ability to recall when and where I learned things.

The word scat came up recently in a conversation. I immediately recalled learning that word in 1989 in Larry McMurtry's novel, Moving On: A Novel. I checked Google Books, and the word is indeed in that book. Memory verified!

I have a fairly decent book collection. Sometimes I think I'd like to rid myself of the collection. It's just a lot of stuff. But, it's also how I index many of my memories. I can look at one of my books and say exactly when and where I was when I read it. I wonder if I rid myself of my collection, I'd rid myself of those memories. So, for now, I keep them.

As an aside, it's this connection with physical books that makes me wonder if I should stop reading ebooks and stick with pbooks. In the meantime, until I decide on that course, I've found that keeping a list of books that I've read has worked just as well.

Reading does so much good, either way.

Floor Sleeping

I didn't intend to start sleeping on the floor, yet I started doing just that a couple of years ago. But my setup was a bit lousy. So recently I invested in a proper floor sleeping setup. I got a bed slat for a futon mattress and a nice futon mattress to go with it. Two plus years into this, I'm digging it even more than when I started.

Multi Posting

The script that I use to automatically generate this page, the RSS feed, etc., allowed for only one post a day (because the way I set up the id attributes in the script).

I've modified the script to allow for multiple posts in a day. This is only a test.

See Also

For the most part, I think peer review is important. In my experience, it's been helpful in making sure that I write clearly. However, sometimes reviewers can make trivial comments. One reviewer was adamant that I clean up an in-text citation. I had placed the in-text citation before the end of the first part of a compound sentence. It looked used something like this:

something or other (Name1, Year), but other or something (Name2, Year).

And they wanted me to rewrite it like:

something or other, but other or something (Name1, Year; Name2, Year).

I thought that suggestion obscured the relationships between the parts of the sentence and their connections the in-text citations. To me, the in-text citation should be attached to the claim in the sentence and not just tacked on to the end.

Their motivation, I believe, was to adhere to the journal's style guide. Rules, as style guides, are useful of course, but they're useful because they provide consistency and help to clarify meaning. When rules are followed for their own sake, then the point is lost, in more ways than one.

I think we should just get rid of in-text citations anyway. We should be hyperlinking text as much as possible. It's more specific. And, I probably think that because writing for the web has conditioned me to do so. That is, hyperlinking text is more common, in everyday practice, than using in-text citations.

Reconfigure

A couple months ago I stopped serving this site at cseanburns.net. My hosting service raised the price (again), and the SSL costs also increased. Since the basic code for this site is in one of my GitHub repos, I just let the site default to that URL.

But, I've had cseanburns.net since around 2010, and I realized that I like that longevity. It feels nice in the way that living in the same neighborhood for the past eleven years feels nice. So instead of defaulting the URL to the GitHub repo, tonight I pointed my domain name (cseanburns.net) to the repo.

I might do it all differently someday, but I'm happy for now.

Parkour

The kids and I have taken on parkour. The idea here, at least for me, is not to become any kind of expert at this. I simply like using my environment and my body to get exercise rather than going to a gym. More importantly, it's an outside activity to do with the kids, and it's been a lot of fun so far with them.

But, wouldn't be it be dang awesome to do a Kong vault aka cat pass? Perhaps someday.

Hardcore, parkour!

Thanks Kid

My kids and I went to the playground. A little boy wanted to play with my youngest. Five minutes in, he asks,

Want to be best friends?

Wow.

And On This Day

My children could be having a sleepover tonight, but that would feel differently than it does. It wouldn't feel so sad.

Funk

Work has a been a little toxic because of a couple of people who seem to like to sow chaos and who seem to care nothing about other people but themselves. And my personal life has reached a new level of complexity. Combined, I finally fell into a bit of funk this weekend.

I decided to snap out of it. As I prepared to take my cold shower this morning, I set an intention to lift my mood. I turned the water to full cold. Then I exhaled deeply and emitted guttural vocalizations as the cold water washed over me. It felt great.

Sometimes the cold water alone is not enough to do the trick. Sometimes you have to set an intention, to embrace the experience as a mindful one and not just a physical one. I did that, and my strength is renewed.

Influence

Decisions in group settings are not always made based on rational arguments alone. Emotional responses, social dynamics, and the desire to avoid conflict can also influence outcomes. The physical presence and assertiveness of the coalition members might have created an environment where opposing their views felt more daunting, leading to a consensus that aligned with their preferences, even among those who might have had different reasons for their choices. - ChatGPT

HIIT

I have a new exercise idea for people.

Let three lean, fast dogs out, all with high prey instincts for chickens, into a yard with a dozen or more chickens on the loose.

Then, try to get the chickens back in their coop before the dogs can kill them.

You'll never run so fast, I promise.

4303 Days

It won't be over for a long while yet, but today marks the end of a big chapter in my life. So be it. It also marks the beginning of many new possibilities. And I'm looking forward to that.

Eyebrows

One of the novels I haven't been able to finish this year is Zadie Smith's On Beauty. I'm a good way through it, though, and laughed when I read the following:

"Dean French, I just don't see why my opportunity for advancement in the creative fields should be stymied" — French raised his eyebrows at 'stymied' ...

I laughed because I have these memories of me saying something or asking a question to some of my professors in college, and they would raise their eyebrows in the exact way that I imagine Dean French does.

Copying

Sometimes I need to copy a few lines from a file but don't want to open the file because, well, I don't know why. I'd rather just stay on the command prompt.

Since I'm using Wayland nowadays, I use wl-copy to copy to the clipboard. To copy some lines from a text file, just start with sed and pipe to wl-copy:

sed -n '/regex/p' file.md | wl-copy

Not Reading

I haven't been able to finish a book since the start of the year. Part of it is just how I am being in the world. A kind of mode. Sometimes I'm in a learning-by-doing mode. Sometimes I enter more of a reflective-passive mode. Right now I think I'm in the learning-by-doing mode, and a lot of that is work-related but also a lot is going on personally.

I imagine that by the time the semester ends, I'll be sick of computers again and for a while, and will finish the several novels that I have already started.

On Digital Minimalism

I removed most CSS from this site and am letting it default to the basic browser settings.

I'm sure to change it again someday. I like playing with CSS. But for now, I'm in the mood for a basic digital aesthetic.

Reload

There's an annoying browser behavior where if you return to a tab after moving away from it for a while, upon reopening the tab, the entire web page will reload, and so you lose your place on the page.

There are all sorts of reasons why this happens, but the fundamental cause is the use of JavaScript and JS Frameworks. JavaScript is simply not necessary on the vast majority of websites even though it's used on the vast majority of websites. HTML and CSS are great, powerful, low bandwidth, and very fast.

Ditch JavaScript and its frameworks 99% of the time.

On Personal Websites

It could just be me, but I think I'm seeing a growing interest among people in leaving social media but maintaining a presence on the web by creating their own personal websites. Not that I think social media is in any real danger of extinction, unfortunately, but I think it would be nice if some of the cooler things about the early web were resurrected, and that we once again had a web with personality, and that looked weird and resembled less like a common WordPress / Squarespace / Some JS Framework / etc template. See for example: mmm.page and digital gardens.

R Base

I met a civil engineer recently. She uses R for her job, but here's the catch: her and her colleagues are restricted to using the R Base Package, without the allowance for any additional libraries or packages. I find this fascinating and can't wait to ask her more questions.

I also find this setup inspiring. While the tidyverse and similar alterations for other languages offer some conveniences and a more Python like syntax, my first experiences with R predate their existence (outside of ggplot, which was available then). The problem with the R alterations is that they are unstable, and the endless deprecation warnings I get when using them are disconcerting. I'd wager that I could still run my scripts from my early days with R without issue, but I wouldn't wager any such thing for scripts that I wrote just a year or two ago that use those add-ons. (See also: dependency hell.)

The enduring reliability of the Base R package highlights the challenge, for open science and more, with relying on add-ons. I think this is true for much of the software ecosystem. I'm getting a sense that more people are pushing back against software frameworks that contort the basic languages they build upon, like React with JavaScript. We'll have to wait to see if that push back gains momentum.

What's interesting to me is that programming libraries and frameworks have long existed and were created to help programmers develop applications for specific contexts. For example, ncurses helps C programmers develop command line applications. But the difference here is that C is a general purpose programming language; ncurses provides a context or domain for C programming (the command line environment). Programming languages like R and JavaScript are more single-minded languages. That is, they were built specifically for statistics and web development, respectively. The add-ons do not change that context or domain. Contextual enhancement is fine and is not the same thing as fundamental alteration.

I think the fundamentals of languages are way more important to learn than the alteration frameworks. Back in the 90s, I remember watching an interview with Michael Jordan. He was asked about how he practices, and whether he spends most of his time on jump shots. His response was that he spent most of his practice on the fundamentals: passing, dribbling, shooting, etc., and he seemed to strongly believe that it was this focus on the fundamentals, along with practicing them a lot, that helped him excel. I've seen other great players make similar claims, like Kobe Bryant.

There might be some utility in learning frameworks that alter programming languages that were already created for specific purposes, but in the end, I will always argue that it is so much more important to develop a deep understanding of the fundamental aspects of a programming language and that doing so is crucial for excellence in coding and for maintaining a healthy and robust software ecosystem. Add-ons might be useful for specific tasks, like pandas for Python for contextual enhancement, but not replacements for the fundamental languages themselves: not for open science, for learning, or for a healthy software ecosystem.

Bashing Bash

There are legitimate criticisms against writing complex programs in Bash, but when it comes to working with text in files, using bash with other languages like sed and awk seems to me unrivaled.

Background: I spent some time rewriting the code I use to automate posting to this page. I thought I'd rewrite the code in Python, and while I have most of it working, it is so much more verbose and unwieldy than its bash counterpart.

Plus, languages like bash, sed, and awk are much more stable than Python and its various dependencies. I already can't count how many times I've been burned by a dependency update that breaks code in Python or R.

Older Friends

Like the idea of learning styles, I find generational labels highly annoying in their stickiness because they are misleading and unscientific. But that doesn't mean that that we don't share experiences, cultural touchstones and life stages with people our own age.

I am therefore happy that I am making acquaintances with local people of my own age. I find a special joy in this—in spending time with these folks, and I am very surprised by how much I wanted it.

First In First Out

I was a line cook for nearly two decades. It seems like a lifetime ago. By the end of this year, I'll have been out of restaurants longer than I was in them, but I still have some of the old habits.

For example, perhaps because of decades of unloading delivery trucks, I still rotate food in the pantry and in the fridge when I add new groceries. First in, first out.

Other habits: I always keep a clean workstation, have my mise en place when I cook, and all my cooking dishes and utensils are washed and drying by the time the meal is on the table.

Water Temp

I take cold showers every day. I don't think I've missed a day in two years, and I have only missed two days in two in a half years.

This experience has allowed for neat observations. As an example, it becomes clearer how the cold water temperature markedly changes throughout the year. It's usually in October when you feel the water temperature get much colder. There's like a day when that happens, when the water feels more biting than it did the day before. It's a really wonderful experience.

Today, that happened in the other direction. Today it felt like the water was less biting than it was yesterday.

There are other changes. My sourdough bread, which I make about five days a week, started to rise much more quickly than it did throughout the winter. This is even though the temperature inside the house is not really much different than it was when I had the heater on.

We're technically a couple of weeks away from the start of spring, but I like how I feel how seasons change differently and more personally through these experiences.

On Interviewing

Pro-tip: If you're interviewing for a job, it's good advice to do your research on the place you're interviewing. It shows that you can prepare, do basic research, and are interested in the place.

Also, when the people interviewing you ask if you have any questions, have some questions.

resize

I use the alacritty terminal. I can zoom in and out in alacritty (change size) like other terminals with ctrl +/-.

However, I'd mostly rather change the font size directly. To do that, you edit the $HOME/.config/alacritty/alacritty.yml configuration file. For example, to change from a 13 point font size to a 14 point font size, you change 13 to 14 in the config file: size: 14 from size: 13.

Rather than open that configuration file, I wrote a little bash script to make it easier:

#!/bin/bash

resize() {
  ptsize="$1"
  config="$HOME/.config/alacritty/alacritty.yml"
  sed -i "/size: /s/[0-9][0-9]/$ptsize/" "$config"
}

resize "$@"

Now, to do something like change the font size to a 14 point, I only have to type something like:

resize 14

Phones Down

I walk to work, and I get to see lots of people driving. I'm worried, upset, and angry by the many people I see with their phones up and often near their faces as they drive. It's dangerous and stupid.

Put your phones down.

syslog

Last night stuff on my computer started to break in a weird way. The laptop fan started to run at full blast right as I was walking away from it to take my children some where. I didn't think anything of it, but when we returned home four hours later, the fan was still running.

After investigating for a bit, I found that Firefox was using over a 100% of a CPU core and that /var/log/syslog had grown to a 120G with errors related to Firefox on Wayland.

I cleared the syslog file with:

sudo truncate -s 0 /var/log/syslog

And then edited /etc/logrotate.d/rsyslog to prevent the syslog file from taking up so much space in the future. I also found that someone had submitted a bug report on this exact problem to launchpad.net. I added a confirmation to the bug report.

In the meantime, I'm switching to another browser until this is resolved. This is unrelated to the bug, but I prefer Firefox and yet it's becoming increasingly clear that this is a Chrome-based world. I'm starting to think that I might have to make a permanent switch because many websites that I use for work are not as functional with Firefox as they are with Chrome-based browsers. I dislike that, a lot.

Breathe and Sleep

My daily breath work exercises include coherent breathing, 4-7-8 breathing, and Hof breathing, and they've all done me wonders in their own ways. I credit these excersises and daily cold water immersion with avoiding getting sick, despite living with three children, all of whom have had a rotation of the regular illnesses, since October 2021.

However, I sleep terribly. There have been a couple of times since October 2021 that I felt like I was going to be unwell. Even though they were momentary, and I always ended up feeling fine after a short bit and some breathwork, each time directly correlated after a string of nights of very poor sleep (like three to four hours of restless sleep each night for several nights in a row).

Last week I had a medical checkup, and we discussed this sleep problem. Instead of medication, which I didn't want, I was encouraged to keep a sleep diary to help me focus on my sleep hygiene. I think this is a great idea. I'm going to get a grip on this and learn how to sleep well in the coming weeks and months.

Database Interfaces

Hey bibliographic vendors (e.g., EBSCOhost), my students really care if the interface to your bibliographic databases look like they are from the 1990s.

I care too. Please update.

The Word

Today I learned the definition and history of a word that I first heard in 1992 from my college English professor, Professor Watson. Thirty-two years later, today, I was reading a book that suddenly introduces this word and discusses it at some length.

Finally.

No dictionary ever provided a satisfying definition.

Alternate Computer History

I like to imagine a world where computing developed differently.

In this world, there would be a focus on a static web and on command line applications. We would spend more time learning about our computers rather than engaging the web. Computing would prioritize simplicity and efficiency. We would acquire a different form of digital literacy in this world.

Command line skills would be more important in this world. We would start early in developing skills with scripting languages.

The web would be composed of static pages and would prioritize content over form. Websites would serve more as repositories of information rather than the dynamic, interactive, and bloated platforms of today.

Digital aesthetics would lean towards minimalism and functionality. My text based web browser would excel in this world. Hardware would become obsolete at a much slower pace.

Social interactions on the web or the internet would occur through forums, chat rooms, and BBSes. This would change the social nature of the web or the internet, and may even be more slow-paced.

Computer resources could be devoted to other tasks rather than rendering bloated JavaScript websites.

Education in computing would be more rooted in understanding the underlying OS through the command line. There would be, I imagine, a stronger emphasis on computational thinking and problem-solving. Perhaps this would result in a different approach to teaching programming and computing in general.

Site Change

For the foreseeable future, I've decided to migrate this site to a new URL:

cseanburns.github.io/csb/

The Move

I started working at my job over ten years ago, and I've been in the same office the entire time.

For years I have been thinking that I should move to a new office. Finally, last semester, I asked to move across the hall. It's a much smaller office, and I lose windows, too, but I think it'll be a good move.

Still, I'm weirdly emotional about the move. Ten plus years is a lot of history. It's a lot to witness.

In other news, I noticed that this is my 200th post on this page and that it took nearly three years to get from 100 to here.

The Thaw

Yesterday snow crystals fell from the tree and scattered through the air, reflecting the sunlight, and it was really beautiful.

Today the temperature is above freezing. The other side of the block thaws first since it has more direct sunlight. It's been interesting living in one place for so long and to be able to observe this pattern. It's the little things, like that, that make me feel like this is my home.

Frozen Doors

It's two degrees outside. The children had lessons this morning, but we weren't sure the studio was open. Two snow days this week.

We were running late, too. The car doors were frozen shut. The frozen doors proved to be the deciding factor. Defeated.

Winter Walking

It's been a good couple of days walking to work and back in the snow.

Winter 2023 / 2024

I want to be more intentional about what I want to do this winter. One of my main goals is to spend as much time outside as possible. So, here's a list of winter 2023-24 things I want to do:

  • take my daily cold water immersion in outside tub
  • go on long bike ride
  • go winter camping
  • go winter hiking
  • clean up backyard vegetation (maybe start a flower garden?)

I also want to see if I can make FreeBSD my prime operating system.

Screen Recording

I need screen casting software to record videos for my classes. The problem is that I use the Sway window manager and Wayland, but ever since the switch from i3 and X11, I have had trouble finding good screen recording software. OBS Studio is great, but it often crashes in Sway (but not in Gnome).

I'd prefer to stay in Sway, and I found wf-recorder, which works great. However, sometimes I need to pause the video when I am recording. Since wf-recorder is a commandline program, I can't just hit the pause button.

But, ctrl-z works perfectly! When I'm ready to unpause, I just type fg to bring it back up.

I invoke wf-recorder as screen_rec, which saves the recording in my home Videos directory, screen_rec is called by the following function in my .bash_functions file:

screen_rec() {
    if [ -x "$(command -v wf-recorder)" ] ; then
        cd "$HOME/Videos" || { echo "Videos directory not found"; return; }
        wf-recorder --audio
    else
        echo "wf-recorder not found or not executable."
        return
    fi
}

On Classification Systems

Every classification system shares one trait: universal dissatisfaction.

An Insight

As I finished reading Never Let Me Go by Kazuo Ishiguro, I was struck by this passage:

You and me, right from the start, even when we were little, we were always trying to find things out. Remember, Kath, all those secret talks we used to have? But Ruth wasn't like that. She always wanted to believe in things.

I can't help but think how simple but big that observation is about people in general.

Reading Music

One of my younger children made leaps today in reading music during their lessons. Their instructor and I were teary-eyed. It was a beautiful thing to witness.

Groff Docs

I am reading the groff manual for fun. Also, because I want to learn more about how to use groff.

I'm endlessly fascinated with document formatting. It's the whole reason I started using Linux in the first place. Back then, I was trying to find something to mimic WP 5.1. What a world Linux has opened for me.

FreeBSD on the Laptop

I've long considered switching to FreeBSD as my main OS, and I decided to make a go of it. I'm using a ten year old System76 laptop for testing. So far, I've tested parts of my workflow, and it's gone well. There are still a few things to investigate before I can make the full switch. Perhaps more on that later.

FreeBSD is a nice experience. The OS is much cleaner and more rational than Linux. Others have written about this, but long story short, I'm digging it.

This post was written on my FreeBSD laptop.

Hiccup: The Bash script I use to automate deployment of these posts is, it turns out, not *BSD friendly! I'll have to think about what I want to do with that.

Learning and Identity

People really want to say that they are X kind of learner. I was talking about what we really know about learning in one of my courses, and how there's no real support for the idea that matching instruction to so-called learning styles improves learning outcomes, and people still want to say that their style is X.

That learning style mumbo jumbo really sticks. I suppose it's because people are desperate to latch onto anything that offers an explanation of who they might be and that highlights their uniqueness, and learning styles offers something that sounds like a scientific explanation, as opposed to a pseudo-scientific one (cf., astrology).

Friendships in Academia

One of the coolest benefits about working in academia is that you get to know people who do cool things, like become novelists.

Thus, I'm excited that my old friend has published a novel: Straw Dogs of the Universe / Ye Chun. It arrives at my doorstep tomorrow. Pass it on!

Winter Bread

Last winter when I was baking my bread, I'd make the dough in the morning, and let it rise all day. Before bed, I'd shape the loaf, and place it in a cast iron dutch oven. I'd place the dutch oven in the fridge for the night. I'd leave the starter out overnight, too, so that it would be ready in the morning. I'd pull the dough out of the fridge in the morning, and bake it.

When the weather warmed up last spring, I had to change the timing. I started the dough later in the morning or early in the afternoon. The starter would not be pulled out of the fridge till the morning, either. The warmer weather simply changed the entire workflow.

The weather is cooling, and it took me a couple of days to recall that bread making is seasonal, too.

A Decision

I started taking daily cold showers over two years ago. It's always a glorious experience, but it's also always a decision every single time. A big part of me likes that it is a decision. That, even though it is a habit in a way, stepping into the cold water is a daily choice, always intentional.

The Graciousness of Others

The other day my friend and I were on a walk. We passed a guy cleaning his jeep in front of his house, and I mentioned how nice his jeep looked and said something about not ever driving one.

Then he said, "The keys are the ignition, go ahead and take it out around the block."

I didn't take him up on the offer, which he repeated again before we left and after chatting for a little while, but he was sincere, and it was pretty cool.

The Accused

The other day I took my children to their ballet lessons. I had all of them, but only the older ones had lessons that evening. I prepared dinner ahead of time, to eat between lessons, and since it was a very nice evening, the youngest one and I headed out to the van to eat.

The van back door is wide open, and the little one is eating in the back of the van and we're chatting. There are people in the car parked next to us, and they are getting ready to leave. Another car pulls up and blocks our cars. This new car has tinted windows, so I can't see inside.

At first I think that the person in the new arrival is about to turn into a space, but they just idle there, primarily behind my car but far enough ahead to block the other people. I get a bit nervous, because there are lots of spaces in the lot, and it makes me wonder what their intent is.

Finally they roll their passenger window down. There's a woman. She starts yelling at me.

What are you doing with that kid?

What do you mean what am I doing with this kid?

I said, what are you doing with that kid?

What do you mean?

Her voice gets louder and her face angier:

What are you doing with that kid?

What? Mind your own business.

It's my business if you're doing something wrong with that kid.

I'm her Dad. Drive on.

She glared at me for a minute. The people parked next to us were waiting for her to move out of the way. Finally she drove to the other end of the lot, rolled her window down, and watched us. I took my child into the studio, and we waited there for the rest of the evening till we could go home.

Waiting for the Rain

The house next door was occupied by short term renters for three months. They had several children who were all around the same ages as mine. And so for three months, and for the first time since we have lived in this house, we had wonderful neighbors and lots of play dates with people next door.

The neighbors had to leave for their next job last week, but before they left, the children used sidewalk chalk to draw on the driveway. The drawings are still there, a remnant of the last three months with these wonderful neighbors. The rain is coming, though, and soon those drawings will be washed clean.

A Jarring Scene

I witnessed a student yesterday in the crowded, bustling campus cafeteria reading a printed book, and I was struck by the jarring experience. I thought I might see a payphone, or a carburetor lying around, or a smoking section, since I was obviously time traveling.

Old Friends and New

Last night I had dinner with old friends, and a new friend. The food was good, and the conversation was positively inquisitive. Then I went for a long walk with the new friend, at a park, during dusk. It grew too dark for us to be confident of the way back to the car, which felt adventurous.

A Delight

The Book of Delights by Ross Gay is a wonderful read.

Perhaps the book placed me in a good frame of mind when a friend texted me that their friend was going to be at the art fair down the street last weekend and was texting me, and not the friend, because the friend's phone wasn't working. There were like thousands of people at the fair, and I thought, without their phone, how would I find them? And the thought of looking for them, with my own children in tow, amidst that sea of people, made me laugh with delight.

On Hold

This is the process. I review a list of recommended or best of books on some website. I look the ebook up using my public library. It's inevitably checked out to someone else. Put book on hold and search for another book that was listed on that some website. It's available. I check it out, but I don't read it quickly enough. The book on hold becomes available, and since I'm facing a due date on the current one, I select 'deliver later'. By the time I am ready for the next book, I can't remember how I learned about it. It becomes like a surprise book.

Sourdough Bread

I created my first sourdough started in 2001 when I worked at a small cafe. I remember it being very delicious and used it to make all sorts of bread for the restaurant. It lasted less than a year, until I moved on to a new restaurant far, far away.

Last summer, because my children goes through so much bread, I decided to create a new starter and bake bread again to save some dough (ahem) and just to have really delicious bread. It took a couple of months to get the baking process nailed down, but it's turned out great. The crust is superb, dark, chewy, and the sourness comes through sharply but not overly so. The house smells great every morning, which is when I normally bake it. I'm making a loaf about five or so days a week, which is fine because it means I don't have to discard starter ever.

Oftentimes, five or so loaves a week is too much, but that's okay. I like give the extra loaf to a friend or colleague. Yesterday I knew I'd have an extra loaf today, and so I took today's loaf to my neighbor. I really hope they enjoy it. They seemed really excited to get it, which made really happy. It's like my favorite gift to give.

Lunch, Shopping, and a Movie

Today was a special day with one of my children. For the rest of my life, I'll see them sitting across the table from me. My loves.

Back to i3, Again

My prior laptop was seven plus years old, and my work offered to provide me with a replacement. I requested a system76 laptop, and I really enjoy it and their version of a tiling window manager.

But then I logged into i3 again, and it's just so fresh and clean. Back to i3.

Automake

I use a set of scripts to automate publishing to this page. For fun, I wrote the scripts using a lot of ed commands, and now I want to update the scripts using a more manageable language and workflow.

I started reworking the scripts by asking ChatGPT to create a Python script to handle the process. The code it produced looked fine, on the surface, but I didn't give it a chance. Instead I thought I'd implement the existing Bash scripts with a Makefile. I described the list of scripts that I used to ChatGPT and asked it to create a Makefile for me. We went through several iterations, but it didn't pan out. To get a functional Makefile working, I realized that I would need to change how the project folders are organized and change how variables and arguments are used in the Bash scripts. As an aside, ChatGPT highly discouraged me from using ed commands (haha).

In the end, I started rewriting the scripts using mostly sed commands. There's still some ed commands to scrub, but when I'm done, I should be able to write a simple Bash container script that will call the other scripts as dependencies.

In the end, I asked ChatGPT 25 questions for this exercise. Even though it didn't pan out, it's a far more enjoyable process than conducting a bunch of web searches.

Summer 2023

Summer to do lists.

Work:

  • finish and submit title paper
  • finish and submit syslib paper
  • setup erm/syslib research project for fall
  • update fall courses

Personal:

  • finish teaching youngest how to ride a bike
  • ride bikes with children
  • take children to pool often
  • read three books, at least
  • continue slow jogging

On Transitions

I thrive on routines. Transitioning from fall semester to spring semester and to the summer feels disruptive every time. I need to figure out a way to smooth these transitions over.

No More Podcasts

I removed the podcast app from my phone and decided to start listening to music more. I enjoyed podcasts, but I want less information these days, and I want to feel more. Music helps me feel.

I'm maybe back after a break, if I can remember how I automated posting here.

Back to the Books

I read 25 books for my own pleasure in 2021, and it was great.

But dang it, I haven't completed a single book in 2022. That's partly because it's been a fairly disruptive few months, but it's also because I started watching the GOT, which is great but also exhausting and brutal. I was at a faculty council meeting yesterday, and I couldn't help but project GOT themes onto the meeting, with all the discussions of battles, diplomacy, etc. It was kind of hilarious.

I've nearly completed the GOT series and picked up a short book to kick start the habit. I won't read come close to 25 books this year, and that is okay, After GOT, I'll take a break from TV and refresh the spirit with literature.

On Vulnerability

I'm experiencing some emotional vulnerability, and I've decided to handle it like I try to handle pain, which is to say, to appreciate it for what it is, for what it means, and for what it allows.

Plain Text Research

I submitted a juried paper proposal to the ALISE 2022 annual conference on the topic of ungrading. Since this is a solo project, I was able to use a plain text research workflow. Essentially, I wrote the paper in markdown, added citations using the ZotCite plugin for Vim, versioned the file with Git and added it to a GitHub repo. It was a really enjoyable process.

When the paper was about ready, I used my Bash function to convert the file to an ODT file (see first link above) following the APA style guide. I made some minor style edits to conform to the conference guidelines for paper proposals and removed some library proxy URLs. Then I submitted it as a PDF file, which I exported from LibreOffice.

I also converted the file to an HTML file: Ungrade to Learn.

On Sex, Politics, and Religion

Sometime in the early 1990s, my religious studies professor lamented that we, as a society, avoided discussions on sex, politics, and religion. I think he was sad that we didn't talk about these topics because we didn't know how to talk about them. I agree. Today these topics seem to be all that we talk about, even though we seemed to not have learned how to talk about them.

731 Days

March 13, 2020 was 731 days ago. Today marks two years since the first day of quarantine.

I mainly remember the faculty meetings we had on the 13th. That means I'll always remember that it was a Friday.

I remember thinking this would be a two-year event simply because the 1918 flu pandemic lasted about two years. But I really had no way of knowing.

I read today that another wave might be forming in Europe. If so, I believe this would be the sixth wave.

We're largely behaving like it's pre-pandemic days now, and that might be okay for most of us who have taken advantage of those tools that reduce our risk and are fortunate to have those tools available to us. But it's still a hazard for many in the world.

I really don't want to forget how surreal it felt then, before we knew the Illness was transmitted through the air rather than via surfaces.

And how sad it was after quarantine time kept going on and on, for my family, and for others too, especially those who lost people.

I remember the Governor's daily briefings. I kept my own log of deaths and hospitalizations, emailed from his office, in order to examine the data myself. But it wasn't eye opening. The data seemed too messy. Instead, it was just tragic, all those deaths and hospitalizations.

My youngest was still a baby when the pandemic struck, but they were eventually full toddler and walking and being toddler funny within a year. I was able to witness that for my two older children but probably way more so with the youngest.

There were momemts of joy. The streets were void of activity. Like liminal spaces. But that made them fun to take my young children on bike rides around town. It felt safe but also grand, and my second oldest learned to ride during this time period.

We've long cut our own hair in our household, but in those early months, we made some bold choices with our hair styles.

The world feels like it's falling apart still, but I also like to remember how supportive people seemed to be of each other in those first few months. It didn't take long before it was all politicized, though. I don't miss that.

I remember there was loads of fear, and that for some, there still is. The other day I was walking home. A man was walking in my direction. He was wearing a mask. As we approached to pass each other, he scooted so far from me that he almost fell into the bush adjacent to the sidewalk. I was sad for his trauma.

35 Days

458 Days

Embracing the Cold Front

As usual for early March, we received some snow after a couple of weeks of spring-like weather. I took advantage of it and started Saturday and Sunday mornings with seven and six rounds, respectively, of Wim Hof breathing. I usually only have time for three rounds during the week, so it was nice to go longer and deeper. I wanted to go seven this morning, but six was hard to complete because the little one kept jumping on my belly.

Afterwards I went in the backyard wearing only a pair of shorts and flip flops, and stood there for ten minutes. It was 21 degrees on Saturday and 26 on Sunday morning, but seven degrees with windchill on both days. When ten minutes passed, I went inside and took long ice cold showers, which felt warm more quickly than usual, and finished with hot water, which felt kinda okay but not as fantastic as I anticipated.

Months ago I got to the point where I thought I enjoyed cold showers more than hot showers, and somehow, in my experience, hot showers started to feel a bit gross and slimy. But it's still a mental effort to make the switch permanent. My brain still says that I don't want to be in the cold, even though it turns out great every single time.

Second mdBook

Following up on my post from yesterday, I used mdbook to create an ebook out of my lectures and notes from my Linux Systems Administration course.

This book and my electronic resource management book are very rough drafts, but I plan to complete and polish them up during the fall semester when I teach these courses again.

First mdBook

I have lectures and extensive documentation for all my courses. They are all written with markdown and versioned controlled on GitHub. I've finally gotten around to using mdBook to create my first markdown generated book. It's still an early and rough draft, but I very much like the outcome so far.

So throughout this year, my plan is to use mdBook to create books for the rest of my courses out of the material I've written for those courses.

The first book (again, a rough draft) is available on this site at Electronic Resource Management in Libraries.

How Long

Let's say you're visiting a friend, and you spend a few hours at their place. It's a good visit, but you forgot something in your car. You say, "be right back," then you run out to the car, and you re-enter the house without knocking. That should be fine, right?

Or, let's say it's someone close that you're visiting. It is, in fact, someone you visit quite often, maybe even a family member of some sorts. But otherwise, it's the same scenario: You forgot something, get it, and return and re-enter the house without knocking. That should still be fine, I would think.

In any kind of situation like this, how long can you leave before you have to knock again? Or is it not (only) a matter of time but also of the in-between events that take place? Like the things that may happen between stepping out and returning? Or is it whether there is closure when stepping out?

Anyway, these are rhetorical questions, but they are ones I feel like I'm facing, albeit in a much more abstract way.

On Disruption

On top of what was already a fairly disruptive couple of years, these last four months have been kind of insane.

And, there's still work to do to get back into a routine. It's been so non-routine lately that I am drooling for mundanity right now.

But the last four months have also shown me how fortunate and grateful I am for what I have and for who I have.

Peace to all.

My Aunt

I have an aunt, my oldest one, has always been kind of a mystery to me, largely because I've known her a bit less than some of my other extended family. But recently I got to ask her about a time in her life that was legend, and I'm so glad I did.

I won't share her story here. It's her story. I'll only say that she is as magical and as cool as legend hinted.

Smaller in the World

We went someplace today that is quite historically significant, at least in the US. And it struck me, as I almost walked past it, how geographically small of an area the place occupied. But, it helped to see it. It made sense of the historical narrative that I knew. I think that says a lot about how we mentally model the world when that model has largely been shaped by mediators.

On This Day

The kids and I went on a four mile hike today. They climbed trees, traipsed through the bush, played in river mud, and the little one fell asleep in the stroller shortly before we returned to the car. When we got home, the two older children went inside. I sat in the car with the little one, who napped.

Posting Here

I've blogged off and on since blogging was a thing, but it never stuck. I think that was because I've despised every blogging platform that I've ever used. The platform matters for such things. The closest I came to liking a blogging platform was when I used Octopress to log my reading of The Library Quarterly. Octopress was fun to use for a while, but as the posts accumulated, it became annoying to rebuild it every time I added more. So I put all those posts on my wiki and gave up blogging for the nth time.

Even though I didn't stick with blogging because I disliked the available platforms, in my moments of doubt, I wondered if my failure to keep going indicated that I didn't have a voice, or something to say. That really bothered me at times. But of course I have a voice, it was simply that the toolchains and the platforms I used never matched my voice. This toolchain and this platform I've created to post here are my expressions, too. I think that is why I write here about the process of automating this site. It was as important to develop the site to post here as it was to post here for me to keep posting here. Haha!

But even so, I created this page about a year before the March 2020 lockdown, but I only added 16 posts to this page in that first year. In the last two years since lockdown, I've added 140 more, or about 4 posts per month in 2020 and about 7 posts per month in 2021. I don't know what that means. Except to think that, besides the pandemic, other big things happened in those last two years. I don't write about them here. A vast majority of what I put on this page is superficial, I guess. But I think, maybe, it all left me a bit reflective.

On Trust

I gave the toddler a bath last night, and as usual, when I asked her to lay her head back, she was scared to go under the water. I've taught the two older children how to swim, and it was the same in that setting, too. They have all, at first and for a while, been scared to put their heads under the water. And this is despite that I hold them all when they take a bath or learn to swim.

This fear struck me as odd because when they are scared of something in the world, they will come and hold and hide behind my legs. So I had thought that they see me as someone who would protect them. Who they trust themselves to. But this water thing made me realize that, even though I am their father, that trust is not absolute. That their fear of going under the water is greater than their trust in me to protect them. Instinctually, at least.

When it first happened, with my oldest, and then my middle child, I have to admit, I felt a little hurt. I thought, "why doesn't this child trust me completely?" But over time, it made me, not happy really, but in awe perhaps, that I have to earn their trust. And I felt proud that it wasn't given to me completely without having to earn it.

This lesson made me realize something about earning trust among other people, too. In fact, I don't think I ever understood trust before becoming a parent for a long while. Maybe not even until very recently.

Automating This Site

I've added a page to this site detailing how I post to this page using a series of bash scripts.

I wrote the scripts to convert the original markdown file into an HTML file, modify the HTML file in specific ways, insert the HTML file into this page, create a table of contents item for this page and the homepage, create a RSS entry, insert that entry into the index.xml file, and then deploy the site to the remote server.

It's nice to have this all done, but I'm sure I'll keep polishing these scripts.

Re-reading Thomas Merton

About thirty years ago, I devoured Thomas Merton's works. I even wrote a (bad) thesis on him as a student fellow at the Newberry Library in Chicago. But I haven't read or re-read anything of his since the mid to late 1990s. I tried some years ago, soon after we moved to Kentucky. I thought being in Kentucky, not far from his abbey, would be inspiring. But I couldn't get back into it.

I don't know why his writings became so inaccessible to me. Why does that happen? Why does a book or a thought or a way of thinking become distant? In this case, I don't think it has anything to do with Merton. I think something changed with me around the turn of the century. (I have some ideas about what happened.)

Maybe I'm ready this time. It feels like it's getting closer.

Obsession

A couple of days ago I posted here that I had nearly automated the site. If you are reading this post, then it means that I've fully automated the site. I think this is called obsessing. Anyways, now I can write a post in markdown, and then run some commands to process the site and copy it to the remote server.

My approach has me cracking up a bit because the scripts (all five of them plus two functions stored in my .bash_functions file) are pretty ridiculous in some ways. Most of the code draws upon the following:

  • ed
  • sed
  • various bash utilities

All of this would likely have been a lot easier if I had used JavaScript in a lot of places, but I really, really wanted to use ed(1) as much as possible, and I really, really want to avoid using JavaScript on this site. It was tricky, too, because I had to use ed(1) to insert text in the middle of lines. Since ed(1) is a line editor, that's not something it was really meant to do. But I did it, and I learned a lot.

Here's an example script that primarily uses ed(1) to add additional HTML elements, attributes, and values to an existing HTML file:

#!/usr/bin/bash

# Original date: 2022-01-28

# After running ``makepost`` (in .bash_functions), which will convert the
# markdown file into an HTML one. This ed(1) commands below add some additional
# HTML elements etc to make the post ready for the main index.html file.

# Usage: ./make-article post-name.html

post="$1"

ed -s "$post" << 'EOF'
0i
<article id="
.
1r !date +\%Y\%m\%d
1,2j
1a
">
.
1,2j
3s/[0-9]\">/\
&\

.
4r !date +\%Y-\%m-\%d
4a
<time datetime="
.
6a
">
.
8s/<\/h3>/<\/time><\/h3>
3,8j
$a
</article>

.
wq
EOF

The code is super specific to my site, but I could probably generalize it someday as a flat-file blogging application and then make it available as an open source project.

I'll write a separate page about the scripts and post a link to that page on my homepage, which needs more clutter.

New Site Redesign

It was time for a site redesign. I'm teaching a web development course this semester, and working on that course inspired me to do something fun with this site. It may be less attractive than the prior version, but I like the busy-ness of this new look. In fact, the goal for this current version was to mimic, at least on the front page, those old Pennysaver-like ad rags that were fun to skim through. I think those things were fun, in part, because they contained so little white space. They screamed abundance. I plan to add more on the front page to fully realize that look.

I also updated my automation scripts (see GitHub repo) for this site:

I updated the WWW-toc-generator script because I have a table of contents in two locations now: the home page and this page. The script therefore needed to insert the most recent entry in both places.

In the prior version of the make-rss script, I used the xmlstarlet program to parse and extract values for the RSS feed from this index.html file. It's bothered me to depend on xmlstarlet. It's a nice program, but I wanted to rely on the fundamentals. So I finally did some digging and figured out a way to use GNU grep to replace it. make-rss is still quite a wonky script, but it's more interesting now, I think.

Finally, I crossed off a big item of my to-do list. In the past, my make-rss script would simply generate the XML I needed for my index.xml (RSS) file and store it in a temporary file. To use that XML, I'd manually insert it into the proper places in index.xml. I wrote a script, insert-xml that would automate that process. The script primarily contains ed(1) commands.

Since I write these posts in separate, markdown files, the last item to accomplish before this site is fully automated is to write a script that will insert new posts in the proper place of this index.html file. Once I get around to that, whenever I write a new post, I will be able to type one command to process the site and copy it to the remote server. Almost there!

High School

The other day I reunited with one of my closest friends from high school and also my favorite high school teacher, and it was marvelous. My former teacher gave me a top ten lifetime hug, and I cried a bit.

My former teacher is now 80 years old and is as sharp as she was 31 years ago. She remembered my Mom's name, my siblings' names (even though they never had her as a teacher). She recounted old stories, some of which I had forgotten.

She told me that, not too many years ago, she and her partner were once driving through Illinois when she saw a sign pointing to Monmouth, and she told her partner to take a detour there. She wanted to see where I went to college. She told me that she saw the building where I worked my first year as, among all things, a boiler room attendant. That I had such a job made her laugh. My task was to sit in this boiler room in a football field size basement on Friday nights from 11pm to 7am, and watch the pressure gauges. If the pressure got too high, it meant a boiler was going to explode and I was supposed to call someone. I had homework and a 7-inch black and white TV that picked up one station, but mostly static, to keep me occupied. I'd watch Friday Night Videos and nod off to sleep when the station signed off for the night.

I went to college, and that specific college, because of that teacher. One of my favorite authors is someone she told me I would want to read. I was in the speech club because of her, and on the debate team. She was a critical reader of my homework assignments. In 1987 she taught me my first lesson: not to spell "a lot" like "alot". I don't know why that memory stuck, but to this day I can't write "a lot" without thinking of her.

We talked about that time period and the people then. We talked about all the debate tournament shenanigans we caused in protest of the new trend in speed reading (spreading). It didn't help calm our passions that the teams employing this distasteful practice came from the wealthy schools. I once walked out of a debate because of that foolishness. She remembered it all, and we laughed.

She created those kinds of opportunities and made those kinds of introductions for me and for countless other students during her career, including my close, beautiful friend who arranged the reunion. We all came from pretty humble, and sometimes frightening or challenging backgrounds. It was a very marginalized area of San Antonio, but I couldn't tell you how many PhDs, MDs, and other teachers came out of my class alone, because of her and a few other amazing teachers. I couldn't imagine how many lives she made better in her decades long career. People love her. I do, too. A lot.

Thank you for being in my life and for shaping so much of it, Ms. Bailey.

Reading Patterns

I've noticed that I do not like to read nonfiction lately. My last book before the new year was a work of fiction, and I finished it fairly quickly. Then I picked up a work of nonfiction, and I barely touch the book even though it's a good book by someone I really like.

The last time this happened I had to abandon the nonfiction work and take up a work of fiction before I started to read consistently again. In fact, this has happened several times. It's been hard to get through nonfiction.

Maybe I just want stories. I stopped reading fiction for a few years, and maybe I starved myself of something by doing that. I'm enjoying the change, though. Feels like my old, pre-grad school self in some ways, when I used to read a lot of fiction.

Semantic Line Breaks

I learned about semantic line breaks today. This might be a game-changer for me and my use of the ed(1) text editor, along with a markup language like markdown. See the link to read more.

The goal with using semantic line breaks is to make it easier to revise text with ed(1) (or any other editor) since it means using easier commands to edit the text.

I first learned about using shorter input lines a few months ago when I was reading about troff. But I was visually turned off from the idea because the examples I saw were difficult to read. Using semantic line breaks should solve that problem. I am using them now to write this post, and I can tell it will take a while to get used to but that it might be worth it to explore.

Something New

The SSL certificate for this site needs to be renewed soon, and the price is getting a bit expensive. Because of that, I'm thinking about nixing this domain and either 1) not having a website or 2) using GitHub to host the non-wiki part. I'll probably do the latter, but we'll see.

Regardless of (1) or (2), I'll host the DokuWiki part of the site locally on my desktop. The wiki has been a useful note-taking tool, but I'm okay keeping it local.

Rejuvenate

About once a year I grow bleary of using computers for creative or like purposes, and this year, it's that time of the year. I can tell when the feeling begins. It begins when it feels like my brain turns off simply by sitting in front of my computer but wakens back up when I walk away. I sometimes try to push through it, but I'm getting better at recognizing it and stepping away for a while.

So, time to rejuvenate.

On to 2022.

My Friends

There are people that I think about everyday and would like to see everyday but that I don't get to see anymore. I love and miss you.

Lately I have been thinking about people I haven't thought about in ages. Memories are coming back, and it's nice to recall.

I feel like I've had a lot of lives in my nearly 50 years. I feel very fortunate for that even if also a bit sad.

'Peace and long life,' and love to you all.

On Papers as Assignments

I don't ask students to write essays or papers in my undergraduate classes, and that's mostly because they are not those kinds of classes.

The graduate courses I teach are those kinds of classes, but I want to think about them differently. So, in addition to ungrading, I'm going to start replacing paper assignments with other kinds of assignments in those classes. I had implemented this kind of change a while back but not fully. I have some ideas about what to do instead of papers, and I'm looking forward to seeing how it'll play out next semester.

I also am completely rethinking the undergraduate class I teach in the spring. I meant to have that revision done way before now, but it looks like I may not get it done until right before the semester starts.

As an aside, I can't believe it's almost 2022. That seems weird.

On Smiling

Someone smiled at me yesterday as they waited on me to finish parking my car so that they could get to theirs, which was adjacent to ours. When they smiled, I gotta tell you, there was something about it that was so unbelievably pure and good. It just lit me up and filled me with great joy for a moment.

This is the third time I've seen this kind of smile in my life from a complete stranger. The last time was over 20 years ago. Like those, I'll probably remember this one for a long time. Thank you whoever you are, and I hope you smile like that for always.

Breakthrough Case Update, Day 10

Feeling much better. Still have a bit of a cough, but it feels like it's lessening. Last time I posted, I felt the cough becoming a chest cough, and I wrote how I re-engaged with the breathing technique that I'm following. It seemed to do the trick. The cough feels like it's due to a nasal drip, and it does not feel like it's migrating down to my chest. In the past, when I've had coughs become chest coughs, it would take forever to heal. So things appear to be looking up.

By the way, I meant to add this last time, but my sense of smell started to return at about day 7 or so.

Breakthrough Case Update, Day 6

Felt very tired today. Had a lot of work to do, too. Got through it. Slept for a little bit in the evening, which is why I'm still awake at 11:39pm. I'd like to be asleep now, but I'm thankful for the short nap. It helped improve my mood and sense of well being quite a bit. I was feeling rather depressed, in fact.

Cough has moved down to the chest. I hate that so much. I thought that the breathing exercises should have helped prevent this somewhat, and I've kept up with those exercises and cold showers. But I also felt like I had gone off track with the former. It felt like I wasn't doing them right. I wasn't getting the high-ish feeling nor was my breath retention long enough. I also wasn't relaxing when doing them. Could never not feel stressed.

So tonight I re-watched one of the how-to videos that Hof has on YT, and followed the instructions to the letter. Two things happened. First, it confirmed that I had gone off track. I wasn't relaxing enough nor was I really breathing in well enough. The video helped guide me back, and correcting these two things enabled me to lengthen my breath retention considerably. Second, after I re-learned the lesson and completed four rounds, my cough subsided substantially. I'll repeat the process in the morning before my next cold shower. If I ever feel like I'm going off track again, I can re-watch those videos.

Breakthrough Case Update, Day 5

Feel much better today. Didn't wake up with a fever. Did have lower back pain all night, which is not normal, and it meant a fairly sleepless night. It's better now, though. Got to go back to sleep after being up for a bit this morning, and that helped. Still a bit tired and beat up. Still have the cough, and my voice is hoarse because of it. It's a dry cough. I've had worse.

I want to think I'm coming out of this thing, but it's the day 5 and after period that I've wondered about. Just have to be patient, I guess, and try not to worry.

Breakthrough Case Update, Day 4

It's still about the same as it was a couple of days ago, but maybe a little yuckier. Yesterday and today I woke up with a very low grade fever. Still have horrible headaches, but ibuprofen makes them go away quickly. Still a cough. Still no smell. Breathing is fine, otherwise.

I was hopeful that since I've been vaccinated, that this would last only a few days; like when I get the flu, it usually lasts a total of 3 days. I'm now expecting this to last the reported ten days, and I'm guessing if the vaccine has had a positive effect, it's that it's limited the severity of this virus but not the duration.

I'm writing this all down just to remember but making it public in case anyone stumbles upon this and benefits from my experience somehow. Also, I was pretty sure I would get covid someday, and it feels like a big deal to me after having it hang over our heads for so long. Anyway, looking forward to getting through it.

Breakthrough Case Update

My second covid vaccine shot was on 5/14/2021--about 5 1/2 months ago.

I had a big burst of feel-good energy earlier today. It was right after a cold shower, and I wonder if that was the reason. I'm still doing my breathing exercises, too. Every day.

About an hour after the cold shower I laid down and slept most of the afternoon. I woke up about 6pm.

I can't smell any of the essential oils we have laying around. Or coffee grounds--I tried that, too. Nothing. But earlier when I was laying down, my partner was boiling water in the kitchen, and the water boiled away when she wasn't looking. I could sense the hot metal from the other side of the house. It felt like I could smell it. It felt like it went through my nose and into my stomach and it made my stomach turn. That made me realize that our sense of smell is complicated--like eyesight and blindness.

Other than that, I'm a bit tired, I'm coughing up mucous, and I still have a bit of a headache and a bit of a sore throat, which I think is from the mucous. I'd say that's not too bad given what other people have experienced. Here's hoping I'm on the mend.

The Inevitable Happened

I guess it's because of last Friday. My two oldest children participated in a ballet performance, which was held at the Opera House downtown. We were told that people would be spaced out and masked. I think most people were masked, but we were packed in there like sardines. But it may have happened before that. My oldest woke me up in the middle of the night around that time to let me know that they had a headache and weren't feeling well. So that could mean that the infection was earlier.

Anyway, I am a breakthrough case. So far, fortunately, it feels like a head cold, albeit a very strong and painful one, but that could be the massive headache, too. Other than that, there's a bit of a cough. I haven't had a fever or any chest issues, which I'm quite thankful about, and my children seem to be doing well, and I'm tremendously thankful about that. My wife got it, too, but she seems to be recovering.

I am looking forward to receiving a clean bill of health. I was not remotely prepared to work from home again on the fly, and that bites because it's the most intense and heaviest part of the semester. I guess it is what it is, though, and I'm making do.

Update: Lost smell :(

Groff and Troff

I started learning LaTeX a long time ago, within the first few years of using Linux. I liked learning LaTeX, but because I wasn't in school or higher education at the time, I mostly used it to create silly documents. When I did go to graduate school, I used it for it's intended purpose, which was to typeset papers. I also used it to markup notes in some classes, like my ANOVA class. As a result, I have ANOVA notes that look very nice and are very readable, I think.

It must have been around that time that I learned about groff, troff, and nroff, the document typesetting utilities that have been with Unix since the earliest of their days (well, groff is a GNU addition that came much later), but I didn't learn them at the time.

I already don't remember what motivated me, but I started to learn groff and the groff_mm macro a couple of weeks ago, and I love it. I mailed a letter to a friend the other day, and I used the man 7 groff_mm macro. This is a bit of what the source code looks like:

\" This is a comment
\" Set Writer Address
.WA "Sean"
Street Address
City, State ZIP
.WE
\" Set Addressee Information
.IA
Addressee
Street Address
City, State ZIP
.IE
\" Set salutation
.LO SA "Dear Addressee,"
\" Format letter as Semi-Blocked
.LT SB
.P
This is a paragraph.
\" Add an italic to a word in another paragraph
.P This is another
.I
paragraph.
.R
\" Set closing
.FC
\" Insert Signature Line
.SG

There's a lot more to learn, and I think I'll keep exploring. The system is very Unix-y, and I find that appealing.

On Forgetting

I do not have a good memory, and I am thankful for that.

On Ungrading and Learning

I have fully embraced ungrading this semester.

This has been my approach so far:

  1. Assignments have due dates, but these are flexible. If students get behind, I make a point to communicate with them often. Regardless of how flexible my policy is, we still have an end to the semester.
  2. I mark work as Complete (100%) or Incomplete (0%). Incomplete work is work that is unsatisfactory per the assignment requirements or work that hasn't been completed by the due date. In either Incomplete case, students can still submit or they can resubmit after revision. I encourage resubmission.
  3. I provide lots of feedback on all assignments.
  4. Final grades are calculated as the total completed work divided by the total work assigned, and also weighted by assignment type. This allows students to skip some (but not much) work and still do well in the course.

The process has really invigorated me, and I think it's been good for the students, too. And that's not just because I've removed grades but because I've forced revisions. I think I'm also getting quite a bit more responses from students to my feedback, and that's been super cool and interesting because it's spawned some conversations after completion.

The goal with all this is to center learning and decenter grading. Let's see how it continues to go.

Some Automation

I have an installation of Omeka that I manage for some colleagues who use it for a course they teach, but it's on a server that can't do email (long story, and I can work around it, but I don't want to). So the challenge has been how to create 50 to 60 accounts for students at a time. But because I used Omeka on a project a long time ago (the site is still running, but the link goes to a 2008 version, which is about the time we launched it), I knew that I could work with the MySQL database it uses. And so a couple of years ago I wrote a small shell script to help me generate SQL statements that I could use to create accounts. This saved having to do it manually from the Omeka admin interface.

However, I had only partially automated the process. It saved a lot of grunt work and time, but I still had to do some of the work manually (hey, it's not my full time job!). So each semester, I'd tackle a little bit more of that task, and I'm glad to say that I have it fully automated. After clearing out the previous semester's content and accounts in the MySQL database, all I have to do is download the course rosters, which are exported from my university as XLSX files, save those as CSV files, and then run the script. The script then generates three files of SQL statements. One SQL file creates the accounts, the second one updates the tables with salted passwords, and the third adds the salts for the passwords. Then I can source those files after logging into the MySQL database. The code is one of my GitHub repos.

It's an early version of the script, and I'm sure I'll come across a bug or two eventually, but it works perfectly now. The main bug I'll watch for is how it handles variations with student names. I think it's robust against that, but there are times when students have "Jr.", "III", or four or more names, and I'll need to watch for how it handles those. I also want to make it function-based too, which will make it easier to maintain.

I've had this on the back burner for a while, and it feels good to be pretty much done with it, maintenance and tweaks aside.

OpenURL

My university's library uses OpenURL and Primo/Alma's discovery service/link resolver to request sources via various bibliographic databases. Or more accurately, the university library uses Primo/Alma, which uses an OpenURL compatible link resolver.

Basically, the technology is meant to help library users gain access to a library's (usually paywalled) electronic resources (or locate items in the catalog). E.g., if you're searching on Google Scholar and you see a View Now @ [YOUR LIBRARY] link next to a search result, and you click on that link, then you are using, or triggering, a link resolver to request the source. As a library user, you have to add your institution in Google Scholar via their settings, but if you're using a bibliographic or citation database directly provided by your library, then it should be available by default.

Because OpenURL compatible link resolver technology is partly based on query strings, it's fun to glean all sorts of information by examining the URL: the query string component that contains the metadata for the source but also the base component that contains the vendor and institutional information and also the URL type. Namely, it turns out that Primo/Alma uses two URL types to request resources: a search URL and an OpenURL. At my institution, the base search URL looks like this:

https://saalck-uky.primo.exlibrisgroup.com/discovery/search?

The base OpenURL differs just a bit (see the end of the URL):

https://saalck-uky.primo.exlibrisgroup.com/discovery/openurl?

The base search URL appears when searching the university's online catalog (or discovery service). However, the OpenURL appears only in transit between the original resource and before reaching the final source; e.g., after clicking on a View Now @ link and before being redirected to the full text version of the article that might be available at the original location (an open access location) or via the proxy location (e.g., EZproxy). Because the redirect happens quickly, I had to quickly copy my institution's specific OpenURL when I clicked on a View Now link before it redirected to the EZproxy page.

My students often identify great problems to solve or are the source of great ideas. One of my students in my electronic resource management class noticed that Zotero has a locate menu that uses OpenURL resolvers to look up items in a library. By default, Zotero uses WorldCat, but it can use a specific institution's OpenURL resolver, too. I had completely forgotten about this. I think I stopped trying to use it years ago because the WorldCat default stopped working. Anyway, when I investigated, I noticed that my institution wasn't available via Zotero or listed on their page of OpenURL resolvers.

At the time, I didn't know what my institution's exact OpenURL was, but I was able to figure it out by comparing the syntax and values from other Primo URLs listed on Zotero's page of OpenURL resolvers and because I had just written a lecture on link resolvers. So by comparing OpenURLs and by using the info from my lecture, where I had discussed the components of link resolver URLs, I was able to derive my institution's specific OpenURL (base component plus institutional info), which is:

https://saalck-uky.primo.exlibrisgroup.com/discovery/openurl?institution=01SAA_UKY&vid=01SAA_UKY:UKY

I added that to Zotero, and it worked, and then I posted the OpenURL info to Zotero's forum, and they've added it to their OpenURL resolver page. That's pretty cool.

If anyone who comes across this post and is curious about how to add this info to Zotero, another library has created a video on this. The directions cover adding a specific OpenURL to Zotero and on how to use Zotero's Library Lookup functionality.

My students are awesome, and I thank them for challenging me.

Cold Showers

I'm really enjoying the Wim Hof method, both the breathing and the cold showers.

It's been a couple of months, at least, since I started this method, but I've been inconsistent about it up until the last week. I'd do the showers and the breathing, just not everyday or only a few days in a row.

I've been much more consistent about it this last week, and a few days ago I decided I was ready for immediate cold immersion. Up until this week, I'd get in the shower after the water had warmed and then slowly turn it to a colder setting. But earlier this week I stood in the shower with the water off, took a few deep breaths, and turned the water on to the cold setting. It was pretty intense, but it was also okay, and pretty exhilarating, too. And after a few big breaths, I got accustomed to it pretty quickly. I felt great all day. It's been like that ever since.

The real test will come this winter when the water temperature in the pipes drops considerably. Yikes!

Anyway, I think the key to all this is to practice it everyday. I've been doing the meditative breathing every night, and sometimes during the day. It's great for calming the nerves. I think that plus the Wim Hof method, everyday, will make a big health difference over time (PNAS); that is, minus some of the extravagant claims made by Hof himself and plus a dab of skepticism to boot. In the future, I'd also like to explore Tummo breathing practices a bit more than I already have---the aim being to get to the root of these breathing practices.

Vim, Ed, and also Markdown

Some things I like doing in /usr/bin/vim, /usr/bin/nvi, or /usr/bin/ed:

Use the % (percent sign) to run a sh command on the current buffer.

For example, from within Vim or ed, I can convert a markdown file to an HTML (or whatever else pandoc supports):

# save file; run pandoc from sh, output markdown file to a file named file.html
w !pandoc % -o test.html

# view the file with the w3m text browser
!w3m test.html

This behavior is buried in the info ed documentation. Vim inherits this behavior as a descendant of ed, but I first learned about it in a tweet. From info ed:

an unescaped '%' is replaced by the default filename

More often when I'm generating an HTML file from a markdown file, which I do a lot because I write lectures and other content in markdown, I use a function that I wrote and keep in my .bash_functions file. I like this function because it keeps smart formatting out of my HTML.

makepost () {
  sourcefile="$1"
  pandoc -f gfm -t html "$sourcefile" > \
    $(basename -s md "$sourcefile")html
}

Alternatively, I could do this within ed(1) or Vim. In command mode:

w !pandoc -f gfm -t html % > somefile.html

When I exit the editor, I can do makepost somefile.md to generate somefile.html. To copy that file from the command line, I use the following function that copies the contents of a text file to my clipboard. Then I can paste that (via Ctrl-v) in Canvas or wherever I want the HTML:

clip () {
  xclip -selection clipboard -i "$1"
}

To use that, I do clip somefile.html.

I use /usr/bin/ed quite often. I've found that it's a great editor for writing because I find it easier to simply stay in insert mode longer (i.e., Vim, as a screen editor, faciliates mode switching). I have also found that ed(1) is great for editing because it helps me focus on one line at a time. I'll usually go back to Vim when I want to make some big passes through a work.

Rest

Last night I went to sleep at around 7:30pm. I woke up a couple times during the night, but just for moments, and then got up for the day a little after 7 this morning.

I needed that nearly 12 hour sleep. Sometimes, we need just the basics, just like an infant.

Breathing

Yesterday was a sad day for me. It sucks to just feel down. Anyway, I did my Wim Hof breathwork this morning, and it made me feel much better. I hadn't done it all week, which is not good since it's been one of the key things that have kept my spirits up these last few months.

I have consistently practiced slow breathing, though. I practice that at least once but often several times per day. I usually do it when I lay down to go to sleep, but it's great for calming me down and keeping me from getting too anxious in certain scenarios. For example, the other day I had my annual allergy checkup. I always get anxious when I go to a doctor's office, and as I sat in the waiting room, I started the slow breathing exercise. My heart rate dropped from 99 beats per minute to 77 beats per minute within five minutes, and I felt super calm and relaxed, which was reflected when they took my blood pressure measurements a little bit later. Sometimes I do this kind of breathwork just at random points of the day; mostly when I am feeling stressed.

In short, these are the two breathwork exercises that have helped me considerably these last few months. I do Wim Hof (including cold showers) to keep my spirits up and to feel good, and I do slow breathwork to keep me from getting anxious and to help me be calm. They've been miraculous. I just need to stay consistent with Wim Hof (and still am looking forward to therapy) to help with some of the deeper issues.

When I Feel Best

I feel best, like good about myself, when I am not around people. I feel like when I'm around people, I say dumb or offensive things or things told in confidence. I hate that so much. The nice thing about my life as a cook, with the occasional side stint as a groundskeeper or a janitor, was that I spent most of my time in those jobs not talking, and I rarely socialized, and ergo, I mostly felt okay about being me. Nowadays, I don't often feel that way.

The good news is that I think I might be able to get into therapy soon. I was having a hard time finding someone, but I have a good lead now.

My youngest just leaned over and kissed me on the cheek. That felt good.

Measuring Food with Pandas

I wanted to reproduce in pandas and Python some of what I did with my tortillas post a couple of months ago, when I ran a small test in R to see how consistent I was measuring dough for tortillas. I'm doing this to learn pandas better.

Pandas has additional data objects or structures, and they each have distinct attributes and methods. This is something that I've had to learn coming from R; specifically, that R is more like pandas than it is like Python. Here are some tables comparing pandas and R.

I can use NumPy with default objects like lists and tuples, but there are three pandas specific data structures. The first two are the main structures for analyzing data:

To get started:

import pandas as pd
import numpy as np

# create data as *list*
tortillas = [2.1, 2.0, 1.9, 1.7, 2.3, 2.2, 2.0, 2.4, 2.1, 1.9, 2.1, 2.3, 2.0, 2.4]

# get basic stats on *list*
np.mean(tortillas)
np.median(tortillas)
np.max(tortillas) - np.min(tortillas)
np.std(tortillas)
round(np.std(tortillas), 2)

# get basic stats on list converted to pandas Series
tort2 = pd.Series(tortillas, copy = True)
pd.Series.mean(tort2)
pd.Series.median(tort2)
pd.Series.mode(tort2)
pd.Series.max(tort2) - pd.Series.min(tort2)
pd.Series.describe(tort2)

# However, here's the shorthand:
tort2.describe()
tort2.le(2.0) # return Booleans less than 2.0 

To perform a t test, we need another library, and here SciPy is common. For a one sample t test, I wanted to know if the observed mean was different from a mean of 2.0, which is what I was aiming to get when I was measuring out the dough:

from scipy.stats import ttest_1samp

# works on pd.Series or Python Lists
ttest_1samp(tort2, 2.0)
ttest_1samp(tortillas, 2.0)
# These results agree with my R results:
Ttest_1sampResult(statistic=1.8358568490953695, pvalue=0.08934987597048166)
# Save the results
tscore, pvalue = ttest_1samp(tort2, 2.0)
print('t test equals: ', round(tscore, 3))
print('p value equals: ', round(pvalue, 3))

It seems that I'd have to calculate the confidence intervals myself if I only used SciPy, but there's a library called pingouin that can report the important details for the test:

import pingouin as pg
pg.ttest(tort2, 2.0)
               T  dof alternative    p-val         CI95%   cohen-d   BF10     power
T-test  1.835857   13   two-sided  0.08935  [1.98, 2.22]  0.490653  1.015  0.397749

And the results are the same for the R version of this.

Mushroom Hunting

We were watching this short video about a mushroom/truffle dealer last night, and it reminded me of this guy I cooked with when I lived in Seattle and when he took me mushroom hunting with him up around Mt. Rainier. It was a great time, and I enjoyed looking for mushrooms and camping. I think we only found lobster mushrooms. But the video reminded me of the threat we faced when hunting. My friend told me that there were people up there looking for matsutake mushrooms and would get violent if they thought you were a threat. It all sounded very brutal and dangerous. Also, we had to be wary of bears.

I slept in a tent, and my friend slept in his old VW van, which held a bed that he built for himself. We cooked steak and some of the mushrooms in a cast iron pan that we placed on a fire. It was delicious.

Mt. Rainier is a beautiful place.

diff, ed, patch

Sometimes I like to do things using the old ways, largely because it’s sometimes interesting how thing were done a while back. But also because even though I write some scripts in R and Python, I’m not any kind of software developer and have not had any real training in computer science.

This is all just to say that right now I’m learning a bit more about the diff command. I’ve used it quite a bit over the years to visually compare two or more text files, but I’ve never used it the way a programmer might use it; that is, by using it with the patch command or with an ed script. (I have, however, used RCS to edit web pages on a multi-user NetBSD based public access UNIX system. I remember how fun it was when I first had to use it back around 2004 or 2005.)

Anyways, to use ed and patch with diff, let’s say there are two files: file1.py file2.py, and file2.py is a modification of file1.py.

To merge them with diff and an ed script:

diff -e file1.py file2.py > patch.ed
(cat patch.ed && echo w) | ed - file1.py

To merge them with diff and the patch command:

diff -u file1.py file2.py > patchfile.patch
patch file1.py patchfile.patch

Vegetarian Red Bean Soup

Last night I made some pretty good vegetarian red bean soup. It’s pretty basic but delicious. Here is what I did:

Beans

Two cups dried red beans, soaked in salted water the night before.

After cooking the next day, I drained, rinsed, and set them aside.

Broth

I added some leftover vegetable scraps that I keep in the freezer to a large pot, along with a bit of rind from parmigiano reggiano, and added about two plus quarts of water. Brought this to a boil, and then let simmer for about an hour.

Soup

I chopped two small, yellow onions (or one big one would have worked), about half a bulb of garlic, and diced two red bell peppers.

I poured a good amount of olive oil along with a tablespoon or two of butter in a large soup pot. Turned the burner to medium-high, and when hot, added the onion.

Cooked the onion until just beginning to caramelize, and then added the red bell pepper, the garlic, and some salt. Cooked this until the red pepper was softened.

I added some dried seasonings, specifically some sofrito mix we get from TJs, and stirred this to release its fragrances.

Added the drained red beans, stirred, tasted, and added a bit more salt.

Then I poured the hot broth through a strainer and into the soup pot. I brought this up to a low boil but quickly turned it to a high simmer after it started to boil.

I let this simmer and meld for about 15 minutes, and then I used my handheld burr mixer and blended some of the soup. I stirred in a bunch of fresh spinach.

That was it. It was a nice soup.

We also had some leftover baked mahi mahi and some leftover soup, and today I added the fish to the soup and heated them up for lunch.

Comical Kids

My kids can be hilarious, and the youngest one is really funny right now. Last night, from the other room:

KA-THUMP!

2 yr old: "I'm okay! I'm okay, Daddy! I fell head! I'm okay!"

Then about ten minutes later:

"I'm okay! I'm okay! OW! I'm okay! I hurt my leg! I'm okay!"

Then this morning the 2-year old was sitting all alone in the front room and had a light organza-like piece of fabric over their head. They pulled it off their head and yelled, "Boo!" And then they pulled it back over, and then I pretended not to see them, and kept asking where they went, and they were cracking up. We kept this up for a couple minutes.

Ha, just now they tripped while was running down the hallway and yelled, "ow!" for real and then yelled, "I'm okay! I'm okay!", as they ran off.

Knots

Today I had to unknot a chained necklace. I used to love unknotting people’s jewelry when I was a kid. I would volunteer to unknot whenever anyone had anything knotted, and after a while, folks would bring their stuff to me unsolicited. I loved it, perhaps because it made me feel useful. More basically, I think I just liked to figure out how to unknot things. I did this so often that for a while I thought it would be a good idea to open an unknotting store. I would have opened one of those booths that you see in a mall. Imagine that.

No deep message here. I still just like to unknot things.

I Got Rice

I figured out how to make great brown rice. This had been bothering me for many years, and I’m super excited because I never really enjoyed my brown rice until I learned how to cook it well.

The first insight came after watching a What’s Eating Dan video about the appropriate ratio of rice and water. Specifically, this video convinced me to try the first knuckle method. But Dan used white rice in that video, and I wasn’t sure if the first knuckle method would work for brown rice. I tried it, and it did, but it wasn’t enough to make brown rice great.

I did some searching for other brown rice recipes to see what else I could learn, and I came across a great brown rice recipe. However, I was only sold on a couple parts of that recipe and not the whole thing. For example, the recipe calls for a ratio of 2 parts rice to 3 parts water, but given the first knuckle method, that seems like way too much water. One thing we learn from Dan’s video is that water/rice ratios don’t work. That is, you can’t double the amount of rice and also double the amount of water.

Instead, I borrowed two things from that recipe. First, I used their rinsing technique. I usually rinse my rice in water, but I had been using a strainer to run the rice under the faucet. Per the above recipe, I added the dry rice (a couple of cups for dinner) to a large mixing bowl and flushed the rice with water, swirling it with my hand and draining as I went, until the water was fairly clear in the bowl. This seemed to do a better job. When it was ready, I drained the water, put the rice in a pan, and added filtered water up to my knuckle. And then I let it soak for a couple of hours. That soaking really did the trick. It also reduced the cooking time to about 30 minutes, which includes 15 minutes on the burner and another 15 minutes with the burner off but the lid in place.

So here’s what I got. I usually make two cups of rice at dinner, for a family of five.

Ingredients

  • 2c brown rice
  • 1T butter or (olive) oil
  • Salt

Method

  1. Add rice to large mixing bowl and flush with water, mixing with your hand and letting the water drain by tipping the bowl until the water in the bowl is fairly clear.
  2. When the water is pretty clear, drain it and add the rice to the cooking pot.
  3. Add water to pot up to first knuckle (see Dan’s video for subtleties and full explanation).
  4. Let soak for about 2 hours. Longer is okay.
  5. After soaked, stir it up, add butter or (olive) oil, salt, and bring to a boil, and then turn to low. Give it another stir and let cook at low until the water is absorbed. That’s been about 15 minutes for me.
  6. After water is absorbed, turn off burner and let sit, with lid on, for another 15 minutes.
  7. Remove lid, and fluff rice with a fork. Let sit for a few more minutes, and serve.

Solo Camping in a Thunderstorm

We didn’t camp last summer because the campgrounds were closed, and we haven’t camped this summer because, I guess, we got out of the habit of it. I miss it, and I hope we pick it back up again next summer or this autumn when the weather is cool and the campgrounds are less busy.

Our family camped quite a bit for three summers in a row. One time, a few years ago, we went to a week long festival here in Kentucky. We went with some other families, and a few of us headed out there early to snag a good spot and set up camp before the crowds arrived.

We found an idyllic area beneath some trees and near a creek. As we set up camp, the wind began to pick up, but the sky was still mostly clear. I had the notion that I was supposed to stay overnight, mind the camp, and wait for the families, including mine, to arrive the next day. So, my friends left, and I set up my tent and settled down for the night.

The wind grew stronger and the sky darker, and about an hour later, one of my friends came roaring back in his truck to let me know that a big storm was approaching. We didn’t have radio or cell phone reception in the holler, which meant that he didn’t find this out until he had driven a few miles away. The storm was not on the forecast.

We secured our campsite (not quite well enough we found out the next day), and I still thought I was staying. My friend left, and darkness arrived with a big thunderstorm. The lightning would periodically brighten the pitch black night, and the thunder and heavy rain kept me awake. I was concerned that the water from the creek would flood the camp, or that a tree branch would fall on the tent. I laid there awake, hoping that I would survive the night and see my family again. I found that night both exhilarating and terrifying.

I look back at that night with fondness. Even though I don’t necessarily want to repeat the camping alone in a thunderstorm experience again, I wouldn’t mind camping solo more often, even if it’s just for a night.

Ten Miles

The children and I rode our bikes on the Legacy Trail today. We did a ten mile ride: five miles in and five back. They were great. I was very proud of them.

We went to this trail once before. This was about two years ago, and my middle child was too young at the time. I think we rode a mile then---maybe even less.

Today was a lot of fun. It's a fine, scenic trail. We usually ride bikes on the streets and through campus. It was great not to have to worry about traffic.

I just want to remember this first trail ride.

When Did I Learn

Sometimes when I learn something, it changes my behavior or it changes how I see things. But then I'll read some note to myself or some journal or letter I wrote years and years ago, and I'll find that I had come to learn this thing then (whatever that thing is---I am intentionally being vague about it because it could be about anything). That raises the question: why didn't learning that thing then change my behavior then or change how I see things then? Am I just forgetting, or did I not really learn the thing in a meaningful way?

I think I'm focused on this because I feel like a late bloomer, and I can sometimes feel a bit envious of those who seemed to have it figured out at a younger age. For as long as I can remember, I've felt like the people in the room got things quicker than I did, but that the only reason I've been able to go as far as I have is because I've believed that I'd eventually get it, too. For example, when I was in third grade, and at my fourth school, I remember the teacher explaining something. The other kids in the class all seemed to understand what the teacher wanted, but I was completely confused. I remember thinking that if the other kids could get it, though, then I could also---that I'd figure out a way to catch up to them. I still have this kind of experience.

I have no idea where that belief in my self originates, especially given the belief that I was not up to par, but I think, albeit feeling slower than most, that it's that belief in my self that has kept me relatively afloat all these years. If I'm going to be a slow learner, I'm at least thankful for the self-confidence, wherever it came from.

First Day Energies

One of the nice things about working in academia is all the incredible energy and excitement that comes with the beginning of the school year. I miss that. Regardless how this year goes, I hope we get at least a little bit of that energy this year.

Quotes from Didion

I've been meaning to read something by Joan Didion for a long while. I finally got around to it with The Year of Magical Thinking.

Note to self: the spider web on the front porch the night before:

Survivors look back and see omens, messages they missed (Chapter 12).

Second note to self: the tacit.

I never actually learned the rules of grammar, relying instead only on what sounded right (Chapter 11).

Some other quotes that I want to remember. This one reminds me of Sportcoat from Deacon King Kong by James McBride:

Some people who have lost a husband or wife report feeling that person's presence, receiving that person's advice. Some report actual sightings, what Freud described in "Mourning and Melancholia" as "a clinging to the object through the medium of a hallucinatory wishful psychosis." Others describe not a visible apparition but just a "very strongly felt presence." (Chapter 17).

Here's another that I'd like to remember:

"you can love more than one person [John says]." Of course you can, but marriage is something different. Marriage is memory, marriage is time (Chapter 17).

This is related to an inside joke I have with my spouse:

When I was clearing out a file drawer recently I came across a thick file labeled "Planning." The very fact that we made files labeled "Planning" suggest how little of it we did. We also had "planning meetings," which consisted of sitting down with legal pads, stating the day's problem out loud, and then, with no further attempt to solve it, going out to lunch (Chapter 19).

For self-reflection:

Do you always have to be right? He had said that. Is it impossible for you to consider the possibility that you might be wrong? (Chapter 20)

As time since the death of John grows longer:

The craziness is receding but no clarity is taking its place (Chapter 22).

I do this, too:

All year I have been keeping time by last year's calendar ... (Chapter 22).

A beautiful ending:

You had to feel the swell change. You had to go with the change (Chapter 22).

Wim Hof Guided Breathing

I've been following the Wim Hof method, all of it, including the breathing exercises, the cold showers, and the meditations, and I like it. I've been using one of the videos for the guided breathing session, but sometimes I like to follow the video without any sound. So, if I'm not using sound, I thought I'd create another script that mimics the breathing method so I can run this on the command line.

This is a pretty basic script and it's like version 0.25. Later I'll upgrade this to make it print the text pretty (maybe add bubbles like in the video, but ASCII only) and also to add command line arguments that allow for different numbers of rounds, etc.

#!/usr/bin/env python3

# A little script that follows the Wim Hof Breathing method
# Currently hardcoded to do five rounds
# Usage: ./wimhof
# Pretty much follows the following video:
# https://www.youtube.com/watch?v=tybOi4hjZFQ
# Date: 2021-07-19
# To do: Make pretty
# To do: Add command line arguments

import os
import time

os.system('clear')
print("'All right, guys, welcome.'")
time.sleep(1.5)
print("'This is a guided breathing session.'")
time.sleep(1.5)
print("'Relax to the deepest.'")
time.sleep(1.5)
print("'Whatever it takes, relax.'")
time.sleep(1.5)
print("'Are you ready?'")
time.sleep(1.5)
print("'Here we go.' --Wim Hof")
time.sleep(1.5)
os.system('clear')
print("Let's do five rounds.")
time.sleep(2)
os.system('clear')

def breath():
    for i,j in zip(range(1,31), range(1,31)):
        print("Breath in", i)
        time.sleep(1.7)
        print("Breath out", j)
        time.sleep(1.7)

def breathout_hold():
    print("Hold breath for 1:30")
    for k in reversed(range(1,91)):
        print(k, "seconds left")
        time.sleep(1)

def breathin_hold(): 
    print("Breath in and hold for 15 seconds")
    for l in reversed(range(1,16)):
        print(l, "seconds left")
        time.sleep(1)

def round():
    for m in range(1,6):
        print("Round number ", m)
        breath()
        breathout_hold()
        breathin_hold()
        os.system('clear')

round()

print("'Let it go.'")
print("'Let your breathing return to normal\
as you finish up the round.'")
print("'Move your body bit by bit,\
starting with your fingers and your toes.'")
print("'Let your breathing normalize.' --Wim Hof")

Timing is Everything

I was unhappy yesterday with writing the timer/countdown script in Bash, and I thought I'd give it a go in Python.

I've written two versions. The first version involves asking for input after running the script. Since I've written scripts using input(), this was an easy version to write. Usage is timer. Then enter a number at the prompt, and the countdown starts. If a string, a floating number, or a negative number is entered, then it'll ask you to try again.

#!/usr/bin/env python3

# Use as a countdown timer
# Usage: timer
# Enter a whole, positive number at the prompt
# Date: 2021-07-16

import os 
import time

os.system('clear')

# Function to take a positive, whole number 
def check_input():
    while True:
        try:
            count_start = int(input("Start number: "))
            if count_start >= 1:
                os.system('clear')
                return count_start
            else:
                print("Enter a whole, positive number. Try again.")
        except (ValueError):
            print("Enter whole, positive number. Try again.")

# Do the countdown
def timer():
    count_start = check_input()
    for count_start in reversed(range(count_start)):
        print(count_start)
        time.sleep(1)
        os.system('clear')
    print("Countdown over.")

# Call timer function 
timer()

I'm still fine-tuning the second version. In this second version, I use argparse to take a value at the command line, which means this version replicates yesterday's Bash version more closely. argparse is new to me (See update below), though, and this version is incomplete because I need to add additional help info when the argument is a negative number, a float, or a string.

Update: I fixed the above issues (now striked above). After a closer reading of the documentation, argparse was behaving as it should when a string or a float was passed to it. However, if I passed a negative number to it, it would immediately print out "Countdown over.". To solve this, it dawned on me (naps are helpful :) that I could just use the abs() function to make sure the number was always positive. The code below reflects that now:

#!/usr/bin/env python3

# Use as a countdown timer
# Usage: timer [-h] number
# Date: 2021-07-16

import os 
import time
import argparse

os.system('clear')

# Function to take a positive, whole number 
def take_input():
    count_start = argparse.ArgumentParser()
    count_start.add_argument("number",
            help = "Enter a positive number.", type=int)
    args = count_start.parse_args()
    return args
    os.system('clear')

# Do the countdown
def timer():
    args = take_input()
    for args.number in reversed(range(abs(args.number))):
        print(args.number)
        time.sleep(1)
        os.system('clear')
    print("Countdown over.")

# Call timer function 
timer()

Anyway, this was all motivated because I've been seeing a physical therapist, and as a side issue, I mentioned that sometimes my wrists get tight after typing for a while. She taught me a couple wrist stretches to use throughout the day. I could certainly just use my phone or watch as a timer for the stretches, but I thought it would be fun to write a short script for the job.

A Timer

I haven't written a Bash script in a few months, and I am out of practice. It took me too long and too many web searches to write a very basic countdown script.

Also, writing this reminded me that I don't like using Bash to write scripts that involve any kind of integer evaluation. I should have used Python.

Anyway, I like to take breaks from typing to stretch my wrists, and having a little script to count down from 30 or so seconds, or however long I want to stretch while at the desk, is nice.

#!/bin/bash

# Use as a countdown timer
# Usage: timer [arg]
# where [arg] is a whole, positive number
# Date: 2021-07-15

timer () {
  clear
  if [ -n "$1" ] && [ "$1" -eq "$1" ] &>/dev/null ; then
    for i in $(seq "$1" | sort -nr)
    do
      clear
      printf "%s " "$i" && sleep 1
      clear
    done
  else
    printf "\nNot a number.\n" ; exit 1
  fi
  printf "\nCountdown over.\n"
}

timer "$1"

I named the script timer. If I want to start the timer at 30 seconds, then I just do this:

timer 30

Back to Ubuntu

About a year ago I began the switch to Fedora. I first installed it on my laptop and then my desktop about six months later. I've now returned to Ubuntu.

I like Fedora. I prefer their version of Gnome, although I only use it sometimes when I'm not using the i3 window manager. (The Gnome differences are really minor, though.) However, there were a few annoyances. The laptop wouldn't sleep when I closed the lid, even though it was configured to do so. The distribution was too bleeding edge for me. Sometimes it was nice to have the most recent version of whatever software, but I'm willing to sacrifice that for a less bleeding edge system if it means fewer system and software updates and less frequent reboots. I don't mind rebooting my laptop because I regularly shut it down anyway, but I'd rather not have to reboot my desktop as much as it asked me to. Finally, the package manager, dnf, felt slow compared to Debian/Ubuntu's package manager, apt.

It was fun to distro hop, though. It reminded me when I started to use Linux and would often test new distributions out. I don't do that very often these days because it's more important to me to maintain a good workflow and to have a system that supports that workflow than it is to learn a new system. In any case, it's not goodbye to Fedora. I will continue using it in my systems administration class, and I'm looking forward to learning more about the Btrfs file system.

Site Update

I updated this site's design again. This time I tried to mimic the kind of straightforward, minimally styled academic sites that were common in the earlier days of the web. It's a style that is easier to maintain and, for some reason, perhaps because of the simplicity, super pleasing to me.

For this iteration, I was inspired by a computer science professor's site at https://homepage.cs.uiowa.edu/~jones/, which was nice to stumble upon.

458 Days

I'm working at the office on campus for the first time in 458 days. It was getting difficult to work from home. Last year, when quarantine started, our littlest one couldn't walk, but now they walk and run, which means we have three very active children in the house. And that means it was getting difficult to work in our fairly small, crowded home.

So I arrived early this morning. It doesn't feel like it was just yesterday that I was here. It feels like it was a long time ago.

A Meaningless Post on Measuring Food

In 1994, I started work as a prep and lunch cook, and each morning I'd have to roll out several hundred balls of ground beef at 6 ounces a piece, which would later be flattened and breaded for chicken fried steak.

I had to move quickly since there were a lot of other tasks to complete before lunch started. I could use a scale to weigh the food, but if I used it to weigh every item, it would slow me down, and I wouldn't finish my prep work in time. The solution meant getting a feel for 6 ounces and to grab that exact amount by hand and by eye. I'd use the scale but just every once in a while to keep me calibrated.

All the longtime cooks that I've worked with had gained this tacit feel for measuring things. I knew a person who could cut steaks from sides of beef to the exact weight needed. Others, including myself, could pour a tablespoon of salt into the palm of our hands, or a cup of sugar into a bowl of flour, without measuring. If we checked our work with a scale or a measuring cup, we'd find we were on target.

Last night I made corn tortillas, and I wanted each ball of masa dough to weigh 2 ounces. I wanted to see if I still had this ability to eyeball the weight, and I brought out my scale and measured what I pulled from the dough on the first try. I recorded my measurements and entered them in R as such:

tortillas <- c(2.1, 2.0, 1.9, 1.7, 2.3, 2.2, 2.0,
               2.4, 2.1, 1.9, 2.1, 2.3, 2.0, 2.4)

My average weight was close to 2 ounces but not exactly so:

mean(tortillas) ; median(tortillas)
[1] 2.1
[1] 2.1

The range was kinda wide, but I think I went a little high and a little low a few times because I was thinking too much about what I was doing when I first started to measure the dough:

# range
max(tortillas) - min(tortillas)
[1] 0.7
# summary
summary(tortillas)
 Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
1.700   2.000   2.100   2.100   2.275   2.400

But the standard deviation was fairly tight, which was a good sign that I was fairly consistent:

round(sd(tortillas), 2)
[1] 0.2

Finally, I want to ask, is a mean of 2.1 significantly different from the goal of a mean of 2.0 ounces, where the null hypothesis is that the true mean is equal to 2.0?

t.test(tortillas, alternative = "two.sided", mu = 2.0, conf.level = 0.95)

        One Sample t-test

data:  tortillas
t = 1.8359, df = 13, p-value = 0.08935
alternative hypothesis: true mean is not equal to 2
95 percent confidence interval:
 1.982324 2.217676
sample estimates:
mean of x
      2.1

According to the test, I should fail to reject the null hypothesis. That's great. It means that, statistically, I'm pretty close to my goal and pretty consistent.

I really did weigh the dough out in order to do this, but obviously this was just for fun. But it's a helpful kind of fun. When I first started learning R and statistics, this was the kind of thing I'd do to help me gain an intuition for the various tests I was learning. A lot of textbook cases use example data that does not connect to me personally. I would address this by collecting data on something I was doing (like playing a game), and then reproducing whatever test I was learning with my own data.

I'd also practice by playing around with functions in R, where I can, for example, adjust the confidence level of the t.test by changing the value for the conf.level argument. Here I set it to 0.90:

t.test(tortillas, alternative = "two.sided", mu = 2.0, conf.level = 0.90)

This results in a narrower confidence interval than it does if the level is set at 0.95. For example, let's set the confidence level to 0.90 and to 0.99 for the t.test and compare the width of the intervals for each. I'll save the 0.90 test as t90 and the 0.99 test as t99:

# Set at 0.90
t90 <- t.test(tortillas, mu = 2.0, conf.level=0.90)
# Set at 0.99
t99 <- t.test(tortillas, mu = 2.0, conf.level=0.99)
# Compare the intervals
max(t90$conf.int) - min(t90$conf.int)
[1] 0.1929272
max(t99$conf.int) - min(t99$conf.int)
[1] 0.3281602

On the surface, the smaller confidence interval for the t90 test would seem to suggest more certainty in the results than the wider confidence interval for the t99 test, but that would be misleading without taking into consideration the confidence level. Although the smaller confidence level for the t90 test increases the precision of the test, it also increases the error. That is, it raises the probability that I would see this result less often in repeated tests (only 90 out of 100 versus 99 out of 100 tests). In fact, for the t90 test, the lower bound of the confidence interval is greater than 2.0, which is what I set the true value of the mean to in the t.test when I set mu = 2.0. That means for a confidence level of 0.90, since p = 0.089, then I would reject the null hypothesis since p < 0.10.

This can all be nicely visualized (not here though, since this is a text only page), by comparing boxplots of the above tests. Let's create a new test for a confidence level of 0.95:

# Set at 0.95
t95 <- t.test(tortillas, mu = 2.0, conf.level=0.95)

Then let's compare boxplots for the three tests:

boxplot(t90$conf.int, t95$conf.int, t99$conf.int)

When I do this, I see that for the t95 and the t99 tests, the bottom borders encompass 2.0 but not for the t90 test. Visually, then, for the t90 test, a mean of 2.1 is significantly different than a mean of 2.0, but not for the two stricter confidence level tests.

Anyway, fun!

Why Libraries Are Fascinating to Me

Libraries are fascinating, to me, because documentation is fascinating, and libraries (and archives, museums) are how we have institutionalized the systemic organization of documents.

Since libraries have institutionalized the systemic organization of documents, they provide a key to uncovering the social realities of society.

The challenge lies in that, too. Since libraries have institutionalized the systemic organization of documents, they have also systematically institutionalized the good and the bad of society. Critical theorists seek to unveil the bad in this way.

More on documents later. More on systemic organization later. More on the institutionalization of these later.

Ferment Fail

One of the fermenting jars of pickles went bad. The other one is still good, though, and I've put it in the fridge.

A few problems that I need to address next time:

  • Weigh the cucumbers down better.
  • Use bigger mason jars or use fewer cucumbers.
  • Mix water and salt ahead of time, really well, and then pour over the vegetables.

I think that'll fix it next time.

Also, it was still winter when I started fermenting for the first time. I knew when it got warmer that the ferment would happen faster, but I didn't realize just how much faster. So fast. I'll need to take that into consideration when I ferment again in a couple of weeks. The jar overflowed a few times. Just need bigger jars, I think, for cucumbers.

The Aliens Are Here

Given the recent news about UFOs or UAPs, I thought I'd tell my story about seeing one a while back.

In 1997, I was working as a server and bartender at restaurant called Alamo Cafe in San Antonio, TX. I became friends with a couple of bussers there and am still friends with one of them.

I can't recall the other busser's name, Eric maybe, but I remember how excited he was about saving up for a telescope. When he finally bought one, he invited me with him to drive to the Hill Country to test it out.

So, we drove one night to the middle of nowhere---to a place with little light pollution, and my friend set up the telescope. It was a good scope, and we were having fun looking at the moon and like with it.

As we took turns, we both noticed something in the sky way off in the distance, out east I think. It was far away and small but interesting enough to cause us to train the telescope's viewer to get a closer look. When we sighted it, we were blown away. The small object was round or oval, and it was hovering in place. It was colorful, too. I don't remember all the colors, but they appeared in patches: something like blue in one corner, red on the other, orange on the top, green on the bottom. I think the colors alternated, too.

We took turns looking at it through the viewer, and after a while, the thing traversed from due east to due north in a blink. It was fast. Crazy fast. And we were stunned. It definitely flew from one point to the other, but if we hadn't been watching it, we might have thought it had transported from point A to point B instantaneously. So fast.

It hovered in its new location for some time, I don't remember how long, and then it moved across the sky again, as fast as it had before, but about half the distance between the original point A and point B. And then again, but this time it went in a new direction. It hovered again, but only for a moment, and then it flew out of view, like off into space.

Of course, I doubt it was alien or extraterrestrial. There were about seven air force bases in the region, and I'd wager it was associated with one of those bases. Or maybe it was some other mundane thing. However, I've never seen anything since that had colors like that and that moved that fast, and a small part of me will always wonder if what we saw was truly from out of this world.

Note: I thought I'd search the web to see if anyone else had seen something similar, and it turns out that someone else saw a very similar thing last year. Who knows?

Back to School

I received my second jab last week and will head back to the office by the end of May. Ideally, I wouldn't mind working from home until the fall semester, but all barriers have broken down in the household, which means that there's no escape from the craziness here! As I write, the youngest one is pounding on the door and yelling for me. [Insert deranged laughter.] In June, the two older kids start outdoor art classes for the summer. That'll be great for them. They need the activity, the interaction, and the stimulus.

My fall classes are fairly read to go. So the plan will be to work a few hours a day on my book at my office and then come home and hang with the kids until it's time to return to the meetings and to teaching. Like last summer, we have already started to ride bikes a lot, and if things go well, we hope to go back to the public pool this summer, too. My oldest was becoming bold on the diving board, my middle child was just learning to swim, and it'll be great if they can pick up where they left off. I can't wait to take my youngest into the pool and teach them the basics. The youngest learned to walk almost a year ago and is now running around wildly. Crazy all the changes over the last year.

Last week a friend brought over four dozen eggs from their hens. I pickled 24 of them and also started to ferment a bunch of cucumbers we bought. Fermented pickles and pickled eggs are the best.

An Open Science Example

I recently had a paper published that was a few years in the making, and at this point, I think this paper is the best I've done at applying an open science process. I think to do better, I'd register the research at OSF or elsewhere when designing the study.

The open science goal here is not only to make the various research products accessible (i.e., open), but also to document the process from as near to the beginning of the project to the end. Documenting the process fosters reproducibility but also creates a kind of chain of custody (not in the legal sense of the term, though).

The paper was published in PLOS ONE and is titled MEDLINE search retrieval issues: A longitudinal query analysis of five vendor platforms. When submitting the manuscript, PLOS sent the preprint to bioRxiv. The peer review process at PLOS resulted in a title change, so the preprint at bioRxiv is titled Methodological issues with search in MEDLINE: A longitudinal query analysis. Eventually, I believe these two versions should be automatically linked to each other on their respective sites, but I don't see it yet (about a week after publication). But by linking them, it would facilitate the ability to see the changes that resulted from the review process.

The code and the data are stored on GitHub. The repository for the project is titled medline-longitudinal. I used Zenodo to create DOIs for the GitHub repository. There are two DOIs for the project. The first one is the DOI for the project at the time I submitted the manuscript. The second DOI was created based on changes I made to the code based on peer review feedback. New DOIs for the Git repository are automatically created by Zenodo when I create a new release of the repository on GiHub. The current, final DOI is 10.5281/zenodo.4757516, and the prior DOI and repo version can be found on that Zenodo page.

Outside of publishing the paper, other communicative products exist. This includes a short paper that I gave at a conference near the start of this project when it was still a work in progress. The short paper is titled Codifying discrepancies among MEDLINE platforms to advance instruction and practice. I also gave a talk in the Fall 2020 semester at my College about this project, and I deposited the slides to my institutional repository. The talk is titled Functional search problems among MEDLINE databases.

Finally, PLOS offered the ability to make my peer review history open for the paper. So all the peer review feedback and my responses are available on the PLOS ONE article page, and that article page also captures post-publication commentary, including any comments on social media and elsewhere. The bioRxiv preprint also displays any social media activity about the preprint.

I'm following the same process with another project that I'm working on right now. I think it's worked well.

My only wish is that I could submit non-Word submissions. I think journals should be able to take Markdown files, ODT (LibreOffice) files, or files created by research notebooks. This dominance of Word is annoying. Journals in my field often do accept LaTeX files, but it's been a while since I used LaTeX and I don't have much interest in taking it back up again.

Phoning It In

In a first for me, I phoned into a webinar today to give a talk. We did a test run a couple of days ago, and when I tried to connect to the video conferencing system, I was taken to a web page that said that I needed to use a supported system, which listed Linux as supported, but that does not in fact support Linux, which was confirmed to me when I called their technical support. What nonsense. Thus, to solve the issue, I phoned in the talk. Google Voice didn't work. I had to use my actual phone.

Anyway, it worked well. I put in some ear buds, called the webinar number, and gave the talk with some slides. The moderator had to change the slides for me, but I numbered them to make it easier. I think I forgot to say next slide a couple of times, but the moderator didn't say anything about that. I am grateful for their patience. Also, since I couldn't access the video conference, another moderator had to email me the questions that I received after the presentation. The whole thing was kind of hilarious. I never would have predicted that I would literally phone in a talk.

It was fun, too. I enjoyed talking about a project that I've been immersed in for a while and to receive great questions from attendees. However, it was weird because other than the people who asked questions, which were emailed to me after the talk was over but while the webinar was ongoing, I have no idea who attended. That added some extra oddity to the experience. And the whole thing felt like I was talking to the slides on my screen instead of to a room full of people, or to a room not full of many people. I think that last factor made it a bit easier on my nerves, though.

No Sudo For You

Learning moment: don't do sys admin work when you're distracted and interrupted. I edited my sudoers file with sudo visudo, but I messed up the syntax. Of course, visudo warned me of the syntax error, but because of the distractions and interruptions, I saved the file anyway. Running sudo afterward resulted in a segmentation fault. And since this is Ubuntu, I didn't set up a root password. Oi! Things would go downhill quickly if I couldn't manage the system.

In the olden days, I'd just reboot with a Live CD, mount the drive, and edit the file. It would have been a simple fix because I only needed to delete two lines. But the drive is encrypted via LUKS and also uses logical volumes. So the challenge here was to boot with a Live CD, decrypt the drive, then mount the correct volume and partition, and edit the sudoers file.

To solve this, I rebooted with the Live CD and once running, I opened a terminal and did the following:

# locate partitions
sudo fdisk -l
# mount volume to /dev/mapper/myvolume
sudo cryptsetup luksOpen /dev/sdb3 myvolume
# scan LVM volumes and choose the correct one
sudo vgscan
# activate the correct volume
sudo vgchange -ay vgubuntu 
# locate root volume
sudo lvs
# mount partition (I think correct location; from memory)
sudo mount /dev/vgubuntu/root /mnt/

Once the partition was mounted, I could then fix the file:

sudo visudo -f /mnt/etc/sudoers

As usual, other people had similar problems and these were addressed on Stack Overflow. The answers helped me solve this issue:

I'm super thankful this was my home computer and not some box that I connect to remotely.

The Liminal Space That Was

I don't think I'd ever come across the concept of liminal space until I read a recent article in The New Yorker on The Pleasant Head Trip of Liminal Spaces (and another article at Musée), even though, for as long as I can remember, I've been drawn to these kinds of spaces. As a young kid, I would wander around my grandfather's office building in search of these empty spaces. One summer when I was in college, I worked mornings as a janitor at a country club (and afternoons and evenings as a lifeguard there), and in my break during the day, when the main building was empty, I'd relax in these empty spaces that were abundant. Also during college, I worked at the creepiest of all liminal spaces. Every Friday night, from 11pm to 7am, I'd sit in the boiler room of the science building. My job was to monitor the boiler pressure gauges. I had a little black and white TV that received one and one-half channels. The boiler room, situated in the basement, was the size of a football field, and only my little corner was lit. Here in Lexington, there are a set of walking, covered bridges that connect several of the downtown buildings. The bridges and the parts of the building they are attached to are all liminal. These places can be eerie, and that's part of their attraction, but they also feel safe in their loneliness.

When I read those two articles linked to above, it dawned on me that this experience of a liminal space was what I experienced last spring when the pandemic shut most everything down and the once busy streets and parks emptied of much human presence. I'm not going to miss the pandemic and will be thankful when it's over, but that was the first time that an outside area in the middle of an urban area that was once quite busy felt like a liminal space, and it was sweet.

The Aha Moment

For several years I have been teaching a class on knowledge management, and I've based the course on a reading of Michael Polanyi's short book, The Tacit Dimension. In the process of teaching this course and reading other not so related literature, I developed a nascent thesis on a topic pertaining to open science and tacit knowing.

I wanted to explore this thesis this semester on my sabbatical. To do that, for the last few months I've been reading tons of literature. I've read much more Polanyi but also a good deal in the philosophy of science, on open science, information science, gestalt psychology, learning theory, educational technology, and more.

This has been great and helpful, but if someone had asked me for a detailed outline of my thesis, I would only have been able to give a halfway account. I simply wasn't fully there.

Then, in a perfect example of serendipity (an information encountering concept), I read an email that was mistakenly sent in response to an announcement on a small listserv that I follow. That email included a reference to a paper, which looked like it fit within the scope of my thesis. As I read the paper, my entire thesis opened up to me.

I opened up my text editor (Vim!), and in about twenty minutes, I wrote nearly a 1000 word series of 15 statements that work like a chained modus ponens. Each of these statements is supported by the research I read in the areas I listed above (philosophy of science, open science, etc.). Together, they support my overall thesis and serve as an outline for my book. Each statement will become a fully developed chapter.

I think (hope) this will be a good book, but regardless, I doubt I would have gotten here if not for the sabbatical. I've had the nascent idea of my thesis for years, but there was no way I could have developed it without the time to immerse myself in the literature that I needed to read for it. The day-to-day work of academia just does not support deep immersion into a topic. That's a whole other discussion.

But also, I'm just really happy that it all finally came together in a very cohesive and coherent way. I also wanted to take a moment to document the main process of it all. It feels great to get to this moment.

Now comes the hard part.

Mix It Up

Sometimes it seems Jacques Pépin makes dishes on his show, Cooking At Home, with whatever ingredients he has on hand. It's as if he's making a show about what he's cooking for dinner that evening. I love it.

Case in point, in one episode, as he demonstrated how to make hummus, he noted that he was out of tahini, and so he substituted peanut butter instead. And I thought to myself, "oh of course that would work. That's brilliant."

Lesson learned, Chef! We ran out of peanut butter, but we had tahini. So I made a tahini and jelly sandwich, and that works really well also.

Wrong Hard Drive

A couple of months ago I wrote about problems I was having with lag on my desktop computer. It seems that some (not entirely all) of the keyboard lag issues were fixed when I worked on it, but still, sometimes I'll hold down a key, like the letter s, and nothing happens on the screen, and then 20 s characters will appear. It's annoying. Furthermore, the computer is still quite slow at a lot of tasks. Anything R related, for example, takes years to run, and my data is not all that big.

I dove into the comments section for the hard drive that I got, and there were some comments about the hard drive using SMR technology. I had not heard about SMR before, and this info was not listed anywhere on the specs. But I searched the model number ST2000DM005 and found that it was true that I'm using an SMR drive.

Based on the comments that I've read, SMR can cause lots of slowness. I'm not hardware smart, but folks seem to think that because of that and because of the way that SMR writes data, it's better used for archival and storage purposes, when writing to disk is minimized, and not for main operating system use.

Also, since I'm using Fedora 33, I accepted the default Btrfs file system. I can't get a straightforward answer about how well Btrfs works with SMR, but some people seem to think they get along well, if used for read and not write intensive purposes.

I asked for a replacement drive and am happy that I will get to replace the drive with an SSD drive. The other problem with the SMR drive is that it's super loud, distractingly so. The SSD will take away the noise and should speed up the computer quite a bit. I'm looking forward to it. I'll pass the SMR drive to the person who provides technical help in our office, and so at least it'll get used.

Lessons learned, especially about hardware, which I don't pay much attention to nowadays. This desktop is eight years old, but it's still beefy enough, and I'm happy that with minimal investment, it should last quite a while longer.

Larry McMurtry

I saw today that Larry McMurtry passed. I am sad about this. My high school English teacher, Billie Bailey, introduced me to his books. I remember the classroom that we were in when this happened. I remember Ms. Bailey's smile because she knew she was offering me something special with this introduction. Ms. Bailey was also a major influence in my life. I shall write about her someday.

I can't be sure but I believe the first McMurtry book I read was All My Friends Are Going to Strangers. Or it might have been Texasville, but I don't think so. Whichever one, I was immediately hooked. McMurtry's melancholy connected to mine. Straight to my soul. And his humor was outsized, like the Texas I knew then. No author has made me laugh or cry as much as he has. Moving On and Terms of Endearment would yank those emotional chains.

I read most of his books in Texas, but I have a nice memory reading The Desert Rose at my grandparents' house in Missouri. I miss my grandparents.

I regret not ever making it to his bookstore in Archer City, but I don't think it was in Texas yet by the time I left the first time in 1991.

Thank you to all the authors who make worlds and who capture their truth, which if done well, is all our truth, too. Thank you to the teachers and librarians who connect us to these worlds and truths. Thank you, Larry McMurtry, for helping to shape who I am.

Professor Suda

A couple days ago I learned that one of my favorite undergraduate professors passed away.

I was really fortunate to have David Suda as a professor and mentor when I was at Monmouth College. It's been 25 years since I graduated, but I can easily recall approaching his office in the basement floor of Wallace Hall, peeking through the open door, and asking if he could talk with me about whatever, my thesis or what to do after graduation. He was generous with his time and patient with me, and I remain grateful for that.

David Suda had a powerful intellect and a range of talents, and he was kind, laid back, funny, approachable, and humble. He delivered consistently engaging lectures on aesthetics, the self, Russian literature, ancient Greek thinking, Jewish philosophy, and more. I have a copy of the book he published, The Moving Image: Immutability, Metaphors, and the Time Clocks Tell, and cited it in an article that was published this month. The book possesses all the earmarks of books that I love most. It draws from a swath of literature, literary and philosophical. It connects ideas from the sciences and humanities. It is reflective and beautifully written. I learn from it each time I read from it, and I am glad to be able to revisit his thoughts through it.

Professor Suda, I hope you had a good life. Thank you for your time.

Another Anniversary

I can only imagine that it is maybe, just maybe, appropriate to storm someone's home if (A) it is a war zone, and/or (B) someone's life is in immediate danger and the success of a rescue is very likely; and that in either of those cases, the decision to storm a home would come only after absolutely all peaceful options have been thoroughly, thoroughly exhausted.

Given that (B) was not the case last year, then I believe that it must be that (A) is true. That's the injustice.

Peace to you, Breonna Taylor.

One Year

Tomorrow marks one year since quarantine started for us. We had our last in-person faculty meetings on March, Friday the 13, 2020 and found out that we'd be working remotely henceforth. As I packed up stuff in the office afterwards, a colleague stopped by to say goodbye and to chat for a second on their way out, and I remember saying, "see you in the fall." I meant fall 2020.

The university plans to return to normal operations next year. I am surprised to find that I am torn about returning to campus. I look forward working in a quiet atmosphere again, even though the office can have its own set of interruptions, and to see my colleagues, but I love being around my family.

It's not that I don't need breaks every so often and that they've rarely come this last year. It's difficult to be cooped up in a small home with several young persons. But I love these people and will miss having them around during the day. Even when it's super crazy and clamorous in this house, like it is in this instant, and when it feels like their turbulence matches that of a hurricane, like it feels right now, I'm still kind of smiling (even if it's only on the inside!). But the little persons need a brighter and more social future, all my family does, and I hope that begins sooner than later for them.

I miss the family I grew up with, too. I'm impatient to see them, and I hope to this summer. It's not all good news on that front, but it still might be. A few years ago I recorded oral histories with some older people in my wife's extended family, as a kind of future gift to their children. I hope to do that with my own extended family soon. It needs to be done, in fact. Time should not be taken for granted anymore.

Peace and long life.

On Cooking Shows

I started to work in restaurants back in the late 1980s. My first job was in fast food, and after I was fired from that job (funny story) I continued to work as a cook off and on until I graduated from college.

When I was hired to manage a kitchen in the late 1990s, I started to devote myself to becoming a good cook, and not just a good line cook. I was not ready for that management job, but I embraced it. My general way of learning something is to ignore everything else in the world and become consumed by the topic. So that's what I did. I worked 16+ hour days and in my off-time, I bought and read scores of used cookbooks and watched one of the relatively few cooking shows that seemed to exist at the time, Great Chefs of the World on PBS.

I still love Great Chefs of the World. That show taught me so much. Each episode began with one chef who prepared an appetizer, a second chef cooked a main dish, and a third chef presented a dessert. There was hardly any talking. At times a chef would say something, quietly, but mostly it was the presenter, Mary Lou Conroy, who spoke.

Conroy's voice and narration were even-keeled. It was a calm and quiet show because the focus was exclusively on the cooking and the techniques involved. It felt like watching golf but without any drama. There was this one time, though, that I remember sitting on the edge of my seat during an episode, and this was because I had detected some muted excitement in Conroy's voice. It was unexpected and thrilling and entirely out of character.

What happened was that Conroy had introduced an Austrian (I think) patisserie who was about to make a tart. Conroy's voice so slightly rose when the patisserie free-handedly cut a circle out of some dough that fit perfectly in a 15 or so inch tart pan. It was amazing to see, and I felt like I shared Conroy's unexpected excitement just because it was so out of nowhere. I loved her awe at watching someone at the top of their game.

Besides that show, I could watch Jacques Pépin all day. He is one of the few people who cook on television who is able to show how it's done in a home kitchen. "This mushroom doesn't usually go in this dish, but I had a mushroom in my refrigerator and I needed to use it." That's the kind of thing he says. He is beautiful to watch.

I could live without most other cooking shows. They feel overproduced and loud.

Cook's Log, Fermentation Date 28

And on the twenty-eighth day, we opened the third jar of fermented cabbage, and it was good.

It was very good. The first two batches, on days 9 and 11, were quite tasty, but this batch was perfectly sour and the cabbage was still crunchy. I had guessed otherwise because the cabbage had sunk quite low in the jar. Final verdict: it is worth a longer fermentation.

This is the batch that contained some Serrano peppers, and boy were those really tasty, too. The spiciness didn't impact the cabbage. I had expected differently with this, too, and will definitely have to make a jar of those in the future.

I'm curious how much more quickly they'll ferment in the spring and summer when it'll be warmer in the house. Right now we keep the thermostat at 62 to 65, but in the spring and summer, it'll be in the seventies. That should hasten the fermentation process a bit, I think.

Interesting twist: the youngest child didn't like the first batch, but they ate a bunch from this batch. I was so happy with that!

On Alphabetizing

The other day I gave my oldest a pocket dictionary that I've had for years, and then they asked me how to use it. I had fun talking about alphabetizing letter by letter with them, and we worked through a few examples on paper. They've literally kept the pocket dictionary in their pocket for the last several days, and have only selected pants to wear that have pockets large enough to hold the dictionary. The day after we talked about looking up words in the dictionary, they came up to me to proudly let me know that they successfully looked up their first word. It was wonderful.

I briefly wrote here a while ago that I really love reference works and that I'd rather be researching them. As a long-enough time generalist, topically and methodologically, I get tickled by new ideas and questions to ask, but I think it's time that I focus on something I really, really enjoy. Showing my oldest how to use a dictionary just simply sparked that joy and reminded me of what I ought to be doing to make me a bit happier.

I think I can make this new focus work and that it would contribute to the literature. There's a lot to say and understand about our world that a deep study of reference works would reveal. I'll prove it.

I only have one project left to complete before I get started full force. It's time to wrap that up.

The Restorative Work of Reading Just Books

Yesterday was a bit of a free day for me, and it was lovely. I was able to spend hours finishing Hope Jahren's book, Lab Girl. I loved this book and the blend of memoir and science writing and saw that she had a second book published last year (The Story of More), which has been added to my reading list.

I've knocked out six books since I purchased my e-reader last fall and five of them since the beginning of the year. This pace makes me happy. I've always read a lot, but haven't read in this way in a while. When I was growing up, you wouldn't catch me without a book in hand. Nowadays, though, mostly what I read are articles (and some books) for research or articles on the web.

I largely stopped reading just books about eleven year ago. Two things happened then: I started my PhD program and I read Cormac McCarthy's The Road. It's obvious why seeking a PhD might disrupt non-work related reading. The Road, though, that messed me up. It was such a dark book, full of despair, that it left me incredibly sad for a long time and it took a long time to recover and to want to read just books again. I love McCarthy's works, but dang, The Road was an emotional and spiritual doozy.

Reading just books has been the most restorative part of my sabbatical so far and although I haven't selected these books I'm reading lately because I thought they were or weren't related to my research, I am finding that they are informing and inspiring it. In fact, Jahren's book has given me a great idea about how to proceed on a topic that I'm studying and also on how to proceed as a researcher and academic more broadly. So, thank you, Professor Jahren for your story, your science, and for the inspiration.

Cook's Log, Fermentation Date 11

This is posted four days late, but by popular demand, I opened the second jar of fermented cabbage two days after I opened the first jar, which was gobbled up in less than 12 hours.

The second jar contained cabbage, minced garlic, and sliced ginger. The cabbage has a very lovely ginger flavor and aroma. I've eaten some ginger. It's much milder than raw ginger, but it still has a bit of spiciness and crunch. I also sliced it too thickly. Next time I should use the mandolin to slice it as thin as paper.

The next jar has cabbage, garlic, ginger, and Serrano peppers. If I can keep the kids at bay (well, the middle one is the ferment addict), then I'll try to wait a couple more weeks until I open it. I don't think the batch will be spicy because of the peppers. I had some raw and sliced up before I added some to ferment, and they were a pretty mild bunch.

Font Lode

Update 3/11/2021: I had to make some changes. The code below is now correct.

Original 2/28/2021: I added some new fonts to this site from Font Squirrel last night and so crossed off another item on my tinker list. For the navigation items and the h2 and h3 heading HTML elements, I chose Open Sans. For the h1 heading element, I selected Afta Serif, and for the p paragraph element, I picked Liberation Serif, which is the default font in LibreOffice. I tested a few serif fonts for the p tag but thought Liberation Serif was the most readable.

Update 3/11/2021: Instead of using the TTF and OTF fonts, as described below, I used the Font Squirrel Webfont Generator to generate WOFF files, and then used those instead, along with the code that the generator produces.

I downloaded the TTF and OTF font files from Font Squirrel and uploaded them to my web space and placed them in a fonts directory. In my CSS, I specified the fonts with the following code:

Code generated by the Font Squirrel Webfont Generator:

/* Open Sans font: https://www.fontsquirrel.com/fonts/open-sans */
@font-face {
    font-family: 'open_sansbold'
    src: url('fonts/opensans-bold-webfont.woff2') format('woff2'),
         url('opensans-bold-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

/* Afta Serif: https://www.fontsquirrel.com/fonts/afta-serif */
@font-face {
    font-family: 'afta_serifregular';
    src: url('fonts/aftaserifthin-regular-webfont.woff2') format('woff2'),
         url('fonts/aftaserifthin-regular-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

/* Liberation Serif: https://www.fontsquirrel.com/fonts/liberation-serif */
@font-face {
    font-family: 'liberation_serifregular';
    src: url('fonts/liberationserif-regular-webfont.woff2') format('woff2'),
         url('fonts/liberationserif-regular-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

/* Compangnon Roman: https://www.fontsquirrel.com/fonts/compagnon */
@font-face {
    font-family: 'compagnonroman';
    src: url('fonts/compagnon-roman-webfont.woff2') format('woff2'),
         url('fonts/compagnon-roman-webfont.woff') format('woff');
    font-weight: normal;
    font-style: normal;
}

And then added them to the CSS selectors with code like this:

h1 {
  font-family: 'afta_serifregular', Georgia, Times, serif;
}

h2 {
  font-family: 'open_sansbold', Helvetica, sans-serif;
}

p {
  font-family: 'liberation_serifregular', Georgia, serif;
}

I'm happy with the fonts and think they look good on mobile and desktop. But, always be tinkering.

Be Virtuous

I write posts here in markdown and create an HTML version using pandoc. The pandoc command is too long to want to type often. It looks like this:

pandoc -f gfm -t html post.md > post.html

This takes a GitHub flavored markdown (gfm) file and converts it to an HTML file.

Since laziness is a virtue, I wrote a short Bash function to make it a single word command followed by the name of the markdown file.

makepost () {
  sourcefile="$1"
  pandoc -f gfm -t html "$sourcefile" > \
    $(basename -s md "$sourcefile")html
}

The function creates an HTML copy of the markdown file, and in the process, it strips the .md extension and replaces it with the .html extension when creating the copy (hat tip). If the markdown file were named post.md, then to get the HTML version, I only have to type:

makepost post.md

Bash functions (and aliases) are so useful. For aliases, I'd rather not ever type clear in the shell to clear the screen, which I do often because I like the cursor up high. Instead I just type the letter c, which is set by this alias:

alias c='clear'

Cook's Log, Fermentation Date 9

I opened one of the three jars of cabbage that I began fermenting on February 5. It tastes great! The cabbage has a firm bite and a nice tart taste. I think I'll let one of the other jars ferment for a couple more weeks and then, depending on how that goes, the third jar for a couple of weeks beyond that.

We're having a fairly chilly winter, and we keep the thermostat in the low sixties. I'm keeping that in mind because I'll likely want to see how this goes in the summer, when it's much warmer in the house.

I'm excited to see what becomes of the cabbage, ginger, and peppers in the other two jars.

Bonus: the two older kids love the sauerkraut (but not the little one).

Puzzled

Kind of like in the recent George Clooney movie, The Midnight Sky, when he uses some instrument to detect how near in the atmosphere whatever it is that's killing all life on the planet, I've played a lot of puzzles in recent months as a way to test if I have brain fog from long Covid-19. I don't think I've had Covid-19. We've been pretty isolated, and I've never tested positive. But I as long as I still have the ability to focus for some substantial amount of time on a puzzle, then I guess I'm happy.

I'm writing about puzzles pretty broadly. I play about three Sudoku games every day, but the coding counts, for my sysadmin work but also for research, which involves a lot of R lately. We also are working on a 1000-piece actual puzzle. It's nice to get lost in that. So, generally speaking, puzzles are my instrument.

Salt the Hash

There was one last item on my to-do list for (near) total sysadmin automation. One of the classes in our program uses an open source content management system (CMS) with MySQL as its database. Normally, for a new user to set up an account on the CMS, the CMS would need to have at least an SMTP server configured to complete the user setup. I'm not allowed to use a full-blown email server on this computer, and I didn't want to set up an email account and use something like msmtp to have emails sent to new users to complete account setups. What I wanted to do was merely batch create the student accounts.

Batch creating the student accounts is easy with MySQL. To do this, I download the roster for the course as a CSV file, quickly remove the unneeded columns in LibreOffice Calc, and save this as a CSV file. Then I create a sql source file from that CSV data using, primarily, some sed one-liners, and the result would look something like this:

insert into table_name(id,username,name,email,active,role) values
(id_value,username_value,email_value,active_value,role_value),
(id_value,username_value,email_value,active_value,role_value),
...
(id_value,username_value,email_value,active_value,role_value);

But that sql source file was missing two columns: a hashed, salted password column and a salt column. I've worked with databases enough to know more than the basics of working with data for analysis or retrieval, but I've never really worked with databases, other than doing the kind of thing as above, where I have to modify user accounts for a CMS, and so I didn't know how to create a sql source file that included the hashed password and the salt. This meant that I could create the accounts for my colleagues, but then they'd have to log in to the CMS and manually add passwords for the students. At least I could generate passwords for them using pwgen or diceware.

It took some reading to figure out how to accomplish automating the salt and hash password process, but I worked it out and learned some things, which is cool.

First, the CMS uses a 16 byte salt. To generate the salt in Bash, I learned that I could use the tr command and random data from /dev/urandom to generate it. So clever.

< /dev/urandom tr -dc A-Z-a-z-0-9 | head -c16 ; echo
FCTSAB10-YKYGAC-

However, when I first saw that command, I was confused by its structure. Normally, I'd see it written like so:

tr -cd A-Z-a-z-0-9 < /dev/urandom | head -c16 ; echo
FCTSAB10-YKYGAC-

So seeing it the first way was a good reminder of how redirection works in Bash.

With that salt, I create a new sql file with the relevant MySQL commands. Let's say the password for the new user is grapes and the new user's account that I want to update has a table ID of 100, then to salt and then hash the password and store it in the appropriate table cell for that user:

update table_name
set password=sha1(concat('FCTSAB10-YKYGAC-','grapes'))
where id = 100;

And then I update the table to add the salt to the salt column. This is needed for the CMS to parse the password and let users login.

update table_name
set salt='FCTSAB10-YKYGAC-'
where id = 100;

Sometime later I'll write a proper Bash script to automate this process for the 50 or more students who use this CMS each semester.

Not Really a Kobayashi Maru

The NY Times site/app has a spelling bee game. The goal is to form as many words as possible with the seven letters the game provides. Six letters surround a center letter that is required in all word formations. Words must be at least four letters long, and the player gets bonus points for forming pangrams, words with all the letters used. Rankings start with Beginner level and then end with Genius level.

I'm usually not very good with word games because my vocabulary is not the greatest (I'm bad at crosswords, e.g.), but it's an enjoyable game and I got reasonably good at it after playing it for a few weeks. Then one day I realized this is the kind of game where it would be fun to write a script that would help me solve the game every single time. So I wrote a Python script at the end of last semester to do this.

The Python script receives input from the player and then asks the player to specify which letter is required (the center letter in the game). Then it asks for the length of words to form, like 4, and then generates words based on that length. To generate the words, it creates all possible letter combinations and compares those combinations with a word list, and selects those, and then again selects those that have the required letter.

It doesn't work well with words that contain more than 9 letters just because it's too computationally intensive for my desktop computer. I know that there is a much better, easier, and less computationally intensive way to solve this problem. For example, I could select all four-letter words from the word list and then select those words from that subset that contain the required letter, and so on. However, when I was writing it, I specifically wanted to work with the Python itertools library because I can imagine needing to use that library in some future research projects. It's like when a former high school friend and I did stuff when we were teenagers, we would always and intentionally choose the hard way to accomplish our goal (e.g., we'd take the longest and most difficult path to get to a location), but we always learned a lot, and had fun. Anyway, something to play with next time I have the itch to do so.

Today I used the Python script to reach a score of 300. It seems like somebody scored 392. I think I need a better word list to compete with those smart cookies who are probably not cheating like I did!

NY Times Spelling Bee Solver.

I Miss John and Neighbors

Our neighbor died sometime around the new year 2017-2018. We were out of town and came back to hear the news. His name was John, and he was a really nice neighbor to have. We don't have a driveway at our house, and John invited us to use his if we ever needed it after he saw my wife return home one day and walk down the block in the rain with an infant and a little kid. When we replied that we'd be concerned that we might block him from getting out of or into the driveway, he replied, grinning, "I know where you live!"

We returned home from our new year's trip and met his sister, who gave us the news that John died at home with his dog, Morgan, out back. His dog survived, which is fortunate, because I guess she was outside for a couple of days in the freezing weather. I used to help John catch Morgan, who would sometime escape the yard and run off. Morgan liked our kids, and I hope she found a good home.

A few people came and looked at the house after John died. We met one family who stopped to take a look, and we were excited about the potential of that, but eventually it was bought by an LLC and it's used for a rental now. The new owner is nice, too, but it's not the same as having a neighbor. We often find trash all over our yard (lots of beer cans) and listen to intoxicated, loud renters on occasion. I'll say something when that happens but it's no fun asking people to quiet down. One time I did that with the other next door, now previous, neighbor, who was having a party, and then ten very intoxicated guys marched over and proceeeded to pound on my door and threatened to beat me up at like one in the morning. My children were sleeping, and I was quite annoyed. So there's always the threat of a violent reaction when you ask people to stop being annoying.

The current owners of the place took the fence separating our backyards down last summer because it was falling apart, which is good, but it hasn't been replaced because I guess the pandemic has caused the price of wood to skyrocket. One day a couple of months ago or so, while having dinner, we watched a guy through our window stumble out the house, not ten feet away, and then pee on the driveway in broad daylight while we were eating. He then staggered back inside that house.

This morning I woke up to find that the people renting the house right now drove in our backyard and crushed our garden sometime late last night. I guess if a fence was there, maybe they wouldn't have driven into that, or maybe they would have knocked the fence down. The garden doesn't matter so much. I can rebuild that. It was a cheap hack that I put together anyway, but I'm glad this didn't happen during the day because the kids play out there.

I hope we get a neighbor someday, even if that means we have to move for it to happen. It's nice to have neighbors. I didn't have the most stable of childhoods, but there was a stretch of years when I lived in one place and had great neighbors. My brother is still friends with a couple of them, thirty years after we've all moved away. That's cool.

On Top

After all these years of using Linux, I've never taken advantage of the top command and have instead favored htop, largely because of the latter's nicer UI. Then, not too long ago I read a short article on configuring top, and now I use it more often than htop. It barely took some tinkering to get a much nicer UI and to remove the large amount of noise that displays by default with top.

Fermented Cabbage

I started three jars of sauerkraut today. One jar contains cabbage and garlic. The second jar contains garlic, fresh ginger, and cabbage. The third jar contains garlic, fresh ginger, one Serrano pepper, and cabbage. I have no idea how the latter two will turn out, but I thought I'd experiment with some things I had on hand. I'm especially curious how the one with the pepper will taste. I hope it's spicy and tangy.

I can't wait to do cucumbers. I love fermented style pickles.

My Sysadmin Work

A few years ago, a number of faculty in my unit were using some ad hoc services to teach a few technology courses. I suppose for some things, this would be fine, but in several hallway chats, I kept hearing stories about the instability of these services. For example, professor A would use X free hosting service for some content management system, and then halfway through the semester, the service would do something disruptive, which would then disrupt the course.

Perhaps if this kind of thing only happened to one professor and infrequently, then some other solution could have been applied, but it was a problem several professors were experiencing often. So I proposed that we buy and manage our own server. Or, rather, I proposed that they (the unit) buy a server and that I manage it for the faculty and install whatever was needed, as long as it was some open source solution since this would be a Linux based server. I also wanted to use the server to teach a couple of courses: one on systems administration and the other on semantic web development. And I knew that one other faculty would want to use it for a similar purpose. They accepted the proposal. A server was ordered. I set it up, got a domain name for it from the university, set up SSL certs, and installed and configured what we wanted.

It started off well and it was eventually used in six or seven courses and more sections of some of those courses. A few of those courses used it to access a couple of different content management systems, and a few others used it for shell access to work on things like MySQL, PHP, and like. But then the university made big cybersecurity changes about a year and a half ago, and it's much more difficult for students to use SSH to get shell access from off-campus now.

My solution to this was for the unit to pay for and use a virtual machine provided by a hosting company for those courses that needed shell access and keep using the unit's server for those courses that use content management systems. The virtual machine is super cheap and even though it's minimal, it's fine for our needs. They accepted the proposal and this is now the current setup, which means that I'm managing two servers. In a way, this is more work, but in another way, it's better to partition out the separate use cases because it's easier, from a security standpoint, to keep the shell users away from the content management systems. I like to give my students who have shell access a lot of room to roam around the directories, and I couldn't do this when they were all on one machine because I had to lock down a lot of directories. Since the shell users are now using a virtual machine at a hosting company and not on the university's network, and since the machine itself is managed well by the company, it's not so much of a problem if the system is compromised, intentionally or not.

Even though it's a bit more work, most of that work is simply keeping an eye on things. That's not nothing, but I've largely automated the other tasks. For example, for one course, every semester I need to create shell and MySQL accounts for a list of students and create databases and set up privileges for those databases. I had written a couple of Bash scripts to take care of this and recently merged them into a single script that does all this work. I still want to generalize the script a bit more but it's only used for one course, and so there's no hurry. Here's the script:

https://github.com/cseanburns/sysadmin/blob/master/usr/makeaccounts

For the original server, the faculty who teach one of the courses that uses a content management system (CMS) need new students added to the CMS every semester and in particular roles in the CMS, and students removed and content purged from the CMS from the prior semester. Since this is an open source CMS, I studied the MySQL databases and figured out how to automate this so that I could add and remove students and delete old content in batch. Otherwise, the faculty would have had to delete everything manually in the CMS. The faculty still have to send the students their passwords for the CMS. I had installed and configured an email server for this machine to automate the crendential process, but the university's cybersecurity folks detected the email server and asked that I turn it off. Oh, well.

I'm a tiny bit burnt out doing this stuff. I still have to teach, research, etc., but mostly, it's good that I'm doing it. Since I teach a system administration course, the work keeps me current, and it's important to me that I stay current with these technologies so that I can teach better.

Back To i3

For some reason that I can't recall, last spring I switched back to Gnome after using i3 as my window manager for quite a long while. Maybe I just wanted a fresh experience of something---a change of "scenery" given that we were recently homebound.

I like Gnome and will keep using it off and on, especially when I need to record video. It's less of a hassle to manage audio and video in Gnome than it is in i3, and for a desktop environment, it is a minimal and out of the way one, especially compared to others. For most of my workflow, though, there's something quite satisfying about the minimalism of a tiling window manager, which I first started using well over a decade ago when ratpoison was my primary window manager.

I like minimalism so much, earlier today I switched to a virtual terminal to work on a manuscript. It's a great environment for writing. Whether it's a tiling window manager or a virtual terminal, nothing beats dedicating one whole screen to one application, especially for writing. I'm looking forward to using Fedora's spin on i3 when Fedora 34 is release in April.

Regarding the lag that I reported in my previous entry, when I was searching the error message that I was seeing in journalctl output, I saw someone post a fix by switching their USB keyboard cable to a USB 2.0 port from a USB 3.0 port. In an act of desperation, I did that, and it seems to have done the trick. Who the heck knows. I'll check the journalctl logs tomorrow to see if the lag is still showing up there.

On File Systems

File systems are a weak point with me and operating systems. This is because I've never really had to deal with lots of disks, with complicated storage needs, humongous amounts of data, etc., and therefore never really had to learn a lot of the intricacies. I remember, for example, in my early days of using Linux, having to edit /etc/fstab and feeling bewildered by the process and trying to figure out how to understand the relevant man pages. However, since I started to teach system administration with Linux, I've had to learn a lot more than I did, and now feel good working with partitions, volume management, and related tools.

Now that Fedora has switched to the Btrfs file system, I'm starting from scratch again since I'll need to teach Btrfs the next time I teach my sysadmin course. This file system is a bit confusing, and to make matters worse, I've been having issues with my hard drive (I think) since I installed Fedora the other day. Since I installed Fedora right after installing the new drive, however, I can't be sure where the problem is without a lot more investigating. Are the problems I'm having due to the physical hard drive? Or the file system? Or something else, like Wayland? I'm completely not sure. Too many variables.

This morning I used the Btrfs scrub utility, and it felt like the thrashing went away as a result and that the OS was running more smoothly. However, as I type this in vim, there's sometimes a decent amount of lag after pressing keys. It's pretty frustrating, and since I have a lot of non-Linux work to do this sabbatical, if I don't get it resolved soon, I might switch back to Ubuntu. Perhaps Fedora is too cutting edge for my daily work needs.

Update: The keyboard lag is a libinput issue, it seems, based off of journalctl. But then I ran sudo libinput debug-events, and everything seems dandy, i.e., no lag. Since I was having the problem in vim, I decided to try nano, and I'm not getting any lag in nano (I'm using nano now). Now I have to figure out what's going on with vim.

Loud, Clamorous, Blaring

The theme of the day is NOISE. The children bounced (still are) off the walls while I worked. Way more than usual. Their loud pitched screams accompanied their frenzied physicality. Fortunately, I was able to work in a separate room. Unfortunately, this offered zero sound and vibration proofing. The wee one wouldn't nap and is hyper because of it.

The new hard drive I installed is loud, too. So LOUD. I regret not getting a SSD. I mistakenly put the desktop on top of the desk, adjacent to my ear. Wrong move there, Burns. I finally unhooked the cables from the computer, re-seated the new hard drive to be sure it was snug, and converted the desktop into a deskunder. I think one of these things helped with the noise a bit.

I guess I was surprised by how much I've adjusted to this atmosphere over the course of this past year. "Adapt or perish," I suppose. Of all things, it was the hard drive sound that was driving me up the wall. But fixed that.

In My Next Life

My hope is that if there is a next life in this world, that I am a singer-songwriter in that life, and that I feel all that I feel now, and that I am able to capture it in song and sing it out.

You Have Mail, too

My very simple email script that I wrote yesterday did not perform as expected this morning when I ran it. I should have realized this. The basic if/elif statements meant that the script would report on one mailbox at a time and that I would have to open mutt for each mailbox in order for the script to move on to the next mailbox. Subpar work, Burns!

So I modified it this morning. I assigned the mailboxes to a Bash array and then surrounded a simpler if statement with a for loop that cycled through the array. I defined a function for this and then called the function at the end. This works as desired and the code is nicer to look at:

#!/bin/bash

checkmail() {

  base_dir="$HOME/Mail"

  mailboxes=("$base_dir/INBOX/" "$base_dir/association_lists/"
    "$base_dir/university_lists/" "$base_dir/library_lists/"
    "$base_dir/courses/")

  for mail in "${mailboxes[@]}"; do
    if [ -s "$mail"new/ ] ; then
      echo "You have mail in $mail."
    else
      echo "No new mail in $mail."
    fi
  done
}

main() {
  checkmail
}

main

Maybe later on I'll have it report email metadata. I took at look at the email headers last night, and it wouldn't be a hassle to do, but as I was looking through the headers, I was thinking that I might not care that much. We'll see. Perhaps I'll just return a count of new emails.

Link to email.

You Have Mail

A small command-line program called email that I used on Ubuntu does not seem to be available in the Fedora repositories. All the program did was tell me if I had new or unopened email in various Maildir directories (mailboxes), which contain subdirectories new/, cur/, and tmp/. I liked it because I could just type out the command to see if I had new email without having to open mutt, the email client that I use on the command line (I know, this is super lazy of me).

I also used email in my .bash_functions file. Although I have a systemd timer setup to sync email every five minutes using mbsync, I have a function in .bash_functions to sync and list new emails on command:

cmail () {
  mbsync -aq ; printf "\n" ; email ; printf "\n" ; date
}

I wanted to keep using that function, and so I hacked together a very simple little script to replace what I lost by switching to Fedora. It uses the Bash [ (test) builtin with the -s option to check if the new/ directory is greater than zero. If it is greater than zero, then that simply means there's a file in that directory, and if there's a file in new/, then it means there's a new email, or more specifically, a file that hasn't been seen by mutt. When mutt does see that file, it gets moved to cur/, even if I don't open the email. If I don't open the email but mutt sees it, then mutt labels it as unopened and not just new.

Eventually I'd like to update the script to print out the From and Subject lines. That way I can decide if I want to open mutt at all and read my email or just ignore for a while. In the meantime, I can use mutt -Z to open a mailbox that has new email, if email says I have some.

Here's a smaller version of the script. The full one checks several Maildir directories that new mail goes to based on some filters I use.

#!/bin/bash

# Date: 1/24/2021
# A way to check if I have new email
# Specifically, check to see if the Maildir new/ is greater than 0

base_dir="$HOME/Mail"
inbox_dir="$base_dir/INBOX/"

if [ -s "$inbox_dir"new/ ] ; then
  echo "You have mail."
else
  echo "No new mail."
fi

A Good Long Walk

I took a good five-mile walk today with the wee one, who was strapped in their stroller, layered up and blanketed. They napped the whole way.

I crossed paths with a colleague, a delightful one. We chatted for a bit, and that was very nice.

When I walked to work every day, I got into the habit of listening to podcasts. I've gotten out of that habit, and it makes me glad to have let it go and to walk in silence.

I usually nod my head at or wave to people when we pass each other, if we happen to catch each other's eyes, but it's not often that anyone responds. The only stranger to wave hello to me was another parent with her child in a stroller. I guess it was something about the shared situation that warranted acknowledgment and a connection.

Always the Tinkerer

I've been playing around with this site's design recently. I wanted to add more pages and I didn't think the last layout, with the horizontal nav bar, worked well for that. But it's also that I like to fiddle around and keep up to date with basic web design ideas. If I don't, then I quickly start to forget those things.

I'll probably redesign it again in a few months, in fact. I predict that I'll start tinkering again when I'm knee-deep in my sabbatical research only because I'll want a mental break, and doing little techie things like this can be a nice reprieve.

Fedora Switch Complete

The new hard drive is now installed. It took 2 minutes and also hours. Here's the process:

  • Back up home directory to external drive (short process since I backup often)
  • Download Fedora ISO
  • Create Fedora bootable USB stick
  • Boot into a live Fedora session
  • Overwrite old disk with random data. This takes hours. So:
  • Help make dinner
  • Clean up
  • Play Scrabble with family
  • Turn off computer
  • Disconnect hard drive and pull out of mount
  • Remove hard drive cage. I kept looking for how to unscrew the cage and my 9 year old child, who is with me because they want to learn how to change a hard drive, notices that the cage is flexible and all I have to do is pull the cage off. I have very literally changed hundreds of hard drives. LOL!
  • Place new hard drive in cage and remount

Now, because my desktop is not near my router, I have to use a USB wireless dongle. Because this is a work computer, my work bought one for me. Because my work can only buy from select vendors, I only had two choices. Because neither choice supported Linux by default, I had to find a driver for it. Because the base install of Fedora doesn't come with the necessary development software to install a new driver, I had to connect the computer to the router, which again, was in another room, to have internet access to download the required software. So:

  • Relocate computer, monitor, etc to the room with the router
  • Connect computer to the router with an ethernet cable
  • Install Fedora on the new hard drive with the bootable USB stick
  • Download and install necessary software to add the new driver
  • Download driver
  • Install driver (it worked)
  • Relocate computer, monitor, etc back to my desk

And finally, restore my backup and install additional applications that are not installed by default (mutt, etc).

Usually when I install a new Linux distro, it takes an hour to install and set things back up to how I like it. But because I wanted to secure wipe the old drive and because I had to relocate the computer to another room, this process took a lot longer. But all is well now, and Fedora is nice.

My Desktop after Eight Years

Even though it's been nearly 8 years, my desktop computer for work is still humming along nicely. When I selected this computer, I intentionally picked out a computer that was fairly beefy at the time because I wanted it to last a long while. The computer has 4 cores (i7-3770 @ 3.40GHz), 32 GB DDR3 RAM, an NVIDIA Quadro K2000 GPU, and a 1 TB hard drive at 5400 RPM.

I can't remember if I added RAM or replaced a bad RAM stick soon after I got this machine back in 2013, but other than that, I haven't changed any of its hardware. I do run statistical computations on this machine for research but not real big data computations, and the machine handles it all fine.

The machine also runs Linux. I've been a long time Ubuntu user but will switch to Fedora soon. I teach Fedora in my Linux systems administration course and have grown to like it a lot. I'll install Fedora this week when I replace the hard drive. The current drive has been spinning for over 6 years and 4 months, and although a SMART test shows that it's mostly okay (there are some pre-fail values), it is past its lifetime. The new drive is twice as big as the current one, and I doubt I'll need the extra space for years, but it also runs at 7200 RPMs, and the faster speed might be nice.

I hope this machine lasts at least another 8 years (or even longer). If it does, I like that I'm saving my employer a lot of money and that I'm lessening my environmental impact, albeit a very small one, by saving this machine from the recycle bin and replacing it over and over.

I Will Pass on Time Travel

I have this recurring night or daymare where I travel back in time to my younger self. However, instead of there being two of me at this previous point in time—i.e., an older me that goes back to a time when the younger me also exists—in this dream it is only my conscious mind that is sent back and that occupies my younger self. In this scenario, I do not relive my life as a third person viewer, but I re-possess my old self, so to speak, and this gives me the ability to redo my future.

While at first blush it seems neat that I could relive my life, when I find myself back in time in this dream, I realize that the future that I remember is forever lost—that there is no way to recreate the steps that led me to my old future or to prevent what I know about my old future from influencing what I do in the new present. I am forced into a new future.

And I panic because of the implications of this. A new future means that since my three children are partly a function of the exact time they were conceived, that is, if they were conceived a day later, then different biological interactions, inevitable if occurring at different times, would result in different children—just as children that are conceived between the same two people at some other time in their relationship are siblings and not identical or clones of the prior ones. In essence, while I think I could manage to find my wife again in this alternate universe, I think it would be impossible for us to have the same children again even if I do find her. Going back in time in the way I dream it would thus be disastrous.

This is a bizarre dream to have, but I think it's simply an active imagination that's considering getting older and taking measure of the life I've lived. Overall then, it's a good dream, even if it has this nightmarish setting, because it's about how I don't care to relive my life simply for the fact that the sacrifices involved are too costly. It's about how my life is not just about me but also about these three little darlings that are a part of my existence. Even if my life hasn't been anywhere near perfect and there are struggles that I have now that I could have prevented if I had known better, I have taken measure of it and have found nothing wanting and everything to lose.

Update 1/16/2021: Ha! My wife tells me this is like the plot to the movie About Time. I haven't seen it, but I guess I will now.

Citizen Science

I've lived in the same house going on eight years now. What's nice about that is that I've been able to notice how the neighborhood changes around here. It changes pretty dramatically each year since a lot of students live on the block, and they usually only rent for a year or two.

It's also been nice to watch how other things change. There's a groundhog that lives out back, and we've noticed it come out and eat the grasses throughout the years. My next door neighbor has a holly tree in their front yard, and every winter the robins strip the berries off that tree. It takes them about a half hour or so to complete their work, and because there are so many robins and because it happens so quickly, it's fun to watch the frenzy.

This year the robins went after the tree a couple of days ago. I had the sense that it happened at a much different date then in previous years. Fortunately, I had taken photos and video of the event in some past years. I went through my photos and found that the robins had stripped the tree on the following dates:

  • January 26, 2014
  • January 20, 2016
  • January 12, 2021

Given that this appears to be occurring at earlier dates, I was curious if that was correct and if so, if there was a cause. My initial, vague hypotheses were that 1) the tree was fruiting earlier, or 2) the birds had changed their behaviors, and that either of these were due to a warming winter.

I thought I'd reach out and share this information with someone who does work on climate change and ecology at my university. I searched for a name and then emailed the professor. She responded back and added that it might also have something to do with the sweetness of the tree, given the sweetness of other trees in the area. And she let me know about some citizen science activities that I might find worthwhile! It was pretty cool, and I'm thankful that she responded. I look forward to collecting some data with the children!

On Aging

I've gained a few pounds since the start of the pandemic. I used to walk a few miles every day by going to work and back home, but since I've been working from home, I walk much less. So, I started running a few days ago, and it's made me realize the difference between my twenty-something year old body and my post-mid-middle-aged year old body. The difference is this: in my twenties, when I'd start a new exercise, I'd only feel sore. In my post-mid-middle-ages, I not only feel sore, but I also feel like my body is going to break apart. This cracks me up. But the running has made me feel better overall even if there is a lot of creaking going on in this shell of mine.

The Trick to Social Media

We have lived with social media for fifteen or so years, but I have only now realized the trick with it. Here it is as a general, universal rule that I recommend all people of the world follow:

Feel free to post to social media, but never ever read, watch, or listen to anything posted.

Or,

Produce it. Never consume it.

On Conservatives

I think of myself as politically liberal but not uncritically so. And it seems to be important, at least in how we tend to form societies, that there exists a healthy conservative party. Because if the current conservative party cannot heal itself and eventually splinters, then what we saw yesterday might get worse for democracy in the US.

Republicans, heal thyselves. Pronto.

Lullabies and Mixtapes

My wife has been responsible for putting the children to bed when they were infants. She'd normally hold and nurse them until they fell asleep. As soon as they become babies/toddlers, I would take over.

During my tenure, I have usually put the children to sleep with music, but I've had separate playlists (mixtapes) for them. The first child's playlist followed a specific musical pattern. The songs would start off upbeat. The third song would reach a crescendo, and then the fourth and remaining songs would wind down and therefore wind them down'for example: 4) He War / Cat Power, 5) Drive / The Cars, and 6) Gypsy / Fleetwood Mac. If the child wasn't asleep by the time Drive completed, Gypsy would definitely do the trick. Simply because I found it a bit funny, the last song in this playlist was Nonstop Disco Powerpack / Beastie Boys. I played this to test if they were asleep. If they started to dance, then I'd need to start over. This was rare, though.

The second child's playlist mostly followed the same, general pattern but was shorter because they usually fell asleep faster, and still do. Their playlist (mixtape) ended with St. Judy's Comet / Paul Simon. I liked ending it with a bona fide, modern lullaby. It's a sweet, loving song. This child also adored the Moana soundtrack, and for a while I think I knew the words to most of the first seven or so songs of that soundtrack.

The third child technically has only one song in their playlist—Always On My Mind (Live) / Willie Nelson. After that song plays, because I use a streaming service, the rest that play are determined by whatever algorithm the service uses. But as soon as Nelson starts to sing, even if that child might be sitting up, standing up, or crying and resisting, they'll drop their head down onto my shoulders and start to sing along. They're still not quite talking yet, but this child usually bellows out wordish sounds that resemble the last word of each line in the lyrics. It's not uncommon for them to fall asleep by the second song that plays, which might be another Nelson song or a Kris Kristofferson song, but it could take nine or ten songs to do the trick. This is a tricky child.

More Hard

Today has been another hard day with the kids. Meltdowns galore. I am sad for these children of mine.

I have been trying to teach them how to meditate—or just breathe—when they get upset, and to take them on walks or to the park. Getting out of the house can help a lot, but it can be hard to gather and shuffle three little things out the door when it's cold outside. Layering up takes time and is difficult when they're already hyped up.

They miss their friends. In the absence of their friends, they often look to me to be their friend and to play with them all day, but I can't always be available to them in that way. I try at points throughout the day, but not the whole day, which is what they increasingly want.

My research sabbatical is this spring. I've wavered about postponing it because I doubt I'll be as productive as I would like to be. When they have meltdowns like what happened today, it is difficult to get back to work. Recovery takes a while. I'll need to think of new ways to be more preemptive with this. Past ideas don't work anymore.

Somewhat Automated

I have this blog somewhat automated with two Bash scripts. The first one ./WWW-toc-generator generates a new table of contents entry for the home page and inserts the entry on that page in the right place. The second script ./make-rss generates the XML for the RSS feed. Both scripts are pretty ugly, but I'll address that later.

My workflow here is:

  1. Write post in markdown (in ed or vim or both)
  2. Convert post to HTML using pandoc
  3. Manually insert HTML post in this page
  4. Manually add additional HTML tags and HTML IDs
  5. Run ./WWW-toc-generator
  6. Run ./make-rss
  7. Manually insert XML item block into index.xml
  8. Manually scp files to server
  9. Push changes to GitHub repo

Once I've written a post, the other steps only take a minute to complete, but I'd like to automate it all. Thus, the next step is to automate inserting new blog posts into this page and automate inserting the new XML item block into the index.xml RSS page. Then clean up the scripts. I'll rewrite them and try to make them a bit portable. Right now they are far from that.

I've never been completely happy with other flat-file based web projects even though there are some nice ones out there. I'm happy that this project, as slow as it goes, is scratching an itch I had about that.

The Dark, Hard Days

I was a line cook for about 18 years, and I loved it and loved being really good at it. I loved those days when the restaurant was busy and cooking and service went smoothly. The world disappeared and a singular focus on cooking replaced it. The physical and the mental would meld, it felt like.

There were times when line cooking didn't go well. A thing would go wrong in the front or the back of the house, and the effect cascaded and would break the day. It felt herculean to regain order. There was some joy in that kind of recovery, if we were able to recover, even if most of such days lacked joy.

There were times when line cooking that the day felt like a sustained, rhythmic assault, but the rhythm was odd and out of sync with our work. The tickets would print quickly and incessantly. It felt hard to breath and to get through it required an intense, determined will to focus. I remember working one shift like this the day after a Thanksgiving. The assault lasted hours and to calm myself and push through it, I found myself imagining curling up in a fetal position with my arms lifted up over my face to block the blows to my head. This was a most awful day.

These past nine months have felt like the second scenario above but sometimes the third. It felt like something went wrong last March and then a cascading effect broke the rest of the year. My children suffered, my wife suffered, my family suffered, my friends suffered, the world suffered.

Our own little household, 900 or so livable square feet of it, mirrors a cramped restaurant kitchen. We stepped over each other, tripped over each other, blasted each other sometimes, even if only under our breath, but sometimes to each other. We cried out for help. We tried to give each other help. We sought some help from outside. We regressed and then got better. Over and over.

We are recovering, I think, which is why the last two posts have felt good to write. I've felt good, better. To push through this year, instead of curling up and weeping, which I've often wanted to do, I tried to hold my children as much as possible and to talk with my wife more. This has helped. I wept, just two weeks ago, when I found out my Mom had covid. I didn't think she'd make it, but she did. It's not stellar yet, but the days feel like they have less weight to them than they did even until recently, and I have high hopes that we'll get through this stronger than we were when it started.

On Buddies

I am in a group chat with some college friends. It's been on and off since the start of the pandemic, but it's begun to flourish recently. It's nice because even though it has been nearly 26 years since I've seen some of these people, we talk and joke and razz each other as if no time has passed—as if we haven't become middle aged, as if we haven't married (or not), raised children, become grandparents, had failures, gone to funerals, gotten divorced, and so much more. Or, despite all that, or because of it all, because we do comment on the intervening years and how much has happened and how it has all affected us.

When I was growing up (nine different public schools, etc), and when I worked as a line cook (21 restaurants and many different states), I lived a fairly nomadic life, as much as that may look like in modern America. It's meant that most of the people I've shared my life with, or have shared their lives with me, are not in my life anymore and never will be again, nor I theirs. There's a kind of gravitas attached to that, and I didn't realize how much, like the father in James Baldwin's Tell Me How Long the Train's Been Gone, that I was ...

lonely for those faces which had borne witness to that past

It's been nice then not just to have this automatic reconnect with these friends, but to have it with these specific friends who once bore witness to some significant years of my past and whose past, significant for them also and for their own reasons, I bore witness to. It's nice that there's still some part of us that is who we were then—that there is some continuity, despite the nomadic life, despite the intervening decades, but that there's still something to learn about each other that's different and that this promises growth in these friendships.

This loneliness that I had felt was not sourced in nostalgia. I do not wish to relive those days nor recreate them. I am happy with who I am. I'm happy that I have a family and a nice job. I want to keep going and keep growing as a person and with my partner, and to help my little ones become the persons they will be. But still, it's nice to reconnect and share again. It feels really good.

Three Quarters of a Year

Three quarters of a year, and almost three seasons, have passed since the start of this quarantine. My Mom came down with covid recently, and she somehow defied the odds, which were not remotely in her favor—she's the definition of underlying conditions. I dreaded this happening to her. She works in a big box store in a geographic area where it's common for people to refuse to wear masks and get aggressive if requested to do so. If the former wasn't enough for her to more likely contract covid, the latter made it more so. Well, it happened, and I'm so happy that she's still here with us and that she's out of danger for now.

In our house, we call this time the Time of the Sickness. Despite all the difficulties (I've been trying to learn how to cry again, which helps with mental health), some great good has come out of it for us as a family, and I'm very thankful for that'a very silver lining around a very dark cloud. As if before my very eyes, I've watched my youngest transform into a toddler from a baby in a way that I don't remember noticing with the others, and it's been fun to watch how this child has latched onto their two older siblings, often mimicking the second oldest and demanding to play with them every chance they get. And I've watched my older two become big kids and best friends. I can't steal the last cookie in the sight of my middle child without that child declaring that I must save it for their older sibling, and the oldest one often gathers the younger two to read to them as they sit on each side. So although it's been the Time of Sickness and Great Sorrow (too), at least it's also been the Time of Togetherness.

Like everyone else I hope, I look forward to the end of this Sickness, but I'm not sure how much I want things to change for the family. I'll still have the option to work remotely, at least for part of the week, and I will probably take that option as much as possible. I've grown kinda comfortable working amid the blaring of children.

Update (12/20): Ha, ha! Of course, an hour after I posted this, one kid had a meltdown and the other two started fighting. Such is this roller coaster.

On Fezzik

Who knew The Princess Bride was so prophetic about mask wearing?

Fezzik: Why do you wear a mask? Were you burned by acid, or something like that?


Man in Black: Oh no. It's just that they're terribly comfortable. I think everyone will be wearing them in the future.

On Ebooks

I purchased an ebook reader recently, and I'm enjoying it. So far I like not adding more print books to my collection. The weight of the ones I have now is too much, although I still value having them.

I like that if I do not become involved with a book that I'm reading on the device, I can simply remove it from the ereader and forget about it. Unread print books haunt me when I see them on my shelves. They remind me that I have somehow committed the sin of uncommitment. I appreciate freeing myself of that type of guilt.

I wonder, though, if my migration to ebooks will have at least one negative consequence. My print books act as indices to parts of my life. I can look at any of the books on my shelves and remember when I got them and where and what I was doing during those times in my life. I know that I will lose that with ebooks. I might have other ways to index my life, though, and I guess that means time will tell, or it won't.

A Good Read

Tonight I finished reading Exciting Times by Naoise Dolan. I don't remember why I picked this book, but I think I saw it on a list somewhere. However I chose it, I'm glad I did. It was quite a pleasure.

I am not quite pleased with a couple of reviews of the book that I read. I wanted to see how others thought about the ending, which is why I read the reviews after I read the book. The reviews were positive but also critical in a way that I thought were unwarranted.

So, remind me not to read reviews again. It kind of spoiled the nice feeling I had and tend to get when I've just taken in a good story.

Let's Dance

I like that toddlers automatically dance to music. Let's dance, kiddo.

On Sudoku

I've been playing a lot of Sudoku in recent months and I think I've gotten fairly adept at completing very difficult puzzles. Sometimes when I'm stuck, I'll work through all the empty cells and add notes for all the possible candidates in each cell. Sometimes that doesn't help at all and the puzzle looks like a mickle of numbers. However, if I go through and delete all of the candidates and start over, more often than not I'll see what I missed and complete the puzzle.

On Carrots

I was lucky to once work for one of the greatest chefs in the country, and she didn't like carrots, and we never had them in the restaurant. I thought that was funny because, you know, mirepoix.

But it was fine. Everything tasted wonderful. Her broth, her sauces, her soups, everything was out of this world.

Primate Lessons

There are a lot of PBS documentaries on primates, and I've been watching a bunch of them and realizing how little I know about our fairly close biological relatives.

For example, I did not know that there is often a rigid social hierarchy in many primate groups, as there have been in most human societies throughout history. I wonder, as primates, if we have a kind of default disposition toward that kind of societal structure, too, and if it makes democracy and equality a hard sell for us. If so, then it is fascinating that attempts at democracy and equality have been as successful as they have been for so long here in the US, even if that success has been marginal for many and has fallen short, tragically, in so many ways, but then not surprising that it is so fragile and threatened, as we are discovering these days. I wonder if this default inclination, if it exists, is the reason for the appeal of the strongman among half the population.

These thoughts give me new meaning to King's quote, that the arc of the moral universe is long, but it bends toward justice. My take on this now is that, it's a moral universe because we are not simply primates, but the arc is long because we are.

On Solace

I've moved away from listening to podcasts and instead have been listening more to music in recent months. It's been a great source of comfort. Lately I've been revisiting Kris Kristofferson and Willie Nelson's catalogs. They remind me a bit of home, but not in a nostalgic way, and that's not why I've been listening to them anyway. I think I just forgot how poetic they were, or I never appreciated it until now. I need sung poems.

Surreality Polarity Reversal

When the pandemic hit, it felt surreal to go outside because the world was so quiet.

I took a walk the other day. There was so much activity that I forgot for two seconds that there was a pandemic. Surreal also.

Dear Mom

You're still here, but it's been a long time since we've had a visit with you and the rest of the family. I find, as this long year stumbles on into its darkest season, that I am missing you all very much. Give the rest of the family a big hug for me.

Love,

Sean

Not That 1984

What was it about the movies that were released in 1984? It's as if all at once a bunch of different movie makers found the key to unlock pop culture. I remember going to the movies when I was a kid, but there is no year where I remember going to the movies to see all of these, and there's no year that occupies such an outsized space in my head as that year. It could have been my age, but that can't be all of the reason.

On the Historical Person

What if someone of historical note traveled through time to today, then heard someone quote them, and responded, "I said that?"

The time travel part would be remarkable, too.

A Pictorial List

My middle child, who is not yet writing, thought I asked them to list some ideas they might have for a project. To create their list, they drew eight equal sized rectangles on a sheet of paper, and in five of the rectangles, they drew a picture that captured a specific idea. The remaining three rectangles were left empty.

I simply think the preliterate mind is fascinating, but it also made me think about lists differently.

Aside: This has been a very hard seven months, but there have also been these very gratifying and loving moments, too. I'm grateful for that.

On Covid19 and Keystone Species

I was watching The Serengeti Rules episode on PBS about keystone species, and the part where Robert Paine discovers the abundance of mussels after removing the starfish from the tide pool made me think that we are the mussels and covid19 is the reintroduction of a keystone predator.

The crazy thoughts we (or is it just me?) have after seven months of this.

I am not a biologist.

s/awk/R/

One of the difficult parts of R is simply cleaning and prepping the data. I'm curious if that part of a research project would be better served using Awk, since Awk is a data-driven programming language, and then let R (or Python) take over for the analysis. I think I might give it a go with this next research project I'm working on with some colleagues. It will be a challenge, but I bet it might pay off nicely down the road.

Update: I suppose I should have titled this post with the Awk equivalent for find and replace, instead of the sed version. Oi!

s/sed/awk/

How did I not know that sed could work on a specific field or occurrence in a line? Instead of:

cat test.csv
apple apple apple apple
awk 'gsub("apple", "orange", $2)' test.csv
apple orange apple apple

We can do:

sed 's/apple/orange/2' test.csv
apple orange apple apple

Or specify a line:

sed '1 s/apple/orange/2' test.csv
apple orange apple apple

How nice.

On Marriage

My wife said I'm a Dwight.

On Teaching Linux

I have been using Linux for a long time now. In the early years it felt kind of magical and new and mysterious, and what I really mean is that using the command line felt that way, and would have felt that way if I was using the CLI on any *nix-based operating system. It is a really comforting place for me to be, and sometimes I wish it was the only computing interface needed.

The magic and mystery faded a few years ago. I suppose that's likely to happen with lots of things. Getting stuff done became more important. Then I proposed an undergraduate course on Linux systems administration, and in teaching that course, I have discovered new things about the OS and rediscovered experiences I had long ago.

That's all. I simply wanted to reflect on this for a moment, and be grateful that though I have people in my life that are infinitely more meaningful than a computer, I have this small thing that brings me calm.

Dark Nights

I have this routine where I wander the house before bedtime each night, picking toys, clothes, and litter off the floor. I like to pause at the backdoor and peer through the window. I like to admire the night and see the shadows cast by the moon and the occasional night creature—the possum, the raccoon, the mouse. Last night I couldn't see a single shape. The clouds kept the moon hidden and the street and surrounding house lights were off or too far away to have an effect. The darkness was beautiful and eerie and almost total.

On Revising

I couldn't let go the last Bash script On Distractions. As I read more about awk, I learned that it was possible to write multiple condition-block statements. It then occurred to me I could write a (long) one-liner using this technique and that the Bash function and the awk if-else statement were unnecessary:

#!/bin/bash
systemctl status --user mbsync.timer |\
         awk -F";"\
         '/Trigger:/ && $2 == "" { print "Syncing..."}
         /Trigger:/ && $2 != "" { print "Time left to sync: " $2}'

The code instructions:

  1. Run the systemctl command
  2. Pipe output to awk
  3. Do a regex search for Trigger:
  4. If the output is NULL, then the systemd timer is syncing and print that.
  5. Do a regex search for Trigger:
  6. If the output is not NULL, then the systemd timer is counting and print the count

On Distractions

It was a fairly productive day, but I'm not sure how I got anything done. Lots of distractions.

My first distraction of the day was all my fault. I use mbsync to retrieve email and I have a systemd timer (instead of a cron job) set to retrieve email every five minutes. This is the first time I've used systemd instead of cron. It's fine, but even though I have no skin in the systemd controversy, I'm often annoyed by the length of some of the commands. For instance, to see when mbsync would next sync my email to my desktop, I'd type this out:

systemctl status --user mbsync.timer

I wanted to fix that. I could have taken better advantage of Bash history, but I thought I could make it a bit more entertaining, and this morning I decided to write a small function to replace that whole line, and I also thought that I'd write it so it would simply return the time left until the next sync. So I wrote this:

systemctl status --user mbsync.timer |\
  grep -F "Trigger:" |\
  awk -F";" '{ print "Time left to sync: " $2 }'

And that worked fine. It would output something like:

Time left to sync: 4min 17s left

That's pretty much what I wanted, and all was rosy until I ran the function and got something meaningless in return. Then I realized that mbsync was syncing at the moment that I ran the function and so there was no time info to return. Enter distraction, and I said to myself, “what was the syntax for an awk if-else statement.” I'm only beginner level awk writer, and it had been a long time since I played around with awk conditionals.

But I worked at it and kept boinking the if statement up, and there were many other distractions that had nothing to do with any of this, but eventually, I got rid of the bugs, and now when mbsync is syncing, my little script checks if field two is null, then returns "Syncing ...", else it prints the time left to sync, per the systemd status message:

#!/bin/bash

# Check how much time left to sync email
# Aug 26, 2020
# Sean Burns

gettime () {
  awk -F";" '{
    if($2=="")
      print "Syncing ...";
    else
      print "Time left to sync: " $2
    }' 
}

# Replaced grep with awk (8/29/2020):
#systemctl status --user mbsync.timer | grep -F "Trigger:" | gettime
systemctl status --user mbsync.timer | awk '/Trigger:/' | gettime

Specifically, when mbsync is syncing, it tells me:

Syncing ...

It's things like this that make primarily working at the command line fun in the same way that playing and solving a hard Sudoku puzzle is fun. And I learned something, too, which I'm happy about because I think awk is a neat programming language.

A Distro Hop

I've begun the migration to Fedora Linux. I installed it on my laptop, replacing an Ubuntu installation, and have really liked it. If I complete the migration, this will be the first non-Debian based distribution that I've used as my main OS since the early 2000s, when I used to run Red Hat Linux and Mandrake Linux, my first two GNU/Linux OSs.

I've been using Fedora for a few years now on a server and have also used it as the demo server in my Linux SysAdmin course, so it's not entirely new to me. What's new to me is the desktop version. I like the take on Gnome (although I prefer i3), which seems to work much better than it does on Ubuntu.

I may switch back to Ubuntu someday. Who knows? But in the meantime, it feels kinda good to distro hop—feels like my first days with Linux.

On Conspiracy Theories

I think if I were to believe in a conspiracy theory about Covid-19, I think I'd believe that this is a plot by NASA in order to test how well humans are able to self-isolate for long periods of time. You know, because space travel.

Seriously though, I know some people who tend to believe in a few kinds of theories, some related to Covid-19 but also a few others, and it's starting to really annoy me.

Earth's Holocaust

Lower case definition: holocaust : a sacrifice, consumed by fire

I read Nathaniel Hawthorne's short story, Earth's Holocaust, about 25+ years ago, and re-read it recently because I kept thinking about it these last few years. When I first read it, I was studying religion, philosophy, and literature, and that had an impact on how I interpreted the story. Now that I am in the social sciences, I can tell I read it much differently. But since that old me is still there inside, it felt like two different, almost conflicting, identities were reading it at the same time. Regardless, though, it's still a depressing tale, and the question stands from my two readings: is the human heart forever condemned, or can institutions solve our base tendencies?

Peace and justice.

Come Sail Away

I like that turn of phrase, "I've found myself doing something." When a person says or thinks that, it's not that they just discovered what they were doing but that perhaps they realized there was a mystery about the thing they already knew they were doing, which of course, suggests that there were doing something they didn't know they were doing.

I've found myself recently watching lots of online videos of people sailing around the world. I think I must be watching these videos for two, perhaps seemingly conflicting reasons.

The obvious reason is that these videos are a way to escape. Times are rough right now. Who wouldn't want to get away from the Threat and see beautiful parts of the world and all the great oceans and seas.

But most of the videos I've been watching are of people sailing around the world either on their own or with a partner or a small family. They go long stretches of time without seeing others. It's not just escaping then. It's social distancing. It's how it feels right now.

Apropos.

On the Bookshelf

I've kept a book on the bookshelf now for over thirty years. It's not a long book, and I don't know who gave it to me, but someone did, and I have never read it, nor its companion book (it's a series, I guess) that I also have.

I might read it, but the book has always weirded me out. The book has almost no information about the author or translators or the series, and there's no copyright date and the copyright page is non-standard. There are blurbs in the front matter, but they seem made up---part of the book's fiction. It was printed on good paper and was well made. It looks as new as it ever did, even the jacket, which it still has.

Over the years, as the web grew, I thought I could find more information about it. I've never thoroughly tried to research the work---only cursory searches. It shows up on Amazon and various book sites and apparently is held by very few libraries, but these listings do not provide background information. Author or publisher information is absent on the web. There are some short reviews on a few sites, and they say brief, delightful things, but they are not informative otherwise.

It's the oddest little thing. Kind of a mystery, and I kind of like that, even though it really does weird me out.

The Chronicles

This is something like the 44th day of our Quarantine. I am fortunate that this whole thing mostly feels surreal, but sometimes I see it playing out like it's a movie.

Movie opens with a family preparing breakfast before school and work, and chatting about their day or arguing about some random thing. TV plays in the background and news reporter is covering a virus outbreak in Wuhan, China.

A couple of weeks later, and the scene is on a different person or a group of people. Perhaps a couple in their bedroom at night who are watching TV before going to sleep. News about the virus becomes more frequent and urgent. Couple briefly talk about it and wonder if it'll impact them somehow.

Again, another week or so later, and another person, like a teacher in a break room or something. Reports are coming in faster about the virus, and it's spreading. Teacher is eating lunch while watching the reports.

Meanwhile, hospitals, particularly in the US northeast and US northwest, start to see increased visits from people with flu like symptoms.

Then, week before quarantine. The virus has spread to multiple countries, but the threat is still abstract for most people in the film. But people are increasingly becoming infected, according to the reports. Lots of uncertainty. Decision making, personal, commercial, governmental, is on hold until uncertainties are addressed. Information goes out about washing hands, not touching faces, and then a bit later, social distancing.

Then the Quarantine. Some experience just horror---especially those on the front lines, while others experience economic hardship, or other types of losses. Others are simply experiencing a wait, and the whole thing feels like a slog to them. Some become impatient or perhaps are suffering under hardships, and begin to vent through protest.

Past Colleagues

A long time ago, I worked as a cook at a restaurant alongside an old chef who taught me a lot about cooking. I was thinking about him recently because he once told me that in order to make good chicken stock, I had to use vegetables that I would be willing to serve to guests. That meant no onion skins or carrot shavings, or like, but peeled onions, shaved carrots, and like.

Dave, I'm here to tell you that you were wrong. I've been making vegetable broth with saved vegetable trimmings only. So, only onion peels, carrot shavings, and like. And the broth I've been making has an incredible aroma and taste.

As I started to write this, I texted a friend of mine that stayed in that area, and asked about that old chef. He texted back that he had heard that the old chef had passed away about 15 or so years ago, possibly from an AIDS related illness.

Rest in peace, Dave. I'm glad I still have cooking conversations with you in my head.

On Consistency

I am often surprised by people behaving inconsistently with their strongly, espoused beliefs, and I can only think of three explanations for why it happens.

  1. They do not behave consistently because they haven't thought through their beliefs.
  2. They do not believe what they espouse but espouse in order to signal.
  3. Their beliefs are not as strong as they espouse.

I kind of tested this a bit recently on a person who acknowledged that they were behaving inconsistently with their previously and strongly espoused beliefs. They responded by with a shrug. I suppose, if they were responding truthfully, that that indicates (3).

So, I don't know. People are interesting, as another friend said to me recently about a different matter.

Restaurant Dreams

I worked in many restaurants and did so for many years, but it has been 13 years since my last job in one. I used to have the standard, common, nightmare restaurant dreams when I worked in them, but it's been a long time since I had one of those. This week, I've had two of them.

Last night I dreamt I was visiting a restaurant (in today's time) that I worked at 20 years ago. There was some desparation in the air, and I was asked to take over the grill station at the last minute just as the restaurant was opening. But I no longer knew the menu, and all the prep was wrong. Steaks were cut in grossly uneven portions and in different shapes, as were various vegetables, and so everything was cooking wrong. The oversized things were burning on the outside but were raw on the inside, and the undersized things were burning throughout. The tickets were coming in faster.

Go away restaurant dreams.

I hope you're all okay, my old restaurant friends.

35 Days

It's been 35 days since our Quarantine. Fortunately, everyone I know is well, but I feel great sadness for all those that have suffered and especially for those that have died alone. Too many.

Be kind, as the Doctor would say.

An Action Under Which Description

I can imagine a conversation where one person asks an other person what they are doing.

Case 1:

The person walks into a room. The other person is on the computer writing an email. The first person asks, "what are you doing?" The other person replies, "I'm on the computer."

Case 2:

Here is another scenario where the action is fairly similar but the tool different, and therefore I imagine, the response is different, and more specific.

The person walks into a room. The other person is hand writing a letter on a legal pad. The first person asks, "what are you doing?" The other person replies, "I'm writing a letter."

Case 3:

In the last scenario, the tool is the same as in Case 1, but the action is obvious, and therefore the response is specific as in Case 2.

The person walks into a room. The other person is on the computer playing a video game. The first person asks, "what you you doing?" The other person replies, "I'm playing a video game."


Thoughts:


Case 1:

I'm wondering if we default to the less descriptive action when the tool that we are using affords a broad range of functions. Thus:

"I'm on the computer" versus "I'm writing an email."

Case 2:

I'm also wondering if we default to a more descriptive action when the tool that we are using affords a narrow range of functions. For example:

"I'm writing a letter" on a legal pad versus "I'm on a legal pad."

Case 3:

In the last case, I'm wondering if we default to a more descriptive action regardless of the affordances offered by the tool if the action is obvious in some way.

"I'm playing a game" on the computer versus "I'm on the computer."

Under what other actions on a computer might the specificity of our descriptions vary, I also wonder.

Why do our descriptions vary?

These are some initial thoughts on action and affordances.

The Slow Down

I imagine many people in higher education are wondering how the pandemic will change our work. I haven't measured it, but I have noticed that the volume of email I receive (and send) has dropped substantially.

I can think of a lot of reasons for why that might be, and I'm sure there are a lot of reasons. The major idea I have is that people have less time to work because they might be at home and having to mind children, but also worry about relatives, and like, and when they can get work in, they're doing the really essential stuff, like teaching and research. In a way, it could be leading to more efficiency, but that's just a hypothesis, and perhaps something to test down the line.

I mean, perhaps it's just me who is getting less email, but I've heard from one colleague in a different college that this experience was true for them, too. However, I would wager that what we're experiencing right now will be woven into the fabric of what we're calling the new normal. That is, these behaviors will persist. We'll see, I suppose.

I'd Rather

... research old reference works. They have a lot to say about us and about technology.

Soon perhaps.

It's the Little Things

Like many people who are fortunate to have a job during this pandemic, I am working from home. I have a desktop machine at the office at work, but I didn't bring it home, and instead am using a laptop with a small ~13-inch screen.

When I tried to use this laptop more intensively in the past, I found it frustrating to do any kind of substantial work. My desktop machine has a nice sized monitor, and sometimes two of them, and I had gotten very used to them. So I am surprised that I have become quite adjusted to working completely off a small screen, and have even enjoyed using it as a primary device to do all the same work that I was doing on my desktop. I have even found that it's helped with focus.

On Research Speed

For the longest time, I felt insanely guilty for not writing research manuscripts fast enough. Sometimes, I was even guilted by collaborators. I don't blame them, though, because as I've aged into this research, I've come to better understand how I work and think through problems, and I didn't necessarily have these insights before now. Nowadays, I'm perfectly fine being a bit slow, and I'm better at communicating that with collaborators. That, my friends, feels good.

On Stress Relief

I find that when I'm a bit stressed out, I code. For example, tonight I updated this website. Next I'll work on some R code. If I don't code, I play Sudoku. Not sure if this means anything, but I'm fortunate and grateful that I have a healthy mechanism for winding down.

On Sheltering

The whole point of the social sciences is to acquire the knowledge needed to improve society, and then apply that knowledge. But the coronavirus epidemic is highlighting all the points of failure across our various systems: healthcare, politics, economics, education, etc.

I hope we get through this with minimal harm, but I also hope that we learn how to build a society that is more just and caring to all, and that is based on all the things we know work towards that kind of system.

On Social Distancing

We went for a walk yesterday on a short trail in the city, just to get everyone out of the house and to be in a place where few people might be congregating. There were a few others on the trail, and what was interesting was that whenever we would pass these people on the trail, no one would look at us, or smile, or say hi. All heads were kept down.

That kind of distancing isn't common, in my experience. People are generally friendly on the trails, and so although I'm guessing, I think it's because this is how people interpret social distancing --- we don't just physically distance ourselves from each other --- we also distance ourselves from strangers in deeper ways. I noticed this kind of thing at the grocery store the other day. There I thought it was simply because people were becoming competitive for goods, but I'm guessing it goes beyond that. If this is a good interpretation, it worries me.

This pandemic is going to have long lasting consequences across a broad range of our societies.

Losing a Walker Friend

I had mentioned before that over the years I had made some acquaintances as a neighborhood walker. These were fellow walkers, too. I found out this morning that one of them, B, who I had mentioned in a previous post, passed away a couple of months ago. Of course that explained why I hadn't seen him since then, and I was worried the last time I saw him. He had been in a wheelchair for a while, but still roamed the streets, and the last time I saw him, he had his pant legs drawn up to his knees so that his heavily bruised, swollen skin was exposed to the subfreezing temperature. I told him to pull his pant legs down, and he responded as if he wasn't even aware that they had been pulled up.

He was an alcoholic, probably a diabetic, and he certainly had other health issues. I met his partner once. She was nice, and he described me to her as if I were an old friend.

It was nice talking with him over the years.

Rest in peace, B.

...

August 2020: It seems B has been spotted and may not in fact have passed. I stil am not sure, though.

March 3, 2022: I saw B yesterday and spoke with him for a bit. So, um, he has not yet passed. In fact, he seems to be doing well. There you go.

When a Baby Cries as a Toddler

There are usually just a few number of reasons why an infant cries. They need to burp, they need a diaper change, they need to eat, they need to sleep, or they are not feeling well.

So it's kind of neat to see them cry for a new reason. Like when they are annoyed by something. Even though it's sad or hard in some way to see them cry, when they cry for a reason that's not directly related to a physical need, it's kind of a marker that they are becoming a toddler, and thus, that they are developing a sense of self. It's kind of a beautiful thing to witness, as a parent, I think.

Converting Markdown to HTML with Table of Contents Using Pandoc

So I remember: to convert Markdown to HTML with a table of contents using Pandoc:

pandoc -s -t html5 --toc file.md -o file.html

That is all.

Post One

Switching Window Managers

I'm testing out the Regolith version of the i3 window manager. I really like it but I don't know if I'll make the switch permanent. Regolith makes i3 very nice looking and I really like the Gnome integration, but Regolith has different keybindings, and the keybindings are different enough to make it annoying and, in some cases, feel more cumbersome to use.

The keybindings are configurable, but because of the Gnome integration, there are a lot more than there are in standard i3, and it's annoying to go through the configuration file and make the changes.

I bet someone has created a more aligned i3 configuration file for Regolith. I might look for that.

Perhaps this is a switch that I could work on over the summer.

Remembering Some Text

Every once in a while I'll confuse something in my memory. The other day I was thinking of the TREC experiments but had confused the TREC experiments with the Cranfield experiments from the 1960s. In particular, I was thinking of something that had happened at the Cranfield experiments but had it in my mind that the event had happened at some TREC track.

However, I knew I was missing a piece of information, and I also needed the reference. I remembered that I read about the event in a specific book, which I had read in 2009. I pulled my copy of the book from my bookshelf and scanned the index for TREC, but the term wasn't there. Then I looked for the keyword relevance and found the section that I remembered reading over ten years ago. That led me to a journal article that I had also read ten years ago and that covered the event in more detail.

It was all kind of a meta information retrieval moment about an information retrieval topic, which I thought was kind of funny.

And that is all I have to say on that.

Some Observations on Usability Pertaining to a Child

I was watching a young child (8 years old) use a word processor application for the first time. The child knows how to write, relative to their age, but had practiced writing mostly on paper. I learned a lot by watching them:

  1. We started by launching a word processor application and a new, blank page. Even though an entire blank page appears, since the default position of the cursor is at the beginning, no part of the page was accessible. The child didn't understand why the entire page was not accessible but that what was only accessible was the point up to the cursor. The child was initially confused by being presented a page or a sheet of paper and not having the ability to use it like they would use a physical sheet of paper.
  2. The child therefore had to learn how to create space, even though the page looks like a piece of paper, all that space doesn't yet exist. The child had to learn how to create empty space by using the space bar and the enter key. This page or sheet of paper metaphor that a word processor presents is really powerful but obviously not coherent with physical sheets of paper. The strength of this incomplete metaphor had never really occurred to me before.
  3. Eventually the child created a few pages of content by writing a story for their book that they're writing. The red squiggly lines that appeared underneath misspelled words were a source of distraction for the child, who once they understood what they signified, wanted to stop and edit before completing their writing. To me, this violates the write first, edit later principle. I turned that function off to help the child focus on one thing at a time.
  4. The child's interpretation of the page indicator at the bottom of the screen was interesting. After the child created a few pages of content, they moved the cursor to the third of the fourth page. The child then noticed the page indicator for the first time, which stated "Page 3 of 4", and asked why their book (which is what they were writing) could be no more than four pages. That is, to the child, that "of 4" suggested all the pages that could exist for their book.

This is not the first time the child had written on a computer, but it was the first time I had let them use a word processor application. A couple of times before, I let the child write in the Nano text editor. None of the above issues came up because Nano does not use the page metaphor or most other indicators besides a cursor. The cursor on Nano is more obviously on a screen, and not a page or sheet of paper.

Bad Superblock

It's painful and a bit nerve wracking, especially if your most recent backup is not recent enough. Also, bad superblock sounds like a name for a terrible hard rock band.

A Quick Bash One-Liner and Children

I wrote a little Bash one-liner script today that was fun to write. I have a CSV file that looks something like this:

"last name, first name","username","email address"

My goal was to grep and yank a username out of the file and then insert that into a s-nail command in order to send local email. Took less than a minute to write, which is probably why it was fun:

grep -i username email.csv | awk -F, '{ print $3 }' | sed 's/"//g'

Then I put that one-liner into a text file and made it executable and generalizable with a positional parameter:

#!/bin/bash

grep -i "$1" email.csv | awk -F, '{ print $3 }' | sed 's/"//g'

I named the file emailwho.sh and called it from s-nail:

s-nail -s "subject line" $(emailwho.sh [grep string])

A quick and dirty address book.

...

In other news, came home today. Landslide was playing. The children ran and jumped in my arms. It made me happy cry.

Tidyverse Skeptic Too

Upon reflection, I am skeptical with Matloff, too. When I was writing R code for my last project and using the Tidyverse dialect, I found myself having to refer continually to the documentation to see how to express each function. Even after repeated use, they just wouldn't stick in my memory. In base-R, and CRAN packages that follow that original dialect, I only have to think about the data and how it's structured in order to slice, filter, etc the data. It felt good reading that piece because now I know it's okay to let it go.

Make Email Fun

Make email fun using a here document:

mutt -s "Subject Line" person@example.org <<EOF
> message line
> message line (cont)
> message line (cont)
> EOF

Wrap an at command around this to schedule the email to be sent later:

at 15:00 today
at> mutt -s "Subject Line" person@example.org <<EOF
at> message line
at> message line (cont)
at> message line (cont)
at> EOF
at> ^d

Some Routines I Find Calming

Although I may fiddle with Vim, terminal, or some other command line settings when I'm procrastinating, it's also true that playing around with these settings or exploring some other part of my work flow can help me find my calm. For example, a few nights ago I felt a bit anxious about life things, and instead of watching some show or reading some book, I went to my laptop and read documentation on the Mutt email client, and I was able to configure Mutt in a way that I had not thought was previously possible, even after using Mutt for something like 15 or so years. The end result was just calming. To get lost in the documentation, to read it closely, to apply it to my application---it was just nice.

Walking is also a calming routine for me, and of course it has health benefits. Exploring technology has some nice practical side effects, too. That is, because I find, generally, the command line to be a much less disruptive, more pleasing computing environment, because of the CLI framework, using it requires me to learn more about computing itself.

Understanding why I like to play with technology helps me be a better teacher. It allows me to empathize, or try to, with my students, and try to understand what they find interesting about exploring or not exploring technical topics. If I can empathize with them about it, then I can help them find their own path and their own joy in understanding the world around them, even if their path or joy is different from mine.

The Product

Academics are the product. Look at our web sites, and it becomes apparent.

The Walkers

I walk a lot. I walk to work, to the grocery store, around the neighborhood, to friends' houses, on lunch breaks. I like to walk because it feels good. My legs are often restless and need to move, but I also like to walk because it's a quieting experience.

I've long been a walker. When I lived in the Seattle area, I walked to and from work. It was seven miles each way and took about an hour and 45 minutes. I started drinking coffee because of this walk. I don't remember the weather there being incredibly cold, but it was cold and wet enough to seep through to the bones, and for the first time in my life, black coffee started to taste good and feel restorative. It was then that Seattle made some sense to me.

One of the interesting things about walking is that you are more likely, I think, to notice the other walkers. When I lived in Missouri, there was a woman who was a walker, and I would see her all over town, pretty decent miles apart, just walking, hands in her pocket. Here in Lexington, I know of a number of walkers. There's one man who shares an appearance with Shaggy, but he's much taller, bulked up, and a bit intimidating. He always, always carries papers with him. For years, they were stuffed in a manila envelope. I would see him on the other side of town, and still he had those papers under his left arm, crammed in that manila envelope. Sometime recently he acquired a shoulder bag, which now bursts with those same papers, I assume. It's very mysterious and intriguing. There's another person, I'll call him B, who used to walk all around my neighborhood, but then due to some illness, transferred to a walker, and now he's in a wheelchair. Still, he gets around.

Another interesting thing about being a walker is that I sometimes develop some kind of relationship with other walkers. B and I talk a bit. He knows what I do for a living and just about every time we speak, he tells me he would like to have become a librarian if he could start all over again. It comes across as a life gone wrong kind of regret. Even if we walkers don't speak to each other, there's the nod, although it often has to be earned. When the man with the manila envelope and I first passed each other on the sidewalk five or so years ago, he wouldn't acknowledge me. After a couple of years of this, he began to return my nod, but his nods were always subtle---just a slight downward motion. Nowadays, the nods are deeper and stretched out, but I don't see him very often anymore. More mystery.

There are other walkers, too. There's the guy who works at a local store. We often pass each other on the way to our jobs, located in opposite directions, and may share a couple of words in that passing. Sometimes it feels like it's a disruption to his own quieting, as if acknowledging me is a burden, and I feel bad about that because I respect the quieting. There's the guy who dances as he walks. There are others.

I like the walkers. I don't know if they're good or bad people. I know a little of B's story, but I don't know anything about the others. Maybe I should dare to ask, but I also like the mysteriousness of it all, and I like that they seem to be private people. And I like that they've always been there, no matter where I've lived.

Written and edited in ed, and touched up in Vim.

On Solitude

The right writing tools help, but there are two other problems that deter good work. First, good work requires solitude and long bouts of it. Second, the web has destroyed space. Solitude requires space. Therefore, by entailment, the web has destroyed solitude. My premises overreach and simplify but not by far, I think.

Even as I write this, there's a part of me that wants to go look up something on the web. Even though I haven't had social media in a long time, I still have the desire sometimes to share a tweet or a post. Even if I'm physically alone, the web feels inside me and invasive, and it is noisy.

I need to retrain myself to be disconnected. Back in 1993, when I was a junior in college, I spent a semester at a major research library. There was the occasional letter or phone call, and periodical social gatherings during lunch or in the evening, but for the most part, for nine weeks of that semester, all I did was research. I read, took notes, and wrote, and after a while of this, I put together a long paper. I did that, just as my classmates did, without the web or the internet, and the focus came easy.

It's true that I have many more responsibilities today, but there must be a way to re-train my mind to feel that solitude and find that kind of focus again. I touched it recently. Last summer we went camping for a week. I was alone on the first night and it was great. Even when we were all together, our phones didn't have a connection, and by the end of that week, the focus had begun to return as the world had begun to recede.

I think this summer I'll re-read Erazim Kohák's wonderful book The embers and the stars: A philosophical inquiry into the moral sense of nature. The book was gifted to me by one of my professors when I graduated college and became one of my favorite books, and I think it'll help equip me with the mental tools needed to get that focus back.

Written and edited in ed.

On Writing and its Tools

It feels like I used to have an academic writing voice and because I had that voice, writing came easily.

I remember when I lost that voice and writing suddenly felt sluggish. I was taking a philosophy course in graduate school and was trying to write a paper on a difficult topic that was also quite new to me, and during the struggle of thinking through the problem, it felt like something cracked in my mind. I could almost hear a once coherent thing in my head fracture like a loud clap on a thunderous night.

My quest to find the perfect writing tools began well before this event. The initial motivation I had for learning Linux was because I found it offered tools, like Vim and Emacs and the terminal itself, that afforded a much nicer, liberating, and less distracting writing experience than the options that were available at the time on other operating systems, but something about that event made that quest hyperactive.

Losing that coherent voice had some odd side effects. I think I can sit down and write despite whatever mood I am in, but the mood will dictate the tool I use. Sometimes sitting at a computer feels stifling and writing just seems impossible. To attempt to write this way feels like I must first break through some great barrier. Then, writing by hand can feel less resistant.

If I continue to use the computer, though, I have to be careful because I can easily get distracted by the tools themselves. I might begin to fiddle too much with my Vim configuration or my terminal settings---altering the terminal color scheme, font type, or font size repeatedly---and end up not writing at all. If I can recognize this frenetic mood quickly enough, but can't write by hand because I need the tools on my computer for some reason, I might switch to a different writing program, like a regular word processor, and find that just by doing so the writing comes more freely.

And then sometimes writing weirdly comes easiest when I am composing an email. I think I may have written half the first draft of my dissertation as Gmail messages to no one. But writing this way, as if I was writing to someone, as if I had an idea of an audience, felt good and was productive. I haven't been able to replicate that experience with the current version of Gmail. The interface has changed too much and writing in Gmail now feels uncomfortable.

While my academic writing voice feels fractured, my creative writing voice does not, but the right tool helps here, too. I have an old 1950s era Smith-Corona typewriter. I use this machine to write for fun---mostly letters to family and friends. Writing this kind of material on this machine has been a relaxing pastime.

Written in longhand. Typed and edited in ed.

Using ed(1), The Standard Text Editor

I started typing this in the ed(1) text editor. My go-to editor is Vim, but ed(1) can be a respite for even that minimal interface. The problem is that even with editors like Vim, there is still a temptation to mix modes -- to edit as I write. Since I find it much more cumbersome to edit with ed(1) as I write, using ed(1) places more focus on the writing process.

I particularly enjoy writing in ed(1) with the terminal in full screen mode. It is probably overkill because I already use the minimalist i3 (tiled) window manager, but even with i3 and Vim I get distracted by mixing up my modes -- by writing and editing concurrently. ed(1)forces me to write because switching and working in different modes in ed(1) (input mode to edit mode) is unlike switching and working in different modes in Vim, and the latter is easier. To edit in Vim: press the escape key, move around the screen, make the desired edits, repeat, done. In ed(1), start a new line, press period (.) to enter command mode, print to screen the range of text to edit, make edits using regular expressions, repeat, done. This is all a bit cumbersome, and the process encourages me to avoid using it.

I do not altogether avoid editing in ed(1), and a side benefit of editing with ed(1) is that it has made me a more advanced Vim user. Even though I have been using Vim for 15 plus years, I am still learning.

Keeping it Minimal

My 30 plus year history with computing has been a history of keeping things minimal.

In the 80s, I had a Tandy 1000 SL with, I think, MS-DOS 3.x. That computer lasted for about six or seven years, and I enjoyed it and learned a lot about computers by primarily using the DOS command line.

I brought my computer with me when I went to college in 1991, but I also used the computers in the college's library. I don't know what kind of computers those were, but what I really liked about them was that they had WordPerfect 5.1. Like the word processors we have today, I didn't use the vast majority of the functions WP 5.1 offered, but what I liked about it was that, like all DOS-based applications at the time, its interface was minimal. I felt comfortable and at home in that DOS minimalism, and have never stopped seeking or recreating it since.

My Tandy stopped booting sometime around 1994 or so, and I graduated at the end of 1995. I went several years without my own computer, but in 1998 I started working for a company and had to use a computer with Windows 95, and then later, around 1999 or 2000, I bought my next computer, which had Windows 98.

The graphical user interface was entirely new to me, and I hated how busy it was. In the early 2000s, it occurred to me that it would be nice to install WP 5.1 on my computer so that I could have that full screen, single application interface that I found so appealing. By this time, it was already too late. WP 5.1 was gone, but in my search, I found other ways to recreate a minimal writing experience when I found Emacs, and then Vi/Vim, and of course, Linux. It's now been about 16 years since I first installed Linux.

The computing world had only grown more complicated and busy, but I still like to keep it as simple as I can. I use the i3 window manager, after having used ratpoison for years. I practically live in the terminal, and Bash, Vim, and Mutt are my primary applications. If I could only use w3m all of the time, I'd be even happier.