My 2023 New Year's Resolution, finally started in June that year, inspired by this: learn a thing a day every so often sometimesI am a CDN Operations engineer, a violinist, and a father, and I take long hour-and-a-half-long walks in the morning between dropping my kids off at school and starting work, because that's the only time I can exercise (my commute being a three-second walk from one part of my house to another). The things I learn will probably not be relevant to anybody but me.
Don't wanna be here? Send us removal request.
Text
Last Week I Learned: Sociophilosophical Considerations re Using genAI for Translations
I volunteer with the Parent-Teacher Association at my kids' private school as class representative and steering committee member, and I'm currently between jobs so hey, maybe let's volunteer for some odds-and-ends projects. One such project that happened my way was to translate two Japanese Red Cross booklets on first aid procedures in CPR and AED use.
I am not a professional translator by trade, although I do have a recently-retired professional translator/interpreter in my extended family. On the other hand, I have dabbled in the mystical arts of translation and interpretation, including having to read through and understand Japanese court documents (and the laws and prior art backing the claims and counterclaims presented by both sides) to be able to present them - accurately, naturally, if not legally cromulent - to the Indian parent company of my then-employer.
Proofreading somebody else's translation - ネイティブチェック "native check", it's called in Japanese - is as important a task as the initial translation that produces the material to be proofread; it's of such importance, especially in the Japanese please-translate-my-stuff-to-English community, that ネイティブチェック may pay just as well as the actual translation itself (or not, which results in signage saying "Genaral Citizen's Hell" outside a Tokyo ward public hall). I myself have helped make the world a better place make Japan a more English-friendly place for extra pocket money. This Red Cross booklet project was the first time I actually had generative AI tools at my disposal to produce the translation that I then ネイティブチェック myself, and... I still have mixed feelings on the matter.
The popular refrain of the day is that AI will one day take away our jobs, except not really, except certainly so for certain values of two industries, etc etc etc. So far that hasn't been the case for me personally, although my work sometimes involves being what I jokingly call a human cronjob, but I do remain cognizant that one day AI will come for me as well. What class of jobs are more easily replaceable with AI, and what careers are safe? That is a question I see smart people wrestle with every day. American entrepreneur and inventor Danny Hillis notes:
In the beginning of AI, we thought the things that were hard for us to do were the intelligence - like we thought playing chess... or solving calculus tests... or translating languages... the things that were hard for us, we thought that's intelligence. And that was the stuff that early AI concentrated on. And actually, it turns out that was really the easy part. The hard part was the stuff that we were so good at, we didn't even notice: like recognizing a face, jumping to a conclusion, having an intuition about something. Those things were way, way harder. So, we thought producing speech would be hard. We didn't think listening would be hard, right? Because we just did that without apparent effort. But listening to speech turned out to be way harder than producing speech... and [AI is] actually really good at kind of imitating human intelligence. And imitating is kind of a good first step. — Tim Ferriss Show #782: Legendary Inventor Danny Hillis (Plus Kevin Kelly)
So. Translating: okay for me to contribute to the possible demise of the industry by using genAI? A quick-and-easy rubric might be whether I would have paid an actual human professional translator in lieu of using ChatGPT, in which case no, I myself would have slaved away for days and weeks doing the translation myself as an unpaid volunteer.
But last year I ran a booth selling old books at a bazaar at my kids' school. My poster for the booth featured a baby husky reading a book, generated by not-ChatGPT:
Should I have engaged an artist on Fiverr to draw me this, instead of using a free AI tool? If generative AI tools with free tiers were not a thing, would I have paid money for this (because I cannot draw, for the life of me), or would I have just decided, "Welp, no book-reading baby husky on my poster then," and moved on with my life?
However, the previous rubric fails here, because my bookstore booth was ostensibly a for-profit venture (even though I ended up not making any profit). Was I, therefore, morally obligated to pay a real human illustrator for the privilege of using their talent to supplement my lack of artistic ability? Or is it okay because it was for a single booth in a whole gym floor of sellers in a one-day school bazaar open only to the school community and local public - and not, say, a multi-million-dollar marketing project at a global company? Where, then, is the line?
0 notes
Text
Code Blocks on Tumblr from Journey
Publishing to Tumblr from Journey (https://journey.cloud/). I want to be able to do code blocks.
A code block (hmm Journey calls them "pre") initiated with backtick backtick backtick. How does this appear on Tumblr?
Linebreaks?
{
"type": "json",
"the square brackety thing": [
{
"first": 1
},
{
"second": 2
},
{
"third": 3
}
]
}
Let's find out how Tumblr handles pre!
---
So: looks like the lines inside the pre became blocks with font "Chat", and each line (even in the JSON) became separate blocks.
---
... The JSON whitespace gets squished (╯°□°)╯︵ ┻━┻
0 notes
Text
Pulitzer Prize Winners database
I volunteer at my kids' school library. I recently needed a list of all the Pulitzer Prize winners, in order to identify which books we had in our catalogue but weren't on our Pulitzer winners bookshelf. I had resigned myself to manually copy-pasting almost six hundred entries in eight categories from the Pulitzer website - a task that would likely take the better part of a month - before then going through the process of checking our library catalogue for matches, but one midnight I had an ephiphany that there might have been another person with the same needs that had already created a database.
I found one better: https://github.com/jonseitz/pulitzer-scraper had identified nine years ago that the Pulitzer website itself uses API calls to inform its category pages!
I wrote up my explorations of making the Pulitzer API output usable in a GitHub repo, which also serves a GitHub Pages site made out of Jekyll:
0 notes
Text
Today My 6-year-old and I Learned:
Years ago my dad once told me that the human face is shaped in such a way that you can spray water over your head while facing down and the water will curtain around your eyes and mouth, allowing you to see and breathe (the alternative being looking up while e.g. you're washing shampoo out of your hair).
I was told this fairly (embarassingly) late in my young life, and always assumed that this was a feature of sufficiently-grown heads - the correlation being that children are generally more afraid of water and will use the face-up method when washing their hair.
So my six-year-old and I tried it today. Turns out...
He can see and breathe in falling water face-down just fine. The problem was just me lol
0 notes
Text
Today I learned: when the roads are one huge skating rink and it's next to impossible to control your car when turning or stopping or evading or ducking or diving, the shoulders on the sides and the thin strip in between where everybody else drives helps provide a little bit of purchase for your winter tires so you don't go skidding past the line at a red light, as this exact carbon-copy of my own Forester driving in front of me perfectly demonstrated. (I do not know them; we are not a caravan of Subaru fans that decided to get the same car for twinsies)

1 note
·
View note
Text
Throwback to the time I learned a new word
"desultory": lacking a plan, purpose, or enthusiasm.
Bobbie desultorily poked her spork at the quivering mound of green on her plate.
instagram
0 notes
Text
Throwback to the time I learned that bash has arrays (also, Bash one-liner monstrosities)
(Because this came up recently in a job interview, and at the time I couldn't for the life of me remember where I had recently used a bash array. During the interview I went hunting through my scripts directories on multiple servers, but turned out it was not a bash script, it was a FrankenBash a Bash one-liner.)
Five or six years ago, my colleague was attempting to write a bash script to... do something, and lamented that bash doesn't have arrays - a single variable that contains a list of multiple items. Back then I only had a vague understanding of arrays, and just smiled and nodded.
Then in November 2021 I purchased Dr Angela Yu's 100 Days of Python, and the following month I finally got to Day 4 and Python lists. Cue lights and confetti and a "tada!" soundtrack - I now know what an array is!
Fast forward to half a year ago, and I had to check DNS records for hostnames associated with multiple live streaming slots to troubleshoot for a support ticket. Up until then, I had used both 'for' loops and 'while read line' loops many, many times to e.g. check DNS records for multiple hostnames, but they had all been for single-element lines, e.g.:
$ cat list.txt hostname0.llnw.net hostname1.llnw.net hostname2.llnw.net $ cat list.txt | while read line; do echo -n "$line "; dig +short CNAME $line; done hostname0.llnw.net cname0.llnw.net hostname1.llnw.net cname1.llnw.net hostname2.llnw.net cname2.llnw.net $
(echoing $line is for presentation - this would go into an internal support ticket worknote (the kind where if it's not worknoted, it did not happen), and I make it a point to make my worknotes easy to follow and understand for posterity.)
However, my input in this case was a set of live streaming slot names and their purported ingest servers (as reported by the live stream backend service that actually assigns ingests to slots); the problem statement was that the customer was deleting and creating live stream slots with the same name too quickly, triggering a race condition whereby the live stream ingest assigner would attempt to create the ingest server DNS record for the new slot (with the same hostname, because same slot name) before the old DNS record got deleted, resulting in ingest server DNS records CNAMEd to the wrong ingest server.
The input:
$ cat allslots.list stream0 ingest1.pop1.llnw.net stream1 ingest2.pop1.llnw.net stream2 ingest3.pop2.llnw.net $
(This is a simplification; the actual input was the JSON output from an API call, passed through jq to get only the stream name and purported ingest server into a single line.)
(Also an oversimplification in that the actual input was 1,336 live stream slots.)
An ingest hostname for a stream would have the stream name in it, and would be a CNAME record for the actual ingest server provisioned to that slot:
$ host stream0.primaryingest.llnw.net stream0.primaryingest.llnw.com is an alias for ingest1.pop1.llnw.net. ingest1.pop1.llnw.net has address 1.8.555.256 $
The idea being that the customer would put the ingest hostname (in the above example, 'stream0.primaryingest.llnw.com') in their encoder settings, and not have to change their encoder settings whenever we move their slot from ingest to ingest.
My first step was to set up this while read line loop ('cut -d. -f 1-2' again for readability and presentation, because the last two levels of the hostnames are always the same):
$ echo "stream purported actual"; cat allslots.list | while read line; do array=($line); actual=$(dig +short CNAME ${array[0]}.primaryingest.llnw.net | cut -d. -f 1-2); purported=$(echo ${array[1]} | cut -d. -f 1-2); echo "${array[0]} $purported $actual"; done stream purported actual stream0 ingest1.pop1 ingest1.pop1 stream1 ingest2.pop2 ingest2.pop1 stream2 ingest1.pop1 ingest3.pop2 $
This, except 1,336 lines of this. Painstakingly comparing each $actual and $purported with my eyeballs 1,336 times would take forever, even with some help from Ctrl+F match-highlighting.
So I decided to use another bash feature - conditional expressions. Only print the line if $purported and $actual do not agree:
$ echo "stream purported actual"; cat allslots.list | while read line; do array=($line); actual=$(dig +short CNAME ${array[0].primaryingest.llnw.net | cut -d. -f 1-2); purported=$(echo ${array[1]} | cut -d. -f 1-2); if [[ $purported != $actual ]]; then echo "${array[0]} $purported $actual"; fi; done stream purported actual stream1 ingest2.pop2 ingest2.pop1 stream2 ingest1.pop1 ingest3.pop2 $
This cut down the 1,336-line output to a meager 337 lines (so, 337 live stream slots with the wrong ingest hostname DNS CNAME record). Run through the internal MOP to remediate incorrect DNS records, and then run the one-liner abomination again (because the root cause is a race condition that hasn't been fixed), rinse and repeat, rinse and repeat.
Bonus: as a learner of Python, I was feeling bad about turning by default to bash scripts (and, well, bash one-liners) instead of whipping up a quick-and-dirty Python script to do my bidding. However, this article I referenced to learn about Bash arrays while building the above Franken-oneliner assuaged my guilt:
Bash or Python? Which begs the question: When should you use Bash arrays instead of other scripting languages such as Python? To me, it all bois down to dependencies - if you can solve the problem at hand using only calls to command-line tools, you might as well use Bash. But for times when your script is part of a larger Python project, you might as well use Python. For example, we could have turned to Python to implement the parameter sweep, but we would have ended up just writing a wrapper around Bash:
#bash#shell#scripting#FrankenBash#for loop#while loop#linux#unix#troubleshooting#DNS#arrays#bash arrays
1 note
·
View note
Text
Today I Learned: one thing left-handed people have got it good
I am left-handed. Obviously from centuries of cultural and social history, left-handed people have it worse than right-handed people - only one in every thousand scissors are born shaped for left-handed hands, many a handwritten essay feature smudges in the distinct curled shape of the edge of the hand, and even the soup ladle at most Japanese famiresu have the little lip on the wrong side if you're holding an empty soup cup in your left hand.
But I've finally found one cultural etiquette rule where the left-handed have a leg up: fork and knife. See, left-handed people hold their fork in their left hand, and when using both fork and knife, the fork is in... the left hand. No need to put the knife down to shift the fork-hold - simply bring your forked food to your mouth and you're done. I knew right-handed people hold their fork with their right hand, but never got around to wondering whether the fork-and-knife hold is similarly reversed. (I lie, I have wondered but never cared enough to investigate.) But the question came up while having breakfast with my kids today, and I finally did a Google search.
Turns out you guys have to hold your fork in your left hand, and your knife in your right hand! And after cutting out your mouthful, you have to either 1) let go of your knife and hand-transfer your knife to your right hand, or 2) awkwardly maneuver your fork up to your face and into your mouth with your definitely non-dominant hand... depending on the type of meal?
Take that, more-populous and therefore socially-convenient folk!
(I swear I'm not dominant-handist. I've got three family members that are right-handed (and we are a four-person family).)
4 notes
·
View notes
Text
Using Notion as Second Brain for Job Hunting
Not really something I learned today, but something I've been trying over the last few days. My employer filed for Chapter 11 bankruptcy two months ago, and last weekend we learned that the winning bid in the bankruptcy sale auction - by a long shot - was our competitor wanting to scoop up our customer contracts, but not the actual service infrastructure or the engineers needed to operate it. That means the entire company itself is about to be no more, and my colleagues and I are about to all lose our jobs.
I hadn't job-hunted for almost a decade at this point, and Notion certainly did not exist back then. The concept of a second brain was completely foreign to me, but after starting to use Notion for my daily log at work, it was a natural progression to putting my entire personal work knowledgebase on Notion (and then sharing that knowledgebase with my colleagues), and then also using Notion as my personal second brain to record my "worknotes", a concept I got from the internal notes we write into the support tickets we handle at work.
So I guess it's only natural that I started using Notion to record my job hunt.
I had recently figured out how to use database relations and had been going crazy linking two database together - the violins in the family versus their maintenance records, my wife's artwork versus the exhibits at which they were exhibited, my daily work diary versus worknotes for a manual global configuration push that I do a couple times a month. For tracking my job applications I ended up with three interconnected databases (one more than my usual fare!): one tracking applications, one tracking recruiters/websites from whence they originated, and one tracking the recruiter conversations and interviews for each application. I did briefly wonder if maintaining separate pages for each call/interview (because Notion database entries are each individual pages) is necessary, but piling all my conversation notes into one single application page will probably make that page really, really scrolly.
No, I will not be creating a template for sharing :)
2 notes
·
View notes
Text
Samsung Galaxy Note 10 Plus and 5GHz Wi-Fi
Today I learned: the Samsung Galaxy Note 10 Plus does very poorly with 5GHz Wi-FI.
I switched Internet Service Providers today, and moved everybody from the old modem-and-router-combo Wi-Fi network to the new router. Every single device - laptops, phones, Chromecast, Sesame smart lock Wi-Fi module - works just fine with the new Wi-Fi network, except for one single Galaxy Note 10 Plus: it complains that the Wi-Fi is not connected to the Internet.
Restarting the router helped... for a while, until it suddenly started complaining of no Internet connectivity beyond the local network.
When Band Steering is on on the router, Wi-Fi clients can connect to either 2.4GHz or 5GHz (using the same SSID); turns out there's probably an endemic problem with this particular device (that I don't understand - if a client can't connect to 5GHz, like Chromecasts, it just... doesn't, rather than complain of networking issues).
Turning off Band Steering (which makes the router announce two separate SSIDs, one for 2.4GHz and one for 5GHz) - helped the Note 10 Plus stay connected.
(╯°□°)╯︵ ┻━┻
(The thing is, the modem-and-router-combo that I'm about to send back to the provider is also forcefully limited to 2.4GHz. I have a feeling I forgot, and am re-learning this.)
1 note
·
View note
Text
ENCOURAGING GIRLS
With boys, there is an active encouragement - despite the possibility that they could get hurt - and guiding the son to do it, often on his own. When a daughter decides to do something that might have some risks involved, after cautioning her, the parents are much more likely to assist her in doing it. What is this telling girls? They're fragile and they need our help. That is acculturated so early. So of course, by the time we're women and in the workplace or relationships, that's going to be a predominant paradigm for us: fear.
[...] I would say it's time to adopt a paradigm or bravery instead of a paradigm of fear. So, when you have a boy and a girl, or a man and a woman, facing the exact same situation, there will be two emotional reactions to it that are sort of opposite. The man will be trying to access his bravery, and the woman will be accessing her fear.
Caroline Paul, from Tim Ferriss's Tools of Titans (page 461-462)
0 notes
Text
PARENTING ADVICE
What could possibly be more important than your kid? Please don't play the busy card. If you spend 2 hours a day without an electronic device, looking your kid in the eye, talking to them and solving interesting problems, you will raise a different kid than someone who doesn't do that. That's one of the reasons why I cook dinner every night. Because what a wonderful, semi-distracted environment in which the kid can tell you the truth. For you to have low-stakes buy superimprtant conversations with someone who's important to you.
Seth Godin, from Tim Ferriss's Tools of Titans (page 242)
0 notes
Text
cvs diff
Today I learned: how to show the diff of a historical revision. Actually pretty simple now that I see it.
cvs diff -r [revisionnumber] -r [revisionnumber] [file]
cvs diff -U0 -r [revisionnumber] -r [revisionnumber] [file]
2 notes
·
View notes
Text
Been a pretty long while. Today (well, last week) I learned: of the existence of the app Snipd, a podcast app with a built-in snippets feature that saves excerpts for you. I always did this very manually, by transcribing by ear (or copy-pasting from Tim Ferriss's transcripts) into a SimpleNote note. The app also AI-generates summaries of your snippets, which is pretty cool. I might end up paying for the 900-yen paid tier, if the snippets feature causes me to want to use it on more than two podcast episodes a week.
(My headcannon is the app name is pronounced "snip dee", like Unix daemons.)

0 notes
Text
Re Raising Children, Neil deGrasse Tyson
From an interview with TomBilyeu on his show Impact Theory (I'd never seen this before, I have some catching up to do) published three years ago on 19 November, 2019:
I wanted to make sure that - however they were raised - that they retained the curiosity of childhood into adulthood. That implies that you have to do a lot of work to *make it happen*, when in fact you'd be surprised how much work you put in to squash it. Let's say there's a little toddler walking here, crawling on the ground, it comes up and they start grabbing this [cup]. What's the first thing [you do]: "No don't touch that!" This was an experiment, waiting to happen, that you just squashed. This is a cup, it has water in it; this is breakable. The kid doesn't know that! They want to experiment. So they'll grab it, it will fall, it will break, water will spill all over - that was an experiment you just prevented. Host: "So you will let your kids wander over -" Yes! Yes! And the kids make a complete mess of the house! You don't have kids with the intent of retaining a clean house - these are noncommensurate goals. Kids are sources of chaos and disorder. Get over that fact. Where does that disorder come from? It's because they are experimenting with their environment. Everything is new to them - everything. […] I was in Central Park […] and it had rained a little earlier so there were puddles in some of the walkways. I saw a woman walking with her kid - the kid had galoshes on and a raincoat on, and they're coming down the walkway, and there's this big juicy muddy puddle right there. And I said [in my mind], "Please let the kid jump in the puddle, you know the kid wants to jump in the puddle. The kid is like three, or four. You know the kid -" and what does hte mother do? She pulls the kid around to prevent that from happening. That's an experiment in cratering! That's what - craters happen that way! You splash the water, there's mud, it's fun, you get to see the cause and effect of a downard force operating on a fluid. Gone. That was a bit of curiosity in that moment that was extinguished. So with our kids, curiosity - provided it does not kill them - if it meant we had extra work in front of us, I would dothat extra work. So your task is less to instill curiosity in your kids, than it is to make sure you don't squash what's already there. And I have pretty high confidence that they will retain that curiosity through the turbulent middle school years into high school. And what is an adult scientist but a kid who has never lost the curiosity?
youtube
0 notes
Text
Today I learned: Microsoft's URL shortener domain "aka.ms" is for "as known as," and has nothing to do with Akamai. Even though Akamai actually delivers it.
terry@DESKTOP-IPBPC7A:~$ host aka.ms aka.ms has address 23.62.178.151 terry@DESKTOP-IPBPC7A:~$ curl ipinfo.io/23.62.178.151 { "ip": "23.62.178.151", "hostname": "a23-62-178-151.deploy.static.akamaitechnologies.com", "city": "El Segundo", "region": "California", "country": "US", "loc": "33.9192,-118.4165", "org": "AS16625 Akamai Technologies, Inc.", "postal": "90245", "timezone": "America/Los_Angeles", "readme": "https://ipinfo.io/missingauth" }terry@DESKTOP-IPBPC7A:~$
0 notes
Text
Today I learned: not one movie theater in the entirety of Hokkaido is running The Little Mermaid with its original English audio. Do I need to take my kids to another prefecture just to watch undubbed mermaids?
1 note
·
View note