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

Beyond Ex-Gay
(A Survivor's Community)

Box Turtle Bulletin

Chrome Tuna

Daily Kos

Mike Daisy's Blog

The Disney Blog

Envisioning The American Dream

Eschaton

Ex-Gay Watch

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

March 12th, 2024

Apple: It All Just Works. Except When It Doesn’t.

…because you need to be a better consumer.

Today in The Computer Geek Chronicles…I don’t know how I’d cope with these gadget’s, especially Apple’s since they seem to love breaking things so you have to buy new hardware you really don’t need. But anyway…

I’m listening to the radio and chance across some sort of Christian tune that I could swear was a note for note steal from a passage in Finlandia by Finnish composer Sibelius. So I go looking for Finlandia in my iTunes library, only to discover I never copied that over. Further investigation shows I didn’t copy it over because I don’t have it on any digital media.

But I have some LP’s with it on them, so I fire up my household stereo, and the turntable which I’m sure is happy to know I still love it. Two good versions are by the very theatrical Leopold Stokowski, who was well known for taking…liberties…with the music he was conducting (See Disney’s Fantasia…). The other by Herbert von Karajan and the Berlin Philharmonic.

Finlandia is political protest. It was written as a veiled protest against Tsarist Russian control of the Finnish press. (One of my favorite composers, Dimitri Shostakovich, often butted heads with his soviet overlords) It has it’s energetic, you might even say bombastic passages. But toward the end is this beautiful, soulful, hymn like passage that gets to me every time I listen to it, the way Ralph Vaughan-William’s similar passage at the end of his 6th symphony’s first movement.

I could easily see why it would be co-opted by the religious set, and in fact Sibelius made that passage into a single set piece for his Masonic Ritual Music with a chorus for solo opera singer. I have no idea what those lyrics were, but they almost certainly weren’t Be Still My Soul.

So anyway, to remedy that omission from my portable music library, I went looking for it on iTunes. I couldn’t find the Stokowski version but I did find a copy of the von Karajan version. Then I remembered I have a problem with copying music onto my devices, ever since I upgraded the OS on my iPhone.

I’m still on old Apple hardware, and for several iterations now I’ve had to add a special software patch to my copy of iTunes on my artroom Mac Pro. Then the software patch simply refused to download due to some unexplained “network error”. Hahahahaha…that’s Apple’s way of saying time to spend more money at the Apple Store.

The bug is well known out in the wild, but Apple, in it’s traditional way, won’t fix bugs that allow you to not buy new hardware. So this means I can no longer copy music from my iTunes library to my iPhone.

The work-around is I buy new music on the iPhone. It still gets copied onto my Mac Pro copy of iTunes once I log in. And this allows me to then copy it to my very old iPod.

Because (don’t start laughing yet…), Apple hasn’t updated the iPod OS in over a decade, so the last patch to make iTunes compatible with the iPod, probably a decade old now at least…Still Works.

Dig it. So for now, until Apple decides to stop letting older versions of iTunes download new music from the iTunes store, I have a work-around to get music I buy from Apple onto my iPod. To get music I buy in CD format and copy into my iTunes library, I have to use a third party app. At least that works without my having to Jailbreak the iPhone.

by Bruce | Link | React!

February 16th, 2024

…And You Are The Easiest Person To Fool

Some time ago I read an article about safety regulations in some profession, I forget now which. A trainee sat in on a class with an instructor who would go over OSHA law as it applied to them. He began his class by telling the trainees that every regulation he was about to teach them was written in blood.

I spent just over three decades of my life as a software engineer. You could say that my job didn’t involve any hazards to my own health. True enough, I sat at a desk staring into a computer screen trying to mentally picture the algorithms I was creating in program code. Not very dangerous stuff. To me. Unless you count all the alcohol and nicotine I consumed to manage stress (I worked at an IT firm back when I was a youngster as the mailroom clerk, and a programmer there called his inevitable pack of cigarettes his “programmer’s candy”). But what I did was potentially extremely dangerous to others if my program didn’t do what it was supposed to.

One of the contracts I worked on ages ago, before I came to Space Telescope, was for a large medical diagnostic company. I had a piece of their new diagnostic machine’s reporting system. The machine it was hooked up to would identify specimens that had whatever disease they were testing for just then, and the report terminal would keep a database of results and generate reports for individual patients and disease rate of spread in a population for the CDC. The federal government imposed requirements on the software process for medical equipment, including allowable software tools, multiple code reviews, and independent verification of requirements as the software matured. Because lives were at stake.

I wasn’t subjected to that level of oversight at Space Telescope because I was not involved in creating any of the actual flight software. I did business applications mostly, science needs business applications too, although I could also build you a PC if you point me at a source of parts for one. I attended meetings, issued progress reports on my work, discussed requirements with managers. Those I gave my output to, both during development and when it was in production, were able to verify that my software was correct or not from their own experience with their numbers.

I would occasionally get a call from one about something missing from one of their spreadsheets. I was almost always able to trace that to the data not yet being entered in the “problem report” or “discrepancy report” databases. I could re-run the program for them when that was fixed. But now and then I found a bug in my software that I had to fix that was making the numbers wrong. That was unlikely to get anyone killed, but it could have given management a false idea of progress being made. So it was still very important to get it right.

At the major public utility I once contracted for, I worked with an accountant who Knew His Numbers. He could look at my output and go…”ah…you know…I don’t think you’re picking up…” and he would refer to some number bucket, one of many such, that I needed the report to digest. And I would go to my code and look and sure enough I wasn’t doing that. So I’d fix it and run the output by him again. I loved it. He didn’t know software but he knew his numbers, and I didn’t know his numbers but I knew my software and it was a perfect working relationship. He was my independent verification.

I can’t stress enough how important independent verification of your software is. The more mission critical it is, the more thorough that must be. It gets to a point, and I lived this while working on that medical diagnostic machine report, where periodically a group of other programmers get together with you and beat up on your code. It can be brutal. Ask me how I know. But when it’s that important, like with medical diagnostic software, it Must happen. Lives actually are at stake.

But beyond bugs, there’s also making sure both you and your users understand what the software is, and is not doing. Most of the business software I wrote wasn’t about life and death situations, or so you’d think. But that’s not always cut and dried. Like the one at my first big contract at a major public utility where I was tasked with designing and coding a report that would tell management how much revenue each of their field technicians were generating and at what cost. My report uncovered such a massive subsidy of one department by another such that, so I was told later, jaws dropped in the boardroom. Annapolis was Not going to be happy.

Then came the layoffs. I heard later that one of those laid off had a sudden heart attack at his dinner table in front of his wife and kids and died. You could say it was management policies that did that…they knew they were putting money where it did not belong, that they were subsidizing something they weren’t supposed to, but didn’t realize how badly it had become until my report waved it in their faces. So they did what management often does, they just started laying people off to make the money stop going in that direction.

They did that. But…my software did that. Management wasn’t just using my report to tell them where the money was coming from and going to, they were using it to tell them who their best workers were. And I still deeply regret it. I wonder if I couldn’t have done more in meetings to remind them a computer program can’t substitute for human judgment. There was a union that was supposed to be protecting the workers from that sort of thing. You could say none of that was on my plate. But my hands were in it too. He was a nice guy. Always had a friendly smile for me.

I never doubted after that, how dangerous my tools could be.

The procedures and best practices of software development have evolved over the decades from big iron to little silicone for a reason. Maybe they aren’t all written in blood, but they are all at least written in sweat and tears. They say mistakes are human but to really foul things up takes a computer. But no. What it takes, is thinking you can get away with bending the rules. Maybe just this once. Because we have a deadline. Because we have to get it out the door. Because there isn’t enough money for best practices. Just this once. And then the next once. And the next once. And the next. And the next. Take off your engineer’s hat and put on your management hat.

There are reasons for all those practices and procedures. And especially, there are reasons developers do not test their own software before putting it into production. Yes, do your unit testing, but then you hand it off the testers. Testers are your friends. They keep crap from going out the door that worked fine for you but that’s because you were running it on a workstation with all your software tools on it, and the test data you cobbled together that you always use. Out in the wild it will be different.

The physicist Richard Feynman once said (paraphrasing) that science is a way of trying not to fool yourself, and you are the easiest person to fool. I think that’s a good general rule for software testing too. Testing is a way of trying not to fool yourself. And since you are the easiest person to fool, because you wrote it, you hand it off to an independent tester. Or put another way: beware the result you wanted because you had a deadline. It needs looking at by someone with no stake in the outcome, other than honestly reporting did it pass or fail.

There are reasons for the procedures and best practices of software engineering. They need to be respected. Not for the sake of tradition, but for the sake of not screwing things up badly. Because we are human and it takes a human to screw things up badly. But we can be aware of this, and build our guardrails accordingly. We do that, and we are capable of wonderful, marvelous things.

Why am I telling you all this? Just venting. I’m old and cranky is all.

 

by Bruce | Link | React!

December 23rd, 2023

The Apple Way…Of Slowly Forcing You To Buy New Hardware…

…even though the old hardware still works just fine.

I’m almost two years retired now, and computers can still take a big bite out of my day. Today’s exercise in spinning my wheels trying to get things work comes courtesy of Apple. No surprise there. It just works…except when it doesn’t.

Apple really Really wants you to keep up to date on not just their software but the hardware it runs on too. And the longer you delay buying their latest and greatest hardware, the more you find that out. And I’m still on some very old Apple hardware, because I need to stay on a very old version of MacOS. And I need to do that, because Adobe makes you rent their software now, instead of offering upgrades. I use the Macs almost exclusively in the art room for my photography and scanned in artwork from the drafting table, and I won’t rent their software for the same reason I don’t rent my brushes, pens, charcoal sticks and the drafting table.

And especially after Adobe screwed me out of 850 for the Windows version of Photoshop that I had, and was able to use for just over two years until Adobe decided the license I had was incorrect and they remote controlled shut it off.

So I’m stuck, but slowly getting unstuck. GIMP does everything I need that Photoshop did for me. The only stickler is Lightroom, but I’m almost free of that too.

In the meantime, if you have an iPhone and you’ve been keeping up to date with the OS upgrades and security patches on that, and you have an older Mac, you are getting more and more distant from any version of iTunes you are running to sync your iPhone with. Especially your music library.

A few days ago I ordered a CD of the Jerry Goldsmith soundtrack to Logan’s Run. I have had the LP version for decades, but only realized I never got a digital version when I wanted to listen to it on the iPod and it wasn’t there. So that CD came in the mail and I put it into the art room Mac, which also holds my iTunes library, and copied it over so I could put it on the iPhone, and the iPod Classic.

No sweat right? I’ve done this hundreds of times before. Then I found the soundtrack to the new Percy Jackson TV series and bought that off the iTunes store since it isn’t currently available on CD. Now I have two albums to copy over to the iPhone and iPod.

The Percy Jackson one actually downloaded to the iPhone as well as my iTunes library. Fine. I plug the iPod into the Mac and it syncs both albums no trouble. Bear in mind this is a Much older piece of Apple hardware than the iPhone I currently have. Then I try to sync the iPhone and that’s where the trouble began.

I plug the iPhone into the Mac, and iTunes says it needs a software update before it will connect to my iPhone. Fine. I’ve seen this before, after every security patch. Apple still supports my older hardware and the older version of MacOS it’s running with security patches. But now I experience a new problem; an error message saying it cannot download the iTunes update.

So I go looking around the net and lo and behold lots of people are complaining about this happening after the most recent iOS updates. And the thing of that is Apple says it should all be compatible with the older versions of iTunes. So their solutions are to either reinstall iTunes…except the version of iTunes you need for the older MacOS isn’t available anymore, even though it’s allegedly still compatible with the current version of iOS…or reinstall the operating system. Because you really wanted to spend an entire day installing MacOS and all your apps and configurations just to copy over some music to your iPhone.

I spent an entire morning today trying this and trying that to no avail, and swearing loudly that I would never put another update on any of my Apple devices ever again. You cannot downgrade iOS…that’s Apple’s policy. Now it seems, I cannot sync my iPhone with iTunes anymore, which means I can’t back it up, in addition to not being able to sync my music library.

Eventually among the wail of pain out there I see a link to a third party program that claims to run on my Mac Pro version of MacOS, and connects to my iPhone to allow backing up, file copy and music copy from the iTunes library. So I download a copy and give it a try. There was trial version functionality which allowed me to prove it did what I needed and I finally got my music copied over. Then I bought a license for it. It wasn’t expensive and it wasn’t subscription only.

This is it. It’s called iMazing and I can verify that it works…at least on my 2010 Mac Pro and iPhone Xs running iOS 17. So now I can make backups of the iPhone and copy music files over. It isn’t automatic synchronization but I can deal with it. They say it will also let you move your music and other files to an iPod Classic, which gives me some security there because I still like that little dedicated music player.

So that was my morning today. How was yours?

by Bruce | Link | React!

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 | React!

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 | React!

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.