C. Sean Burns

Associate Professor

University of Kentucky
College of Communication and Information
School of Information Science

PhD, University of Missouri, 2013
MA, University of Missouri, 2009
BA, Monmouth College, 1996

Twitter: https://twitter.com/cseanburns
GitHub: https://github.com/cseanburns
ORCID: https://orcid.org/0000-0001-8695-3643

The Text, Please. Just the Text.

This is a single page of small essays and notes on a range of topics. The first entry on this page goes back to April 23, 2019. If curious, there's a table of contents with links at the bottom of the home page.

There are no images or other graphics on this page. It's only text.

Longer, more academic focused essays may be found on my wiki. There might even be an image or two there.

If you use a RSS reader and would like to keep updated, please use my feed.

Occasionally I edit or add more to specific posts on this page. Those edits or revisions won't be reflected in the RSS feed.

Back to Top


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 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 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 http://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.

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.

Post Two

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, The Standard Text Editor

I started typing this in the ed text editor. My go-to editor is Vim, but ed 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 as I write, using ed places more focus on the writing process.

I particularly enjoy writing in ed 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 forces me to write because switching and working in different modes in ed (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, 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, and a side benefit of editing with ed 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.