Bruce Garrett Cartoon
The Cartoon Gallery

A Coming Out Story
A Coming Out Story

My Photo Galleries
New and Improved!

Past Web Logs
The Story So Far archives

My Amazon.Com Wish List

My Myspace Profile

Bruce Garrett's Profile
Bruce Garrett's Facebook profile


Blogs I Read!
Alicublog

Wayne Besen

Box Turtle Bulletin

Chrome Tuna

Daily Kos

Mike Daisy's Blog

The Disney Blog

Envisioning The American Dream

Eschaton

Hullabaloo

Joe. My. God

Peterson Toscano

Progress City USA

Slacktivist

SLOG

Fear the wrath of Sparky!

Wil Wheaton



Gone But Not Forgotten

The Rittenhouse Review

Steve Gilliard's News Blog

Steve Gilliard's Blogspot Site



Great Cartoon Sites!

Howard Cruse Central

Tripping Over You
Tripping Over You

XKCD

Commando Cody Monthly

Scandinavia And The World

Dope Rider

The World Of Kirk Anderson

Ann Telnaes' Cartoon Site

Bors Blog

John K

Penny Arcade




Other News & Commentary

Lead Stories

Amtrak In The Heartland

Corridor Capital

Railway Age

Maryland Weather Blog

Foot's Forecast

All Facts & Opinions

Baltimore Crime

Cursor

HinesSight

Page One Q
(GLBT News)


Michelangelo Signorile

The Smirking Chimp

Talking Points Memo

Truth Wins Out

The Raw Story

Slashdot




International News & Views

BBC

NIS News Bulletin (Dutch)

Mexico Daily

The Local (Sweden)




News & Views from Germany

Spiegel Online

The Local

Deutsche Welle

Young Germany




Fun Stuff

It's not news. It's FARK

Plan 59

Pleasant Family Shopping

Discount Stores of the 60s

Retrospace

Photos of the Forgotten

Boom-Pop!

Comics With Problems

HMK Mystery Streams




Mercedes Love!

Mercedes-Benz USA

Mercedes-Benz TV

Mercedes-Benz Owners Club of America

MBCA - Greater Washington Section

BenzInsider

Mercedes-Benz Blog

BenzWorld Forum

May 13th, 2023

I Am Actually Pretty Good At This Stuff. . .

[NOTE: For some reason I never published this one and it sat in my drafts folder until now. I might have put it up on my Facebook page, but given the formatting here I don’t think so. Anyway…it’s worth putting out here. I am actually pretty good at this stuff…but I’m a year retired now and I want to move on…]

I’m going through a bunch of old documentation in preparation for retiring in a couple months. My project manager quite reasonably wants me to basically do a brain dump and put it all out where they can access it after I’m gone. It’s bringing back a lot of very happy memories. And also not quite so happy ones. I created a bunch of custom software for them that I am still intensely proud of, that just got trashcanned, in some instances even before I could release it for general use.

That happens in this trade. One of my contract jobs before coming to Space Telescope had me working on an interactive tutorial for Microsoft Office products, that had already been superseded by newer versions. When I came onboard I wondered how long the contract was going to last, given that we were working on a product for teaching users how to use a version of Office that was already obsolete. And sure enough, about a week later the project was cancelled. I felt really bad for the employees of the business that had been working on it for months before I was brought in. All that work…all that time out of their lives…just out the window.

I’ve had several moments of that working at Space Telescope. It happens and I was told not to worry. Some way more experienced developers than I had it happen to them multiple times. The environment changes out from under the work you’re doing and you have to throw a bunch of stuff away and start over. At least in this business you can often reuse some of the old code. But nonetheless, it still makes you doubt yourself. I wasn’t good enough…

As it happens, Facebook this morning showed me the following memory…a post I put up while going through my old DayTimer pages (I used to use DayTimer’s 24 hour pages as a work diary) about something that happened to me from back before I came to the Institute. Out of everything that ever happened to me while plying this trade, this one jobsite holds for me both the best of my times, and the absolute worst. I have never hated working for a company, and its managers, more than I hated everything about working there. Yet it proved to me just how good I am at doing this. I solved a problem that none of them could figure out, and I did it with only paper print outs of the code.

