New Year, new Microsoft fuckup

At work, someone else on my team is responsible for pushing out desktop software, and the decision has been to remove Adobe Acrobat and use Microsoft Edge instead. That’s fine; I agree with simplifying the environment and only installing Adobe stuff if one has a license because one’s job is creating or editing PDF files. The fuckup is that Edge notified me this morning of a new feature in Edge: “We’re picking up where you left off. If you don’t want this feature, you can turn it off in Settings”

Liars.

The settings button is right there – the icon looks like a gear – but clicking it brings up only “Pin toolbar”, “Hide all annotations”, and “View document properties”.

No, the document properties don’t control anything.

Even Microsoft Copilot doesn’t know where this new setting is. It says it should be found behind the three dots menu … and inside that, the gear icon for Settings, and inside that, the Cookies menu, but that is fruitless.

Mostly, I’m complaining about two things:

  1. Someone on the Edge team created a new gear icon for their random three settings, and QA didn’t reject it with “We already have a Settings section – put your stuff there!” No, they let the stupid design ship into production.
  2. By making the new option default to “on”, Microsoft is reinforcing what is wrong with them: “it’s not your computer, we will do whatever the hell we want because it is our computer.”

Perhaps the fuckup is that upper management at Microsoft has so emasculated their QA department that they don’t have the ability to prevent stupid from shipping into production.

And as always, someone at Microsoft did not conceive that their new idea might be half-baked. “We’ve created a new feature! Of course everyone should be inflicted with it!”

Grrr.

Once per week, our help desk system runs a report I created, and it sends out a file attachment with the exact same file name. This is a report and does not need to stored long term – it is a snapshot of what happened during the last week. There is zero reason to add a date to the file name and end up with 52 new files per year. The idea that a new file with the old file name is a different file apparently didn’t occur to whomever was pushing the new feature.

What I don’t want, is to start reading this document on page 17. This week is a new file, even though the file name is the same. Last week, I got to page 17 because that is where the summary finished and the detail began. This week, I want to start on page 1, because that’s where the summary starts.

I would like the ability to disable this pick up where you left off feature1, but that option appears missing in all the settings menus I could find.

So not only did Microsoft ship into production a duplicate gear icon with lame options, but they didn’t get the new option into the real settings. I cannot turn this new feature off.

I am so looking forward to retirement, when I won’t have to put up with Microsoft’s dysfunction.

  1. Microsoft, famously as I remember it, was the inventor of the phrase “It’s not a bug, it’s a feature” a.k.a. “It is working as (poorly) designed. Pray that I don’t design it further.” ↩︎

Quarterly inventory – 2025 Q4

Dear FutureMe,

Today would be a good day to do a quarterly inventory.

How is your personal life going?

How is your work life going?

How is your Volunteer Service life going?

Future Me

Personal Life

This quarter gave me the opportunity to attend two weekend conferences out of town, and I enjoyed both of them.

I’m a little depressed because cold-and-overcast season is here again. I can see why people like living in the desert. I have relatives who live in the Pacific Northwest, on the coast, and man, that would be depressing nine months out of twelve.

A walk to remember

Mildly amusing, I needed to get some car work done, so I took it to the dealer I bought the car from. This is probably not the best idea because they don’t treat me as well as I would like. No matter, I dropped off the car first thing in the morning, went to a little cafe and got breakfast, and then texted a retired friend in town that I’m in town, and would he mind if I dropped by for a visit? He said, Sure, did I want a ride? No thank you, I’ll walk – I need the exercise; it will only be a 25 minute walk from downtown to his house.

I was about five minutes into the walk when the gastric distress kicked in.

I successfully did not poop my pants. Let’s get that said right up front. But man, it was an excruciating walk: go some number of feet, stop, pause, clamp down, and wait for the spasm to pass. Nowhere along the walk was a public park with a public restroom. I wasn’t going to walk up to a random house (if anyone is even home) and request to destroy their bathroom. Anyway, the mildly amusing part was that at some point, I paused, crossed the street, and paused again right behind a small pickup truck sitting in front of a house. I look up, and on the back of the pickup truck was a sticker that was essentially this:

 

(click the + sign to reveal the spoiler)

Thank you, God, for reminding me You have a sense of humor. 😉

Public sector Uber / Lyft

Another thing that happened is that I became miffed with the City of Visalia for using my tax dollars to play the big shot. Visalia Connect

You see, I have friends who supplement their income by driving for Uber and/or Lyft. I’m 100% in favor of people who want a side hustle getting out there and doing the work – in the private sector. I despise when the public sector tries to undermine them, because they are doing so with your and my tax dollars. If the city wants to spend tax dollars on police and fire, I’m 100% in favor of that. If the city wants to spend tax dollars on a bus system with fixed routes, okay, that’s not the worst spend of tax dollars. It’s not a great spend of tax dollars, but sure, when someone gets so elderly that they cannot drive anymore, that there is a bus system they can use is a public good. Walking would probably be better exercise for them, but sure, it’s not the worst spend of tax dollars.

But Uber and Lyft? Why the hell should the city be trying to compete with that?

WORSE – the City of Visalia contracted with a French company to provide the service.

You can barely make it out on the photograph, but the side of the van says “Operated by RATp Dev USA”. RATP Dev USA is the North American subsidiary of RATP Dev, the international arm of the Paris-based RATP Group that operates public transportation systems worldwide.

My USA tax dollars are enriching a French company to undermine local taxpayers trying to improve their lives with a side hustle.

What the hell

Microtransit is a luxury, not a necessity. Let the people who want to bask in luxury pay their own way at private sector prices. Let local people make some money. Let Uber and Lyft, both based in California, make some money. Don’t be taking money away from our local police and sending it off to Paris, France.

Cynical me thinks that really, some corrupt official at the City of Visalia pushed through the idea to get kickbacks. I have no proof of it, but it wouldn’t surprise me. We’ve had lots of corruption in other areas. But yeah, I wouldn’t mind seeing the officials and bureaucrats behind this tarred and feathered.

Amazon shopping this Christmas (not)

I did just about zero Christmas shopping with Amazon this year. Their “Black Friday” prices are not better value than the rest of the year. I did buy a large Christmas gift from Costco.

