Looking for writing-related posts? Check out my new writing blog, www.larrykollar.com!

Thursday, May 16, 2019 No comments

Adventures of a #techcomm Geek: Sharp Edges when Rounding

One of the advantages of using a text-based markup grammer for documentation—these days, often XHTML or some other XML, but could be Markdown, Restructured Text, Asciidoc, or even old-sK001 typesetting languages like troff or TeX—is that they’re easy to manipulate with scripts.

There are quite a few general-purpose scripting languages that do a fine job of hunting down and acting on patterns. I’m conversant with Perl, and am learning Python; but when I need to bang something out in a hurry and XML is (mostly) not involved, Awk is how I hammer my nails. Some wags joke Awk is short for “awkward,” and it can be for those who are used to procedural programming. Anyone exposed to event-based programming—where the program or script reacts to incoming events—will find it much more familiar. Actually, “awk” is the initials of the three people who invented it: Aho, Weinberger, Kernighan (yes, that Brian Kernighan, he who also co-invented the C language and was a major player on the team that invented Unix).

Instead of events, Awk reacts to patterns. A pattern can be a plain string, a variable value, a regular expression, or combinations. Other cool things about Awk:
  • Variables have whichever type is most appropriate to the current operation. For example, your script might read the string “12.345,” assign it to x, then you can use a statement like print x + 4 and you’ll get 16.345.
  • The language reference (at least for the original Awk) fits comfortably in a manpage, running just over 3 pages when printed. Even the 2nd edition “official” reference is only 7 pages long.
  • It’s a required feature in most modern Unix specifications. That means you’ll always have some version of Awk on an operating system that has some pretensions to be “Unix-like” unless it’s a stripped, embedded system. On the other hand, even BusyBox-based systems include a version of Awk. Basically, that means Awk is everywhere except maybe your phone. Maybe.
If your operating system is that Microsoft thing, you can download a version of Awk for it. If you install the ISH app, you can even have it on an iPhone.

Now what am I going to do with it?

Okay. I told you all that to tell you this.

I’m working on something that extracts text from a PDF file, and formats it according to rules that use information such as margin, indent, and font. It requires an intermediate step that transforms the PDF into a simple (but very large) XML file, marking pages, blocks, lines, and individual characters.

“But wait a minute!” you say. “I thought Awk only worked on text files. How does it parse XML?”

Like many useful utilities first released in the 1970s, Awk has been enhanced, rewritten, re-implemented from scratch, extended, and yet it still resembles its ancestral beginnings. The GNU version of Awk (commonly referred to as gawk) has an extensions library and extensions for the most commonly-processed textual formats, including CSV (still beta) and XML. In fact, the XML extension is important enough that gawk has a special incantation called xmlgawk that automatically loads the XML extension.

The neat thing about xmlgawk, at least the default way of using it, is that it has a very Awk-like way of parsing XML files—it provides patterns for matching beginnings of elements, character data, and ends of elements (and a lot more). This is basically a SAX parser. If you don’t need to keep the entire XML file in memory, it’s a very efficient way to work with XML files.

So. In most cases, I only need the left margin of a block (paragraph). Sometimes, I need the lowest extent of that block as well, to throw out headers and footers. I need to check the difference between the first and second line (horizontally), and possibly act upon it.

In the document I used for testing, list items (like bullets) have a first line indent of –18 points. “Cool,” I said. “I can use that to flag list items.”

All well and good, except that it only worked about 10% of the time. I started inserting debugging strings, trying to figure out what was going on, and bloating the output beyond usefulness. Finally, I decided to print the actual difference between the first and second lines in a paragraph, which should have been zero. What I found told me what the problem was.

    diff=1.24003e-18

In other words, the difference (between integer and floating point numbers) was so miniscule as to matter only to a computer. Thus, instead of doing a direct comparison, I took the difference and compared that to a number large enough to notice but small enough to ignore—1/10000 point.

And hey presto! The script behaved the way it should!

It’s a good thing I’ve been doing this at home—that means I can soon share it with you. Ironically, it turns out that we might need it at the workplace, which gives me a guilt-free opportunity to beta-test it.

Wednesday, May 15, 2019 No comments

The Dresser Purge

In the brief two years I was on my own, I concluded 15 changes of clothes was the ideal number. It let me do laundry every two weeks, with one extra pair just in case I had to postpone laundry day.

Clothes accumulate, like everything else, and these days I have a lot more than 15 changes. And somehow, laundry day is twice a week—actually, that makes sense. Four people in FAR Manor means four times the laundry, right?

After the Great Closet Purge, I started putting out of season clothes in a storage bin I kept in the closet, to relieve pressure on the bulging dresser. This worked for a while.

De-bulging the dresser
But the warm weather got to Sector 706 couple weeks ago, and I got the bin out to swap stuff around. Being about 35 pounds lighter than last year, I tried on shorts… and if I could pull them off without undoing them, and half of them fit the description, they began the purge pile. Then I tried shorts that wintered over in the dresser (because the bin was crammed full). All in all, I shed eight pairs of shorts, including one that still had tags on it. There were also eight pairs of swimsuits between the bin and dresser… where did they all come from? I decided three pairs was plenty, and added the rest to the purge pile. I got the now-too-big pants out of the closet and tossed them on.

Then came the T-shirts. I weeded them out, and finally the purge filled a large garbage bag. Except for the three remaining swimsuits, my bottom dresser drawer was empty and the other drawers had headroom. And there was plenty of room for the winter clothes in the bin. But I think the shirts in my closet have decompressed, because now it feels as packed as before. I should probably weed them out again; if I lose a few more pounds, I might be able to go from XL to L.

I still have way more than 15 changes of clothes. Even with more frequent laundry, I probably don’t need to cut down to 8 or 10, though.

Wednesday, April 17, 2019 No comments

Charlie, soccer, and a few mini-rants

With a new car in the garage—a 2019 Kia Soul EX—I now have that critical extra seat to take both Mason and Charlie places. I still have the Miata, but I won’t be putting all the miles on it anymore. Of course, that means I “get” to take Charlie to Mason’s soccer practices… which means I don’t get to sit and chat with the other soccer dads quite so much.

The upside is, we bring Charlie his own soccer ball, find an empty nearby field, and let him wear himself out dribbling the ball around. He was, despite his best efforts, completely zorched when we got home tonight.


He’s not terrible at ball control, which isn’t something you can say about many U8 or even some U10 players. His throw-in technique is better than half the players in Mason’s U10 league—ball overhead, both feet planted, no coach could ask for more. His birthday was 8 days past the cut-off for “U4 mini-league” this spring, but I’ll sign him up in the fall. It’ll be hilarious, watching a bunch of 3 year olds swarming the soccer ball… or sitting in the grass and playing in the dirt… (BTW, that’s Mason wearing the red/orange shirt in the background, flailing his arms. He scored a personal-record five goals in last Saturday’s game, although I only saw three because I was busy trying to keep Charlie from bolting onto the field.)

Mini-rant #1: How to get me to sign up for auto-pay
Somehow or another, I missed setting up the payment for last month’s cellphone bill. In a highly uncharacteristic move for AT&T, they didn’t immediately send me a “hey, pay up” email, text, or anything else. I had this nagging “did I pay them?” thing going on, but figured they would let me know if I hadn’t. So I go online to pay this month’s bill, and find the bill is about double what it usually should be. Whatever, I thought, and clicked “Pay My Bill.”

The website immediately started grinding, trying to get its act together, but enough time went by for it to pop up a “hey, are you still there?” notification. I gave up, figuring it was just a temporary glitch. (AT&T’s “up”dated website is gobs slower and far less responsive than the old one, BTW.) Then they had the nerve to pop up a “how are we doing?” notification. I let them know, in spades, then closed the tab. Trying again this evening gave me the same results. I finally went to pay it over the phone using the convenient *729 number. It asked me if I wanted to set up auto-pay… and yeah, why not? Most of my other monthly bills are on autopilot now.

