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

Thursday, June 27, 2019 2 comments

Adventures of a #techcomm Geek: A Cautionary Tale of an Acquisition

Pull up a chair, young’uns. Today, I bring you a tale from a time when years started with a 1. It was a technologically backward time, before email had yet to completely replace paper memos and USENET or BBSes were how most people “went online.” But the technology we had, we used well. It didn’t require LinkedIn to help empty out an office when things went to #3||.

The 80s were in our rearview, although its music lives on to this day, and the corporate merger and acquisition binge was starting to cool off. Still, buying and selling is the lifeblood of a corporation, and sometimes what they sell is pieces of themselves. So, on to this particular place. None of the players are around anymore, so let’s call it Don’t Care Anymore (DCA). It was a “coulda been” company—I’ve worked at a couple of them. DCA, with some vision and luck, coulda been Cisco. The founder held the (now expired) patent for statistical multiplexing, and they did good business building and selling serial port multiplexers. (Remember, this was a technologically backward time, when some people still had serial terminals on their desks).

But even then, Ethernet was beginning to worm its way out of the server rooms and developer offices, and into the office as a whole. There were competing networking technologies, most notably Token Ring (mainly in IBM shops), and Ethernet at the time required relatively expensive coaxial cable. Many companies still thought serial terminals connected to a VAX or IBM mainframe were adequate; some had PCs for word processing and spreadsheet software (“Lotus 1-2-3,” look it up, kiddies), but the PCs still had a serial connection. You see, networking applications like email, file sharing, and (for forward-looking companies) USENET were things that ran on mainframes.

There were some good ideas going on—the serial concentrators got an Ethernet card, and DCA bought a company making a T-1 transceiver (basically a really high-speed modem that could carry data, voice calls, or any combination). The developers were also working on what amounted to an Internet router. Had executive management given it more focus, things might have been different… but what they called “networking” was only one part of the company, and the execs considered it the unimportant (if original) part. They were focused on selling a hardware/software combo that allowed a PC to emulate an IBM3270 terminal. It was an amazingly high-margin product for the PC market, and the execs had little headspace for anything up-and-coming (despite handwriting on the wall, like a declining market for IBM mainframes and chipsets that would slash the cost of the hardware component to nearly nothing).

So, the execs found a buyer, and sold the networking division to another company. Let’s call that outfit Really-Moronic (R-M), for reasons that shall soon become obvious. Long story short: there was a lot of goodwill on our part, because we felt like we were actually wanted, and they threw it down a rathole.

You see, DCA had a pretty decent benefits package. The Boy and Daughter Dearest were both born when I worked there. Wife-unit was working as well, and her benefits were on par with mine. The upshot was, “childbirth” was covered at 80% for each of us. So one package picked up 80% of the bills, and the other got 80% of the remaining 20%… which meant a $10,000 hospital bill became $400 out of pocket.

It was a good thing we had our kids before the acquisition. R-M’s healthcare package, compared to DCA’s, was terrible. I ran the numbers, and it amounted to a 7% pay cut. It didn’t help that R-M’s VP of HR (are we choking on the acronyms yet?) both misled and outright lied to us about the benefits:

  • We got yearly bonuses at DCA. When asked about that, he replied “Sure, I get a bonus.” He neglected to mention that only management got bonuses. Deliberately misleading. So on top of the 7% pay cut on the healthcare front, we lost a bonus averaging another 7% per year.
  • Asked about the healthcare package, he replied “it’s comparable to yours.” An outright lie, unless he meant “our package looks terrible by comparison,” or management had a better package.
  • They moved our office to Dunwoody, claiming it was a more central location—another lie, they chose the office to avoid building out a computer room. One of the things people liked about DCA was that exurbia had little traffic. It was an easy commute. People moved nearby to take advantage of low(er) housing costs. Dunwoody added a good half-hour or more to the commute time, each way. We shared a high-rise with a couple other companies, including AT&T. Ma Bell’s kids were really nice people, who invited us to their company BBQs and the like. Having good corporate neighbors took some of the edge off the relocation, but certainly not enough to make up for the increased commute time.

The benefits disparity had to come up during the due diligence that any company has to do when they’re buying another company (or a large part of one). Did R-M think that people would just shrug and take a pay cut on top of the overt disrespect, especially the highly-talented engineers and support staff who do the magic that makes a tech company profitable? Did they really believe that skills aren’t transferable? Or were they so arrogant that they thought it wouldn’t matter?