Personal mail server

For about nineteen months now, my personal mail server has been rebooting. I just replaced it with a different installation here the third week of December. I expect that it will be rock-solid now.

Way back when, I built it as a combination WordPress (this blog), Dovecot/Postfix, and Nextcloud server. On Ubuntu. Well, the machine I was renting was too small, so I started splitting things off. Nextcloud I moved in-house onto bare metal. WordPress I moved to a different machine, but on Debian. I left Dovecot and Postfix on the Ubuntu box, because it was probably going to be the most painful to move.

When I built my personal mail server before, I used the excellent guide by Christoph Haas (workaround.org) to build it. Back then, I’d struggled a little bit with the difference that Christoph’s instructions were for Debian, and I was installing on Ubuntu, but I made it work okay. Let’s Encrypt certbot was a little tough because I wanted a wildcard certificate for multiple domain names.

But then the server started running out of memory. I built a script that checked for an out-of-memory condition, and if so, I rebooted the box automatically.

That was twenty-seven months ago. Initially, it would go three or four days without rebooting. Nineteen months ago, it was rebooting one to three times per day. Last month, it was rebooting at least three times per day and up to six times per day. I knew I wanted to work on it, but I also expected it to be a big job. Being ruled by a hundred forms of fear, I made it into a larger problem than it was – go figure.

I’d scheduled some vacation time for Christmas and even took off the Friday before Christmas week. Then my mom called me and changed my plans on when we were going (to later). Suddenly I have four days off before I need to be on the road, and that should be plenty of time – no matter how hard the migration went. It actually took about a day.

One thing Christoph doesn’t go into is fail2ban for the webmail. I did have that on the original Ubuntu box, although it was more for WordPress than anything. But for all I know, that was the source of the memory leak. I had also done a sort of funky disk layout, so I was running Restic for local backups. Maybe Restic was the source of the memory leak? I don’t know. But the new box has the email-on-reboot script in place, so I’ll see if it doesn’t reboot on its own any time soon.

Since I re-enabled comments on this blog with the spam protection coming from hCaptcha, I thought I’d try it with my webmail client. It is working great.

KDE Donation

I’ve donated to the EFF and Internet Archive for close to a decade now – I’m happy to support projects I think are worthwhile. I started donating to the Thunderbird project two years ago in November.

This quarter the KDE project did a request for donations, and I have really liked KDE, so I signed up for a small, $5 monthly contribution. Not very long later, over on the KDE mailing list, their community manager called everyone on X/Twitter Nazis. Maybe I’m the one off-kilter here, but I thought a community manager was supposed to grow their community. The exclusionary stance ends up alienating normal people and stunting the growth of the community instead. Later, the KDE community said they supported their community manager being a bigot.

Yeah, I’m out.

If these people are so infected with TDS that they don’t see the damage they are causing, I’m certainly not going to be an enabler and continue donating to their project. It is sad because I was first exposed to KDE back in 2006, and I like the desktop environment. But perverse behavior should not be rewarded. I’ve cancelled my donation going forward. If a different desktop environment shows up that is as good or better, I’ll switch.

Work Life

Well, I found out I’d miscalculated my retirement date; the pay period ends one week later than I’d thought.

It is mildly amusing to me that February 2026 has perfect alignment, with the first Sunday being on the 1st and the last Saturday being on the 28th. On the calendar, February takes the space of exactly four weeks. May and August 2026 have the worst alignment, spanning six weeks. I did a post this quarter about programming in RPG II under the heading Helping Sales make promises they could keep. May and August were the sorts of configurations that RPG II was not naturally a good fit for.

I got (probably my last ever) Performance Appraisal and my boss was kind. I’ve been feeling guilty about how much work I’m not doing, but my boss said this is a good thing. Proper succession planning means I must train everyone else what to do when I’m not here, and the best way to test my training is to let them do the work.

Volunteer Service Life

The Events Calendar Pro (TEC)

Well, I added TEC to the website for the fellowship, but it has bugs. I’m having to watch for errant behavior and then run a MySQL statement on the server:

DELETE FROM wp_options WHERE option_name LIKE '_transient_tribe_views_v2_cache_%';

DELETE FROM wp_options WHERE option_name LIKE '_site_transient_feed__%';

Still, TEC is remarkably better than Sugar Calendar, so overall it is a win. We might try out ticket sales next.

Flyers for events

One thing where AI has been a blessing and a danger is in adding events from outside sources. I uploaded a flyer for an event to an AI and asked it to convert the flyer into WordPress-compatible HTML. In one minute it did the job that would have taken me an hour or two. So that was great.

Then for another event, I pointed the AI at a series of pages the organizing committee had put up. That went great.

Then for a third event, I did the same, but the information was wildly off. I went to the web page, copied the URL, and prompted the AI to read that web page and create HTML from it suitable for pasting into WordPress. It looked okay, but… the event is at a Sheraton hotel, and this says Hilton… and the Hilton is 25 miles away! Oof. I asked where the information it gave me came from, and it said the web page, “This is what it says”. I put into the AI prompt “No it doesn’t” – and of course, then it apologized and actually read the website and created correct content. Apparently, it had pulled information from ten years ago and had simply run with that. AI is not intelligent (yet).

Contact Form 7 and Captcha

Our office manager is a part of a community of other office managers. One of them did a demo of their website, and that office had an email contact form. My office manager requested we do the same. I’d tried Contact Form 7 back in 2018, but the spam was immediate and incessant – I quickly deleted it.

So now I need to add it back in, but not subject my office manager to the onslaught of porn, supplements, and cheap junk email. The nature of the fellowship is not a great fit for ratting out people to Google as members of this fellowship. Well, if reCAPTCHA is off the table, how about hCaptcha?

I implemented hCaptcha for the contact forms on the website, and it has worked great. I was happy enough with it that I signed up for a personal account and added it to this blog’s login form for user comments. Later I used the same account to protect webmail on my rebuilt personal mail server.