So that’s how to get me to sign up for auto-pay. Conveniently forget to tell me I let one slip, then hose up your website to the point that I can’t get things caught up when I find out.

Mini-rant #2: When auto-pay gives you an Epic FAIL
And then, there’s the credit union’s credit card. I happened to be home last week one afternoon, and the home phone rang. The caller ID read CARSERVICES. Figuring this was a telespammer selling extended warranties, I answered to tie up the phone line (the longer you keep those @$$#0|3$ on the line, the less time they have to bother someone else). To my surprise, it was the credit union, wondering why I hadn’t paid my credit card balance.

“Huh?” I asked. “I had auto-pay set up.”

“Did you pay off the balance?” (I had, two months prior.) “If you pay off the balance, auto-pay automatically cancels.”

Surprise!

I happened to have the credit union website up on my computer at the moment, so I set up an immediate transfer and all was well. Except that I was miffed about auto-pay getting canceled without so much as a “good job, dude, and sayonara” message. Unlike mini-rant #1, I hadn’t forgotten anything—just ASSumed it was taken care of. The other credit cards I have on auto-pay just don’t transfer anything if I haven’t put anything on them, or pay off the balance if it’s less than what I set up on a monthly basis. There’s always a joker in the deck.

Mini-rant #3: Taxing taxes
Unlike many people, I don’t mind paying taxes. They keep the roads paved, provide food and healthcare to (not enough of) those who need it, run schools, and keep essential emergency services going. Are there things I wish they would do instead of other things I wish they wouldn’t? Oh heck yes. But overall, it’s better to contribute to the general welfare and reap the benefits. If you want to see what happens when you don’t have taxes, spend a few months in Somalia.

Anyway. I’ve been pretty good about getting the federal/state tax returns done in recent years, usually in late February or early March. This year was different, through no fault of my own for a change. We got our W-2s (as usual) right at the end of the January 31st deadline… but before I could grab the tax software and get to work, I got an email from work. In essence, it said, “the payroll company screwed up the W-2s, and we’ll get fixes to you ASAP.”

Weeks went by, and then months, without fixes. Some of us would email HR on occasion, and get the same response: “they haven’t fixed it yet, we’ll let you know.”

FINALLY, in the first week of April, they rolled out the fixes. It just so happened that I was out of town that week, so it was the week after before I could do anything about it. The wife and I both have business stuff to deal with, so it’s not just a matter of slapping down a few numbers and sending it off. Fortunately, it turns out the IRS has a way of filing for an extension online… and I wasn’t the only one who was up against the gun. The father in law needed some extra time as well.

With any luck, I’ll be able to finish up this weekend. Even with all the games Ch*mp played with withholding, there should be a refund.


Sound off!
What’s your rant du jour? Or maybe you have a new car you want to tell me about? :) Drop a comment, I love 'em.

Sunday, March 24, 2019 1 comment

Losing a Charlieweight

About six months ago, my weigh-in at the doctor’s office was not a happy occasion for me. I came in around 234 lbs, the most I’ve ever weighed. The doc didn’t give me too much grief about it, but suggested I try to get more active.

Fortune was looking out for me, though. Work and the group insurance team up to sponsor a program called “Naturally Slim.” “Lose weight while eating the foods you love,” the website proclaims. Yeah, by not eating very much of it, I thought, but figured I needed to do something. So I signed up.

Turned out I was right. But the part I missed was, they give you the tools to eat less… or at least remind you of what the tools are. What makes it work is, they tie the tools to their purpose (which in this case is getting to and maintaining a healthy weight without starving yourself). It boils down to three core principles:


  1. Eat when you’re hungry (but before you get to that RAW MEAT NOW!!!! stage).
  2. Eat slow.
  3. Stop when you’re full.


There’s more to it, but all the “more” is to support those core principles.

Yeah, yeah, so how’s it working?

Together, we weigh what I used to weigh
on my own. (Photo credit: Mason)
Quite well, actually. There have been times I’ve fallen off the wagon, but all that means is that you jump back on. I can now wear all the pants I couldn’t before because they were too tight, and have had to ditch some that won’t stay on anymore. My belt is at the tightest notch, and in the last week I’ve been trying to pull it in yet another notch… time for a new belt. I passed my current goal, 199.9, this last week. Since Charlie is 34 pounds right now, I’ve lost an entire Charlie worth of weight.

I had to celebrate with an “oil change,” that is, a chili dog and onion rings from Varsity Jr. I ate it slow and enjoyed every bit of it… and it was just enough to get me full. And that's another advantage: if you go to a restaurant, you can often get three meals for the price of two—or even two for the price of one. Or you can order off the value menu and save about half what you would usually spend. For example, I hit upon a "mini" quesadilla and nachos combo at Taco Bell that costs about $4. I can order it on my phone from the office, and it's ready (or nearly so) when I arrive to pick it up.

Next goal is 194 lb, which is the lowest I’ve weighed since moving to FAR Manor. I’m not sure I’ll be able to reach my final goal of 185 lb, but it’s something to aim for.

Thursday, February 28, 2019 No comments

Adventures of a #techcomm Geek: Info Architecture

In this adventure, we find that structure isn’t always structure. And sometimes, the structure jumps up and smacks you to get your attention. More geekiness follows…


Image: openclipart.org
As part of our conversion to DITA at work, I shuffled some things around in the huge manual I work on. I moved a huge wad of reference material into an appendix; other content can easily link to it when needed. But the reshuffling got me to take a look at the reference material.

Managed network devices, like the ones I usually write about for work, usually have a way to message the mothership about various issues. Examples include:


  • Hi, I’m online.
  • The power’s out here. I’m running on my battery.
  • Here’s some stats from the last connection.
  • One of my components just failed!


The messages aren’t that chatty, of course, and they often include some variable data. Some are more urgent than others, and might require some action by the network operators.

I had separate topics describing each message, and they came out of the conversion tool as concept topics—a lot more generic than I wanted. As I was trying to get everything done at once, I didn’t give it too much thought. Since the messages were reference material, they would be fine as references. I split them into sections (format, severity, cause, action), and moved on.

DITA to the rescue? Um… nope.


Later on, I came back to the messages. “There has to be a better way,” I thought. After all, the sections could get out of order, or end up with different titles—there’s all sorts of ways to be inconsistent with reference topics. My next thought was, “Hey, DITA has hundreds of elements, and its prime purpose is software documentation. There's probably an entire message domain waiting for me.”

In reality, there are three message-related elements in the entire ocean of DITA, and two of them are inline (<msgph> and <msgnum>). The third is <msgblock>, for tagging message output.

Ah, the joys of information architecture. Creating a message domain from scratch was a possibility, but would likely be a hard sell to the co-workers.


We’re in trouble(shooting) now


I gave a moment to the idea of using troubleshooting topics—then it hit me. A message has a condition (the message itself), a cause (why it was logged), and a solution (what to do about it). That’s exactly the structure of a troubleshooting topic!

The only sticky point was where to document the message format, and I quickly decided that was part of the condition. I used @outputclass="message" to tag the topics, and to have the transform use Format: instead of Condition: for the condition part. I converted a few to troubleshooting topics, and it worked as well as it seemed it would.

On to the next thing


Then yesterday, I got a meeting invite with an attachment, a follow-up to a discussion a few of us had last week. One of the groups in our far-flung department uses InDesign to produce actual printed deliverables (how quaint!). The fun part is, the page size is about 4 inches square—so it’s not a matter of tweaking our transform plugin; we need a whole new one.

But when I started looking at it, the structure almost leaped off the screen, despite a couple of misplaced pages. Each chapter contained a single task, and each step used one page for substeps and graphics. Having that revelation made the call go a lot faster and more smoothly, because it was one of those things that are obvious once you see it. I just happened to be the first one to see it.

So I did a conversion dance, involving lots of pixie dust: PDF → Word, then Pandoc converted that to Markdown. After some serious cleanup (and moving misplaced content where it belonged), I used a couple of scripts to break the Markdown file into topics and create a bookmap. DITA-OT gobbled up the bookmap and Markdown topics, and spit out DITA topics. Thus, I had a pilot book we can use as test data for the transform.

