The Five

25 Oct

These are the Five, and the Five are these. The least liked is first, but all are on the list. This is the entire known list, though there are two or three other candidates not yet confirmed.

Chocolate Mint

Your Thin Mints are safe. I will devour your chocolate and your mints separately, though.

Lemon Meringue Pie

Also all the cousins like Key Lime Pie.

Sauerkraut

And other Rotted Cabbage foods like Kimchi. Although, I do like the sweet sauerkrauts.

Beets

And maybe just pickled beets, because the roasted beet dish my son made was pretty good.

Hot dogs

Unless completely smothered in chili, cheese, onions, and relish.

This might seem strange given the very wide range of things that I not only have eaten, but like very much. I do not know why these trigger some resistance in me; they just do.

I will say that the above list will be put aside in a couple of cases. One is when I am a guest somewhere and that is the table spread. The second is when there really are no other options (which is kind of the broader class of the first case, I suppose).

I am, luckily, not allergic to anything that I know of and am generally willing to try most anything. I just try to avoid The Five when possible.

There is Only Code

1 Oct

There is just Code. It is either Shiny or it is not.

‘Legacy Code’ is another term, along with Technical Debt, that I would rather we in the software development community would retire. In a recent conversation the following possible definitions of Legacy Code were tossed out:

Legacy code is valuable code that we are afraid to change

Code I wrote yesterday is “legacy”

The code I wrote a minute ago and checked in is legacy

The comment I threw into the mix was:

There is just Code. It is either Shiny or it is not. If not, either throw it away or polish it.

Some of the conversation went around classifying it based on whether it needed to change:

I liken that to the junk drawer. You keep throwing stuff in it. It will hold it all. It only matters when you need something from it.

Whether the code was written last year or earlier this morning, if it is providing the value it needs to provide there is little need to bother with it. If there is a need to mess with it, either to add new functionality or to repair something not-quite-right, it does not matter whether it was written a decade ago or a minute ago. In either case, when you look at that code with a new view, you will see possible places to add some shine or throw out some cruft.

A question was raised as to whether these classifications only matter “when you need something from it.”

Some analogies to ‘junk drawers’ and ‘silver dishes’ were brought into the conversation. The junk drawer as a place where odd bits are tossed and which you only care about its ability to hold the odd bits until you need something from it. The silver dishes as a lovely collection of items that are fine on the shelf until they must be put into service. For both, there is probably a good argument that there is some value in cleaning them up occasionally even when you have no specific use for them. 

So, perhaps there is more than “need something from them” needed for the definition.

Or, perhaps, it is just all code. Code that you polish when you are actively updating it and that you frequently sweep through to remove cruft and cobwebs. 

Anger, Ours and Theirs

25 Jul
…the solution requires us to acknowledge a split in our ability to respond to justice: the more perfectly one attends to the gravity of the wrongs done, the less sensitive one becomes to the gravity of the wrongs one is poised to commit in response.
Sometimes other people help us exactly by not feeling what we feel, exactly by remaining resolutely who they are.

https://thepointmag.com/examined-life/anger-management-agnes-callard/

Peevish Nits

8 Jul

Attributing Intent to Animal Evolution

It annoys me considerably when some says something like:

And the REASON wombat poop is cube-shaped is so that they can stack it on a variety of tall, uneven surfaces, such as logs or rocks, without it rolling away.

 From a very funny Oatmeal about wombats.

Or:

flowers also emit heat to advertise themselves to insects

From an article by the Yale School of Environment

 (Quoting an article from University of Bristol which did not have this fault.)

Animals do not create traits or decide to have traits “so that they can do XXX”. Having traits allows them to do XXX better than their kin which does not have those traits and so allows them to live longer, produce more offspring, and spread those traits further.

Having the traits is mostly an accident of evolution for animals, not a self- (or species-) directed choice.

I get that it is a manner of speaking about these things more than anything, especially in non-technical writings. And I generally bite my tongue, wince, and move on. But it does bug me.

Failure to Communicate

5 Mar

I get stunned and tongue-tied when attacked after posting or saying something about preferring capitalism over other systems. All the attacks seem to not be arguments against whatever topic I mentioned, but general rants against the idea that capitalism could be the least bad option for anything.

The worst of it is that I get sucked into the same behavior as soon as those attacks start. I respond in defensive mode with nearly a identical form but form the other viewpoint. I hate that I do that.

For example. I posted an article about how a free market for vaccines could work and would have benefits over the tightly controlled process currently in use written by a widely-known, well-respected economist.

The immediate responses were along like these:

I couldn’t get past the first two lines. Disgusting article.

I don’t need to read past a premise that the FDA is responsible for 284,000 deaths because they didn’t release a vaccine.

Yawn. Could have saved a lot of reading by marking the top of this article as free market fanfiction.

Yeah, we don’t need the FDA and experts when Deus ex Market can do all the work for us.

Nothing in their comments suggesting that the article was actually read and considered. No cogent counter arguments to any of the points. No questions about any aspects of consequences of it. Just rants against free markets and capitalism.

I, of course, responded pretty much in kind. I threw my own rants back at them instead of asking the Ranters to clarify what specifically they saw as not workable and what they knew, or had read, that would provide a counter from their political viewpoint that would have been better than the existing process. Then I left the conversation. I am certain that many of them viewed that as success and vindication that they absolutely must have the better argument. I was just frustrated with myself and tired of the non-productive rant-tossing.