The only thing I’d like better is if there were a pricing plan between Free and Pro. I do believe in paying my own way.1 But for the month of December, I’ve used it twenty times (their dashboard tells me this). I cannot justify the Pro membership at $99 per month ($1,200 per year). The fellowship also believes in paying its own way, but also, we cannot afford $1,200 per year. $60 per year would be ideal – and I don’t actually want any additional features. I know that serving up their images and comparing the results takes CPU cycles. I just don’t want to be a freeloader.

  1. Unless you’re going to be an asshole and call me a Nazi for my choice in social networks (duh!) ↩︎

My first programming job – Truline Corporation

[four minute read – longer than most of my posts]

Previously I talked about becoming the Work Order creator (“Engineer”) at Truline.

Opportunity Knocks

At some point, we needed room, and I was relocated to another office, which I shared with the president of the company, Jack Cederloff.

I got the idea to write a W.O. generator in dBASE II. I brought in my Osborne computer (what it looked like) and my trusty Okidata dot-matrix printer and showed my creation to Jack. He offered me a job as their in-house programmer – if I would learn to program their mini-mainframe.

I’m gonna be a professional programmer!!! Life is going to be fun!

Night School

I went to night school at the Tulare County Organization for Vocational Education (TCOVE) and learned RPG II on an IBM System/36. They had a Big 36 – the 5360, and Truline got the Compact 36 – the 5362.

The class was fun for two reasons. First was that I was never a very social person, so going to this class, I met new people. I was 23 or 24 years old at the time. That I recall, there were four or five other people in our class. I do not recall who the instructor was. But I enjoyed learning new things, and this time it was a computer language. The other fun thing was that there was a high school senior at Mt. Whitney who was the computer operator of the Big 36, and she was super cute. While we were learning RPG II, she was running jobs for Accounts Payable, Accounts Receivable, General Ledger, and the school district’s student grades and attendance application. She would hang around while we did our homework on the 5250 terminals. I was a fan.

Report Program Generator II (RPG II)

RPG II itself is a terrible language. Later, I would learn that computer languages were labeled by their generation: Assembly was a First Generation language, and FORTRAN and COBOL were Third Generation languages. SQL and MATLAB are Fifth Generation languages. RPG II was a Second Generation language. Sigh.

Later still, at SCT, I worked with a lady who had a plugboard in her office as an art piece or conversation piece, I suppose. She described how the programmer would plug wires in from the results side of an operation (the right side) and wire it down to the control side (the left side) of a later operation. The origins of RPG II were suddenly revealed to me: I could see where RPG II indicators came from and why they triggered later operations in the code. They were virtual replacements for physical wires!

But yes, RPG II is a language to try one’s soul. Well, it isn’t too bad if one is detail-oriented and patient. Thankfully, I am both, so it didn’t bother me.

If you look here, you see that each line of code had a type specification, and each type was required to be in a specific order: U, T, H, F, E, L, I, C, O. The last three were the meat of programming: Input, Calculation, and Output. The type specification went in column 6 of the source code.

Yes, RPG II is a column oriented programming language.

But back to indicators: Calc lines did calculations, but they also set indicators. If the result of the calc was greater than zero, an indicator (two digits) specified in column 54 would be turned on. If less than zero, the indicator in column 56 was set, and column 58 would hold the indicator if the result was exactly zero. Well, there’s your WHILE statement: when the result of the variable was exactly zero, the indicator named in column 58 would be turned on, and conditional logic would change the program flow. At the beginning of a line were (up to) three conditions (indicators). If the indicators were on, the calc line got executed. If not, it was skipped. Page 1-7 of this link shows the processing cycle in RPG II. The processing cycle in RPG II is absolute and will happen, whether you want it to or not. It takes a bit of humility to accept that. Today, we wouldn’t think of telling the programmer that they have no choice in how their program runs. Anyway….

Programming as my day job

Truline upgraded from a System/34 to a System/36, and I went back to my original engineer office, but as a programmer this time. Shortly after, we moved the factory from Visalia to Farmersville. During the design phase of the building, we decided that we needed a computer room, so that became my office.

Come to think of it, this was the only time in my life when I had my own office.1

For the next two and a half years, I was programming in RPG II on this mini-mainframe. I loved being a programmer.

Initial work orders

The first thing I wrote was the system for getting input from the engineer and creating the work order. Steve, who had replaced me when I was promoted to programmer, was our engineer. Steve would log in and create a new work order, and would then enter codes, like “S” for a single-sided board, “D” for double-sided, or “M” for multi-layer. Based on the codes, I’d add the series of tasks (departments) needed for this order.2 After he did his data entry, my program printed out the work order that looked like the previous hand-drafted sheet, but without the steps that were not needed. The greenbar report was folded and put into the same plastic envelopes we used for hand-crafted paper work orders from before.

Truline sent me to training

The good was that the weeklong training was taught by the gentleman who designed American Airlines’ SABRE airline reservation system. He clearly knew his stuff, and I did learn things from him.

The fun was that Truline paid for me to fly to Dallas (iirc), and I took my Osborne on the jet plane flight. The Osborne was designed to fit under an airline seat, and with a bit of heft and struggle, there it fit. And… it so happened that my seat was immediately next to an IBM mainframe salesman who wondered, What the heck is that? I told him it was a portable personal computer.3 He looked me straight in the eye and asked me, “What is it good for” I explained that when I got back to work, I’d owe my boss a report about the trip. In the evening, I could write the report in the hotel room, and Monday morning when I got back, all I’d have to do is print it. His eyes showed he was amazed. Here this 25-year-old twerp was already into the next generation of computing, and here he was, a salesman for the biggest computer company on the planet, just getting gobsmacked with the future.

The bad was that my training instructor asked me which computer we had, and when I told him a System/36, he said that was no good, and I needed to upgrade to a System/38. The System/38 came with a built-in database, and any computer without a database was a toy computer. I was barely a programmer yet, so I never asked Truline to spend a hundred grand on a new mainframe for me. But yes, a database would definitely have been the way to go.

Tracking jobs through the factory