The InDesign users also have a couple more formats; one is close enough to a regular book that we’ll have them use the standard transform. The other is a folded four-panel sheet… that one is going to be interesting. I’m going to have to resist the temptation of blowing off documentation work for glorious coding.

Stay writing… until I geek again.

Tuesday, February 26, 2019 No comments

A weekend at Camp Driveway

It has been a wet winter so far. We’re currently getting a few days of dry (and reasonably nice, for late February) weather… in mid-week, of course, when we’re all working or at school. But a couple weekends ago, we had a mostly dry weekend—that is, the rain didn’t arrive until Sunday afternoon. It was seasonably cold—around 50°F for highs, not quite freezing for lows.

Roughing it in style
If you ever end up with a popup camper, Popup Portal is a deep hive mind that can tell you pretty much everything from the most basic tips to walking through complete rebuilds. Now the Starflyer (I can’t improve on the name that Starcraft gave it) doesn’t need anything close to a complete rebuild, but there are a few maintenance issues that the previous owner (and perhaps those who came before) neglected. The Portal has been very helpful in that regard.

One thing the hive mind recommends for new popup owners is to do what they call “Camp Driveway.” In other words, set up the camper in your driveway or back yard, and spend the weekend in it. You get to test it out, and figure out what you need before you go “live.” Mason was wanting to try out the new camper, so I opened it up and Camp Driveway was on!

Fortunately, I’d ordered a bunch of accessories from Amazon—an extension cord, an adapter to plug an RV into a house outlet, leveler, heater, 12V LED bulbs (they’re brighter and draw less power, important if you’re using a battery for lighting) and a few repair and maintenance things. I was pleased to find that everything worked as intended. The interior lights did a fine job of illuminating the camper, the stove fired up once the air got worked out of the lines, the outlets were happy to charge my phone and Mason’s tablet (and keep a night light glowing). The “Little Buddy” heater, which uses the same small propane cylinders as lanterns, was a big help because the electric space heater that came with the camper wasn’t too helpful. With both heaters going, the digital thermometer I brought along inched up to about 67°F at tabletop level (not nearly as warm along the floor, though!). But still, with the beds a little higher yet, I figured that was going to be just fine. Besides, we had the same sleeping bags we used for Mason’s Polar Bear Camping outing a couple years ago. If we kept warm enough in an unheated tent, a popup with (some) heat would be at least as warm.

It was. My first night was restless, with the electric heater kicking on and off every 15 seconds or so, but I stayed warm enough. Mason, wrapped up in the down mummy bag, had no trouble sleeping at all. For us old farts, I think we’ll need a memory foam topper on our bed. The camper came with a literal Porta-Potti, a little self-contained toilet that sits in a cabinet during the day and Only Comes Out At Night. It turned out to be very handy—after I turned off the Little Buddy at bedtime, the temps inside the camper dropped to around 55°F, but that was still better than the 34°F outside. Especially if you had a post-midnight necessity.

In the morning, putting a kettle on the stove and cooking bacon&eggs helped to warm things up. The French press I bought myself for my birthday finally got its first run, and there’s nothing like a good strong cup of coffee on a cold morning. The Starflyer has fairly primitive plumbing—a hand pump at the sink, and no hot water heater—but the Popup Portal hive mind had a solution for that. Get a pump pot, fill it from the kettle in the morning, and you’ll have hot water to wash the evening dishes (and an afternoon coffee, if necessary). Actually, we used bottled water, since I’d put RV antifreeze in the water system to prevent serious issues until spring.

The second night went better for me; I turned around to put my head toward the center of the camper, and for some reason I found that more comfortable. I left the Buddy Heater going until it emptied its canister, which saved me the hassle of getting up and turning it off. It went a little longer than I expected, which is nice. We got to air out the bacon smell for a few hours, and I folded up the Starflyer as the first sprinkles came in mid-afternoon.

Camp Driveway was a success. I came out with a list of stuff we need, and am holding out some hopes of hitting a local campground next month when Mason has another no-school Friday. A 3-1/2 day weekend would be a nice warmup to our Spring Break trip to Mom’s…

Wednesday, January 02, 2019 No comments

Campy New Year!

I think a lot of us are relieved to see 2018 in the rear-view, and perhaps are directing a forest of Meaty Middle Fingers its way. But it had its moments. Charlie’s continuing to learn new signs, even if he isn’t speaking out loud yet, and is starting to put two-word sentences together (often things like “eat sandwich”). At any rate, the year ended well.

I’ve been looking for a popup camper for the last couple months. The wife is on board—she won’t tent-camp, but she actually encouraged me to buy a (far smaller and less-equipped) popup some years back. The money didn’t shake out then, but a couple months ago I had a surprise moneybomb—the workplace is being acquired, and I’d had a standing order to sell some stock if it hit $30. So, all of a sudden, the hunt was on. I set a budget, found Pop-up Portal, and started learning all I could from a deep hive mind.

Searching Craigslist, I immediately found one local to me; it was 20 years old, but solid and a lot roomier than I remembered them being when the parents rented one (the slide-out dinette probably had a lot to do with that). The price was well within my budget.

There were snags, though, and it was probably all for the best. I thought I’d set up a transfer from the broker to my checking, but I hadn’t, and doing the setup (of course) took longer than I wanted it to. I was annoyed with myself, because I felt like I was stringing the seller along, and told them to go ahead and sell it if someone else came by with cash in hand. Meanwhile, I used the time to research what I could. Good thing: turned out our vehicle can pull 2000 lbs, and the camper weighed in at 2600. That wouldn’t have ended well.

Off to Craigslist again. This time, I had a specific set of criteria. Absolute requirements: 1800 lb or less, A/C (Planet Georgia summers can be horrid without it), camp-ready. Nice to haves: 1600 lb or less, a toilet, full 12V setup. The latter is not a given; all the sellers I talked to always camp at places with full hookups and don’t have battery power hooked in.

After tossing obvious scams, newer campers that were way over budget, and big amenity-laden models that blew away my weight allowance, I ran out of local options. Expanding my search radius turned up a promising find that checked all my “must” and “want” boxes, but it sold before I had a chance to go look at it. Another one turned out to be a scam (“I sent it to an eBay dealer in Omaha who will deliver it for free”)… yeah, right. I reported that one to the FTC. There were a couple of promising leads in Alabama and South Carolina, but the logistics (especially around the holidays) and the weather just wouldn’t cooperate. I decided to give it a week and see what happened next, and seriously considered upping my budget.

So Friday, a new listing, um… popped up. It was slightly over budget, but I thought “hey, that map looks familiar.” Turned out it was local! I called to check it out on Saturday, and the seller said “I thought that listing went away. But I’m on my way over to the storage unit now, we can meet there.” It was, like many of the days have been around here, rainy and crappy, but we did crank up the top so I could have a look at the not-actually-canvas (it’s called Aqualon™). It was intact, if slightly grimy.

He said, “the rain is supposed to let up tomorrow, why don’t I bring it over to your place and we can set it up?” Sounded great by me, especially since our car has a hitch but no wiring just yet.

So here he came, in a gigantic diesel 4-door pickup (white, imagine that), big enough to pull a gooseneck trailer, with a 1500-ish pound popup behind. I doubt the truck even felt it. Negotiating our horrid driveway involved him rolling his front wheels onto the grass, which dug some pretty deep divots. Couldn’t be helped. We unhooked and pushed it in front of my Miata, then commenced to setting it all up.

It was less grimy inside than out, except for the floor and ceiling. The upholstery is intact, and there’s already an outdoor rug—one less thing to get. There’s also a space heater and a case and a half of bottled water. I worked the hand pump at the sink, and to my surprise water came out. Turned out the 10-gallon water tank had about 3 gallons in it.