I should have posted this here too, instead of only on Facebook. But I’ll do it now. Because I need to remember this going forward. I am actually pretty good at this stuff…

Condensing the last of my Daytimer pages…I’m glancing over the entries for what was one of the worst contracts I had…the two weeks I spent at a big insurance company not far from where I live. The story I got was they’d just undergone some massive layoffs and the environment there was bitter, resentful and hostile toward contractors. After a week of enduring loud, angry shouting matches among the managers there I was telling my agency to get me the hell out of there.

In the two weeks I was there they never got my network account properly set up. For a few days after clearing it with the manager there, I brought my personal laptop in to get some work done, but then one of their lobby guards tried to confiscate it and I pitched a fit that got one of the directors called down and I was allowed to take my laptop home and from that time on I did my work with paper printouts of the code I was supposed to be debugging. I am proud to this day that I was able to pin down several reasons why their software was blowing up using just those paper printouts.

Here’s some of my Daytimer notes from the battlefield…

– Resolved GPF problem on external program module. Share must be running or program will GPF when initialized.

– When recommended that install be changed + test for presence of share be coded into the program, suggestion by **** that I just wanted to spend their money on useless trivia.

– Hostile toward suggestion that GPF condition be trapped for and handled gracefully. “We could be dealing with millions of little problems like this” was what I was told. (Better I guess to let the program blow up and make the user restart it than put error trapping where your lazy programmers couldn’t be bothered..)

– I can run the system but not in debug mode and I can’t access files I need do my work. When asked about this I was told it was my problem and if I can’t fix it myself then why are they paying me to be here. So I dig a little deeper and find out my network account is USER not DEVELOPER which explains why I don’t have privs on those files. When pointed this out I got an angry stare and was told they would look into it when they have time.

– Told my workstation is user configured and not to be reconfigured because it is against LAN policy to reconfigure user workstations, and I just have to do the best I can. Still using ****’s (this was another developer from the same agency I was working for, who’d been there longer) from workstation as I can’t log in on mine. Cannot log in to developer area on any workstation though, not just mine.

One afternoon during this time I met a neighbor of mine at the apartment complex I lived in then, who worked for a different agency as we were both getting mail from our mailboxes. I asked him what he was working on and he asked the same of me and when I told him first words out of his mouth were, “Ohhh… Rough Place.” Apparently everyone already knew it was a notoriously bad place to be a contractor but me.

And from the comments I replied to, was this from me…  

Yeah. Some of my favorite programming code horror stories come from this place. I was called in to find out why their reporting system kept blue screening their workstations. It was written by some staff programmers who allegedly had their BS in CompSci but the code I saw was so full of problems I don’t think a half-wit would have made that it made me wonder. They weren’t fixing it themselves because they were leaving the company for allegedly better paying jobs elsewhere. At least that was their story. I suspect they were just getting the hell out of Dodge before it dawned on anybody how incompetent they were.

I tracked down the blue screen of death problem to the fact that these idiots used a bunch of global variables (named…I Am Not Kidding, GlobalDummyInteger1, GlobalDummyInteger2, GlobalDummyInteger3…and so on…) and were storing handles to windows in them at the same time they were using them to store things like the result of a button press or a for-next loop counter. But to fix it would have required a lot of rewriting of the code base and they were already saying to my face that I just wanted them to trap for errors whenever they tried to access a share to spend their money.

I have no idea what eventually became of that system but it just needed a complete rewrite to be stable and I suspect they eventually contracted out of house for a new one but who knows…they may still be telling their users to just reboot their machines whenever they blue screen.

by Bruce | Link | React!

April 28th, 2023

The I Am Retired Why Am I Still Up To My Neck In This Sh*t Chronicles.

…part the upteeth.

A few days ago I tried syncing my local website copy with the copy on my web host server and the sync failed. Digging into it I discover that the people who made my favorite sync software found a way to deactivate all the older versions that don’t require rent (they like to call it a “subscription”), which I refuse to pay and kept using the older version because it kept working. Hahahahaha…silly me. So I looked around for alternatives and I found what I thought was a good one in FreeFileSync, which is open source and runs on all my platforms.