Then, back at work, I wrote a couple of programs that updated the last completed step on the job, and produced a daily report of all the jobs in the factory, one line per W.O. sorted by W.O. number (oldest jobs first). The report ran every morning. Every day that a W.O. did not change position, I grew a counter. The end of a line on the printout was a crude graph: the number of asterisks for the number of days the job hadn’t moved. If a job had more than four or five asterisks, the production manager knew to go to that department and find out what the hold-up was. It might be, for example, that a customer wanted red soldermask instead of green, and we were waiting for the custom order to show up. But other times, it was simply that a large job was in front of it, and it would take a few days to process 800 panels through that department. It became Robin’s job to visit every department at the end of every day, and write down the W.O. numbers of the jobs sitting in that department. Then she’d log in and update every work order with its current location. The next morning, the production manager, John Morado (who was also one of the owners), would get the report and manage production.

If I’d stuck with it, I’d have gotten to the point of printing QR codes on the work order and having a barcode reading terminal in each department for registering incoming and outgoing jobs. Jack Cederloff and I had talked about that; printing barcodes and wiring up barcode scanner terminals. That was before the move to Farmersville.

Helping Sales make promises they could keep

My next program was for the sales department. I went through every order due this month or in the future and totaled the dollar amount of the order by day. Man, programming a calendar in RPG II was painful! I wanted the calendar printout to look like a calendar: a grid of days, seven wide and (however many) weeks deep.

The goal was that every day would list the orders and their dollar value. Then at the bottom of the day, the total value for the day. The week would have seven columns for seven days, and when this week was finished, the next week would be computed.

RPG II and that compute cycle are NOT friendly constructs for dealing with the 31st of the month being a Wednesday, and every six months, there are five Wednesdays that month. Most months have five week rows, but some have six. February could have four, if everything aligned. And yes, I programmed in that every four years, February has 29 days. Rolling from the 31st, 30th, or 28th/29th of the month to the first of the next month means finishing one month and setting up the next month; however, the RPG II processing cycle will be obeyed, and if the next record breaks control into a new month, welcome to the house of pain. Turns out it was best to copy the data to a new table (file), run a job to append a “week number” and sort on that. Then, the control-break was on week number, which made the programming manageable. The last work order of the month wasn’t the trigger for the bottom of the calendar; that was handled by the week change routine, which came after the day totals.

Did I mention that the System/36 had 64 KB of RAM?4 A memory array would have been fine, if I weren’t worried about running out of RAM. So all the work I did was based on files on disk, running through the RPG II process for chewing through records. My Osborne had 64 KB of RAM too. Primitive times.

Anyway, the sales department was able to use the dollar amounts as a proxy for capacity. When a customer asked when they could get their order done, Sales looked at the calendar and picked a day five or six weeks out with the lowest dollars on it. They also looked to make sure that there wasn’t a huge order that needed to ship the day or two before. But it worked well; once a day got to around the $14,000 mark, that day was full, and they’d start telling the customer we could finish the job and ship the day after. If the days before six weeks looked puny, they could promise a faster delivery date and fill in those days.

A month or two before the Consumer Electronics Show in Las Vegas every year, we would have customers who were willing to pay double the normal amount if we could build their small order in one week so they could have actual products to demo at the CES show. Sales could look at the calendar and tell them yes, we can, or no, we cannot, based on how full the factory was for the date they were asking.

Job costing / forecasting

The next programming project was forecasting. That was a big project. I did time studies and all that, measuring how many minutes a task of a certain size would take. I measured big jobs and small jobs and kept numbers for task setup and task piecework. The accountant gave me the average hourly wage number. I made a table of time per task per panel. Then I chewed through every W.O. (and every task in each) and generated an estimate of how much the job would cost to build. The accountant and I compared numbers. The accountant explained that my numbers were off because of overhead. Wow there was a lot of overhead. I got to add an adjustment factor to come up with an estimate of real-world costs every month. I was pretty happy that for the first three months in a row, my computed projected expenses were within 10% of actual expenses. We updated my adjustment factor and got to under 5% variance. Mind you, I had zero training in being a time and motion analyst. I just figured it out as I went along.

Then we had a large customer ask us to provide a quote for many large orders, and my job cost program was used to provide an educated guess. Jack Cederloff was worried we’d underbid the orders, but my job cost estimator said we would be okay. We won the bid, and after several months and all those orders, we made out fine. My job cost estimator was good. 🙂

RPG II and the System/36 were not enough

In my home life, I’m reading Byte Magazine and Dr. Dobbs Journal and helping my dad with a business. He learned of a new technology: ultraviolet-cured liquid polymer could be used to make rubber stamps. I should do an entire post on just that. But the short version is that my dad had a PC’s Limited5 286 (10 or 12 MHz with the touch of a switch) with a monochrome monitor. There was a guy out of the South who made a program: a WordStar post-processor that extended WordStar’s “dot commands” for changing print settings (bold, italics, and such). It could include TIFF files and output to an HP LaserJet. My dad bought a scanner and would compose a mask with these dot commands and scanned images. He would print the rubber stamp mask onto clear plastic and burn the polymer into a pad he could glue to the stamp handle. There are a few stories here. Anyway, it was clear to me that personal computers were the future, whereas mainframes were not.

I had gotten to 27 years old and was stuck. Truline had moved to Farmersville, and all our cash flow was gone, tied up in the move.

Oh, another thing I had done was to go back to night school to learn accounting. It wasn’t so much that I wanted to be an accountant as that I just wanted to understand words like “debit” and “credit” when the accounting people spoke them. One teacher was particularly good, and I learned about ROI and cash flow.

We had no free cash for computer upgrades. I was stuck.

I could see that the future was all about the Local Area Network (LAN) and PCs attached to it, and Truline wasn’t going to have enough money for upgrades for years. Well, a few years, but at 27 years old, I felt an urgency to keep improving. Programming in RPG II was not it.

One early spring day, as I was walking back from lunch, I was internally grousing that things weren’t great and wouldn’t get better. Then it struck me: things wouldn’t get better!

I decided to wait a month, in case I was being rash. A month later, the outcome was the same: no, I wasn’t being rash – I was stuck, and Truline wouldn’t be able to afford upgrades for at least a couple of years. I decided to save up a bunch of cash and resign from my programming job. I didn’t know where I was going to go, but I knew I didn’t want to stay here.

The C programming language was not my cup of tea

Although I liked computer programming, Dr. Dobb’s Journal had suggested that learning to program in C was the way the world would go. I looked at C and hated it.