2001 Starcraft Starflyer
Long story short, he knocked the price down to exactly my budget, and I cut him a check. We had a break in the rain today, so I spent much of New Year’s Day attacking the ceiling and A/C unit (I don’t think anyone ever cleaned those filters) with disinfectant wipes while Mason cleaned up the beds with a Dirt Devil.

The dining table is the size it is, because it doubles as a spare bed (spanning the dinette benches), but it makes things a little tight. I’d like to include something narrower for our trips. There are a few minor repair items to address as well, but it’s supposed to be sunny this weekend. Mason is already wanting to set up and sleep in it. Charlie likes clambering around in the bunk ends as well.

I’ve got it folded up for now, because I needed to get the Miata out of the garage tomorrow. Still some cleaning to do—mainly the cabinets on one side, vacuuming under the seating area, and scrubbing the floor. I’m going to have to graft in a battery system, because a couple places I want to take it don’t have hookups. Holiday’s over, but we’ll have a few of our own holidays in the months to come. Sooner than later, I plan to clean up the other side of the detached garage so it has a dry place to live.

For the future, we may do some remodeling. I’m looking over Pop-up Princess for ideas. For now, I’m digging on the geeky model name, “Starflyer.” Not only did it come with a name, the shelf in the king-bed front bunk is called a “Space Station.” I added a bunch of accessories to my Amazon wish list, as much to remind me what to get as anything else.

So we should have some new vacation destinations in 2019. I’ll be glad to share. Maybe I won’t have to burn off a bunch of vacation time at the end of each year…

Wednesday, December 12, 2018 No comments

Adventures of a #techcomm Geek: Blurrier Image

In today’s installment of Life of a #techcomm Geek, we return to a subject that draws this geek like a moth to flame: file conversions. Hazardous, yet compelling. Lots of geeky stuff follows…


I’ve had this particular line in my Tines to-do list for a while. As part of our transition to a new documentation system, I and another writer handled the conversions. We had a high-end tool to help us out, although creating rules was a dicey proposition and the vendor ended up helping (we made tweaks where they could make an obvious difference, though).

In the most recent round, we got to the FrameMaker-based docs. Frame (as its users often nickname it) is unique in that it allows overlaying callouts and other graphic elements on top of images. This is a huge help for translating manuals, because the writers don’t have to maintain a separate set of graphics for each language. Anyway, since the new system isn’t FrameMaker, something else had to happen. The conversion system could be configured to either flatten the images (convert to a PNG, rasterizing the callouts) or create an SVG (Structured Vector Graphics). We chose the latter, thinking that since SVG is an XML format, the new system could maintain them easily.

We were wrong.

Long story shortened considerably, we eventually threw up our hands and decided to convert all the SVGs to “flattened” PNG files. The writers would keep the SVG files on their hard drives to make changes, then upload a new flattened PNG when needed. I wrote a script to do the deed; it crunched through hundreds of SVGs at about one per second, and updated all the links in the book to point to the new PNGs.

All well and good, until one of the writers went to publish. “The images look blurry,” she told me. Taking a look, she was obviously right. It took me about three seconds to figure out why.

You see, our SVG files have a width attribute, which was set to the width in the original FrameMaker files (a typical width is 576 pixels, which at 96dpi is 6 inches even). All well and good, but the original images run about 1200 pixels wide—so in essence, we were throwing away over ¾ of the image data when doing the conversion. No wonder it looked blurry! But we were all weary of messing with it by that point; I had written scripts that:

  • extracted embedded images from an SVG, converted them to PNG, then changed the link so the SVG referred to the file instead
  • went the other way, embedding images in an SVG
  • converted the entire mess to PNG in one swell fwoop

The documentation work that was my primary job function had been back-burner’ed for too long. I added an “investigate this further” item to my backlog list and got back to the bread-and-butter part of my job.

This week, I all but cleared a fairly long to-do list in three days, so I thought maybe I could give this thing another shot. A quick Google turned up some promising code on superuser.com; I divided the image width by the scaled-down width in one SVG, applied the script, and got a nice sharp image! The only problem with that is, it would take about 10 minutes to do each file by hand, and there are hundreds. A script is the only practical way to blast through all of them.

When I tackle a situation like this, I tend to use a shell script to drive awk, Perl, and XSLT scripts. Each has its strengths, and trying to force (say) XSLT to work some of awk or Perl’s string-processing magic is more trouble than it’s worth. And vice versa. So… XSLT to extract the file name and (scaled) width, awk to parse the output of file (a utility that returns the dimensions of an image file) and do the calculations, all wrapped up in a shell script to conduct the Geek Orchestra.

Of course, I ran out of time this afternoon to put the whole thing together, but I have all the sub-script logic down. I just need to score the symphony. That will likely take me to noon tomorrow, then I’ll be back to bugging people already bogged down with too much stuff to lend me their expertise.

I also achieved Inbox Zero at work today… and that’s a rant for another time.

Friday, December 07, 2018 2 comments

A TB02 of sorts…

A long time ago, back when The Boy had more than his share of teen angst to deal with, I had a series of “TB” error codes. TB02 was “He moved back home (again).” (Dang… this blog is old. 13 in Internet years is like “going out for lunch meant we hunted wild tacos with spears.”)

Fast-forward to now. He’s married, living in his own house, starting a business, and doing a decent job of adulting. Unfortunately, he ended up with some health issues that put him in the hospital for the better part of two weeks (not his foot this time). During that time, his wife & his mom got together and really kept things going, spending days and nights with him, making sure he was being taken care of—I was thrilled at how well they worked together. Still, he was bored $#¡+less, and was more than ready to get outta there and get back to his life.

Yesterday, they sprung him, but with a condition: he can’t be left by himself for a week. The daughter in law has to work (hey, I totally understand, because I do too)—so he’s here at FAR Manor. He’s not really moving back in, just hanging out with us for a week, so it’s not a real TB02. I’m sure Mason is happy to have him around, because he was supposed to stay with his dad for a few days Thanksgiving week, but with one thing or another, I haven’t gotten home before Mason was asleep in bed.

Yeah, The Boy missed Thanksgiving, but I think we’re going to have an extra dinner this weekend. After all, we really have something to be thankful for this time.

Wednesday, December 05, 2018 No comments

When you go to the delicatessen store…

I’m one of those people who like liverwurst. Always have. I gave it up for a while, what with the weight gain and high blood pressure, but Boar’s Head came out with a lite version the has lots less fat and sodium, and is still pretty tasty.

A few weeks ago, I got a quarter pound. As the deli guy was slicing it up, I thought, “Hey, Charlie likes food with this texture. I wonder if he’d like this.” So the next evening, I made him a sandwich and offered the corner.

NOM!
Charlie likes sandwiches okay. But when he got a taste of this, he grabbed it out of my hand and gobbled it down. Now up to this point, whenever he got hold of a sandwich, he would open it up, remove the meat, and eat the bread. Not this time, or any time since! The experiment was a roaring success, and I might have got one sandwich out of the batch.

So I found myself at the grocery store a few days later. I got half a pound this time, figuring maybe I could sneak a sandwich or two for myself. I came home and told the wife I got Charlie and me some liverwurst. Charlie heard this, and pushed me into the kitchen. “It doesn’t matter if I just ate or not, I want some of that good stuff!” Next time, Charlie was with me, and he got the sample slice (plus a slice of beef bologna, which he also liked pretty well).

Once again, we were out. I picked up Charlie from daycare on the way home from work this evening, and decided to grab a whole pound this time (because I still only get two sandwiches out of a half pound after Charlie gets through with it). We headed toward the deli, and he pointed and hooted, remembering how he’d scored a freebie last time. Once again, he got the sample. He finished it while they were slicing the cheese, and he signed “more.” Sure, why not? A couple pieces of liverwurst won’t hurt anything.

But he wasn’t through. As I rolled through the store on the way to grab a box of diapers, he wanted another piece. And another. And one more at the checkout. Then, when we got home, he devoured all but two bites of a peanut butter sandwich.