Jemma

23 Feb

The house is very quiet now.

There are not as many loud complaints about people on the street, birds in the trees, or the wind blowing the leaves.

There are not as many shouts about people walking around the house.

There are no complaints about it being 9:00pm and we are not in bed yet. Or complaints that we are in bed, but the TV is too loud.

There is one less tail constantly wagging.

It was for the best, but we miss her terribly.

You were a Very Good Dog, Jemma.

Well OK Then

18 Feb

This is what happens when your hosting provider goes bust without notice and you have not made a backup in over a year. I don’t post much, but have made a few in the last several weeks which have now gone into the bitbucket.  I’ll try to reconstitute some of them eventually.

Oh, well.

(ps: I was able to get access to the old server for long enough to grab a current backup. Maybe I’ll be able to use the data within to put the posts here. We’ll see.)

(pps: I grabbed the data from the old site,  manually edited the sql for the posts, and used it to restore the posts older than this one. Most are missing images which I might or might not re-edit in. How the ones that do have images do is a mystery. None of the restored posts have a Category; maybe I’ll fix that at some point. Let me know if you notice any weirdness in the older posts and maybe I’ll fix them. )

Strong Opinion on git Workflow

7 Feb

Strong Opinion

Whether working in trunk-based style or feature-branch style, the main (or trunk, also known as master) branch, along with any release branches if doing that thing, SHOULD NOT have merge-commits.

Reasons

I do not like to see merge commits in the main/trunk branch. I prefer a straight, unblemished history line.

* d589966 -(17 hours ago) (HEAD->main, origin/main,origin/HEAD)
* 5f3c420 -(17 hours ago) Merge branch ‘main’
|\
| * 4650c10 -(17 hours ago)
| * ae51497 -(17 hours ago)
| * b45fa11 -(18 hours ago)
* | d532336 -(17 hours ago)
|/
* 3d7bb50 -(18 hours ago)
* 6851949 -(18 hours ago)
* 28a191b -(19 hours ago)
* 01f6be2 -(19 hours ago)

Merge commits make reviewing the history more difficult for humans and source control tools to understand, explore, and resolve issues. Other than the visual part, they introduce complexities to reverting any issues that come up which cross the merge-commit line.

gitconfig

I have these settings in my global .gitconfig to fail any merges that are not fast-forward. This forces me to resolve those with a proper rebase before merging into main.

[merge]
    ff = only
[pull]
    ff = only

Workflow

The workflow I use to resolve such problems is:

  • Create a branch at the current state git branch wip
  • Reset the main branch upstream head either by resetting it then pulling or fetching then resetting it.
  • Change to the wip branch git checkout wip
  • Rebase wip onto main get rebase main (resolve any merge conflicts the usual way)
  • Change to the main branch git checkout main
  • Merge the wip branch into main (since it will fast forward now) git merge wip
  • Delete the wip branch git branch -d wip

scripts.sh

As with anything that I do more than a couple of times, I have automated this workflow. The scripts below are in the set that I source into my current terminal. When I git pull and it fails because it cannot fast forward (see the .gitconfig settings above), I can just repo_wip_rebase.

The script stops at the rebase step if there are merge conflicts to resolve. I use the normal git mergetool and get rebase --continue to handle those and then repo_wip_merge to finish up.

Note that when there are no merge conflicts, repo_wip_rebase does all the work.

function repo_wip_merge()
{
    git checkout main || return $?
    git merge –ff-only wip || return $?
    git branch -d wip || return $?
}

function repo_wip_rebase()
{
    git branch wip || return $?
    git reset –hard origin/main || return $?
    git checkout wip || return $?
    git rebase main || return $?
    # if there are merge conflicts, it stops here. Resolve them and then do this separately
    repo_wip_merge
}

It is possible to do this as get aliases instead so that the commands might be: git wip_rebase.

I tend not to create git aliases for two reasons. The most important is to keep custom stuff clearly custom. I do not want to get in the habit of using git xx short cuts and erode my memory of the raw git commands. Having scripts with the prefix repo_ makes it clear to my brain that this is a custom thing. The second reason is that having these in a script separate from my home folder that is under source control is easier for me to manage.

Coda

I know there are other options for both of these. This is what works for me.

I hold no strong opinions on how you should automate your work. I only hold that you should automate as much as you can in whatever way works for you.

Baking Cast Iron

7 Feb

Spent yesterday afternoon and will spend this afternoon baking most of my cast iron. I borked the square skillet last week cooking on the grill when it got too hot (>700ºF) for too long and most of the seasoning went up in smoke.

Since I was repairing that one, I decided to do them all. There was one cleaning bake (550ºF for 2 hours) for the square skillet and the tiny skillet that does not get used much.

This is the 2nd seasoning bake (350º for 1 hour) for all except the large round. That one is in great shape already and this is the first and only it will need. The others will get at least one more bake.

The giant Dutch Oven (not pictured) will wait for another day. It rarely get used and takes up most of the oven on its own (it is better suited for cooking in a fire pit).

Some Statements

14 Jan

Cheer up! Things could always be worse.

Context is everything.

Everything is much more complicated that you imagine, no matter how deep your knowledge of the topic.