I like COBOL because if I intelligently name my variables, the program code reads like English. Clearer is better, always, in my book. The new styles of programming seemed to try to create a wizard-class, to purposefully make programming difficult for mere mortals to understand. This is vain and stupid to me. C was my introduction to this, and with that introduction … I’m out.

First, the arrays in C were indexed starting at zero instead of starting at one, the way God intended.6 Also, RPG II, FORTRAN, and COBOL had one-indexed arrays, which makes for useful structures as 1 = January, and 12 = December. So now in C, I’m supposed to take a perfectly fine date like 20251203, extract the fifth and sixth characters7 as the month number, and subtract 1 from it

Why don’t I just create an array of month_numbers-to-month_names with 13 elements and make month[0] = “Dumb-ass-uary” ?

If the ancient programmers (FORTRAN, COBOL, and RPG) figured out how to make the compiler adapt arrays indexed from 1, why couldn’t the C compiler programmers do so too? I thought it must be because they think that zero indexed arrays are a feature instead of a semantic bug.

Second, in describing loops, the C index incrementer could be written two ways, with different effects. One way:

while (i++ <= 10)

and then another way:

while (++i <= 10)

And the difference matters.

When I read this, my mind instantly said, “This is stupid. There’s no way I want to learn a language with weirdness like this”.

So I’d opted out of learning C, and the other languages available at the time weren’t appealing to me either.

Next in my biography: how I ended up in operations, working for local government.


  1. Today, four days out of five, I work from home. I don’t think it is the same thing. My dream of the best possible work environment was in the office, but with a closable door to keep the noise out, but also the freedom to take a break and hang out with co-workers for a minute or ten, getting a cup of coffee and shooting the breeze. A cup of coffee here at home is fine, but I’m not going to bounce into Teams just to shoot the breeze with any of my co-workers. ↩︎
  2. See my previous post for the tasks on the work order. ↩︎
  3. IBM did not have any portable PCs yet. Heck, they barely had the IBM PC AT. Compaq would soon swoop in with a portable PC in the Osborne-like form factor. ↩︎
  4. IBM said it had 128 KB of RAM, but that is because the System/36 had two processors, of 64 KB each. As far as programming went, 64 KB was all I had. ↩︎
  5. Later to be known as Dell Computer Corporation ↩︎
  6. I should do a blog post about this. I’ve since learned the why of zero indexing, and I can see the point of the trick, but it is still bad in my not-so-humble opinion. That and $8 will get you a cup of coffee at Starshmucks…. ↩︎
  7. Notice I didn’t extract the characters at index positions 4 and 5 ! ↩︎

Google chooses misandry

I recently got a Future Me email (an email sent to my future me):

Dear FutureMe,

Today is International Men’s Day. Every year, Google celebrates International Women’s Day with a Google Doodle. And every year, Google gives the finger to International Men’s Day. Can you spell misandry?

I deleted my Google account today. I don’t need misandrists in my life.

Me, November 22, 2024

I also deleted my Google account on the theme Make Orwell Fiction Again. I have a hat I bought for myself and as gifts. It seemed hypocritical to have a Google account and be promoting Make Orwell Fiction Again.

Google might have recognized their own misandry and decided to treat men with as much respect as they treat women with a Google Doodle on November 19. But I would not bet money on 2025 being that year.

“Wicked: For Good” – Disney dials Orwell up to 11

The name of the movie: Wicked: For Good

I don’t know that I could come up with a more Orwellian name for a product than that.

There is this word: “wicked” which means morally evil, sinful, of vice, and intentional wrongdoing.

There is this word: “good” which means just about the opposite of that.

Putting these two words together in your product name like that is … perverse.

Wicked, even.

Not good.

Anyway, this post was originally written on 2025-10-21. I went to the movie theater this weekend and watched Tron: Ares 3D. I liked it. Unfortunately, it was a Disney film; I wasn’t thrilled about throwing dollars at them. Of course there were trailers for upcoming Disney movies, and Wicked: For Good was one of them.

SMH.

Orwell would be turning in his grave.

My first jobs – Truline Corporation

Truline Corporation was a manufacturer of printed wiring boards in Visalia, California. People tend to call them printed circuit boards but technically they are mostly all printed wiring boards. They are wires, and rarely are they in a pattern that affects the electrical operation of the circuit. Anyway….

I started working there in the spring of 1980, in the drilling department. I spent several years in copper electroplating and eventually worked my way up to “engineer”. That job involved taking the customer’s blueprint and artwork and creating a Work Order (W.O.) that the factory used to build the order. But I’m jumping ahead.

At Truline, I’d started out as a driller. We’d take the artwork, tape it to a flatbed, and then guide a table riding on dual rails (an XY table) over the artwork. The table held four small electric drills, one on each corner. Where there was a pad on the artwork, I’d align the scope (an angled mirror) and tap the foot pedal. The foot pedal would engage pneumatic locks on the rails, and drop the spinning drills into the PCB material. We’d stack the copper-clad PCB fiberglass four stacks high. With one foot tap, I would drill sixteen circuit boards.

Later, I ran the “programmer” which still used a flatbed and taped artwork, but had finger spinners. As I spun them, the XY table moved, this time floating on air bearings and driven by dual leadscrews. Instead of physically drilling the holes, it put the X Y coordinates on a paper tape. This was G-Code, although I didn’t really do any language work (yet). Once in a great while, I tapped the foot pedal an extra time, and then had to go back and manually slice the errant code out of the paper tape (and then glue the tape back into a continuous strip). Man I don’t know why so much of my early (electronic) computer programming recorded the data on punched paper. The paper tapes were stored in clear plastic boxes that looked like movie canisters. When it came time to drill the panels, I (or someone else) would load the paper tape into an Excellon Automation drill and drill the panels complete with automated bit changes and robotic speed.

Later I was on the router / profiler machine, and with it I actually did write G-Code to move the router bit around to carve the circuit board out of the panel. It was very much like programming an ink pen-plotter – we had one in the engineering department at the junior college, which I’d gotten to put a plot on, using FORTRAN. Programming the G-Code to run the router bit around the panel, cutting the individual boards out, was fun. Every once in a while, we’d get one with unusual curves or cutouts.