So when you go to the delicatessen store, grab another pound of liverwurst for Charlie and me. What we have now won’t stay around long.

Monday, December 03, 2018 No comments

Mason Minecraft Mondays

Mason took to Minecraft like a natural-born bricklayer. He comes up with some rather interesting constructs from time to time, and we’ve talked for a while about posting some screenshots. Today’s the day…

The aerial view of his seaside croft, built around a waterfall. Left to right: barn, house, garden.



This is the barn at the entrance. Mason tells me the chimney-looking thing on top is decorative. I suppose it makes it easier to spot from out at sea.


Over on the other side of the house is the garden. The stream runs alongside it, leading to the waterfall. This POV is over the stream, looking toward the ocean.


In the house, Mason has a spacious kitchen. His rooms tend to be large, and why not? In real life, it would give him more room to run around flat-out, with Charlie right behind him.


After filling up on pork chops and a variety of fresh veggies, and racing around the place, perhaps a nap is in order. The bedroom is appointed with the necessities. Left to right: computer, bed, storage containers for clothing and such.


Looks like a peaceful place to spend a long vacation to me. When I come back, I’ll bring you some more Mason Minecraft Mondays.

Thursday, November 29, 2018 3 comments

It Don't Mean a Thing

Some cleanup required
I was bonking around in the garage Sunday afternoon, not doing much important, when I ran across Mason’s old porch swing. “Too bad I don’t have anything to hang it on,” I thought. “Charlie might like to swing in it.”

Then I remembered…

Some years back, we had a yard swing. It moved between the front and back yards as the whim struck whoever was sitting in it, until a bored and unsupervised Skylar destroyed the canopy with a stick, along with the sling that kept the upholstery against one’s sitting parts. The frame sat in the back yard, until someone decided to raid it for the hardware. The pieces have been sitting out back ever since.

With Mason looking on, I started to work on the jigsaw puzzle; it clicked after a couple minutes. Next was to find suitable hardware: 3” bolts and nuts. Amazingly, the first drawer I looked in had the bolts, and they were the perfect thickness! Could it really be that easy?

I've been framed!
Anyone who has followed this blog for a while knows the answer: nothing at FAR Manor is that easy. The bolts had two different thread pitches—finding nuts for one pair was easy, the other… not so much. But I refused to believe I had bolts without matching nuts somewhere. Finally, a prolonged scrounging session turned up one, then another, along with a set of bent washers (meant to follow the contour of a pole), so that was useful.

It took far longer, of course, to find the parts than to assemble them. I used a couple disinfectant wipes to clean off the swing bucket, then hung it on the frame. The bottom of the swing was about three inches off the ground, if that. So I pulled the ropes out of the bottom and tied them to raise the swing off the ground.


It works, Granddad!
With that, Charlie tried out the swing and seemed to enjoy it. It’s now sitting next to the gazebo.

I’m not done with the project just yet. My first thought was to hacksaw about 18 inches off the top bar to bring the hooks a little closer together. Wife had another idea… which I hope to show in Part 2.

Friday, November 02, 2018 3 comments

Friday Charlie blogging

Charlie knows it’s important to accessorize when you’re hitting the town on Friday night…

I’m going to regret this when I’m older.
A big string of shiny beads—and, of course, Mason’s colorful undies as headgear!

Note: He did this without my help or encouragement. I just took the picture afterwards.

Wednesday, October 24, 2018 3 comments

The World's Cutest Pirate 2.0

Six years ago, Mason was the world’s cutest pirate.

Well, Charlie has to try to do everything Mason does, so…


The kids at church did a “reverse trick or treat” (in which the kids dropped off treats for the seniors) at a local assisted living center over the weekend, which explains the background. Charlie, of course, charmed many of the residents with his sunny disposition and curiosity. I was surprised that he mostly kept the headscarf on.

His granddad is still ready to plunder some booty, if he gets the chance…

Tuesday, October 23, 2018 No comments

(Partially) Disconnected

A couple weeks ago, I noticed my phone was starting to discharge a lot faster than normal. Thinking I had issues with an app not being cooperative, I checked the app consumption levels in Settings and made a couple of adjustments. I usually could get a day and a half out of my phone with normal use, plugging it into the car charger on the way in or out of the office if needed. But it got to where normal use gave me about five hours of battery life.

I finally set up a call with Apple support, and the tech set me up with a repair ticket. In case you weren't aware, Apple is replacing batteries (if needed) on certain iPhone models (including iPhone 6, my particular phone) for $29… and $5 shipping if you do it by mail instead of bringing it in. Seeing that a DIY battery replacement was $25 about three years ago, I figured this was a no-brainer.

Fits in the palm of your hand… with room to spare.
I was now temporarily phone-less. Or was I? When I got the 6, I retired my iPhone 4, the one I'd replaced the battery in, repurposing it essentially as an expensive iPod touch. The SIM won't fit in it, which I expected, so it’s Wi-Fi only. I can still message the wife and DD, and even make and take calls using FaceTime. I was hoping to use it for Skype, but the app only gives you the option to upgrade and the current version won't work on the older phone. (thankyouverymuch, Microsoft)

Whatever. Where there's Wi-Fi, there's the ability to contact family, anyway. I spent the weekend weeding off old pictures and older messages (this phone was in service from 2012 to 2016), and got a GB or so freed up to download podcasts for the commute. I'll probably start deleting apps soon, starting with Twitter—it crashes too often, and of course I can't upgrade it. Next up will be stuff I never use or works equally poorly. That should get me through the week, then I should get my primary phone back.

Quite the size difference
One nice thing is getting re-acquainted with several games that are no longer supported on the newer systems—Bejeweled 2 and Sudoku Mania, to name two. Some newer games still work on it as well… Smash Hit is a surprising example that does occasionally hit a frame-rate stutter. But it feels so tiny, reminding me of my skepticism about a phone that was too long to nestle down into a shirt pocket. I guess I adjusted quickly.

The other thing I like is the speaker dock. It, like the 4, has the older dock connector. So I can't put the new phone on it. I guess when I get my primary phone back, I'll erase the old one and find someone who needs it more than me. They can also take the speaker dock, since it doubles as a charging station.