A round of layoffs hit. One manager, told he had to cut one person in his department, laid himself off. After that, no layoffs were needed; the talent started draining out the door. R-M made a few half-hearted efforts to stem the outflow, paying out a token one-time bonus and hiking the raises to cover some of the difference in the benefits packages. But we were still taking a significant pay cut for a longer commute, and word got back that the new owners considered us “losers and whiners.” That, as you might imagine, did nothing positive on the goodwill front.

Our boss was the first of the documentation department to depart. The new boss was several hours away (by plane), which meant we mostly managed our own affairs. We became Resume Central for the rest of the office, in between our own job hunts and departures. After a few months of searching, I hooked up with a reputable contract house and spent about a year bouncing around from place to place. R-M sank like a stone, and nobody remembers them. Ironically, the parent company retooled and is an important customer of the place I work at now. DCA also disappeared, bought by a competitor who did a better job of understanding the changing landscape.

Moral of the story: employees aren't stupid. They recognize a significant pay cut when it happens, and they recognize a lack of respect. Combine that with a robust tech job market, and you might find money you spent on that big acquisition going down the drain… and taking you (and your CEO’s reputation) with it.

Sunday, May 19, 2019 1 comment

Fixing supper

The local Kroger recently set up a refrigerated kiosk with “Home Chef” meals. These are boxed meals with two servings, running $17-$20 per box depending on what’s in the box. I’ve seriously been considering setting something up with Hello Fresh, or any of the myriad other players in this space, so I picked up a box to see how things would go. It featured (boneless) pork chops, mashed potatoes, and snap peas. Sounded pretty good, anyway.

Saturday evening, I got the box out and got to work. Now I had expected everything to be mostly ready to go—sure, I’d have to fire up the oven and what-not—but reality smacked me over the head with a raw pork chop. What was in the box was: raw ingredients, and a recipe. I had to string the pea pods, cut up two whole potatoes, put the breading on the pork chops, and cook the sauce. So what this amounted to was, a box of raw ingredients and a recipe card. The card said this was “intermediate” difficulty (gee, that would have been nice to put on the outside of the box), but I didn’t have any trouble putting it together. My technical writer (a/k/a work) side pointed out where the recipe sequence could be improved. The recipe did say to add some stuff like olive oil, salt, and pepper. I substituted NoSalt for the salt, and nothing turned weird colors or exploded.

Except that midway through cooking the potatoes (that I had to dice up myself), I realized I’d forgotten the second spud. In an inspired moment of panic, I cut up Tater#2 and threw it in the microwave for 3 minutes, then chucked it in the pot with the other one. This was the first time in my entire life that I made mashed potatoes from scratch, and in the end it was okay.

So was the rest of it. It actually turned out to be a pretty pleasant meal; we had our dinners, and Charlie sat between us and deconstructed a liverwurst sandwich. (Hey, if he eats the meat before the bread, fine.) The wife isn’t a big fan of snap peas, but Mason will have a side dish when he comes home (he went home with The Boy tonight). She also pointed out that russet taters are white, and you need to peel white potatoes (red potatoes are fine if you include the peels). The recipe card said “cut up the potatoes,” and the picture showed the peels still on, so that’s how I went. I thought the cream sauce that the chops floated on did a fine job of mitigating that bitter taste that comes with russet peels, but what the package provided wasn’t enough to cover them.

The upside is, the recipe card provides the ingredients list… so I can do this again, and improve on things instead of buying the box. Maybe I’ll double the recipe so there’s four servings (which would cover Mason plus some leftovers for work), and double-double the sauce/gravy recipe. Substitute red potatoes for the russets, or peel the russets.

Anyway… if this is what pre-packaged meals offer, I don’t see a lot of value. In the end, I might just mosey over to Publix instead. They provide recipes for meals like this, and give you the list for all the stuff you need (some of which you may already have). No pretense, and (especially) no markup for what amounts to packaging. But it was a valuable experience. Now I know what to do with Panko breadcrumbs, I can smash potatoes with the best of 'em, and maybe I’ll substitute a carrots/onions combo for the snap peas if I make this again. I’m sure it will end up with a lot less sodium than the original.

In the end: three stars. The food was fine, but doing some of the prep work would have been nice. I’m certain the value proposition is heavily weighted in favor of buying the ingredients individually.

What I really need to do is go back to my single days: plan out the meals for the week, figure out what I don’t have, then shop accordingly.

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.

LinkWithin

Related Posts Plugin for WordPress, Blogger...