Later I ended up as the “Engineer” at Truline and started composing Work Orders. All the W.O.s were a photocopied piece of paper made from the master (blank) form. It would have a section for every operation we could perform in the factory, and I crossed out the parts that we didn’t need. I wrote in numbers or text where the build needed things specified. The first line, I think, was (for example) “2 x 8” for a panel two circuit boards wide and eight tall, and a specifier if it was single-sided or double-sided copper clad fiberglass. The thickness of the material was there too. Later, when IBM had standardized the physical dimensions for ISA add-in cards, we did a lot of “1 x 8” panels. When ISA boards got shorter, we started doing “2 x 8” panels, which was better because when it came time to silk-screen the solder mask (the green stuff you see), we only needed one silk screen image. After the screen printers applied the mask, they put a rack of panels in an oven. Once baked on, they’d pull the panels out, flip them over, and screen the backside of the panel with the same screen as the front side, since the boards were mirrored on a panel.

As best as I can recall, here were the operations on the W.O. form:

  • Raw material – slicing copper clad fiberglass into panels.
  • Artwork – a copy of the customer’s original artwork was burned to a clear plastic sheet.
  • Drilling – the panels got drilled wherever a pad on the artwork needed a hole.
  • Imaging – the drilled panels got laminated with a photosensitive film (photoresist, we called it). The artwork was laid down over the panels, with the pads being aligned with the holes – then it was put in a ultraviolet curing machine. The artwork was pulled off and used again for the next panel.
  • Copper electroplating
    • First, the cured panels were put in a detergent bath, and everywhere the photoresist was not cured, it was washed away. The outside edge of the panel was left uncured, and the photoresist washed away.
    • Second, the panels were screwed into titanium racks on their outside edge. The screws would later conduct electricity.
    • Third, was a chemical process to coat the inside of the holes with palladium metal.
    • Fourth, the racks were put into a copper and sulfuric acid bath, with bubbles, and the top of the racks screwed onto the electric rails. Copper plating would increase the thickness of the traces and the insides of the holes, wherever the photoresist let the bath reach.
    • Fifth, the racks were moved from copper electroplating to tin/lead solder electroplating.
  • Etching – the photoresist was dissolved and washed away, leaving thick copper traces (with a solder coat) sitting on the panel with the thin clad copper on the fiberglass. A machine sprayed pure ammonia vigorously on the panels, etching away the thin copper cladding but leaving the thick traces behind.
  • Reflow – the panels were put through a quartz oven (on a conveyor belt), and the solder was melted.
  • If the board needed gold fingers, we’d electroplate nickel and then gold. This might mean slicing the panels into sub-panels so that only the edge of the board with fingers got submerged in the nickel and gold bath.
  • Soldermask – the panels were sent to the screen printing department, where another piece of artwork was used to make a silkscreen mask. The liquid soldermask material was laid down over the traces and everything, and then baked.
  • Screenprinting, redux – this time, another artwork mask was used to put white paint on top of the freshly baked soldermask. (Sometimes a board did not need soldermask, but did want the paint – that would be black, because the fiberglass was a pale yellow).
  • Routing – a panel (or stack) would be mounted in the router/profiler, and a router bit would carve the outline of the board, freeing it from its panel.
  • Finishing – boards got their edges sanded and buffed. Some customers asked us to install hardware (standoffs and such).
  • Quality Control – a set of eyeballs inspected every board.
  • Shipping – the paper form got the numbers of units that passed inspection. Some customers wanted the overage if more boards passed inspection than they ordered; others did not. If it was a repeat order, we’d save the leftovers for their next run.

Some sections on the Work Order would get crossed off – “X” scratched through them to mark them as steps not to do. For example, a single-sided board did not need the holes filled with palladium (and palladium was more expensive than gold). Single-sided boards usually didn’t get soldermask, but they did get screen printed with the labels of which parts go where.

Later, we added multi-layer boards. That was impressive. There was a whole Imaging → Copper electroplating → Etching process for all the interior layers. Later, they would be put into a heated press with impregnated uncured fiberglass cloth in between layers. The layers had to be aligned and pinned together to not shift during pressing, but had to be baked into a solid sheet at high heat and pressure. Drilling came after the multilayer press, because the holes needed that palladium coating to let the copper electroplate thicken up the hole wall. Since there weren’t holes to align to, the Imaging process used targets on each layer at the outside edges for alignment and pinning.

Congressman Vince Fong did respond to my requests that he support H.R. 581

He did not support H.R. 581 (yet), but I want to give credit where credit is due: he did respond to the two emails I sent via their web portal. I don’t know which one (or if it is both) he (his office) responded to – there are no specifics in the reply.

He does say he supported H.R. 668, which says the current investigations should continue.

I’m slightly annoyed that he finishes his email with “… and the American people must have confidence that no one is above the law.”

If that were true, the investigations that are underway would have produced names by now. Signing up on the resolution that says “keep doing what you are doing” is just more sleight of hand to keep the child rapists protected.

The reason I like H.R. 581 is that it requires the Department of Justice (via the Attorney General) to release all documents and records in its possession related to Epstein within 30 days, including grand jury materials.

H.R. 668 says to publicly release committee records; but what will go into those committee records will be (of course) decided upon by the (political) oversight committee. Really embarrassing stuff would (of course) be left out, because no congress critter wants to make an enemy of someone he or she might need later for a vote. The child rapists being blackmailed also will be applying pressure (and campaign donations) to keep their names out of the record.

Thomas Massie and Ro Khanna are more concerned with doing the right thing, than with whether they are popular amongst rich child rapists and their minions. That’s why I like Thomas Massie and Ro Khanna.

For the record, here is the reply from Congressman Vince Fong’s office:

Dear David,

Thank you for contacting me regarding the ongoing investigations into Jeffrey Epstein and his accomplices. 

Like you, I believe the American people deserve a full account on Epstein’s crimes and to know whether there was any mismanagement of the investigation.  I am confident that Congress can work with the Department of Justice and support the House Committee on Oversight and Government Reform in its efforts to ensure transparency and hold all individuals involved accountable. 