But it'll be nice to hang out with the '4 for the week ahead. Our last hurrah, so to speak. Charlie glommed it this evening, and was adamant about not giving it back, so I pulled up the Bubbles app for him (one of those that doesn't work on newer phones) while he clung to it and fussed. (I guess he figured a little bitty phone is meant for a little bitty user.) He played with it for half an hour, maybe more. I remember letting Mason play with the phone when he was like 3 or 4, and he discovered the Camera app. I locked my '6 when I got it, but he had access to an iPad mini (and an original iPad) by then. He still tries to wheedle my passcode out of me, though.

I had a bit of heartburn this evening, when I received a shipping box from Apple (2 days after I sent the phone off!). I got on the chatline with Apple Support, and they verified the box had been shipped by mistake and everything was in the queue. Oh well, now I have a SIM remover tool… no more paper clips!

'Course, this means I'll be hard to reach this week. Email me… or leave a comment here!

Wednesday, September 05, 2018 2 comments

The Greatest Rev

Mason’s latest obsession is cars. Muscle cars, sports cars, supercars, anything with eye-popping horsepower and price tags (and insurance quotes to match). Getting in any car with him means being subjected to an endless monologue about this car or that car he’d really like to see (or own), punctuated by excited shouts as he sights a Porsche or the like. I presume he has fallen into a sea of Youtube videos. eyeroll

So I was taking him to soccer practice, and he said, “Rev it!”

“This car?” My Miata has stock exhaust, and it is in very good shape. Even if the redline is around 7000rpm, it doesn’t make all that much noise. But if I was a Sheltie in a previous life, Mason was a bulldog. “What’s the greatest rev you ever did?”

Ours was grey-green, but otherwise the same.
Source: Wikimedia Commons
“I didn’t do…” then I burst out laughing, remembering what was truly my greatest rev. I told him the story:

When I was in high school, we had a 1971 Buick Electra 225 “Deuce and a Quarter,” the car Sinbad immortalized in a comedy bit (see below). Thing was, he wasn’t exaggerating much. It was one of the last pre-gas shortage Detroit big-iron beasts, with a huge engine to match (455cid, almost 7.5l in modern measurements… over four times the displacement of my Miata!). That thing could swallow enough cargo to choke some SUVs these days, and give a full-sized RV a run for its money when it came to guzzling gas. And it could get out of its own way fully loaded, let alone carrying only a 140-pound me behind the wheel. The SOB probably could have pulled a fifth-wheel without breathing hard, if we could have found a way to hook it up.

The best memories of my high school years revolve around that car. If I get some requests in the comments, I'll tell some other stories about it, but this one is about my greatest rev.

I lived in Michigan until graduating from college. For those of you who aren’t familiar with the way they do things Up North, you can’t just put everything on hold until the snow melts; it might stick around until April after all. So you plow the roads, and throw down rock salt to melt the ice (or salt and sand, the latter to give you traction if it’s too cold for the salt to work). In quiet subdivisions, I’d gas it hard around corners in the winter—ostensibly to get practice recovering from a skid, but in reality to dick around. But I digress. The thing about salty roads, it rusts iron. Rustproofing had become a thing in the mid-70s, and Dad had it undercoated.

But that was just the chassis, not the muffler pipe. Somewhere around the summer of 1978, the salt completed seven patient winters of work, and the long stretch of pipe between the exhaust manifold and the muffler rusted through.

You’ve probably heard a Civic (or a similar car) with a modified exhaust, or some ding-a-ling just put in a straight pipe. Now, imagine the racket coming from an engine four times that size. It didn't take much revving to make that thing HEARD. Mom literally could hear us coming home from a mile away.

It had to happen, sooner or later. I dropped a friend off around midnight, in a quiet-ish Grand Rapids neighborhood, and told the land yacht to set a course for home. I tried to go slow to minimize the BLAP BLAP BLAP BLAP of the unmuzzled V8, but I got the blue lights after about two blocks. The cop wasn’t horrible about it; he wrote an R&R (Repair and Report) ticket, which meant I had a week (or two) to fix it, then take it up to the cop shop and demonstrate it was fixed.

Other Brother tried the easy route: cutting the ends off a beer can, then opening it sideways and wrapping it around the rusted-through zone (by now, the pipe had come apart). It worked! for about ten minutes, until the heat of the monster V8’s breath melted the aluminum.

I decided that since I’d gotten the R&R, it was up to me to fix it right. Somehow or another, we knew the diameter of the muffler pipe. I went to the auto parts store, bought two splices and a length of replacement pipe. I hacksaw’ed out the rusted part, plus enough to fit the replacement length, applied splices and clamps, and gave it a test. Just a hum, the way Buick intended. I took it to the cop shop, where they approved my fix. As well they should have—it outlasted the rest of the car.


And now, I will shut up and let Sinbad tell you all about the Deuce.


Monday, September 03, 2018 2 comments

Gazebo life

As spring began to slide into summer, I told the wife, “I want to get one of those screen gazebos to put up down at the patio.”

“That’s a good idea,” she replied, “but let’s put it in the front yard where the grass doesn’t grow anyway.”

I was okay with that—it was more likely to be used if it was near the door. We got a 10' by 12' model, and I spent a weekend putting up the framework. The wife got some of the farm help to put the canopy over the top (it's close to 15' high, almost 5m), then I put up the screens.

Done, yay! Until the first rain, and the shade finished killing off the rest of the grass, and the floor got kind of mucky around the edges and sticky in the middle. I thought about de-commissioning the patio, since it doesn't get much use these days, and using the rubber tiles to put in a floor. Then I remembered when Mason's soccer practice moved to an artificial turf field during a long rainy spell in the spring, and started looking up turf on Amazon. I found a reasonably-priced roll of turf ($45 for 6' by 12') and ordered two. I still put some of the rubber tiles to use, filling in the space between the front sidewalk and the turf.

Play area
With a dry, mostly clean floor surface, I started taking Charlie out there in the evenings. The screens keep the bugs out, and I moved in some patio chairs and a couple of outdoor tables. Back when Mason was about 3, we bought a little slide/pirate ship/castle thing, and its new home became the gazebo. Life was good… except that it started getting hot, and we didn't have any way to run a fan.

For whatever reason, FAR Manor has a major dearth of outdoor outlets. This is something I'd wanted to remedy for a long time, and I finally got to work. I bought a GFI outlet and cover, let them sit for longer than necessary, then gathered tools and pulled an outlet in Mason's room. I drilled through the wall to give me a point of reference, then used my Dremel to carve a GFI-sized hole in the siding. To my surprise, when I ran the power cable from Mason's room up and to the right, I hit the hole on the first try! Soon, I had everything wired up (and pushed some silicone caulk into the drill hole).

Light strings
With an outdoor outlet in place (at last!), I rummaged through the Christmas light stuff and found what I needed: an outdoor power extender. The cord was the perfect length to run from the outlet, under the fake turf, and into the corner of the gazebo. The box has a stake to keep it in place. I grabbed a small fan off the shelf and plugged it in, then went to Five Below and got some LED lantern light strings. Soon after, Amazon ran a sale on a 33' LED light string (with remote) for $10 and change. The lanterns spread out to the corners from the center of the ceiling; the LED string runs around three sides of the gazebo. The combination is just barely adequate for reading, but that has not been an issue until this weekend. The days are definitely growing shorter.

The outdoor office
More importantly, the fan keeps things tolerable during the muggy evenings. (Except last week, when we had a couple of absolutely gorgeous days while I was working at home… I plugged the work laptop into the outlet and enjoyed it while it lasted. Pleasant days in August are rare on Planet Georgia.)

Charlie loves to hear, "Do you want to go out to the gazebo?" I found a tote bag that's perfect for carrying my iPad, a couple of Charlie's books, sippy cups/water bottles, and other incidentals. We can do one trip for both out and back inside. While we're out there, he plays on the slide, pushes cars around on the artifical turf, climbs into my lap to read a book… and hones his misdirection skills. Last week, as we were getting ready to go back in, he put his face up to the fan. While I watched carefully to make sure he didn't try to push fingers through the tight screen, he palmed the remote for the LED string. I had no idea until he came down the hall with a big grin, holding the remote to his ear and pretending it was a phone.

He showed the wife his misdirection skill this evening. While he was in her lap, he pointed to the couch. She looked that way; he swiped the toast off the top of her BLT, and commenced to nomming. Little rat. He's gonna be a stage magician if he keeps this up.

But I digress. I think, once October starts getting close to November, we can hang shower curtains over the screens and use one of those outdoor heaters to extend the season. Mason's old play table (with sand) might be a good addition for the colder times… especially since cold doesn't bother Charlie much. Maybe I can get Mason to show Charlie the play table, and maybe he won't teach Charlie to scatter the sand in all directions?

An outdoor space, especially without bugs, is a welcome addition to FAR Manor. Let's hope it can last for a while. And if you're in the US, I hope your Labor Day weekend was long and pleasant.

Wednesday, August 15, 2018 1 comment

Give Peach a Chance

Soon after lunch last Sunday, Daughter Dearest caught me in the kitchen. “Can you take these and toss 'em in the woods?” she asked, handing me a bowl of peelings and similar.

“Sure, I’ll dump it in the composter.” I hadn’t been out there in a while, and judging by the overgrowth between the driveway and the composter box, neither had anyone else. Oh well. I stomped down some weeds, keeping a wary eye on the briars, and so I was almost at the composter before I saw what was next to it:

Quoth 3 year old Mason: “Too heavy!”
A peach tree, bent to the ground under the weight of its own produce. The peaches are a reasonable size, but still pretty hard, so I figure they were taking their time ripening in the deep shade around the composter.

As far as I can guess, a peach pit must have been tossed in (or near) it at some time—the trunk is not two inches from the base of the composter. I was delighted, as you might guess, nearly as much as when we started getting persimmons from the tree near the road.

Wife is all, “They probably won’t get ripe. There’s too much shade.”

“All I’m saying,” I replied, “is give peach a chance!”


Wall to wall and 10 feet tall
One life lesson I learned from playing D&D: always keep a 50-foot length of rope handy. What I have these days is clothesline, but I knew it was in the deck box with the inflatables. I grabbed it, and the hatchet, and got to work. Some trimmed branches piled nearby became stakes, and I enlisted a nearby oak. It has held up for over a week, now, during which we had a pretty substantial gust front ahead of some rain.

We’re already plotting a transplant operation come winter. There’s a gigantic white pine across the driveway from the front door, that seems to be dying from the top down after a lightning strike, and a couple of trash pines next to that. Those will meet the chainsaw (and become firewood for campsites and other outdoor fires), we’ll pull or dig the stumps out, and hope for the best with the transplanting.

So, on occasion, we do get a pleasant surprise at FAR Manor.

Thursday, July 26, 2018 4 comments

Stay on, your toes

The Boy continues to embrace the whole home ownership thing. He has a pretty decent garden spot (mostly hot peppers, with a few other things) and is talking about adding a room. A really good thing, he's been keeping up with his glucose and insulin for the last six months or so.

Of course, there are downsides. About a month ago, a bad storm came through and dropped a tree limb on their newest car, totaling it. At least it was parked, which means comprehensive kicks in (lower deductible) and no ding on his driving record.

Then there was the garden incident… at least, as best as we can figure. He was weeding when his foot started burning (wearing sandals), but the pain faded quickly and he kept at it. He saw a blister later was all.

A few days later, he had a pretty heavy-duty infection in his foot, and ended up in a hospital in Carrolton. We grabbed a hotel to spend the night down there. The surgeon told everyone, “we’ll do what we can, but he’s probably going to lose four toes.” Yeowch!

So they wheeled him in, and we flipped out our tablets to wait for the news, whether good or bad. Finally, a nurse called us into the consultation room. The surgeon said, “the infection hadn’t gone to the bone, or got into the tendons, so we cut out the infected tissues.” So far so good… everything was still attached. For now. Even better: “he still has pretty good circulation in his feet, that helps.”

They wheeled him back to his room, and the surgeon came by to tell him what was next: they would leave his foot wrapped up for a few days, then the wound care specialist would come by and check for any further infection. At that point, they would decide whether his toes could stay attached a little longer. The way he talked, it sounded like a 50/50 proposition.

This is the GOOD side!
We went home, but kept in touch via text, until we returned to the hospital for The Unveiling.

No infection! Yay!

The wound care specialist came in and said, “three things if you want to keep your toes: don’t smoke, don’t walk on that foot, and keep up with your insulin.” There were other particulars, including a special boot he wears to walk around safely, but those are details.

The wife took a pic of the bottom of his foot. I really don’t want to inflict that one on you… there was basically a trench about 1/2" wide and deep, running across the joints. Top view is bad enough (the bruised big toenail came from him dropping something on his foot while doing a moving job).

Last week, we got a report (and a pic): the wound care specialist says it’s healing up faster than expected. Indeed, the pic showed a small oval of raw flesh surrounded by new skin. Woohoo!

So what caused all this? The symptoms were all consistent with a brown recluse bite. We may never know what happened, but I’m willing to blame spiders.

Monday, May 07, 2018 2 comments

Baby bird rescue

I was putzing around at the computer over the weekend, when the wife came in with a pair of rubber gloves. “There’s two baby birds on the deck,” she said. “They fell out of that nest on top of the floodlight. Put these on, and maybe you can put them back and the mom will keep them.”

“Oh crap,” said the one on the left.
“I’ll need a ladder,” I said. The floodlight is just below the roof line, a nice sheltered place to build a nest if you can ignore the humans playing around down below.

I found the ladder and came out to the deck. The kids were all clustered at the far end, near the steps down to the back yard, watching the show (such as it was). I put the ladder where I needed it, donned the rubber gloves, and swooped in for the rescue.

Being a couple of bird brains, they didn’t realize I was trying to help, and squawked up a storm. The agitated parents, watching from a safe distance, joined the squawkfest.

Back home… or at least on the porch.
With a bird in each hand (is that worth four in a bush, then?), I mounted the ladder. The babies either realized they were getting closer to home, or resigned themselves to being eaten, and settled down. Now here's where I ran into a snag: there was very little space between the top of the nest and the soffit board. My plan was to drop each of the birdies back in the nest, but they decided to stop cooperating for some reason as I tried to stick them through the gap. So, I just let them latch onto the rim and left them there.

Looking down, I saw a third baby in a chair below the floodlight. It looked like it had been dead for some time, and maybe the living got chucked out with the dead. Or maybe they decided to follow their deceased brother out of the nest. However it was, we disposed of the corpse.

As close to the edge of the deck as those two were, it never occurred to me to look for more on the ground. Hopefully, that didn’t happen.

Wednesday, May 02, 2018 2 comments

Charlie Talks to the Birds

I had Charlie out in the gazebo Sunday evening, because he likes to be outside and I wanted him to see the low beach chair I found in the garage for him. He saw it, gave me a big grin, and sat in it for a long time.

Soon enough, he got up and played on his slide a little… then he heard the birds. They chirped, he squeaked… and I was thinking, “Is he doing what I think he’s doing?” Yup. I got video. You might have to turn the sound up a little; I boosted it as much as I could, though.



Sometimes, the normal FAR Manor weird gets delightfully weird…

Monday, April 30, 2018 3 comments

Weekend Roundup

Most of Mason’s soccer games are at the local park, but each season they have two or three out of town matches. Saturday’s game was up in Towns County, pretty close to the North Carolina border.

I had Maps plot a course, which skirted Helen (probably very busy on a warm spring weekend) and took us up GA75 toward Hiawassee. We put the top down and I thrashed the Miata up that winding mountain road, a very enjoyable trip once the passing lane opened up and I got past the slowpokes.

Our destination was Foster Park, on Foster Road. Fortunately, Mason wanted to leave early, because Maps treated us to one of its rare hiccups, finding us a 1.5-lane Foster Rd. that ended in a church parking lot. After turning around and driving right past the place we actually wanted, I pulled up Google Maps and got the right directions. (I’ve had Google Maps totally fail as well, which is a good reason to have both.) The upshot was, we got there in plenty of time.

There’s not much to be said about the game itself. Mason took the goalie position for the second half, and only allowed one to get past him (which was pretty good because his teammates were offering little to no defense, and not a whole lot of offense). Since the game started at 4:30pm, I figured we’d find a place to eat there before coming back home—and when the coach texted all of us to welcome us to her alma mater (Young Harris College), I figured she would know a good place. Her son is Mason’s best friend, except for the matter of this one girl (c’mon, they’re all 8!), so hanging out after the game was a no-brainer.

Supper, then home. Maps knows where I live, and helpfully plotted a nice set of backroads. We went down Track Rock Rd, where some of my relatives once lived, and then thrashed the Miata down US19/129 before heading home. Despite having only all-season radials, I never felt like we were going to spin out or anything… so maybe I wasn’t pushing it that hard after all. We only had a couple of tire chirps and one squeal, which was probably because I was on the paint on the inside of a right-hander. It got chilly enough that Mason (who is even more of a top-down fiend than me) was ready to put the top up early on in the drive home, but we did keep the windows down. Definitely a case of the journey being more important than the destination..

And there was evening and morning, another day.

Swingin’
Sunday after church, the wife suggested we take the boys to the park after lunch. She couldn’t stay past lunch, but I figured Mason and Charlie would have a pretty good time. As it turned out, I was right. Mason alternated between the jungle gym and riding his bicycle in the parking lot.

As for Charlie, he enjoyed the swings. He liked the slides. But the big attraction was the large fenced-in playground space. He spent most of his time running loose, and all I had to do was follow him around and make sure he stayed out of the one muddy spot under the big-kid swings. His random sort-of orbit would occasionally take him to the picnic table, where I had left his sippy and diaper bag, and he would guzzle some lemonade before taking off anew. At one point, a bunch of girls started screaming, and Charlie turned around and joined in. If you heard a chorus of Joyous Ear-Splitting Shrieks™ over the weekend, that was probably them.

Of course, like Mason at that age, he generated an Atomic Diaper. I just laid him on the picnic table and took care of it. (Mason, despite being the same age I was when I first changed an Atomic Diaper, has not worked up the nerve to try. Kids these days, y'know?)

At last, the wife returned from her errands. To my surprise, both Mason and Charlie put up no fuss about going home. I figured, in Charlie’s case at least, he had worn himself out with all the running and would zorch out pretty quick. No such luck—he was wound up, and it was closer to 10pm before he finally gave up for the night.

Looking at the extended forecast, spring has finally chased the last vestiges of winter back to the Arctic. The sun is shining, birds are singing… and I got video of Charlie talking back to the birds. Stay tuned.

Friday, April 06, 2018 2 comments

Here's Your Sign

“More” (hungry kid)
While Charlie is still non-verbal at age 2, his speech therapist says he understands a lot more than the average 2 year old. Meanwhile, the speech therapist, daycare, and the wife are teaching him some sign language (ASL). I remember reading about kids who skip the baby talk until they’ve figured out how to speak in complete sentences, and I kind of hope that’s what Charlie will do.

Still, he usually manages to make himself understood. That’s a lot easier when your surrogate parents have raised a handful of kids, and been around a bunch more. I can often tell when a baby at a restaurant is hungry or just wants attention by the edges in the crying. It’s hard to explain, but I’m usually right, judging from what the kid’s doing after quieting down.

Anyway… back to Charlie. A lot of times, he’ll start to fuss when I put him in the playpen (a/k/a “cage”—a nice roomy cage with lots of toys, but it’s still confinement). I’ll say, “You know the drill; I’ve got to get stuff ready to go,” and he’ll calm down and start playing. He really does know the drill.

One recent morning, I was getting him ready for the ride to daycare, and his shirt rode up. Belly blast (blowing loud raspberries on his belly) time! He laughed, then signed “more.”

"More what?” I asked.

He pushed his belly out. More belly blasts!


This evening, I was getting his bottle ready. (He drinks out of a cup now, but still likes his bottle for nighty-night.) Back when Mason was a baby, I'd count down the last ten seconds before the microwave finished up, and I’ve been doing the same with Charlie. Somewhere along the way, Mason started whispering “Tin!” and pointing at the timer, trying to get the countdown to speed up (I point to each number as it counts down). Tonight, Charlie grunted and pointed at the display for the first time. He’s not saying “ten,” but it’ll come.

Sometimes, I wonder if Mason’s fascination with numbers partly stem from those late-night microwave countdowns. Speaking of Mason… as this is Spring Break week on Planet Georgia, he’s spending the week with his dad. He was supposed to come back yesterday, but asked if he could stay until Saturday. Skylar stays with us most evenings, to provide some surrogate noise, but it’s mostly been a quiet week. I’ll be glad when the rugrat is home, though.

Thursday, March 29, 2018 1 comment

Patching Things Up

Charlie is mostly laid back, but he definitely has a lazy eye. A few weeks ago, we got to head down to the 'burbs to see an eye doctor—whether they specialize in pediatric eye care, or have an “in” with the state, what does it matter? Wife wanted me to take a day off work and come along… since it was on a Thursday, I also took Friday and made it a four-day weekend.

I was curious how they would get a squirmy toddler to look where they wanted, and I found out. They have a number of gadgets designed to get a child’s attention—a mechanical owl on the other side of the room, a clown toy that does jumping jacks when you push a button—yet another one of those it’s obvious when you think about it things.

yawwwwwn uh… arrrrr.
The upshot was, Charlie has to wear a patch on his left eye for two hours per day for the next month or so. They gave us a handful of samples to get us started, and (of course) you can get nearly two months’ supply on Amazon for $20 or so (and we did).

The cool thing about the big box is that it has an assortment of patterns—camo, wizard (robe, wands, Harry Potter-esque glasses), rockets… and, of course, pirates! By the time I got this picture, Charlie was well on the way to lala-land. I ended up peeling the patch off (which woke him up a little, of course) and putting him to bed soon after.

It only took a couple days for Charlie to mostly stop picking at the patch while he has it on. Once it’s on, if we keep him occupied for a couple of minutes, he pretty much forgets about it unless he gets bored. So far so good. Getting daycare to remember the patch is kind of hit-or-miss right now, though. Oh well. One thing at a time.

When it comes time to take it off, though, I guess Charlie knows to keep his eyes peeled…

Thursday, March 22, 2018 2 comments

Back in the Saddle

Mason got a mountain bike a while back, and lately he’s wanted to… well, go mountain biking. Imagine.

Raleigh M-60… 1998?
Well, gee. I have a mountain bike, too. It has even been featured on this blog in the past, riding exotic routes like the Pinellas Trail or the Silver Comet Trail.

I hadn’t ridden it much in the last few years, and even less so after Charlie and the knee replacement. But it has been in the dry garage, and even moved around from time to time. It was a gorgeous weekend—we were all running around outside with shorts—and Charlie wore himself out riding a push-truck on the driveway. After he went down for a nap, at Mason’s incessant urging, I rolled the Raleigh out into the sunlight along with its air pump, a few tools, and the tires.

Off with the on-road,
On with the off-road!
The tires, you say? Yup. It came with a pair of off-road tires, with an aggressive tread that made it sound like an old pickup truck when riding on pavement. It turned out I rode a lot more on pavement than off, especially when The Boy and Daughter Dearest were old enough to ride on the roads. So I bought a pair of hybrid tires, swapped them on, and hung up the knobbies for later.

Later, it turned out, was last weekend. As Mason watched with great fascination, I pulled the wheels off, swapped the road tires for the knobbies, then hung the road tires up. This was made easier by dint of the tires being quite flat. Fortunately, the inner tubes held air when I pumped them back up. We took a shake-down cruise: down the driveway, across the expanse of yard alongside the road, around the gravel pile, then back to the manor. You know the old saw about “it’s just like riding a bicycle.” Yup, it all came back to me really fast. The tires and tubes were fine, and Mason was ready to start his adventure ride.

There’s a trail that leads from the back yard down to a garden area (a previous owner cleared it, although I wonder why they didn’t clear an area closer to the house… oh well). Mason found the trail on the other side, that runs to the fence between FAR Manor’s grounds and the in-laws’.

“Want to ride down to the pond?" I asked Mason. He was enthusiastic about the idea, so we went through the gate and I led the way.

The pasture was pretty rough, between all the rain we’ve had recently and the cows walking on it, and it jounced us thoroughly. Through a gate on the other side, past the campsite, and down to the pond. There were some poles and tackle left behind by one cousin or another, so Mason decided to do a little fishing:

Just as well they weren’t biting
I’m kind of glad Mason didn’t catch anything, because it would have been rather difficult to bring the catch home.


You may have noticed I said we rode down to the pond. That was a deliberate choice of words: FAR Manor is on a hilltop, and there’s only a dozen yards or so that isn’t downhill between the house and the pond. Now you can guess what that means… yup, uphill all the way home. This was the part Mason hadn’t really considered. Even in low gear, he complained a lot and had to take a few rest breaks. Surprisingly, I only needed a brief rest, and I never went below the middle chainring on my bike.

I hope Mason elects to continue riding around the manor and farm, though. It’ll build up his legs and his stamina, and he’ll be able to hustle harder in his soccer games. As for Charlie, I have a bike seat that clips onto the rack. I bought it for Mason when he was little, but he wanted nothing to do with it. I expect Charlie will have a more positive reaction.

Oh… and I need a new helmet.

LinkWithin

Related Posts Plugin for WordPress, Blogger...