But I almost instantly ran into a problem syncing my art room Mac files with the NAS copies. (NAS stands for Network Attached Storage. Mine is a box with two drives in it that pretends to be a single drive on my network. The two drives are mirrored so if one fails the other should still have good copies and I can just replace the failed drive.) Nothing I expected would sync because the software was reporting the files on the NAS were timestamped five hours in the future ahead of those on the Mac. I checked the NAS settings and it was applying the correct GMT offset, so I thought it might be a flaw in the software, and not having time to track it down, I manually copied the files that I knew had changed.

Under the hood all modern operating systems sync to Greenwich Mean Time and apply an offset depending on where you actually are. This allows people to move files across time zones and still retain the actual time the file was created or modified. That can be important if you are tossing time critical files across time zones.

So I figured I had a GMT offset problem with FreeFileSync and put it aside until I had time to debug the problem, and maybe file a bug report.

Then the other day I tried backing up the NAS. I have two USB backup drives that I’ve formatted to ext4 because that’s what the NAS uses. I use rsync and I have a preformatted rsync command that does the trick for me. Right away I noticed it was trying to copy everything off the NAS so I stopped it and took a look and finally saw that all the timestamps on the NAS were off by 5 hours ahead. So again I dug into the NAS settings and looked and yes, the NAS was applying the right offset. But then I noticed it’s value for GMT was off. By five hours ahead.

So I checked the setting for the time server and I discover that the time server it had been using was no longer available.  I’ve no idea why, but the main problem was the NAS didn’t throw an error message when it lost its time server, it just simply failed silently and continued. Probably the last time I shut it down when I went on vacation, when I turned it back on and it came back up it looked for its time server, couldn’t communicate with it, and just happily fell back to assuming everything on it was timestamped local time.

It caused me a lot of problems getting timestamps out of sync moving them between the NAS and the art room Mac as I worked.

G*damn silent fail…

So I set the NAS to talk to a different time server that it could still reach and everything is good again. So now at least I know that there isn’t anything wrong with FreeFileSync.

Also, that I will be debugging computer software systems for the rest of my life, retired or not…

by Bruce | Link | Comments Off on The I Am Retired Why Am I Still Up To My Neck In This Sh*t Chronicles.

November 24th, 2022

And Here I Thought You Were Just An Idiot. . .

A wee mystery solved recently, that had puzzled me off and on ever since I saw that bit of code back in my contractor days.

I was working the absolute worst contract job I ever had, at a local insurance company that had a reputation among contractors for being a brutally hostile workplace. I did not know about this until shortly before I left but it only took two days of working there before I was screaming at my handlers to get me the hell out of there.

I was there to track down and fix a bug in the report application they sent out to all their branch offices, that would randomly cause a blue screen of death. That happens in Windows when the operating system itself crashes and it takes a really serious problem for that to happen, because the operating system will catch most of the errors an application does not and close that misbehaving application down. The problem has to be really severe for it to percolate up the calling stack and take down the operating system.

So of course I needed access to their source code. But in the two week timespan I was there they never managed to get my network account set up or get me a workstation that I could log into in order to do my work. The manager there, when she wasn’t having shouting matches on the floor with the other managers about WE JUST HAD ALL THESE LAYOFFS AND YET NOW THEY’RE BRINGING IN ALL THESE EXPENSIVE CONTRACTORS!!!!!!!, would tell me scornfully I would just have to do my best. So I brought in my own laptop computer. But that didn’t give me access to the code I was supposed to be fixing. Somehow I managed to get one of the other developers to look kindly on me and make a print out of the code I was supposed to be fixing. 

I saw a potential source of the problem almost right away, and I’m proud now to be able to say I tracked down at least one of the blue screen causes (I’m pretty sure it wasn’t the only one). But that’s not what I want to talk about here.

The guy who wrote the code had taken a job elsewhere (couldn’t blame him). Supposedly he was a top level developer complete with a BS in computer science. Fine. Okay. Whatever. That only made the code I saw even more dumbfounding.

Never mind GlobalDummyInteger1, GlobalDummyInteger2, GlobalDummyInteger3, GlobalDummyInteger4, GlobalDummyString1, and so on and so forth. This made my jaw drop:

StringArrayForSomethingElse(1) = StringArrayForSomething(1)
StringArrayForSomethingElse(2) = StringArrayForSomething(2)
StringArrayForSomethingElse(3) = StringArrayForSomething(3)
StringArrayForSomethingElse(4) = StringArrayForSomething(4)
StringArrayForSomethingElse(5) = StringArrayForSomething(5)
StringArrayForSomethingElse(6) = StringArrayForSomething(6)

…and so on for 50 array elements. I must have stared at it for minutes. Then I thought…okay…some of the elements need to be treated differently for…some reason. So I walked down the entire fifty lines of code and they were all doing the same thing, copying the strings in one array to a different array one line of code, one array element at a time.

Understand…the above only takes a few lines of code if you use a For-Next loop…

For count = LBound(StringArrayForSomethingElse) To UBound(StringArrayForSomethingElse)

StringArrayForSomethingElse(count) = StringArrayForSomething(count)

Next count

It’s a loop. The first line initializes a counter and a maximum count based on the lower and upper bounds of the array. Let’s say it’s 1 to 50. It says basically do what follows, starting at the lower bound, and keep doing it for as long as the counter is less than or equal to the upper bound. The second line does the actual work of copying the array elements based on the value of the counter during that pass through the loop. 1…2…3…4…and so on. That last line increments the counter and throws it back to the first line. Every time the loop goes back to that first line the counter is evaluated again for is it less than or equal to the upper bound. At some point the third line is going to increment the counter (per my example) to 51, which is more than the upper bound and when the first line sees that’s its value the loop stops.

Simple. But even simpler if if they’re both dynamic (can have their length changed) arrays because then you can just copy one array to another with a single statement.

StringArrayForSomethingElse = StringArrayForSomething

The point being was pretty dumb to do it the way he did it, and if anything about the arrays changes then you have to go back through all fifty lines of code to fix it. I just could not believe a senior software developer with his bachelor’s degree wrote that code.

As the years passed I would occasionally think back to this and wonder about it. Then Elon Musk bought Twitter and went on a self absorbed rampage through it’s software engineers. And for the past week or so I’ve witnessed a lot of chatter about code reviews and performance metrics and suddenly it hit me: Management at this insurance company was measuring software developer productivity by how many lines of code their developers write per day

Or per pay period or whatever. So of course instead of using only a few lines of code to do a task, you use as many lines as possible. That is how you keep your job if that is how your job performance is being measured. And oh golly there are So Many Ways to take a simple line of code and break it out into dozens. If not hundreds. But then you’re just showing off.

It’s a really stupid metric, it almost makes software development look like piece work, but it seems many businesses use it, because management does not understand software development and maybe they need to focus on results and not micromanage the software maturity cycle. And yes, it results in bloated, buggy and hard to maintain code. At Space Telescope I had a project manager who would say negative productivity was a good thing. It was tongue in cheek but it had a serious meaning. Efficiently written code is easier to maintain and less prone to mistakes (bugs). Being able to take many lines of code and reduce them down to only as many lines as necessary is a good thing. Negative productivity.

I’ve no idea what sorts of metrics Musk is using to slash and burn Twitter, but I suspect it’s more of a knee jerk personal reaction to the developer and not their work. What we’re seeing in that foobar is something you often see throughout human history, that the legend is bigger than the man.

by Bruce | Link | Comments Off on And Here I Thought You Were Just An Idiot. . .

Visit The Woodward Class of '72 Reunion Website For Fun And Memories, WoodwardClassOf72.com


What I'm Currently Reading...




What I'm Currently Watching...




What I'm Currently Listening To...




Comic Book I've Read Recently...



web
stats

This page and all original content copyright © 2022 by Bruce Garrett. All rights reserved. Send questions, comments and hysterical outbursts to: bruce@brucegarrett.com

This blog is powered by WordPress and is hosted at Winters Web Works, who also did some custom design work (Thanks!). Some embedded content was created with the help of The Gimp. I proof with Google Chrome on either Windows, Linux or MacOS depending on which machine I happen to be running at the time.