That is why I voted yes on H.Res. 668, which directs the Oversight Committee to continue its investigation into the Federal government’s handling of Epstein and Maxwell and ensures the Committee has the authority to obtain documents and testimony necessary for a thorough review.  The Committee has made significant progress in this effort: issuing subpoenas for Justice Department files, testimonies from former officials, requesting key documents such as flight logs, immunity agreements, and investigative records, and privately meeting with some of Epstein’s victims. 

Recently, the Oversight Committee released additional records from the Epstein estate, including financial records, cash ledgers, message logs, calendars, and flight logs.  The Committee has also released transcripts and correspondence from former U.S. Attorneys General William Barr, Alberto Gonzalez, and Jeff Sessions regarding their involvement in Epstein-related matters.  Oversight Committee Chairman James Comer emphasized that the Committee will remain focused on a thorough and transparent investigation to ensure accountability for Epstein’s victims. 

Although I do not serve on the Oversight Committee, I will continue to support these investigations.  The victims of Epstein’s crimes deserve accountability, and the American people must have confidence that no one is above the law. 

Thank you again for contacting me.  Hearing about what is most important to you and your family helps me represent California’s 20th Congressional District to the best of my ability.  It is a great honor to serve you in the U.S. House of Representatives.  Should you have additional comments or questions, please feel free to contact me at my Bakersfield, Clovis, or Washington, D.C. offices.  

If you would like to receive regular updates to learn more about my legislative work on behalf of our neighbors and communities, please sign up for my newsletter below. 

Sincerely,

VINCE FONG
Member of Congress

Quarterly inventory – 2025 Q3

Dear FutureMe,

Today would be a good day to do a quarterly inventory.

How is your personal life going?

How is your work life going?

How is your Volunteer Service life going?

Future Me

Personal Life

Financial Milestone

On Thursday, September 25, I paid off my mortgage. That is to say, I’d asked my mortgage holder, Rocket Mortgage, to send me a payoff letter for the 25th, and I took it to my banker, who wired the money over.

I’d been on an aggressive payoff schedule, so from now on, I won’t be out that $2,000 per month. Hallelujah!

Nextcloud feature add

By default, Nextcloud does not include file indexing, so there is no file content search. I was pretty sure that during a volunteer service planning meeting that I had written down notes of who was going to be doing certain tasks, but I could not find the file with those notes. I added Elasticsearch to my Nextcloud server and configured a Full Text Search – Files app to use Elasticsearch. Later I might add tesseract-ocr and scan images too.

This quarter was really shitty, politics-wise.

Second, on the morning of August 27, 2025, Robin (Robert) Westman murdered two children and injured twenty-one at the Church of the Annunciation Catholic Church in Minneapolis, Minnesota. It disappeared from the news quickly.

First (but we wouldn’t hear about it until later), Iryna Zarutska was killed in a way that exposed just how broken the government is.

Iryna’s murder also exposed just how much the government has put the mass media on a leash. She was murdered on August 22, 2025, but for seventeen days, the mass media didn’t report anything, until the horrific video of her murder circulated on social media. Her murder didn’t fit the government narrative, so there was a news blackout. Then, when social media exposure forced their hand, several mass media organizations reported not on the murder or murderer, but rather that MAGA had its panties in a twist about a white girl being murdered.

Third, Charlie Kirk was assassinated. Again, the mass media response has been contemptible. As I said before, Wikipedia couldn’t remove Mr. Kirk’s assassination from their front page fast enough. They had Robert Redford’s death of natural causes on their “In The News” page for twelve days, while Charlie Kirk’s assassination was up for five days. Over on Reddit, the woke folk are demonstrating just how hypocritical they are and that they don’t mind telling lies to support their position.

Fourth, the news broke about 22-year-old Logan Federico who was executed by 30 year-old Alexander Dickey: he dragged her from bed, forced her to her knees, and executed her. He then went on a spending spree with her credit cards. Alexander Dickey had been arrested 39 times with 25 felonies. The murder was committed in May 2025, but the fact that the murder is only getting news attention now exposes how news media downplays stories that don’t fit their narrative.

Congressmen Thomas Massie and Ro Khanna have a bill waiting for one more signatory that will force every member of Congress to go on the record about whether they want to expose who the child rapist customers of Jeffrey Epstein and Ghislaine Maxwell are. The Republicans in Congress are fighting this as hard as they can, which is reprehensible. My congressman, Vince Fong, through inaction1 is showing that he also wishes to protect the child rapists.

Caffeinated Kool-Aid

I’m on the fence with this.

On the one hand, inflation is still terrible, and my caffeine fix became so overpriced that I quit. Coffee is fine, but during the summer months, I’d rather drink something cold. Iced coffee is fine, but I’m not getting much caffeine (but plenty of ice, which takes a while to melt). I got the thought of going to a “Dollar Store” and indeed they do have G-Fuel energy drinks at $1.25. That is still expensive, but it isn’t ridiculously expensive. I considered ordering the cans online. The G-Fuel website wants far too much money for the cans; but … what they really want to sell me is powder. This makes sense: water is costly to ship, and every household has running water.

And I do like the idea of multiple flavors. So I placed an order online. The flavors I got were lingonberry, raspberry lemonade, blackberry apple, strawberry citrus, watermelon mint, and blueberry lemonade.

In theory, one tub of powder can make 40 servings. There was a sale, so each tub was $18. That’s 45 cents per serving, which is great. Even if their shaker bottle is holding two servings, that’s still 90 cents, and 24 ounces of drink instead of 16.

Although I’m not really a fan of Sucralose, I do like “sweet” with no calories. The powders come with caffeine, vitamins C, E, B12, and B6, and some have niacinamide (vitamin B3).

On the other hand, as a brand-new, never-before-ordered, first-impressions-matter customer, at the end of the order, their website popped up an offer: would you like to add some hydration packets?

I foolishly said yes.

They ripped me off big time.

This is how you treat new customers?

Yeah, I no longer want to order products from you anymore.

I still have plenty of the caffeinated zero-calorie Kool-Aid type powder on hand. I do like the flavors and energy lift it gives me. But I’m sore that they chose to rip me off. Did they really think I’m such a chump that I wouldn’t notice?

Music Player Demon

