We’re on spring break this week… like I said in the last post, we were supposed to be at the beach, but having to cancel a vacation falls into the #firstworldproblems bucket.
The two-week “online learning” got extended to next week… then just before break, they finally realized the wisest course was to finish out the school year online. It’s a pain in the rear, but better that than getting a bunch of people sick without need (or the resources to take care of them).
I need to say, the school system obviously meant the whole online learning program to be something used once or twice over the winter, maybe for a few days. Now they’re having to adapt it for a months-long outage. My biggest beef with it is that they couldn’t settle on a single app or website to manage everything—there are three or four apps/sites, and they occasionally roll out another one. Although my Mac has a built-in password manager, I’ve gotten account fatigue over the years. So every time I get a memo about Yet Another Account to set up, they can hear my eyes rolling all the way out here.
“Out here” presents its own online learning issues. This is farm country, and I still think it’s amazing we have DSL. It usually works OK, unless heavy storms take out a line card (which happens pretty often)… or everybody who can work at home is doing just that and their kids are also online trying to do their schoolwork. It gets where the connection can’t even support a low-bandwidth music stream. I can do the normal work things—email, edit a DITA file from the cloud, chat—because that traffic is mostly short bursts and can slide in between the school traffic. Conferences are more iffy, but I usually use my cellphone for audio and the video is showing mostly static images of spreadsheets or documents.
But I digress. Our school is swimming against the Zoom current (an app I only heard about after the isolation began) and using Google Meet (aka Hangout). We can often manage one hangout at a time, or at least phone in if bandwidth is an issue. Charlie’s therapists (and pre-school) is also using Meet. Most of the time, this seems to work out. The bandwidth is hitting Daughter Dearest even harder, because she’s a teacher and has to be online. It got so bad that she simply bypassed the wheezing DSL and used her phone to get out. Needless to say, that burned through our data cap, our reserve, and then some. Now we don’t have a cushion for this month. I suggested she go to Dunkin', get a coffee and maybe a doughnut from the drive-thru, then sit in her car and scarf the Wi-Fi from there.
Often enough, our connection is marginally good enough, so DD and her kids have been at the manor most school days. That means I’ve had AJ (or Charlie) in my lap more than once during a conference call. I can totally derail a meeting by turning on my camera with either one; they’re both cute.
While we’re on break, I’m trying to set up a place in the larger upstairs bedroom (The Boy’s old room) as an office space. We made some headway yesterday. But I can’t help but think that once I get upstairs, all the kids will wander (or be sent) upstairs so I can still deal with something. I guess that’s okay, as long as I hold my end up at work. So far so good!
How about you? Have you torn a bumper sticker off your van yet? Comments are open!
Thursday, April 09, 2020 2 comments
Wednesday, April 08, 2020 No comments
Staycation, pandemic-style
We were supposed to be in Florida this week, hanging out with Mom and hitting the beach. Instead, we’re at FAR Manor.
Over the weekend, I finally got the new front derailleur on the Fuji dialed in. Hooray, time to take a ride! Um, no. The rear inner tube had partly separated from its stem. Well, Solar had suggested I put wider tires on it to improve the ride, anyway. There’s not a lot of clearance at the front fork, but thought maybe I could go from the current 25mm width to 32mm. I have a pair of 47mm tires, but they’re definitely too wide and the wrong diameter anyway. So I made plans to run over to the bike shop on Monday, and maybe get Charlie a bike with training wheels. Meanwhile, Skylar’s bike (the one he has here) needed shifting and braking adjustments. I got him rolling as well.
In the vein of “don’t go out unless you have to,” I called the bike shop before going. Nope, the shop guy opined, there’s not enough room. And they didn’t have any Charlie-sized bikes in stock. I thought we had a small frame laying around, so instead of driving to another bike shop I thought I’d try to Frankenstein a bike from bits and pieces.
Instead, I found an entire bike with a 12” frame! It was one Mason had for a while, until he outgrew it. The tires, amazingly, still held air. Some WD-40 got the chain loosened up, and I regreased the bearings on one wheel. So it rolls, it pedals, and the coaster brake works. I ordered a set of training wheels, and almost added a Trailgator (basically a towbar to pull his bike behind mine). The price—$65 for a metal bar with clamps on either end—put me off, though. Anyway, I raised the seat an inch and it fit Charlie perfectly.
All that, actually, was in between the ceiling fans. Daughter Dearest had ceiling fans for each of the kids’ rooms (three in all), and asked me to put them in because Sizzle is still working while the rest of us are on spring break. I succeeded, only after multiple trips back to the manor to fetch hardware, tools, and at last I had enough and brought everything. That turned out to be the way to go, and the fans are all happily spinning away.
I mentioned Skylar… he’s been spending weekdays at the manor because his nominal guardians are both working. He brought his bike up (the one I adjusted) over the weekend, and an HP laptop. “Do you have a cord for this?” he asked, repeatedly, until I told him to knock it off and let me do it when I had a chance. Before the fans, I scrounged a power cord and had to shave a little off the female end to make it fit in the power supply. I pushed it in, using as much force as I dared, and a light came on when I plugged it in. He wanted to start it right away, of course, but I told him to give it a few hours to let the battery get charged.
Finally, after everything, we started it. Black screen, and the Caps Lock LED was flashing. I realized it was a pattern—three long, two short—and I looked it up. Memory error. “Well,” I told myself, “it hasn’t been run in a while. Maybe if I reseat the RAM, it will be OK.”
So I flipped it over, opened the little door on the bottom, and… no RAM at all! I found out later, from Skylar, that a house guest had scrounged the single memory stick to put in his own computer. Nice guy. So I couldn’t reseat the RAM, but I had a 4GB stick on my desk from when I upgraded the iMac. It looked to be the same style, so I used the “cat in a box” formula: if it fits, it sits. I buttoned it up, plugged it in, and hit power. It coughed to life and displayed a login screen for the Microsoft thing. Yuck. Of course, I didn’t have the PIN it requested, although I tried some of the common ones (1234, 9999, etc). I configured the BIOS to boot from a USB drive, stuck one on and rebooted, and I soon had a Kubuntu desktop. Things seemed to be working properly, and exploring the hard drive suggested there was little or nothing (besides the OS and apps) on it. Skylar thinks his grandfather (Big V’s widower) knows the PIN, so he should soon be off and running.
So that was my first day of staycation: mostly fixing other people’s stuff. But I’ll soon have a new inner tube for the Fuji, and I’ll at long last take it on its shakedown cruise.
Over the weekend, I finally got the new front derailleur on the Fuji dialed in. Hooray, time to take a ride! Um, no. The rear inner tube had partly separated from its stem. Well, Solar had suggested I put wider tires on it to improve the ride, anyway. There’s not a lot of clearance at the front fork, but thought maybe I could go from the current 25mm width to 32mm. I have a pair of 47mm tires, but they’re definitely too wide and the wrong diameter anyway. So I made plans to run over to the bike shop on Monday, and maybe get Charlie a bike with training wheels. Meanwhile, Skylar’s bike (the one he has here) needed shifting and braking adjustments. I got him rolling as well.
In the vein of “don’t go out unless you have to,” I called the bike shop before going. Nope, the shop guy opined, there’s not enough room. And they didn’t have any Charlie-sized bikes in stock. I thought we had a small frame laying around, so instead of driving to another bike shop I thought I’d try to Frankenstein a bike from bits and pieces.
Needs a little cleaning along with training wheels |
All that, actually, was in between the ceiling fans. Daughter Dearest had ceiling fans for each of the kids’ rooms (three in all), and asked me to put them in because Sizzle is still working while the rest of us are on spring break. I succeeded, only after multiple trips back to the manor to fetch hardware, tools, and at last I had enough and brought everything. That turned out to be the way to go, and the fans are all happily spinning away.
I mentioned Skylar… he’s been spending weekdays at the manor because his nominal guardians are both working. He brought his bike up (the one I adjusted) over the weekend, and an HP laptop. “Do you have a cord for this?” he asked, repeatedly, until I told him to knock it off and let me do it when I had a chance. Before the fans, I scrounged a power cord and had to shave a little off the female end to make it fit in the power supply. I pushed it in, using as much force as I dared, and a light came on when I plugged it in. He wanted to start it right away, of course, but I told him to give it a few hours to let the battery get charged.
Finally, after everything, we started it. Black screen, and the Caps Lock LED was flashing. I realized it was a pattern—three long, two short—and I looked it up. Memory error. “Well,” I told myself, “it hasn’t been run in a while. Maybe if I reseat the RAM, it will be OK.”
So I flipped it over, opened the little door on the bottom, and… no RAM at all! I found out later, from Skylar, that a house guest had scrounged the single memory stick to put in his own computer. Nice guy. So I couldn’t reseat the RAM, but I had a 4GB stick on my desk from when I upgraded the iMac. It looked to be the same style, so I used the “cat in a box” formula: if it fits, it sits. I buttoned it up, plugged it in, and hit power. It coughed to life and displayed a login screen for the Microsoft thing. Yuck. Of course, I didn’t have the PIN it requested, although I tried some of the common ones (1234, 9999, etc). I configured the BIOS to boot from a USB drive, stuck one on and rebooted, and I soon had a Kubuntu desktop. Things seemed to be working properly, and exploring the hard drive suggested there was little or nothing (besides the OS and apps) on it. Skylar thinks his grandfather (Big V’s widower) knows the PIN, so he should soon be off and running.
So that was my first day of staycation: mostly fixing other people’s stuff. But I’ll soon have a new inner tube for the Fuji, and I’ll at long last take it on its shakedown cruise.
Wednesday, March 25, 2020 No comments
Life and Work in the Time of Pandemic (part 2, food)
Coronavirus (image credit: CDC, public domain) |
But whether we pull a Hong Kong and lift restrictions early (spoiler alert: it would be a Bad Move), or keep movement tamped down to prevent further spreading, the occasional grocery trip is a necessity. Maybe less necessary is occasional pickup from restaurants, although they might argue the “less necessary” part.
Restaurants are adjusting as well as they can, offering incentives like extra points for rewards programs or free delivery. Meanwhile, the wife and I have roughed out meal planning. We’re mostly digging meat out of our freezers, although we're short on ground beef and the hoarders (aka #covidiots) grabbed it all last weekend. Bread and milk are easier to find, now… both have a finite shelf life and hoarders might have a hard time using what they have before it spoils. Ground beef should soon be available as well, because even covidiots have only a finite amount of freezer space. (But they must be using all that toilet paper as mattresses.)
Meanwhile, the school system is still running the bus routes… except instead of dropping off kids in the afternoon, they drop off lunches in the late mornings. We don’t need the extra food, but they beg us to take it because we’re at the end of the route. Today, we got burgers. The kids eat whatever sandwiches are provided, but sometimes skip the veggies + ranch dip packages (add 1/4 tsp of onion powder to the ranch containers, instant chip dip). We’re going to cook the veggies for supper, if I keep my mitts out of them. Still, it’s starting to get overwhelming—we’re covered up with fruit, milk, juice, etc. We’ll need to make sure the neighbors get some of this if it continues.
Since the kids don’t drink all the milk, I have rediscovered the joy of drinking half-pints of chocolate milk from the carton. I have not yet tried my old trick of jabbing the side with a pencil, making a hole of the exact diameter of a straw; I could pressurize the carton and pump the milk into my mouth. One of my better memories of elementary school.
Fortunately, Charlie is expanding his protein sources, although he still strongly prefers his latest adoptions to be breaded and fried. Chicken nuggets (especially Chick-Fil-A) and fish sticks are winners. We thawed and baked a slab of salmon I had kicking around in the freezer earlier this week; the adults ate that, and Mason and Charlie gobbled several helpings of sticks. We got these corn dog bites, and Charlie ate half of one before he realized it wasn’t chicken, then ate the breading and left the mystery meat. Sometimes, it’s hard to tell the difference between picky and intelligent.
We have a few days of not-rain this week (yay!) so I’ll likely pull some ribs out of the freezer and smoke/grill them.
Monday, March 16, 2020 2 comments
Life and Work in the Time of Pandemic (part 1)
Coronavirus (image credit: CDC, public domain) |
You’re probably seeing the same things in your locale, and I’m not here to provide dry statistics. I’m going to journal the mostly self-isolated life in a rural area, in case someone else finds it interesting now or later on.
Long-time readers might remember FAR Future, a long blog-novel I wrote starting all the way back in 2007. Although the chronic energy shortages that the whole story is built around have yet to materialize, some of the things I wrote about have had eerie parallels in real life. One episode (written in Sep 2008) discusses a serious flu pandemic, with a 3%-5% mortality rate, breaking out in… December 2019. We’re not laboring under a junta, but the administration in real-life 2020 is every bit as incompetent as was the junta in FAR Future. The difference is, the fictional flu was like the 1918 pandemic, hitting young and healthy adults the hardest. This one goes (mostly) after the elderly. We also have the Internet, a find way to find information (and plenty of misinformation) about what’s happening.
Saturday was “run errands” day, so I combined the trips to limit time out and contacts. Charlie had horse therapy, and we needed both some groceries and a UPS battery. Other than that, we were in all weekend. Wife and I keep talking about meal planning, so we can order pickup from the local Kroger, but haven’t quite done it just yet. Today, she’s out with Charlie for therapy. I’m not sure he’ll go to daycare today. If he does, I might run to the office to grab a laptop dock and some notes, then pick him up on the way back.
These first few days of (mostly) shelter-in-place are very strange. It’s like a winter storm, except that all the utilities are working and the roads are even more clear than usual. Our crappy DSL is crappier than usual, what with all the school kids with Internet doing their work online (not to mention people like me, trying to work). Structure is going to be important… along those lines, Daughter Dearest forwarded me a suggested schedule for families. Modify as needed, but a little structure will make everyone's day go better:
Meanwhile, I have a minor cold. I’ve never been so glad to sneeze.
Tuesday, March 10, 2020 No comments
Adventures of a #techcomm Geek: Match Game, 2020
It’s been a while since I did one of these, and this one goes in deep.
We’ve been using DITA at work for a year or two now, but rarely is there time to go back and take advantage of the things it offers, retrofitting those things into the documentation we brought in. (Docs we’ve created since then seem to get more thorough treatment.)
One of those things is reuse. It’s easy to reuse an entire topic in a different book—even if it was duplicated. “Hey,” says a writer, “that’s the same thing. Let’s throw away topic B and use topic A.”
DITA also supports reusing common paragraphs in two or two dozen topics, but that’s a little harder. First, you have to recognize that paragraph. Then, you have to create a new topic (a collection file), copy the paragraph into the collection file, and assign it an ID. Then you have to replace the duplicated text (in topics) with a content reference (a/k/a conref). It’s a worthwhile thing to do, because you might say the same thing slightly differently otherwise. Still, who wants to go through an entire book (or worse, set of books), looking for reuse candidates?
Of course, you can always let a computer do the tedious work… if you know how to tell it what to do.
Preparing the (searching) grounds
A while back, I wrote my first useful Python scripts. One takes a particular JSON file and reformats it as a DITA reference topic, containing a table with the relevant data from the JSON file. Another walks through a CSV file, grabbing the columns I need, and producing topics documenting a TR-069 data model. Both scripts take advantage of a vast library of pre-written code to parse their input files.
It occurred to me that, if I were to find (or create) a way to export all the text from a DITA book into a CSV file, I could use a Python script to compare each paragraph to all the others. Using fuzzy matching would help me find “close enough” matches. That was a while ago, because I bogged down on trying to get properly-formatted text out of DITA.
Last week, I got bored. Someone on the DITA-OT forum mentioned a demo plugin that translated DITA to Morse code, and the lightbulb in my head went on. If I could modify that plugin to just give text instead of -.-. .-. .- .—. then maybe I’d have what I needed.
It was an abject failure. What I need is one line per block element (paragraph, list item, etc). What I got was one line for the entire topic, sometimes with missing spaces. I put that aside, but realized that DITA-OT can also spit out Markdown. If I could convert Markdown to plain text, I’d be ready to rock!
So you want to convert DITA to Markdown? It’s easy, at least with the newer toolkits:
dita --format=markdown_github --input=my.bookmap --args.rellinks=none
The DITA-OT output continues to be topic-oriented, writing each topic to its own file. That wasn’t quite what I wanted, or so I thought at the time. Anyway, we have Markdown. How do we get plain text out of it, with each line representing a block element?
Turns out that pandoc, the “Swiss Army knife for converting markup files,” can do it:
pandoc -t plain —wrap=none -o topic.txt topic.md
In the heat of problem-solving, I realized I didn’t need a CSV file… or Python. I could pick up Awk and hammermy nails the text into shape. My script simply inhaled whatever text files I threw at it, and put all the content into an array indexed by [FILENAME,FNR] (FNR is basically the line number of paragraphs inside the file). There was a little stray markup left, not to mention some blank lines, and a couple of Awk rules threw unneeded lines into the mythical bit bucket.
Got a (fuzzy) match?
A typical match is an all or nothing Boolean: you get true (1) if the strings are an exact match, or false (0) if they don’t.
Fuzzy matching uses the universe of floating-point numbers in between 0 and 1 to describe how close a match is. It’s up to you to decide what’s close enough, but you usually want to focus on values of 0.9 and higher. And yes, an exact match still gives you a score of 1.
Why do we want to do this? Unless content developers are really good about cutting and pasting in a pre-reuse environment, inconsistencies creep in. You might see common operations described in slightly different ways:
Click OK to close the dialog.
Click OK to close the window.
So along with flagging potential reuse candidates, a fuzzy match can help you be consistent.
Python and Perl have libraries devoted to fuzzy matching. There are several ways to do a fuzzy match, but one of the more popular is called the Levenshtein distance. There's a scary-looking formula at the link, but it boils down to single-character edits (addition, deletion, or replacement). The distance between “dialog” and “window” is 4 (d→w, a→n, l→d, g→w).
But this is an integer, not a floating-point number between 0 and 1! But that’s easy to fix. If l1 and l2 are the lengths of the two strings, and d is the calculated Levenshtein distance, then the final score is (l1+l2-d)/(l1+l2). In the above example, the score is 0.93—the strings are 93% identical.
There are websites with Levenshtein distance implementations in all sorts of different programming languages, although the ones written in Awk are not as common. But no problem. Awk is close enough to C that it’s simple to translate a short bit of code. I picked the second of these two. There was one already written in Awk, but it took a lot more time to grind through a large set of strings.
Save time, be lazy
The time it takes is important, because it adds up fast. Given n paragraphs, each paragraph has to be compared to all the rest, so you have n2 comparisons. A medium sized book, with 2400 paragraphs, means 5.76 million comparisons. Given that a fuzzy comparison takes a lot longer than a boolean one, you want to eliminate unnecessary comparisons. A few optimizations I came up with:
So we’ve gone to something you run overnight, or at least during a long lunch break, to something that can wrap up during a coffee break (eliminating 96.5% of the time needed is a win no matter how you look at it). Now if your book is all blocks of similar length, it will take longer to grind through them because there isn’t anything obvious to throw out.
Still, this is down to the realm where it's practical to build a “super book” (a book containing a collection of related books) and look for reuse across an entire product line. That might get the processing time back up into the multiple-hours realm, but you also have more reuse potential.
Going commercial
The commercial offerings have some niceties that my humble Awk script does not. For example, they claim to be able to build a collection file (a “library” of sorts, containing all the reusable paragraphs) and apply it to your documentation. That by itself might be worth the price of entry, if you end up with a lot of reuse.
They also offer a pretty Web-based interface, instead of dropping to the command line. And, they have likely implemented a computing cluster to grind through huge jobs even faster.
But hey, if you’re on a tight budget, the price is right. I’m going to make sure the employer doesn’t have a problem with me putting it up on Github before I do it. But maybe I’ve given you enough hints to get going on your own.
UPDATE 10 May 2020: The script is now available on Github.
We’ve been using DITA at work for a year or two now, but rarely is there time to go back and take advantage of the things it offers, retrofitting those things into the documentation we brought in. (Docs we’ve created since then seem to get more thorough treatment.)
One of those things is reuse. It’s easy to reuse an entire topic in a different book—even if it was duplicated. “Hey,” says a writer, “that’s the same thing. Let’s throw away topic B and use topic A.”
DITA also supports reusing common paragraphs in two or two dozen topics, but that’s a little harder. First, you have to recognize that paragraph. Then, you have to create a new topic (a collection file), copy the paragraph into the collection file, and assign it an ID. Then you have to replace the duplicated text (in topics) with a content reference (a/k/a conref). It’s a worthwhile thing to do, because you might say the same thing slightly differently otherwise. Still, who wants to go through an entire book (or worse, set of books), looking for reuse candidates?
Of course, you can always let a computer do the tedious work… if you know how to tell it what to do.
Preparing the (searching) grounds
A while back, I wrote my first useful Python scripts. One takes a particular JSON file and reformats it as a DITA reference topic, containing a table with the relevant data from the JSON file. Another walks through a CSV file, grabbing the columns I need, and producing topics documenting a TR-069 data model. Both scripts take advantage of a vast library of pre-written code to parse their input files.
It occurred to me that, if I were to find (or create) a way to export all the text from a DITA book into a CSV file, I could use a Python script to compare each paragraph to all the others. Using fuzzy matching would help me find “close enough” matches. That was a while ago, because I bogged down on trying to get properly-formatted text out of DITA.
Last week, I got bored. Someone on the DITA-OT forum mentioned a demo plugin that translated DITA to Morse code, and the lightbulb in my head went on. If I could modify that plugin to just give text instead of -.-. .-. .- .—. then maybe I’d have what I needed.
It was an abject failure. What I need is one line per block element (paragraph, list item, etc). What I got was one line for the entire topic, sometimes with missing spaces. I put that aside, but realized that DITA-OT can also spit out Markdown. If I could convert Markdown to plain text, I’d be ready to rock!
So you want to convert DITA to Markdown? It’s easy, at least with the newer toolkits:
dita --format=markdown_github --input=my.bookmap --args.rellinks=none
The DITA-OT output continues to be topic-oriented, writing each topic to its own file. That wasn’t quite what I wanted, or so I thought at the time. Anyway, we have Markdown. How do we get plain text out of it, with each line representing a block element?
Turns out that pandoc, the “Swiss Army knife for converting markup files,” can do it:
pandoc -t plain —wrap=none -o topic.txt topic.md
In the heat of problem-solving, I realized I didn’t need a CSV file… or Python. I could pick up Awk and hammer
Got a (fuzzy) match?
A typical match is an all or nothing Boolean: you get true (1) if the strings are an exact match, or false (0) if they don’t.
Fuzzy matching uses the universe of floating-point numbers in between 0 and 1 to describe how close a match is. It’s up to you to decide what’s close enough, but you usually want to focus on values of 0.9 and higher. And yes, an exact match still gives you a score of 1.
Why do we want to do this? Unless content developers are really good about cutting and pasting in a pre-reuse environment, inconsistencies creep in. You might see common operations described in slightly different ways:
Click OK to close the dialog.
Click OK to close the window.
So along with flagging potential reuse candidates, a fuzzy match can help you be consistent.
Python and Perl have libraries devoted to fuzzy matching. There are several ways to do a fuzzy match, but one of the more popular is called the Levenshtein distance. There's a scary-looking formula at the link, but it boils down to single-character edits (addition, deletion, or replacement). The distance between “dialog” and “window” is 4 (d→w, a→n, l→d, g→w).
But this is an integer, not a floating-point number between 0 and 1! But that’s easy to fix. If l1 and l2 are the lengths of the two strings, and d is the calculated Levenshtein distance, then the final score is (l1+l2-d)/(l1+l2). In the above example, the score is 0.93—the strings are 93% identical.
There are websites with Levenshtein distance implementations in all sorts of different programming languages, although the ones written in Awk are not as common. But no problem. Awk is close enough to C that it’s simple to translate a short bit of code. I picked the second of these two. There was one already written in Awk, but it took a lot more time to grind through a large set of strings.
Save time, be lazy
The time it takes is important, because it adds up fast. Given n paragraphs, each paragraph has to be compared to all the rest, so you have n2 comparisons. A medium sized book, with 2400 paragraphs, means 5.76 million comparisons. Given that a fuzzy comparison takes a lot longer than a boolean one, you want to eliminate unnecessary comparisons. A few optimizations I came up with:
- It’s easy to get to (n2-n) by not comparing a string to itself. We also do a boolean compare and skip the fuzzy match if the strings are identical. Every little bit helps. Time to analyze 2400 paragraphs: 2 hr 40 min. My late-2013 iMac averages about 600 fuzzy match comparisons per second.
- By deleting an entry from the array after comparing it to the others, you eliminate duplicate comparisons (once you’ve compared A to B, doing B to A is a waste of time). That eliminates noise from the report, and cuts the number of comparisons required in half. Time to analyze 2400 paragraphs: 1 hr 20 min. Not bad, for something you can do with one more line of code.
- Skip strings with big differences in length. Again, if l1 and l2 are the lengths of two strings, then the minimum Levenshtein distance is abs(l1-l2). If the best possible score doesn’t reach the “close enough” threshold, then you don't have to do the fuzzy match. Time to analyze 2400 paragraphs: 5 min 30 sec!!! Now that’s one heck of an optimization!
So we’ve gone to something you run overnight, or at least during a long lunch break, to something that can wrap up during a coffee break (eliminating 96.5% of the time needed is a win no matter how you look at it). Now if your book is all blocks of similar length, it will take longer to grind through them because there isn’t anything obvious to throw out.
Still, this is down to the realm where it's practical to build a “super book” (a book containing a collection of related books) and look for reuse across an entire product line. That might get the processing time back up into the multiple-hours realm, but you also have more reuse potential.
Going commercial
The commercial offerings have some niceties that my humble Awk script does not. For example, they claim to be able to build a collection file (a “library” of sorts, containing all the reusable paragraphs) and apply it to your documentation. That by itself might be worth the price of entry, if you end up with a lot of reuse.
They also offer a pretty Web-based interface, instead of dropping to the command line. And, they have likely implemented a computing cluster to grind through huge jobs even faster.
But hey, if you’re on a tight budget, the price is right. I’m going to make sure the employer doesn’t have a problem with me putting it up on Github before I do it. But maybe I’ve given you enough hints to get going on your own.
UPDATE 10 May 2020: The script is now available on Github.
Sunday, March 08, 2020 2 comments
Mooooving out
I called him Buncha (as in Buncha Bull). Mason called him Bully. The young woman that helps the wife out with farm stuff called him Carl (Carl?).
Whatever you call him, the time came for him to moooove back to the pasture. Wife put a halter on him, handed me a lead (basically a really heavy-duty leash) and told Mason and me to walk him down to the pasture.
So down the garden path we went. We brought his milk bottle along, just in case. The calf was both excited and nervous about this Really New Thing, and spent the entire walk alternately planting his hooves or trying to frisk ahead. But despite him weighing well over 100 pounds, he didn’t pull as hard as a 30 pound Aussie Shepard.
We got to the pasture. I unclipped the lead and let him go, then slipped through the gate. He stood there, looked around… then stepped through the barbed-wire fence like it wasn’t even there. As Mik’s Aunt Morcati said, cattle are born knowing all profanity and will gladly teach it to anyone nearby.
So I waved the milk bottle at him, he ambled over and chowed down, and I clipped the lead back on him. Now what? I thought. I can’t stand here with him forever.
Finally, I decided to take him further into the pasture. Riding a milk high, he was glad to follow my lead (the one attached to his face via the halter). About 50 yards in, I unclipped him and backed away to see what happened next. He munched on a big clump of grass, then looked up and got this look about him. It was almost like it dawned on him: This is my place, and that’s my herd. The pasture is calling, and I must go. He walked up the hill, found some other calves around his age, and they included him right away.
It’s not like he’s completely gone… he still has the halter, so we can spot him in the herd and bring him an occasional bottle. Like this:
He still comes trotting over when he sees us… or at least sees his bottle. So we don’t have to miss him. Especially since another calf is now in the pen. It never ends at FAR Manor.
Whatever you call him, the time came for him to moooove back to the pasture. Wife put a halter on him, handed me a lead (basically a really heavy-duty leash) and told Mason and me to walk him down to the pasture.
So down the garden path we went. We brought his milk bottle along, just in case. The calf was both excited and nervous about this Really New Thing, and spent the entire walk alternately planting his hooves or trying to frisk ahead. But despite him weighing well over 100 pounds, he didn’t pull as hard as a 30 pound Aussie Shepard.
The pasture is calling and I must go. |
So I waved the milk bottle at him, he ambled over and chowed down, and I clipped the lead back on him. Now what? I thought. I can’t stand here with him forever.
Finally, I decided to take him further into the pasture. Riding a milk high, he was glad to follow my lead (the one attached to his face via the halter). About 50 yards in, I unclipped him and backed away to see what happened next. He munched on a big clump of grass, then looked up and got this look about him. It was almost like it dawned on him: This is my place, and that’s my herd. The pasture is calling, and I must go. He walked up the hill, found some other calves around his age, and they included him right away.
It’s not like he’s completely gone… he still has the halter, so we can spot him in the herd and bring him an occasional bottle. Like this:
He still comes trotting over when he sees us… or at least sees his bottle. So we don’t have to miss him. Especially since another calf is now in the pen. It never ends at FAR Manor.
Thursday, February 27, 2020 3 comments
The great flopover
Today began the way it often does through the week: wife putting AJ next to me on the bed while she gets Mason on the bus. Today, AJ seemed anxious to be self-propelled; she squirmed and grunted on the bed until I put her on my chest. She’s 3 months old now, and even crawling is another entire lifetime away. It has to be frustrating, to be a curious rugrat and have to depend on the big stupid giants to figure out what you want to do or where to go.
I was working at home today, so I took Charlie to daycare and picked up some breakfast on the way back while the wife tried to keep AJ content. They hung out most of the morning, because I had a call I needed to be on from 10 to 11:30… but then it was lunch break. I took AJ, and let the wife scarf her egg and cheese croissant.
As I’ve said before, AJ is a lot like Mason—she likes to be walked around. I can also keep her occupied for a little while by turning on the ceiling fan in the bedroom; she loves watching it go 'round and 'round. But I walked her around a little more, and she zorched out. I laid her in the bassinet (on her tummy) and went back to work.
About half an hour later, the wife called down the hall: “Did you lay her on her back?”
“No,” I replied.
“Then she rolled over!”
I had to text Daughter Dearest with the news. I missed it :(, she replied. Get video!
Getting video was easier said than done, because AJ only flipped onto her back (she did it twice through the day) after waking up. So when DD came to pick her up, she really wanted that video…
(I cut out a lot of DD encouraging the flopover in a very squeaky voice.)
BTW, don’t suggest to DD that her laying on the bed made it easier for AJ to roll over.
I was working at home today, so I took Charlie to daycare and picked up some breakfast on the way back while the wife tried to keep AJ content. They hung out most of the morning, because I had a call I needed to be on from 10 to 11:30… but then it was lunch break. I took AJ, and let the wife scarf her egg and cheese croissant.
As I’ve said before, AJ is a lot like Mason—she likes to be walked around. I can also keep her occupied for a little while by turning on the ceiling fan in the bedroom; she loves watching it go 'round and 'round. But I walked her around a little more, and she zorched out. I laid her in the bassinet (on her tummy) and went back to work.
About half an hour later, the wife called down the hall: “Did you lay her on her back?”
“No,” I replied.
“Then she rolled over!”
I had to text Daughter Dearest with the news. I missed it :(, she replied. Get video!
Getting video was easier said than done, because AJ only flipped onto her back (she did it twice through the day) after waking up. So when DD came to pick her up, she really wanted that video…
(I cut out a lot of DD encouraging the flopover in a very squeaky voice.)
BTW, don’t suggest to DD that her laying on the bed made it easier for AJ to roll over.
Monday, February 24, 2020 No comments
Bedtime follies
Getting Charlie to go to bed can be a crapshoot, especially if he hasn't had a lot of outdoor time to wear himself out… or if he has a cold.
Most nights, I'm the one who gete his pajamas on. As I am ever a hopeful soul, I’ll ask him, “are you ready to go to sleep?” He nods, which is a gigantic lie, but I'll put a blanket on him and turn off the light. Usually, he jumps out of bed after a couple minutes and does his thing until one of us reels him in and settles him down.
But yesterday night, he didn’t jump out of bed right away. After a short while, the wife called down the hall: “Is Charles with you?”
“No, I put him in bed…” Is it possible? I thought. Maybe he went to sleep!
I went to his bedroom, and waited for my eyes to adjust. I saw a dark shape on the bed, and touched it… too soft. It was one of his stuffed bears. I felt around some more, then finally gave up and turned on the light.
And there was Charlie.
Sitting cross-legged up in the corner of the bed.
Stark naked.
Diaper at his side, pajamas a little farther away, socks at the foot of the bed.
Seriously. I have no idea what his thought process was for this… was he expecting me to find him like that? Or did he plan to sleep in his all-in-all? Or (more likely) would he have shortly wandered into the living room to make the wife wonder what he was thinking?
I re-assembled his nighttime ensemble, and put him in my bed until he gave up and zorched out.
That was one of the more off-beat things Charlie has done in his nightly battle against the Sleep Monster. It makes me wonder what he’ll do to top it, later on.
Monday, February 03, 2020 2 comments
Done!
After all the hearings, the forms, the interviews and evaluations, the end was almost anti-climatic. We went into a conference room, the judge swore us in, and asked us if we still wanted to go through with it. He signed a paper and said, “It’s official.”
Charlie is now our adopted son.
The judge was happy to stand with us and get a pic. He said, “Adoptions and drug court graduations are the best part. Everything else can be kind of sad.”
There’s still stuff to deal with, including getting Charlie’s updated birth certificate and changing the name on his Social Security card. And the adoption assistance will take over from the foster stipend to cover Charlie’s therapies and the like.
I took the day off, and we kept Mason out of school so he could be part of the final ceremony.
Then I got to thinking… if Splat (Charlie’s bio-dad) is his cousin, does that make Splat his own uncle? Well, family trees in this part of the country do have their share of tangled branches…
Charlie is now our adopted son.
The judge was happy to stand with us and get a pic. He said, “Adoptions and drug court graduations are the best part. Everything else can be kind of sad.”
Our second family (plus the judge and AJ) |
I took the day off, and we kept Mason out of school so he could be part of the final ceremony.
Then I got to thinking… if Splat (Charlie’s bio-dad) is his cousin, does that make Splat his own uncle? Well, family trees in this part of the country do have their share of tangled branches…
Wednesday, January 29, 2020 2 comments
Mooooving along
When you live in a free-range insane asylum, you never know who (or what) is gonna show up next, looking for a little living space…
I guess this is the season for calves, because the wife has been talking about all the new babies out in the pasture lately. But, it seems like one of them had some issues… not so much the calf itself, but the mama. Here’s a mental image you won’t see often, in two words: prolapsed uterus.
However it was, the mama didn’t make it. That meant catching the calf, which is usually just a matter of letting it hang out for a day or two until it’s too weak to run away, then bring it to an enclosure where we can feed it. Lief, who was The Boy’s dog, got displaced from his pen and moved back to a tree and doghouse so the calf could have a place to live. The first day or so was… interesting. We had to pin him against a corner, then get him to figure out that the bottle had foooooood. After exactly one of those ordeals, he got the idea and was glad to see us coming.
A week or two later, and he's pretty much a really big doggie. He’ll slide around your legs, looking for the bottle, and has figured out he needs to let go on occasion to equalize the pressure.
Mason helped me out one evening. “What should we call him?” he asked.
“Steak,” I grinned. “He’s gonna go on my grill.”
“No he won’t!”
Super-cute eyelashes notwithstanding… but whatever. I’m calling him Buncha, as in Buncha Bull. Most likely, once he’s weaned, we’ll return him to the pasture. But before that happens, we’ll most likely be feeding him out of a bucket. Buncha is already trying to find an opening out of the pen, so I hope it won’t be much longer before he returns to the herd. But I guess if someone waves a bottle at him, he’ll be glad to go wherever it leads.
I guess this is the season for calves, because the wife has been talking about all the new babies out in the pasture lately. But, it seems like one of them had some issues… not so much the calf itself, but the mama. Here’s a mental image you won’t see often, in two words: prolapsed uterus.
However it was, the mama didn’t make it. That meant catching the calf, which is usually just a matter of letting it hang out for a day or two until it’s too weak to run away, then bring it to an enclosure where we can feed it. Lief, who was The Boy’s dog, got displaced from his pen and moved back to a tree and doghouse so the calf could have a place to live. The first day or so was… interesting. We had to pin him against a corner, then get him to figure out that the bottle had foooooood. After exactly one of those ordeals, he got the idea and was glad to see us coming.
Slurp… uh, eet mor chikin… Slurp |
Mason helped me out one evening. “What should we call him?” he asked.
“Steak,” I grinned. “He’s gonna go on my grill.”
“No he won’t!”
Super-cute eyelashes notwithstanding… but whatever. I’m calling him Buncha, as in Buncha Bull. Most likely, once he’s weaned, we’ll return him to the pasture. But before that happens, we’ll most likely be feeding him out of a bucket. Buncha is already trying to find an opening out of the pen, so I hope it won’t be much longer before he returns to the herd. But I guess if someone waves a bottle at him, he’ll be glad to go wherever it leads.
Saturday, January 18, 2020 2 comments
Weekend AJ blogging
Daughter Dearest’s maternity leave ran out last week, which meant she went grumbling back to work on Monday. And that meant AJ was at the manor through the day until she got home.
AJ is definitely her mother’s daughter. DD liked to be held close, so does AJ. The difference is, DD's happy place was rocking. AJ is like Mason; she likes to be carried around. Wife asked me to work at home so she could deal with a couple of things without having to listen to AJ howling to be picked up. After a couple tries, we found a good position for her in my old sling, and I had both hands free for working (and taking a selfie). Of the three babies who have spent time in that sling, she’s the earliest adopter… Mason and Charlie were both about 3 months old when they got comfortable in it. She also sat in on her first two conference calls, and started crying when someone said the schedule had to slip (so she’s already qualified to be a Product Line Manager!).
She’ll sleep about half the day, and we have a little bed for her. “Safe Sleep” notwithstanding, she likes to sleep on her side more than her back (which is what Charlie preferred as well).
She's like 7 weeks old now, growing quickly and gobbling prodigious amounts of formula. When she’s hungry, everyone knows it. Charlie started sympathy-crying at one point.
She looks a lot more like Daughter Dearest now, and the eyebrow ridges and lack of hair make her look a lot like my youngest bro Solar. He replied (paraphrased), “Yup, we’re both gorgeous.”
Both of us enjoy our baby time, and Charlie likes being around her as well (although we have to make sure he doesn’t hug too hard). She’s not a boarder, she doesn’t live here, but she’s aboard.
She doesn't mind having her @$$ in a sling! |
She’ll sleep about half the day, and we have a little bed for her. “Safe Sleep” notwithstanding, she likes to sleep on her side more than her back (which is what Charlie preferred as well).
She's like 7 weeks old now, growing quickly and gobbling prodigious amounts of formula. When she’s hungry, everyone knows it. Charlie started sympathy-crying at one point.
She looks a lot more like Daughter Dearest now, and the eyebrow ridges and lack of hair make her look a lot like my youngest bro Solar. He replied (paraphrased), “Yup, we’re both gorgeous.”
Both of us enjoy our baby time, and Charlie likes being around her as well (although we have to make sure he doesn’t hug too hard). She’s not a boarder, she doesn’t live here, but she’s aboard.
Monday, January 13, 2020 No comments
Holding a… garage (door)
Back before Christmas, Panda was at the manor, and backed up his big truck to turn around…
BAM
I was working at home that morning, and ran out to see what had happened. To be honest, the only surprise was that it hadn’t happened years ago. FAR Manor has a treacherous driveway. Someone, and it turned out to be Panda, finally hit the garage door.
You really couldn’t see any problem from the outside, and you had to be looking for it to see it from the inside. One of the panels was pushed in. “I’ll come by tomorrow and put it back in,” Panda assured me.
But he didn’t.
After he left, I hit the lift button. The Orange Crate was parked in there, and I would need it. The garage door went up, but made one h3|| of a racket, squealing like a Republican who had been confronted with its lies. I told the wife about it, and we agreed to leave the door open until we could get someone to deal with it.
So the holidays went by, and a brief Winter #2 came around. The garage door isn’t awesome insulation, but it’s a lot better than nothing (especially when it’s windy, which is typical of Planet Georgia’s five winters). The wife dug around, and found the number of the guy who had installed our replacement garage door opener (that I got from Freecycle). He said he could come by on Thursday, and I agreed to work at home that day.
Gotta love maintenance windows… I had an urgent bathroom appointment, and somehow I missed hearing him come up, but heard him leave. Thinking he had arrived, I forced an early finish and ran out to the garage. All there was, was a sticker saying he had come by.
Since I had to move my cube at work on Friday, there was no opportunity to work at home then. Wife figured she would hang out, and arranged a second-chance visit… and he never showed up.
Sunday afternoon rolled around, and I realized the garage door was still in the same shape it had been. After confirming that the garage door guy never showed up Friday, I decided to tackle the issue myself.
First, I backed Moby Yo (the great white minivan) out. If I got the door down, and it wouldn’t go back up, at least we wouldn’t have a trapped vehicle. Then I hit the button. It wailed, stalled, and went back up. Maybe I’d been overly cautious, but at least I had room to work. I got a stepladder, hammer, and wood block, and got pounding.
After dorking around, I was able to get the door down. I attacked the panel in earnest, pushing it out and banging the framework down enough to get it back into place.
I didn’t address the bent metal beams, but hoped I’d straightened things out enough to get it going. Hitting the button was encouraging… the door went up without drama. Down, it howled and stopped again.
“Huh,” I thought. I know the definition of insanity is trying the same thing and expecting a different result, but I hit the button again anyway. This time, the door went down like nothing had ever happened. There’s a reason I call this place the free-range insane asylum.
Given that Spring #3 seems to be really wet and not all that cold, we might not restart the firebox until the end of the week. We’ve had plenty of the “cool/warm and wet” part of Planet Georgia winters, but only (so far) brief spates of the other part, “cold and dry.” More will come, and at least now we can put the garage door down to keep the worst of it out.
But we have wood on the rack, and a little more in the shelter. Maybe I’ll get a chance to cut more firewood in the weekends ahead. Winter is coming… and going, through March anyway. Dry weekend days, and we’ve been lucky to get one for two the last few, means tackling those maintenance issues while you can.
BAM
I was working at home that morning, and ran out to see what had happened. To be honest, the only surprise was that it hadn’t happened years ago. FAR Manor has a treacherous driveway. Someone, and it turned out to be Panda, finally hit the garage door.
You really couldn’t see any problem from the outside, and you had to be looking for it to see it from the inside. One of the panels was pushed in. “I’ll come by tomorrow and put it back in,” Panda assured me.
But he didn’t.
After he left, I hit the lift button. The Orange Crate was parked in there, and I would need it. The garage door went up, but made one h3|| of a racket, squealing like a Republican who had been confronted with its lies. I told the wife about it, and we agreed to leave the door open until we could get someone to deal with it.
So the holidays went by, and a brief Winter #2 came around. The garage door isn’t awesome insulation, but it’s a lot better than nothing (especially when it’s windy, which is typical of Planet Georgia’s five winters). The wife dug around, and found the number of the guy who had installed our replacement garage door opener (that I got from Freecycle). He said he could come by on Thursday, and I agreed to work at home that day.
Gotta love maintenance windows… I had an urgent bathroom appointment, and somehow I missed hearing him come up, but heard him leave. Thinking he had arrived, I forced an early finish and ran out to the garage. All there was, was a sticker saying he had come by.
Since I had to move my cube at work on Friday, there was no opportunity to work at home then. Wife figured she would hang out, and arranged a second-chance visit… and he never showed up.
Sunday afternoon rolled around, and I realized the garage door was still in the same shape it had been. After confirming that the garage door guy never showed up Friday, I decided to tackle the issue myself.
First, I backed Moby Yo (the great white minivan) out. If I got the door down, and it wouldn’t go back up, at least we wouldn’t have a trapped vehicle. Then I hit the button. It wailed, stalled, and went back up. Maybe I’d been overly cautious, but at least I had room to work. I got a stepladder, hammer, and wood block, and got pounding.
Back in place… mostly. |
I didn’t address the bent metal beams, but hoped I’d straightened things out enough to get it going. Hitting the button was encouraging… the door went up without drama. Down, it howled and stopped again.
“Huh,” I thought. I know the definition of insanity is trying the same thing and expecting a different result, but I hit the button again anyway. This time, the door went down like nothing had ever happened. There’s a reason I call this place the free-range insane asylum.
Given that Spring #3 seems to be really wet and not all that cold, we might not restart the firebox until the end of the week. We’ve had plenty of the “cool/warm and wet” part of Planet Georgia winters, but only (so far) brief spates of the other part, “cold and dry.” More will come, and at least now we can put the garage door down to keep the worst of it out.
But we have wood on the rack, and a little more in the shelter. Maybe I’ll get a chance to cut more firewood in the weekends ahead. Winter is coming… and going, through March anyway. Dry weekend days, and we’ve been lucky to get one for two the last few, means tackling those maintenance issues while you can.
Friday, January 10, 2020 No comments
Turkey slow-cooker chili
Eating Season is finally behind us… maybe. A lot of us still have a metric eff-ton of meat in the freezer, we’re trying to ditch those holiday pounds, and maybe we’re tightening the financial belt a little after blowing the budget on presents. It's still cold out, at least for most of us.
We need something hot, cheap, and reasonably healthy for supper, but still tasty… so here you go. I based this on an AllRecipes version, and found it spiced well enough that I wasn’t reaching for the jar of ghost pepper sauce The Boy made for me a year or so ago (a half-teaspoon takes anything from mild to wild, so it will last a while). Like the turkey tacos recipe I posted, this is a good way to rescue dry or undercooked turkey. I ate all of this over a week, except for one bowl, and the wife thought it was pretty good. My second batch used some thawed leftover chicken, from a September church BBQ, and it worked fine as well.
Turkey slow-cooker chili
1 lb turkey (or chicken), diced
1 onion, chopped
1 1/2 tsp olive oil (more if the turkey is dry)
1 T minced garlic
2 T chili powder
1/2 tsp paprika
1/2 tsp oregano (dried, or 1 tsp fresh)
1/2 tsp cayenne pepper (ground)
1/2 tsp cumin
1/2 tsp No-salt
1/2 tsp ground pepper (black or white)
2 c water
1 can (14oz) white beans*, drained and rinsed
1 can (28oz) diced fire-roasted tomatoes
2 T unsalted tortilla chips, crushed (optional)**
Toppings:
Sliced jalapeños
Crema (or sour cream)
Shredded cheese (sharp cheddar, Colby-Jack, etc)
Pour water, beans, tomatoes, and crushed tortilla chips into a lined slow-cooker. Set on High.
Heat olive oil in large skillet. Add onion and garlic; sauté until the onion softens. Add turkey and remaining ingredients, stir until turkey is heated and oil is absorbed. Transfer turkey/onion/spice mixture into slow-cooker, stir.
Cook on High approx. 3 hours or until simmering, stirring occasionally; then simmer for 1 more hour. Serve hot with toppings as desired. Leftovers can be reheated in a microwave.
*I usually reach for black beans, but found that they tend to “stain” poultry-based soup/stew/chili. White beans don’t discolor the meat. Red beans also seem to work okay, if you drain and rinse them, at least.
**The crushed tortilla chips thicken the broth a little. Alton Brown came up with the idea, so don’t blame me.
Do you have a favorite recipe for turning leftover meat into chili? Comments are open!
Gotta have those toppings! |
Turkey slow-cooker chili
1 lb turkey (or chicken), diced
1 onion, chopped
1 1/2 tsp olive oil (more if the turkey is dry)
1 T minced garlic
2 T chili powder
1/2 tsp paprika
1/2 tsp oregano (dried, or 1 tsp fresh)
1/2 tsp cayenne pepper (ground)
1/2 tsp cumin
1/2 tsp No-salt
1/2 tsp ground pepper (black or white)
2 c water
1 can (14oz) white beans*, drained and rinsed
1 can (28oz) diced fire-roasted tomatoes
2 T unsalted tortilla chips, crushed (optional)**
Toppings:
Sliced jalapeños
Crema (or sour cream)
Shredded cheese (sharp cheddar, Colby-Jack, etc)
Pour water, beans, tomatoes, and crushed tortilla chips into a lined slow-cooker. Set on High.
Heat olive oil in large skillet. Add onion and garlic; sauté until the onion softens. Add turkey and remaining ingredients, stir until turkey is heated and oil is absorbed. Transfer turkey/onion/spice mixture into slow-cooker, stir.
Cook on High approx. 3 hours or until simmering, stirring occasionally; then simmer for 1 more hour. Serve hot with toppings as desired. Leftovers can be reheated in a microwave.
*I usually reach for black beans, but found that they tend to “stain” poultry-based soup/stew/chili. White beans don’t discolor the meat. Red beans also seem to work okay, if you drain and rinse them, at least.
**The crushed tortilla chips thicken the broth a little. Alton Brown came up with the idea, so don’t blame me.
Do you have a favorite recipe for turning leftover meat into chili? Comments are open!
Wednesday, January 08, 2020 No comments
Four!
Wife observed: “Now that Charlie is four, he’s entering his Terrible Twos.” He’s definitely four, Terrible Twos notwithstanding. He’s curious about everything, he can reach the top of the dressers in our bedroom, and he’s trying so hard to talk. He invented a sign for Play-Dough, hands inverting over each other (I should probably post a video). Daughter Dearest got him to make the “d” sound, and the “oh” sound, but he just can’t quite seem to put them together. Hey, at least he’s starting to use consonants. The rest will come.
We had a sort-of pizza party for him this evening, to mark the occasion. He can’t actually eat pizza, but he’s fine with the crust and sauce. So one of the pepperoni pizzas I made this evening had a fourth of it missing cheese and 'roni. Sauced bread was just fine with him. We also had a veggie pizza, but that didn’t last the night. I’d have liked one with 'roni, ham, and bacon, but hey… it’s not my night.
There was also bowtie pasta (Charlie’s favorite) with marinara sauce. Instead of a birthday cake, we had assorted doughnuts. Charlie likes plain ones, and I think he got two of them. (“Hey, it’s his birthday.”) As we’re working on the theory that he sleeps better on a really full belly, we were okay with letting him eat. Besides, there are a few doughnuts left over for tomorrow morning, and I fully intend to grab one to enjoy with my coffee.
After the food (and cake, or cake doughnuts in any case), what comes next with a birthday? Presents!
Charlie got the hang of opening presents during the Christmas craze, and he obviously doesn’t have a problem remembering how. His favorite was a Play-Dough activity set (have I mentioned he loves his 'doh?). He got a set of Baby Shark puzzles and games, and only got interested in that once we put up the Play-Dough.
He’s not really into the Grand Acquistion of Stuff phase just yet, and Mason didn’t get there until he was six or so. If he has attention, cars, or Play-Dough (roughly in that order), he’s fine. Mason complains about him being annoying, but the two of them aren’t all that different. Mason gets massively annoying when he wants attention from us, and Charlie gets massively annoying when he wants attention from Mason (or us). Both of them torment the dog, and I think Charlie learned some of that from Mason.
Anyway. Big news might be coming in slightly less than a month. Stay tuned for the latest from the free-range insane asylum!
Bread with pizza sauce… perfect! |
There was also bowtie pasta (Charlie’s favorite) with marinara sauce. Instead of a birthday cake, we had assorted doughnuts. Charlie likes plain ones, and I think he got two of them. (“Hey, it’s his birthday.”) As we’re working on the theory that he sleeps better on a really full belly, we were okay with letting him eat. Besides, there are a few doughnuts left over for tomorrow morning, and I fully intend to grab one to enjoy with my coffee.
After the food (and cake, or cake doughnuts in any case), what comes next with a birthday? Presents!
Charlie got the hang of opening presents during the Christmas craze, and he obviously doesn’t have a problem remembering how. His favorite was a Play-Dough activity set (have I mentioned he loves his 'doh?). He got a set of Baby Shark puzzles and games, and only got interested in that once we put up the Play-Dough.
He’s not really into the Grand Acquistion of Stuff phase just yet, and Mason didn’t get there until he was six or so. If he has attention, cars, or Play-Dough (roughly in that order), he’s fine. Mason complains about him being annoying, but the two of them aren’t all that different. Mason gets massively annoying when he wants attention from us, and Charlie gets massively annoying when he wants attention from Mason (or us). Both of them torment the dog, and I think Charlie learned some of that from Mason.
Anyway. Big news might be coming in slightly less than a month. Stay tuned for the latest from the free-range insane asylum!
Friday, January 03, 2020 No comments
Goals vs. resolutions
A new year has arrived, and perhaps people are asking you if you have any resolutions.
Perhaps you reply, “I don’t do resolutions,” and add some variation of “they never work out.” The reasons they don’t work out could be greater than one per person, but here’s a couple common ones:
Too vague. “Lose weight” or “Have a cleaner house” are things many of us can aspire to, but where’s the finish line? Being one pound lighter on December 31 is technically losing weight, but is that really going to satisfy you? Do you really have a cleaner house if you binge-clean twice a year and otherwise let it go like usual?
Impossible. You might try biting off too much. “Lose 40 pounds” or “get out of debt” aren’t vague, anyway. But if you’re honest with yourself, you know what the odds are of achieving something that big.
Maybe this year, instead of making sweeping resolutions you’ll blow off before February, set goals. I wrote about setting goals on my writing blog a couple years ago, and how much they help. But your goals should be SMART:
Some of these run together. M and R especially can be variants of S. To me, they’re not as important as the other three. Let’s run with the examples I used earlier.
“Lose 40 pounds” checks most of the boxes, but is it achievable? The implication is “by December 31,” and that’s nothing like short-term. These days, our attention spans are eroded by all the input we’re bombarded with, and focusing on a goal for an entire year might not be achievable. If you’re not 40 pounds overweight, it might not be achievable in any case. So, lower your sights and go short-term: Lose 7 pounds by Feb. 15. Don’t forget your reward; you want an incentive to stay focused on your goal(s). There’s nothing wrong with wanting a pat on the back or an effing cookie, even for doing what you know you should. If you’re too demanding of yourself, never satisfied, you could end up asking yourself “What’s the point?” and giving up.
Once you’ve achieved that first 7 pounds, reward yourself and then set your next goal. Just keep it realistic, and remember, it takes longer to lose less as you go.
“Have a cleaner house” is results-oriented, but how do you measure it—in other words, how can you tell if you’ve succeeded? It’s certainly not specific. Maybe it’s achievable. It’s an end, and your goals are the means. Develop the habit of putting stuff away this month is a goal. You can measure it by the lower amount of clutter. It might not be your only cleanup-related goal; things like give away kitchen stuff I don’t use this March or install shelving in the garage next week are short-term, achievable, and will help get you to the cleaner house. Break things down into smaller chunks whenever possible.
“Get out of debt” is a noble aspiration, and it’s even specific and measurable. But is it achievable? Besides having sufficient funds to do it, can you stay focused on that for an entire year? If you have a partner who likes to splurge, you’ll need to get on the same page, too. I actually had a three-year plan to get rid of everything but the mortgage, and of course things happened in the second year.
Some credit bites your wallet harder than others. You might have one card with a 12% interest rate and other with a 30% rate. Get more specific, and get achievable: Pay off RipOffBank Visa by March, then cancel it. If you don’t think you can pay it all off by March, specify the goal balance; once you’ve reached it, set the next goal.
Big resolutions have a place—they guide the goals you set—but they aren’t what you actually do. Do the goals, and the resolutions will come along for the ride.
What are your goals for 2020? Sound off in the comments!
Perhaps you reply, “I don’t do resolutions,” and add some variation of “they never work out.” The reasons they don’t work out could be greater than one per person, but here’s a couple common ones:
Too vague. “Lose weight” or “Have a cleaner house” are things many of us can aspire to, but where’s the finish line? Being one pound lighter on December 31 is technically losing weight, but is that really going to satisfy you? Do you really have a cleaner house if you binge-clean twice a year and otherwise let it go like usual?
Impossible. You might try biting off too much. “Lose 40 pounds” or “get out of debt” aren’t vague, anyway. But if you’re honest with yourself, you know what the odds are of achieving something that big.
Maybe this year, instead of making sweeping resolutions you’ll blow off before February, set goals. I wrote about setting goals on my writing blog a couple years ago, and how much they help. But your goals should be SMART:
- Specific (I would say Short-term is as important)
- Measurable
- Achievable
- Results-oriented (I would add Rewarding)
- Time-bound
Some of these run together. M and R especially can be variants of S. To me, they’re not as important as the other three. Let’s run with the examples I used earlier.
“Lose 40 pounds” checks most of the boxes, but is it achievable? The implication is “by December 31,” and that’s nothing like short-term. These days, our attention spans are eroded by all the input we’re bombarded with, and focusing on a goal for an entire year might not be achievable. If you’re not 40 pounds overweight, it might not be achievable in any case. So, lower your sights and go short-term: Lose 7 pounds by Feb. 15. Don’t forget your reward; you want an incentive to stay focused on your goal(s). There’s nothing wrong with wanting a pat on the back or an effing cookie, even for doing what you know you should. If you’re too demanding of yourself, never satisfied, you could end up asking yourself “What’s the point?” and giving up.
Once you’ve achieved that first 7 pounds, reward yourself and then set your next goal. Just keep it realistic, and remember, it takes longer to lose less as you go.
“Have a cleaner house” is results-oriented, but how do you measure it—in other words, how can you tell if you’ve succeeded? It’s certainly not specific. Maybe it’s achievable. It’s an end, and your goals are the means. Develop the habit of putting stuff away this month is a goal. You can measure it by the lower amount of clutter. It might not be your only cleanup-related goal; things like give away kitchen stuff I don’t use this March or install shelving in the garage next week are short-term, achievable, and will help get you to the cleaner house. Break things down into smaller chunks whenever possible.
“Get out of debt” is a noble aspiration, and it’s even specific and measurable. But is it achievable? Besides having sufficient funds to do it, can you stay focused on that for an entire year? If you have a partner who likes to splurge, you’ll need to get on the same page, too. I actually had a three-year plan to get rid of everything but the mortgage, and of course things happened in the second year.
Some credit bites your wallet harder than others. You might have one card with a 12% interest rate and other with a 30% rate. Get more specific, and get achievable: Pay off RipOffBank Visa by March, then cancel it. If you don’t think you can pay it all off by March, specify the goal balance; once you’ve reached it, set the next goal.
Big resolutions have a place—they guide the goals you set—but they aren’t what you actually do. Do the goals, and the resolutions will come along for the ride.
What are your goals for 2020? Sound off in the comments!
Tuesday, December 31, 2019 No comments
FAR Manor paninis
I got a panini press for Christmas, a fairly fancy one that also has electric griddle and grill (open or closed) functions, Mason and I made pancakes on it a couple of times already, but what’s a panini press really for?
Paninis!
The wife was hungry, and gobbled hers right down, but even picky Mason liked his. Personally, I think it's better than Panera’s by a long shot. A family friend brought us a ham, and I expect I’ll be pulling out the FoodSaver and chucking a bunch of it into the freezer (joining the pound or so of ham left from Thanksgiving). But until then…
FAR Manor paninis (makes four)
8 slices Italian bread
12 oz sliced ham
Asiago cheese to taste, sliced
2 T butter
1/2 onion, sliced thin
4 mushrooms, sliced thin
8 sun-dried tomatoes, reconstituted and chopped (about 5 chunks per tomato)
olive oil
Pre-heat panini press (to 400°F if it has temperature controls).
Melt butter over medium heat in a small skillet. Add onion and mushrooms, sauté until onions are soft and mushrooms lose their white color.
Layer four sandwiches thus, dividing fillings equally: bread, cheese, ham, onion/mushroom/tomato, cheese, bread. Brush bottom of sandwich with olive oil, lay on panini press, brush top with olive oil. Press one or two sandwiches at a time, adjusting position if needed to make the top sit even. Grill for 4 to 4-1/2 minutes, until bread is browned and cheese melts.
Cut in half and serve with salad, chips, or soup.
What do you like in your paninis? Comments are, as always, open.
Paninis!
The wife was hungry, and gobbled hers right down, but even picky Mason liked his. Personally, I think it's better than Panera’s by a long shot. A family friend brought us a ham, and I expect I’ll be pulling out the FoodSaver and chucking a bunch of it into the freezer (joining the pound or so of ham left from Thanksgiving). But until then…
FAR Manor paninis (makes four)
8 slices Italian bread
12 oz sliced ham
Asiago cheese to taste, sliced
2 T butter
1/2 onion, sliced thin
4 mushrooms, sliced thin
8 sun-dried tomatoes, reconstituted and chopped (about 5 chunks per tomato)
olive oil
Pre-heat panini press (to 400°F if it has temperature controls).
Melt butter over medium heat in a small skillet. Add onion and mushrooms, sauté until onions are soft and mushrooms lose their white color.
Layer four sandwiches thus, dividing fillings equally: bread, cheese, ham, onion/mushroom/tomato, cheese, bread. Brush bottom of sandwich with olive oil, lay on panini press, brush top with olive oil. Press one or two sandwiches at a time, adjusting position if needed to make the top sit even. Grill for 4 to 4-1/2 minutes, until bread is browned and cheese melts.
Cut in half and serve with salad, chips, or soup.
What do you like in your paninis? Comments are, as always, open.
Monday, December 30, 2019 1 comment
Upgrade marathon
Kahuna, my late-2013 iMac, has been really laggy as of late. Running EtreCheck suggested the hard drive might be failing, although it gave no evidence for that conclusion, and checking system logs turned up no obvious disk-related issues. Still, the computer is 6 years old, and has been running almost constantly that entire time. System Monitor showed the 8GB of RAM was getting used up, and that’s probably the biggest issue I’ve been having.
Back when my daily driver was a 2008 MacBook, I maxed out the RAM and put a SSD drive in it, and it felt twice as fast as before (I still use it for vacations and other out-and-about things, although now it’s running Xubuntu). An iMac is a somewhat more difficult beast to upgrade, because there’s no handy hatch to access the RAM and hard drive… but iFixit provides parts, tools, and detailed instructions for doing the deed. So I ordered the parts and tools.
And there they sat, on my dresser, for months.
I knew that it would take a fair amount of time and effort to dismantle my beloved iMac. Between it running all the time, and not having a big block of time to do the repair, it languished. I seriously considered paying someone to do the work for me, but things finally came together. Rainy afternoon, nothing pressing, wife was present to watch the kids. I made sure the Time Machine backup was current, shut Kahuna down, and disconnected all the wires. As I usually do with these things, I pulled up the iFixit manual on my iPad so I could see what to do next.
Turns out I’d made a mistake on the memory upgrade. I knew the iMac had two RAM slots, and it had 8GB total. I ASSumed it had 8GB in one slot, and had an empty slot for another 8GB, so that’s what I ordered. WRONG. It had two 4GB sticks instead. This I learned, after pretty much taking the whole computer apart. Hey, 12GB is better than 8, so I swapped the new stick for one of the old ones. While I was at it, I replaced the 1TB spinny hard drive for a 2TB SSD. I also cleaned out 6 years worth of accumulated dust. I didn’t realize the iMac had a fan, and I’m not sure it could have pushed much air anyway, given the dust choking the airways.
There were a few glitches in the repair instructions, and that slowed me down quite a bit. Between several rounds of going back and fixing things both I and the manual had missed, and wiping up dust as I went, it was a good 5 hours before I put the display (“big, heavy, and glass” according to the instructions) back on. I had new adhesive strips (Apple uses a lot of double-sided tape to hold their products together), but the instructions wisely suggested checking your work before sticking the display back onto the frame.
Fortunately, the upgrade had gone according to plan. I restored my backup onto the new SSD, and it finished while saying it had an hour to go (I hadn’t emptied the trash in like forever). Once the system booted, launching apps was significantly faster, and everything is more responsive. Yeah, it was a hassle, but I’m going to get all that time back and then some with a snappier desktop. I’m writing this post on the upgraded system, and I haven’t seen a single beachball or lag.
Now the question is: do I go ahead and button it up, or order another 8GB stick and completely max it out? I’m kind of leaning toward the latter. It’s not going to kill me to have the display held on by tape for a while longer, after all.
Back when my daily driver was a 2008 MacBook, I maxed out the RAM and put a SSD drive in it, and it felt twice as fast as before (I still use it for vacations and other out-and-about things, although now it’s running Xubuntu). An iMac is a somewhat more difficult beast to upgrade, because there’s no handy hatch to access the RAM and hard drive… but iFixit provides parts, tools, and detailed instructions for doing the deed. So I ordered the parts and tools.
And there they sat, on my dresser, for months.
I knew that it would take a fair amount of time and effort to dismantle my beloved iMac. Between it running all the time, and not having a big block of time to do the repair, it languished. I seriously considered paying someone to do the work for me, but things finally came together. Rainy afternoon, nothing pressing, wife was present to watch the kids. I made sure the Time Machine backup was current, shut Kahuna down, and disconnected all the wires. As I usually do with these things, I pulled up the iFixit manual on my iPad so I could see what to do next.
Turns out I’d made a mistake on the memory upgrade. I knew the iMac had two RAM slots, and it had 8GB total. I ASSumed it had 8GB in one slot, and had an empty slot for another 8GB, so that’s what I ordered. WRONG. It had two 4GB sticks instead. This I learned, after pretty much taking the whole computer apart. Hey, 12GB is better than 8, so I swapped the new stick for one of the old ones. While I was at it, I replaced the 1TB spinny hard drive for a 2TB SSD. I also cleaned out 6 years worth of accumulated dust. I didn’t realize the iMac had a fan, and I’m not sure it could have pushed much air anyway, given the dust choking the airways.
There were a few glitches in the repair instructions, and that slowed me down quite a bit. Between several rounds of going back and fixing things both I and the manual had missed, and wiping up dust as I went, it was a good 5 hours before I put the display (“big, heavy, and glass” according to the instructions) back on. I had new adhesive strips (Apple uses a lot of double-sided tape to hold their products together), but the instructions wisely suggested checking your work before sticking the display back onto the frame.
Fortunately, the upgrade had gone according to plan. I restored my backup onto the new SSD, and it finished while saying it had an hour to go (I hadn’t emptied the trash in like forever). Once the system booted, launching apps was significantly faster, and everything is more responsive. Yeah, it was a hassle, but I’m going to get all that time back and then some with a snappier desktop. I’m writing this post on the upgraded system, and I haven’t seen a single beachball or lag.
Now the question is: do I go ahead and button it up, or order another 8GB stick and completely max it out? I’m kind of leaning toward the latter. It’s not going to kill me to have the display held on by tape for a while longer, after all.
Saturday, December 28, 2019 No comments
Garlic-Sriracha party mix
I promise TFM won’t become a cooking blog, but eating is a big part of life here. I’ll be posting one or two more recipes in the coming weeks.
Let’s say you’re like me, and party mix is one of your weaknesses, but you long for a little extra bang in your snack. I got ya covered.
Everyone has their own variant on party mix; some add pretzels, some add Cheerios, and the wife prefers to use Crispix and lots of cashews. Personally, I think Wheat Chex is essential, because it does an awesome job of trapping the flavorings. Anyway, here’s my variant, which brings on the flavor but is less loaded with sodium than some:
Garlic-Sriracha party mix
2 c (each) Corn Chex, Rice Chex, Wheat Chex
1 c Cheerios (regular or multi-grain*)
1 c (each) Brazil nuts, unsalted almonds, unsalted peanuts
6 T butter or margarine
2-1/2 T Sriracha chili-garlic paste
1 tsp “Italian blend” salt-free seasoning
3/4 tsp No-salt
1/2 tsp onion powder
2 cloves garlic, pressed
Preheat oven to 250°F.
Combine cereals and nuts in a large roasting pan; set aside.
Melt butter in a saucepan. Add remaining ingredients and stir until combined. Pour the mixture over the cereals and nuts, and stir until evenly coated.
Bake 1 hour at 250°F, stirring every 15 minutes. Allow to cool before putting in an air-tight container.
Flavors seem to strengthen over time, so make this on the 29th for the New Year’s Eve festivities (if you can stand to wait that long).
*Multi-grain Cheerios adds a little sweetness, taking the edge off the heat. But adjust the dry ingredients as you please. Make it your own. Maybe leave a comment and tell me how you like to do your own party mix. You never know, I might adopt a couple things!
Let’s say you’re like me, and party mix is one of your weaknesses, but you long for a little extra bang in your snack. I got ya covered.
Everyone has their own variant on party mix; some add pretzels, some add Cheerios, and the wife prefers to use Crispix and lots of cashews. Personally, I think Wheat Chex is essential, because it does an awesome job of trapping the flavorings. Anyway, here’s my variant, which brings on the flavor but is less loaded with sodium than some:
Garlic-Sriracha party mix
2 c (each) Corn Chex, Rice Chex, Wheat Chex
1 c Cheerios (regular or multi-grain*)
1 c (each) Brazil nuts, unsalted almonds, unsalted peanuts
6 T butter or margarine
2-1/2 T Sriracha chili-garlic paste
1 tsp “Italian blend” salt-free seasoning
3/4 tsp No-salt
1/2 tsp onion powder
2 cloves garlic, pressed
Preheat oven to 250°F.
Combine cereals and nuts in a large roasting pan; set aside.
Melt butter in a saucepan. Add remaining ingredients and stir until combined. Pour the mixture over the cereals and nuts, and stir until evenly coated.
Bake 1 hour at 250°F, stirring every 15 minutes. Allow to cool before putting in an air-tight container.
Flavors seem to strengthen over time, so make this on the 29th for the New Year’s Eve festivities (if you can stand to wait that long).
*Multi-grain Cheerios adds a little sweetness, taking the edge off the heat. But adjust the dry ingredients as you please. Make it your own. Maybe leave a comment and tell me how you like to do your own party mix. You never know, I might adopt a couple things!
Monday, December 09, 2019 No comments
Moving to a Big Boy Bed [[UPDATED]]
AJ is doing very well. She had her first church visit yesterday, and that went well. She has put on a pound since she came home from the hospital (that was like >20% of her take-home body weight, people… babies grow fast).
So we sent DD and AJ the mattress out of Charlie’s crib, which meant we had to get serious about updating his sleeping arrangement. The crib is a “4-in-1,” which in practical terms means it converts into toddler bed, daybed, and finally (using the back as a headboard) a full-size bed. The wife thought a full-size bed would fit in Charlie’s small room at first, then realized it wouldn’t. That was the bad news. The good news was, the bed frame width is adjustable. We slid it down to twin-bed size, I cut a piece of 1/2" plywood I had in the garage to fit, then (temporarily) inflated the air mattress and layered a foam topper over it.
The body pillow behind him goes on the floor for actual night-night time. He still has a habit of rolling off the bed, and we’re trying to provide him with a soft landing. He made it to about 5:30am this morning, so I think his bod is starting to program itself to not flip and flop all over the place. Then again, I remember falling out of the top bunk a couple of times, when I was 4 and 5, onto a floor (no carpet, and certainly no body pillows to cushion the landing).
Next stop is to replace the air mattress, but we’ve found he does like a soft bed. I guess we can go with memory foam if nothing else.
UPDATE: We got him a cushy mattress with memory foam. He loves the way it feels, but not so much that he’ll go to sleep by himself. :-P
So we sent DD and AJ the mattress out of Charlie’s crib, which meant we had to get serious about updating his sleeping arrangement. The crib is a “4-in-1,” which in practical terms means it converts into toddler bed, daybed, and finally (using the back as a headboard) a full-size bed. The wife thought a full-size bed would fit in Charlie’s small room at first, then realized it wouldn’t. That was the bad news. The good news was, the bed frame width is adjustable. We slid it down to twin-bed size, I cut a piece of 1/2" plywood I had in the garage to fit, then (temporarily) inflated the air mattress and layered a foam topper over it.
As long as you don't expect me to actually go to sleep… |
Next stop is to replace the air mattress, but we’ve found he does like a soft bed. I guess we can go with memory foam if nothing else.
UPDATE: We got him a cushy mattress with memory foam. He loves the way it feels, but not so much that he’ll go to sleep by himself. :-P
Sunday, December 01, 2019 No comments
Mason got a turn…
I asked Mason what he thought of AJ after he had a chance to hold her.
“Small, warm… and her nose is really tiny.”
Speaking of AJ, she’s gobbling down formula (and increasing amounts of what DD is producing) very well. She’s still under a pretty strict germ protocol—anyone who holds her has to wash thoroughly first. We didn’t have those precautions for preemie DD in 1989, let alone preemie me in 1958, but back then we didn’t have MRSA, flesh-eating bacteria, and all those other fun things we have today. [PEOPLE: TAKE ALL YOUR %$@!%&* ANTIBIOTICS. FINISH THE BOTTLE. DOESN’T MATTER IF YOU’RE FEELING BETTER.]
Mason also reached a milestone of sorts yesterday: he got to crawl into the storage space under the stairs and send out boxes of Christmas decorations. Part of it was that he really wanted to do it, part of it was incoming rain paining my titanium knee. He wore out before the last five or six boxes, but all of those needed inspection anyway. I scooched in, identified what needed to come out (including a kitchen appliance the wife bought who-knows-when and never used), and what could stay.
“I don’t know if this still works,” she said about one random decoration.
“We should purge this stuff, then,” I suggested. She seemed amenable to the idea, which is good. The fewer boxes we have to retrieve (and put away), the better.. I’m sure one of the local thrift stores would be happy to get some seasonal decorations. Mason already has a fever-dream of turning that space into a fort. Unfortunately for him, there aren’t a lot of other good places for storing seasonal items around FAR Manor. The small outbuilding (a/k/a Studio FAR), that I wanted to use as an office/retreat, is pretty well packed with junk. Maybe I should return to my idea of bending some of the pine trees out back into a really big yurt; it would at least keep him (and Sizzle’s kids) occupied.
It’s definitely the most wonderful time (to drink beer).
“Small, warm… and her nose is really tiny.”
Tiny nose! Grainy low-light pic! |
Speaking of AJ, she’s gobbling down formula (and increasing amounts of what DD is producing) very well. She’s still under a pretty strict germ protocol—anyone who holds her has to wash thoroughly first. We didn’t have those precautions for preemie DD in 1989, let alone preemie me in 1958, but back then we didn’t have MRSA, flesh-eating bacteria, and all those other fun things we have today. [PEOPLE: TAKE ALL YOUR %$@!%&* ANTIBIOTICS. FINISH THE BOTTLE. DOESN’T MATTER IF YOU’RE FEELING BETTER.]
Mason also reached a milestone of sorts yesterday: he got to crawl into the storage space under the stairs and send out boxes of Christmas decorations. Part of it was that he really wanted to do it, part of it was incoming rain paining my titanium knee. He wore out before the last five or six boxes, but all of those needed inspection anyway. I scooched in, identified what needed to come out (including a kitchen appliance the wife bought who-knows-when and never used), and what could stay.
“I don’t know if this still works,” she said about one random decoration.
“We should purge this stuff, then,” I suggested. She seemed amenable to the idea, which is good. The fewer boxes we have to retrieve (and put away), the better.. I’m sure one of the local thrift stores would be happy to get some seasonal decorations. Mason already has a fever-dream of turning that space into a fort. Unfortunately for him, there aren’t a lot of other good places for storing seasonal items around FAR Manor. The small outbuilding (a/k/a Studio FAR), that I wanted to use as an office/retreat, is pretty well packed with junk. Maybe I should return to my idea of bending some of the pine trees out back into a really big yurt; it would at least keep him (and Sizzle’s kids) occupied.
It’s definitely the most wonderful time (to drink beer).
Turkey Tacos
I’ll spare you the long-winded, self-indulgent preramble. If you live in the US, you know exactly where this is going: you have a metric crockload of leftover turkey, and you’re trying to figure out what to do with it all. This works really well to resuscitate undercooked or dry bird, too. You can reuse a pound of it this way, anyway. Think of it as a public service…
Anyway, the wife suggested I half the recipe, because Mason probably wouldn’t want turkey tacos. But when he tasted the meat, he was all in. I really didn’t know what to expect, but in the end it was a hit at FAR Manor.
Turkey Tacos
1 lb. leftover Thanksgiving turkey (or any-other-time turkey), shredded
2T oil
1 packet taco seasoning (which usually calls for 2/3c water)
12 taco shells or small/medium tortillas as desired (we like the blue corn taco shells)
shredded cheese
salsa
everything else—tomato, onion, guacamole, sour cream (or crema), sliced avocados, etc.
Heat the oil in a wok or skillet. Add the turkey, and warm. Add taco seasoning and water, cook as directed. Remove from heat, spoon into taco shells, add toppings as desired. Serve with chips (again, we like blue corn) and salsa.
(A brief post-ramble: taco plates are awesome for the purpose, and your supermarket might carry them. If only they had a lip to keep salsa from leaking into the taco area.)
Now to figure out what to do with the other four pounds of leftover turkey.
Anyway, the wife suggested I half the recipe, because Mason probably wouldn’t want turkey tacos. But when he tasted the meat, he was all in. I really didn’t know what to expect, but in the end it was a hit at FAR Manor.
I started eating before I had a chance to take the picture… |
Turkey Tacos
1 lb. leftover Thanksgiving turkey (or any-other-time turkey), shredded
2T oil
1 packet taco seasoning (which usually calls for 2/3c water)
12 taco shells or small/medium tortillas as desired (we like the blue corn taco shells)
shredded cheese
salsa
everything else—tomato, onion, guacamole, sour cream (or crema), sliced avocados, etc.
Heat the oil in a wok or skillet. Add the turkey, and warm. Add taco seasoning and water, cook as directed. Remove from heat, spoon into taco shells, add toppings as desired. Serve with chips (again, we like blue corn) and salsa.
(A brief post-ramble: taco plates are awesome for the purpose, and your supermarket might carry them. If only they had a lip to keep salsa from leaking into the taco area.)
Now to figure out what to do with the other four pounds of leftover turkey.
Thursday, November 28, 2019 5 comments
Monday, November 25, 2019 2 comments
Granddaughter Dearest!
Say hi to AJ, born Saturday afternoon around 4:30pm local time.
She was a month early, extending our streak to three generations. I was a month early, so was Daughter Dearest, and now AJ… all for different reasons. Still, she is doing fine, and might get to come home as early as Thursday (Turkey Day). As preemies often do, she has a touch of jaundice and spends some time in a tanning booth (the NICU version, anyway).
Keep me covered! |
DD and I went down to NICU to see and feed her yesterday evening. DD was rubbing her head, and she got visibly irritated and calmed down instantly when she quit… so she’s already showing some preferences (besides hating to be cold). She also didn’t want to eat, pressing her lips together tight. The nurse persuaded her, though. I told her, “I’m gonna call you AJ,” and she gave me a half-smile and a fart. I guess she approved!
We’ve been a little concerned about DD’s high blood pressure, which was a side-effect of the pregnancy. But after she stood up a couple of times, it returned to a normal range. The nurse said it should go away soon, but the BP was what prompted the early escape this generation.
Back at FAR Manor, we’re in a flurry of activity. We’re sending Charlie’s crib mattress to DD for AJ’s crib, and working on converting his crib to a regular bed (he doesn’t have a lot of room to stretch out in the crib now). That on top of Turkey Day.
Saturday, November 23, 2019 No comments
I want to ride my bicycle
Long ago, I observed TANSTAAFL (There Ain’t No Such Thing As A Free Laptop). I got a throwaway from work, but had to spend $120 to replace all three batteries. In those days, there was the main battery, the CMOS battery, and a “bridge” battery (which kept the system state up long enough to swap in a fresh main battery).
More recently, I find a similar adage holds: TANSTAAFB (There Ain’t No Such Thing As A Free Bicycle).
The Boy found that, when you own a moving company, people give you stuff they don’t want to keep for whatever reason. One of his customers gave him a mid-range road bike—a Fuji Newest 2.0, to be precise. I had a chuckle at the name; I got a mental image of a marketroid trying 'way to hard to come up with something that sounded trendy, then I learned that there are 3.0 and 4.0 versions as well. Now I’m just confused. But I digress. The daughter-in-law was happy to pass it to me, especially since the frame size was perfect for me.
I figure, a “free” road bike is cheaper than buying a second set of wheels for the mountain bike and swapping them as needed (faster than changing tires). Maybe.
A few free weekend hours (amazing!) made themselves available, and I decided to give the Newest bike a trial run. It was a total fiasco: I had no idea how to shift, and the rear derailleur kept hopping between sprockets. Fortunately, both of my brothers are avid cyclists, so I took pictures and texted.
Turns out it’s a “Flight Deck” shifter. The little thumb lever goes up, and you push the brake lever sideways to go down! Other Brother told me, “Once you get the hang of it you can brake and [downshift] at the same time.” It makes sense in a way… if you’re trying to save weight By Any Means Possible, making something that has to exist (like a brake lever) serve two functions is totally logical.
So back on the road. I figured out how to shift the rear easily enough, but the front was frozen… and I was still having the hopping problem. Back to the ol' drawing board, as they used to say a loooooooong time ago.
At the drawing board, or rather flipping the bike upside-down onto a deck box (a/k/a the “camping box,” because I keep all the camping gear in it), I got things halfway sorted. Eyeballing the chain, it was a long way off-center. Shimano’s Sora geartrain has a handy adjustment where the cable enters the rear derailleur, and I got that part taken care of in seconds.
Fiddling with the front took a while, but I finally realized what the issue was: the nub holding the spring back on the front derailleur had snapped off! I toyed with the idea of tapping a screw in its place, but decided to bite the bullet and spend the $30 on a replacement. (I also toyed with the idea of just taking the broken derailleur off and having a 9-speed bike, but I'm kind of anal that way.)
I don’t know how old this bike is, but it could have been built any time after 2006 (which makes it newer than my mountain bike, but whatever). Shimano still makes and sells the Sora geartrain, although there have been a few changes over the years. The old front derailleur is a 3304, and the closest replacement I could find was 3030. If it fits, it sits, says I.
One would think mounting a derailleur would be not terribly complicated… but then again, this is FAR Manor. First off, it seems that there are three sizes of seat tubes to contend with. Rather than to maintain three SKUs, Shimano decided to size the clamp for the biggest tube and include shim(ano)s for the next two sizes down. Kinda cheesy, if you ask me, but it seems to work.
Second, the new derailleur has a lot more plastic than the old one. If it made a significant weight difference, I wouldn’t mind, but the newer one might be slightly lighter. Might.
Third one’s the big annoyance. The old derailleur had a screw at the back of the cage (the part that surrounds the chain and pushes it from gear to gear), so it was really easy to take off. Undo the screw, cable, and clamp, and off it comes. The new one is riveted, which means I needed to separate the chain (and rejoin it after threading it through the cage). OK, fine, finding the master link wasn’t difficult, but this doesn’t have the U-shaped clip I was expecting. This is the newer “QuickLink.” Nothing I had would pop that thing loose, so I put Charlie in the Orange Crate and ran up to the local bike shop… only to find they’re closed on Sundays. So in a fit of pique, I went to Amazon and ordered a master link tool and a bike stand. Oh well, I have several other things on the list I can buy local.
The master link tool arrived Tuesday; I popped the chain, mounted the derailleur, then put the chain back together. Things go amazingly fast when you have the right tools. The adjustments had to wait for the bike stand, which arrived Wednesday. The stand also came with a pair of 5mm Allen wrenches, a common size on the Newest, so that was a bonus.
I’ve wanted a bike stand for years, ever since I saw one in use at a bike shop. They get your bike up high enough to work on, and you can work all the controls without having to flip the bike upside down or hold the rear tire off the pavement.
So while I was grabbing a master link tool, I decided to check out stands as well. I settled on one that had pretty good ratings, was less than $60, and folds up when not in use. I should have done this years ago.
Anyway. Initially, it seemed like the new front derailleur would need little adjustment. It hopped from chainring to chainring without issue… except for the chittering in certain rear gears with the middle chainring. I turned the adjustment screws, and the noise went away.
Friday came around. I was working at home due to some issues with Granddaughter Dearest (he next post will almost certainly be her birth announcement/celebration), so I ate a quick lunch, made some last-minute adjustments to the brake pads, aired up the tires (air leaks between rubber molecules at 100psi, I think), and started Shakedown Cruise #2. Still had the issue with the middle chainring, so breaking a sweat in 60F weather while wearing a long-sleeve T-shirt happened but didn’t run as long as I had hoped. I got that sorted, which requires more high-gear adjustments. You can’t do just one thing, I’ve found.
I haven’t rode more than 2 miles on this bike so far, and it’s clear the previous owner rode the living hell out of it. The not-stock tires are nearly new, I’m not sure if the fork and wheels are stock, the frame has here-and-there dings, the left end of the handlebar is ground off at an angle, and there’s a lot of rust in the threads (rather impressive, as the Newest 2.0 has an aluminum frame). Sensors and mount for a bike computer are there, as is a mount for a small 7-LED flashlight, but the computer is gone (the flashlight is still there, though). Some rear accessory was also gone, and the mounting clamp itself was rusted tight, so I cut it off. I kind of get the impression that the front derailleur breaking was the impetus/excuse to get a newer bike (but how could anything be newer than Newest?).
But that’s cool. I’m looking forward to putting a few miles on the bike, and hearing what it has to say about its history. My bro Solar has a “beer and tacos” bike; I have to go more than twice as far has he does for either, but that’s fine. I need more exercise. Maybe I’ll get a trailer to tow Charlie along on my rides; he can have refrieds and rice while I have tacos, and I’ll burn even more calories.
It’s supposed to rain all day tomorrow, so I can put Newest on the stand and get that middle chainring issue adjusted. If all goes well, I can at least ride to the church and back (10.2 miles round-trip) Sunday afternoon.
More recently, I find a similar adage holds: TANSTAAFB (There Ain’t No Such Thing As A Free Bicycle).
The Boy found that, when you own a moving company, people give you stuff they don’t want to keep for whatever reason. One of his customers gave him a mid-range road bike—a Fuji Newest 2.0, to be precise. I had a chuckle at the name; I got a mental image of a marketroid trying 'way to hard to come up with something that sounded trendy, then I learned that there are 3.0 and 4.0 versions as well. Now I’m just confused. But I digress. The daughter-in-law was happy to pass it to me, especially since the frame size was perfect for me.
I figure, a “free” road bike is cheaper than buying a second set of wheels for the mountain bike and swapping them as needed (faster than changing tires). Maybe.
Dual action! |
Turns out it’s a “Flight Deck” shifter. The little thumb lever goes up, and you push the brake lever sideways to go down! Other Brother told me, “Once you get the hang of it you can brake and [downshift] at the same time.” It makes sense in a way… if you’re trying to save weight By Any Means Possible, making something that has to exist (like a brake lever) serve two functions is totally logical.
So back on the road. I figured out how to shift the rear easily enough, but the front was frozen… and I was still having the hopping problem. Back to the ol' drawing board, as they used to say a loooooooong time ago.
At the drawing board, or rather flipping the bike upside-down onto a deck box (a/k/a the “camping box,” because I keep all the camping gear in it), I got things halfway sorted. Eyeballing the chain, it was a long way off-center. Shimano’s Sora geartrain has a handy adjustment where the cable enters the rear derailleur, and I got that part taken care of in seconds.
It’s dead, Jim. |
I don’t know how old this bike is, but it could have been built any time after 2006 (which makes it newer than my mountain bike, but whatever). Shimano still makes and sells the Sora geartrain, although there have been a few changes over the years. The old front derailleur is a 3304, and the closest replacement I could find was 3030. If it fits, it sits, says I.
One would think mounting a derailleur would be not terribly complicated… but then again, this is FAR Manor. First off, it seems that there are three sizes of seat tubes to contend with. Rather than to maintain three SKUs, Shimano decided to size the clamp for the biggest tube and include shim(ano)s for the next two sizes down. Kinda cheesy, if you ask me, but it seems to work.
Second, the new derailleur has a lot more plastic than the old one. If it made a significant weight difference, I wouldn’t mind, but the newer one might be slightly lighter. Might.
Third one’s the big annoyance. The old derailleur had a screw at the back of the cage (the part that surrounds the chain and pushes it from gear to gear), so it was really easy to take off. Undo the screw, cable, and clamp, and off it comes. The new one is riveted, which means I needed to separate the chain (and rejoin it after threading it through the cage). OK, fine, finding the master link wasn’t difficult, but this doesn’t have the U-shaped clip I was expecting. This is the newer “QuickLink.” Nothing I had would pop that thing loose, so I put Charlie in the Orange Crate and ran up to the local bike shop… only to find they’re closed on Sundays. So in a fit of pique, I went to Amazon and ordered a master link tool and a bike stand. Oh well, I have several other things on the list I can buy local.
The master link tool arrived Tuesday; I popped the chain, mounted the derailleur, then put the chain back together. Things go amazingly fast when you have the right tools. The adjustments had to wait for the bike stand, which arrived Wednesday. The stand also came with a pair of 5mm Allen wrenches, a common size on the Newest, so that was a bonus.
Upsy-daisy! |
So while I was grabbing a master link tool, I decided to check out stands as well. I settled on one that had pretty good ratings, was less than $60, and folds up when not in use. I should have done this years ago.
Anyway. Initially, it seemed like the new front derailleur would need little adjustment. It hopped from chainring to chainring without issue… except for the chittering in certain rear gears with the middle chainring. I turned the adjustment screws, and the noise went away.
Friday came around. I was working at home due to some issues with Granddaughter Dearest (he next post will almost certainly be her birth announcement/celebration), so I ate a quick lunch, made some last-minute adjustments to the brake pads, aired up the tires (air leaks between rubber molecules at 100psi, I think), and started Shakedown Cruise #2. Still had the issue with the middle chainring, so breaking a sweat in 60F weather while wearing a long-sleeve T-shirt happened but didn’t run as long as I had hoped. I got that sorted, which requires more high-gear adjustments. You can’t do just one thing, I’ve found.
I haven’t rode more than 2 miles on this bike so far, and it’s clear the previous owner rode the living hell out of it. The not-stock tires are nearly new, I’m not sure if the fork and wheels are stock, the frame has here-and-there dings, the left end of the handlebar is ground off at an angle, and there’s a lot of rust in the threads (rather impressive, as the Newest 2.0 has an aluminum frame). Sensors and mount for a bike computer are there, as is a mount for a small 7-LED flashlight, but the computer is gone (the flashlight is still there, though). Some rear accessory was also gone, and the mounting clamp itself was rusted tight, so I cut it off. I kind of get the impression that the front derailleur breaking was the impetus/excuse to get a newer bike (but how could anything be newer than Newest?).
But that’s cool. I’m looking forward to putting a few miles on the bike, and hearing what it has to say about its history. My bro Solar has a “beer and tacos” bike; I have to go more than twice as far has he does for either, but that’s fine. I need more exercise. Maybe I’ll get a trailer to tow Charlie along on my rides; he can have refrieds and rice while I have tacos, and I’ll burn even more calories.
It’s supposed to rain all day tomorrow, so I can put Newest on the stand and get that middle chainring issue adjusted. If all goes well, I can at least ride to the church and back (10.2 miles round-trip) Sunday afternoon.
Friday, November 15, 2019 1 comment
Granddaughter Dearest, an early peek
It’s amazing what they can do with ultrasound these days. They zoomed right in on Granddaughter Dearest’s face…
Her face is all squooshed… as the Genie might say, “itty bitty living space!” Looks like she has some hair, too, although that could be focus/distortion.
The Blessed Event is about a month away, now… although DD is starting to be less insistent about carrying her to term. “She could decide to come early," DD opined recently. I don’t hold out a lot of hope about sharing a birthday, but whatever the date, it’s all good.
Look at those duck lips! |
The Blessed Event is about a month away, now… although DD is starting to be less insistent about carrying her to term. “She could decide to come early," DD opined recently. I don’t hold out a lot of hope about sharing a birthday, but whatever the date, it’s all good.
Tuesday, November 12, 2019 No comments
Fixing supper, redux
Back in May, I blogged about Kroger’s Home Chef meal kits. They’re basically raw ingredients and a recipe card. None of the prep work has been done, which is the only thing that would justify the markup on those kits.
Well, they still have the meal kits, but now they feature recipes on their website as well. Even better, you can get a weekly “meal planning” email with links to five recipes. I haven’t seen a week yet where I want to try all five (each week, at least one of them requires an Instant Pot and I don’t have one), but one or two usually catch my interest and I add them to “My Recipes” for future reference. Of course, they have a helpful feature that lets you add the ingredients to your grocery list. Many have a very short total time listed, but I’ve found those wildly optimistic (or, in the case of the most recent, doesn’t count the time needed to cook pasta). Clearing off work surfaces adds to the total time, but that’s specific to FAR Manor.
So, here’s links and commentary to the recipes I’ve tried so far:
Well, they still have the meal kits, but now they feature recipes on their website as well. Even better, you can get a weekly “meal planning” email with links to five recipes. I haven’t seen a week yet where I want to try all five (each week, at least one of them requires an Instant Pot and I don’t have one), but one or two usually catch my interest and I add them to “My Recipes” for future reference. Of course, they have a helpful feature that lets you add the ingredients to your grocery list. Many have a very short total time listed, but I’ve found those wildly optimistic (or, in the case of the most recent, doesn’t count the time needed to cook pasta). Clearing off work surfaces adds to the total time, but that’s specific to FAR Manor.
So, here’s links and commentary to the recipes I’ve tried so far:
- Italian Sausage and Pasta Bake—this one was a hit with everybody, including oft-fussy Mason. Wife doesn’t like casing, so I removed them before slicing the sausages. The only wrinkle is that I bought mild Italian sausage and it still came out pretty spicy. Maybe next time, I’ll use “sweet” sausage. And, of course, the total time didn’t include preparing the rotini.
- Quick Mediterranean Chili—another widely-accepted dish, which actually came in fairly close to the posted prep time (and I doubled the recipe). Wife thought it was a tad spicy, even though I used half the paprika called for. I added a half teaspoon of the ghost pepper sauce The Boy made for me to my bowl, and it perked everything right up.
- Bacon, Apple, and Sage Stuffed Chicken Breasts—the adults really liked this. The kids were just OK with it. I thought I had sage growing along the driveway, but it must have died out (or the wife hit it with Roundup when she was cleaning up the weeds). I subbed fresh lemon balm for the sage, and (on the wife’s recommendation) rolled them in bread crumbs. Next time, though, instead of slicing into the side to make a pocket, I'll go in from the top and add side chambers. That should keep more of the cheese inside. I like big breasts and I cannot lie, but these were big enough to make two servings per. What I ended up with fed my family and Daughter Dearest’s with some left over… maybe I didn’t have to double the recipe on that one.
Subscribe to:
Posts (Atom)