I currently have a Raspberry Pi as my MPD server, and three clients. The script I wrote to populate the list isn’t nearly what I want it to be, but it runs without me having to deal with it. Two of the clients are full blown Fedora 42 KDE Plasma Edition workstations, so I have the Cantata program on them and can mess with the songs in the list all I want manually. I do enjoy having background music all the time, and once per hour a voice announcing, “The time is nn AM” (or PM).

Supercuts Subscription

The last haircut I got from a barber who rents a chair in a barbershop was $35. It was a low quality haircut, and the guy rushed the job. Then a friend of mine told me about Supercuts having a subscription service, which is a good deal. The Supercuts hair cutters / barbers don’t rent a chair; they get paid hourly whether there are customers or not. They get minimum wage, which is $16.50 per hour at the time of this writing.

In Walnut, California, Moxie Management Group “… is a franchise of Supercuts with 78 locations in California.” They offer a subscription service of $22 per month for as many haircuts as you want, plus $10 per month to include beards. So for $32 per month plus tip, I can get a haircut every week? Versus $35 per <whenever> including tip?

The math turns out to be about the same, except that on the all-I-want program, I’m going to the barber 52 times a year instead of 26. That’s a win for me.

Work Life

In previous Quarterly Inventories, I’d say something like, “If $18,000 fell out of the sky and into my lap, I would retire tomorrow.” Well, that dollar amount was based on how much of my mortgage I had left.

Today that is now zero. 🙂

I did drain my cash-on-hand pretty low to get the mortgage to zero. My financial advisor had told me that she wanted me to have $25,000 in the bank on the day I retire. I’m hoping to retire on 2026-07-19, but I don’t know if I’ll be there by then.

It does make my attitude toward work a little better, though. If Microsoft cannot figure out how to get Copilot to properly form a PowerShell to do text matching, that RSN2 will be Not My Problem.

Volunteer Service Life

Ringtones

Heh. At one of my meetings, I signed up to be the timer. We tell people they get to speak for three minutes, and here’s what the time expired warning sounds like: <I play the alarm ringtone>.3 Fun for me is to buy an MP3, take a snippet of it with Audacity, turn it into a ringtone file, and sync it to my phone. The more popular / recognizable the song, the more people laugh or smile. You could call it a variation on the game Name That Tune.

A friend said I should use Run DMC’s “You Talk Too Much,” but that seems a little too harsh to me.

But it is fun each week to come up with a new soundbite.

The Events Calendar

Sugar Calendar is no good. We bought The Events Calendar, and now I need to migrate everything to it.


  1. Isaac Asimov wrote the Three Laws of Robotics, and Number One is “A robot may not injure a human being or, through inaction, allow a human being to come to harm.” Vince Fong is fine with inaction because he thinks doing nothing will let him off the hook. This is an incorrect assumption on his part. ↩︎
  2. Real Soon Now, popularized by BYTE magazine columnist Jerry Pournelle about when Microsoft would ship a product or update. It generally means any time period from two weeks to four years. ↩︎
  3. I set the timer for 3:30, because many a time, three minutes exact isn’t quite enough. ↩︎

Today, I received an email from twelve years ago

Twelve years ago today, I sent an email to myself via FutureMe.org

I included a link to a YouTube video: https://www.youtube.com/watch?v=1yw1Tgj9-VU

That was the link to Linkin Park – In The End (Official Music Video) for a really long time. But when I try to visit it now, Google denies it, saying I must log in, first.

What is weird is that I can remain logged out and search for “Linkin Park – In The End (Official Music Video)” and YouTube does show it to me, but at a different URL: https://www.youtube.com/watch?v=eVTXPUF4Oz4

The email I sent was about Edward Snowden and his (then) recent whistleblowing activity.

Edward Snowden was a part of the NSA, but his trust fell apart. He had to blow the whistle, but then flee to Russia, to escape USA persecution.

It should have been the ultimate shame of the USA government that they were not trustworthy enough for their own citizen to face an honest trial in the USA.

me, September 15, 2013

I, too, had seen the YouTube video of the Director of National Intelligence, James Clapper, directly lie under oath to Congress that every American wasn’t getting the terrorist treatment. Here’s another copy of the video – the spicy part begins at the six minute mark. Shortly after, Edward Snowden blew the whistle.

Nothing has really changed, though.

The government still surveils everyone without a warrant. They still subvert elections.1 They still use taxpayer dollars to astroturf Reddit to push narcissism like it is a good thing. C’mon, liberals: band together to fight your imagined (insane) oppression! Only your clicks can save our self-esteem!

Well, that and the occasional premeditated murder. Hooray for those murderers, though! Amiright?

Wikipedia couldn’t get Charlie Kirk’s assassination off their front page fast enough.

Almost all the major media vilified Charlie Kirk after his death. He was popular, talked sense, and held people’s attention (and they don’t). It wouldn’t be so angering if they weren’t flat-out lying about him. They happily pervert what he says to make it malicious, and then they hold him up as malicious to justify their vilification. It is the classic straw-man argument.

Not almost: all the major media suppressed the Iryna Zarutska story for two and half weeks, because it didn’t fit their narrative. And when they were forced to acknowledge it, they used it as a platform to decry the conservatives for getting uppity about wanting to not be murdered.

You don’t hate the media enough.

The only good news is that Banksy made a splash, with a recent painting. What sort of perverse world do we live in where this is good news?2

Jeffrey Epstein was taken care of, and Ghislaine Maxwell is in prison for trafficking hundreds (if not a thousand) children to absolutely no-one. Half of Congress wants to protect the child rapists, and Congressman Vince Fong has still not signed the resolution to expose the child rapists.

If I’d known then what we know now, I’d have started giving away “Make Orwell Fiction Again” hats twelve years ago.

I somewhat would like to send another email to myself via FutureMe.org for another twelve years in the future.

But with the state of the nation today and the direction it is going, I’d have to generate unimaginable horrors to temper what the future could look like.

  1. As it turns out, Russiagate was fraudulent and an authorized government action. The suppression of the Hunter Biden laptop story by Twitter and Facebook was done at the behest of government actors protecting their desired candidate. ↩︎
  2. The good news is that with this, the UK government was confronted with their behavior. ↩︎