I really need to keep in mind that I’m part-time and only getting a part-time salary, and so I really need to not let myself get drawn into things during my off time that aren’t urgent.
I’ve hit my 40 for this pay period but I still needed to complete some back to work on boarding stuff before midnight tonight, so I went ahead with that. Then because I was already logged in I started fiddling with some code I need to get working again so the reporting overnights can start running again. All of that is a code base I created back when I was full time and hadn’t yet retired.
So I start looking at things in the code with an idea that I’d just get a better idea of what I needed to do next week. Next thing I know I’m immersed in that report code, and I had to force quit myself. Because today all of the time I spend working on it would have to be non-comp time if I kept at it…which I really wanted to do because I can’t stand a software problem I haven’t figured out yet.
But no. I’m not hourly, I’m salaried and that means no overtime. I’m fine with that, and if I have to work non-comp for urgent things I will. I did that back in the day and especially while I was working on JWST. But sometimes I just did it whether it was urgent or not because I could not stop myself until I get it figured out.
See…that’s going to bother me…
I knew when something was going to nag at me all night long if I didn’t figure it out. A shrink would probably have a field day with me I suppose. But it did get me good performance reviews.
I have to pace myself now. This isn’t urgent Get to it next week…
I had a lunch meeting with my project manager yesterday. It was a thing I asked for so I could get a more detailed idea of what I would be working on my first days back. Since it’s official now he could give me those details.
But… Oh lord have mercy…someone forgot to put fresh condoms on the buzzwords and they’ve multiplied by orders of magnitude since I’ve been in this trade.
Among all the new ones I am currently learning, I commend “NoSQL” to your attention. I had not heard of such a thing until yesterday as I was digging through the documentation of a tool I will likely be using going forward. The term has been around since the late 1990s, but only since 2009 to describe a non-relational, no schema, non-tabular data store…so I am told. I’m reading about this and thinking it’s like a stream of consciousness Word document that’s copied as many servers as needed to hold it all. But they wouldn’t do that.
I can see why they’re going this way…the firehose of data that some projects have to manage now, and the need for flexibility in how the data is characterised, begins to overwhelm traditional relational database management systems. But seeing line items such as “Many NoSQL stores compromise consistency in favor of availability, partition tolerance, and speed.” and that most NoSQL stores lack transaction integrity assurance mechanisms, makes me skittish. I am still trying to understand how you get data back out of one of these. Oh…and with any assurance that it’s the same data you put into it.
Life goes on. I alluded earlier to a dear friend of mine who has this tick about warning me not to let the world know that you’re crazy. But what else is it to be earning a living in this trade, if not doing just that.
Yesterday afternoon I took a walk to The Space Telescope Science Institute building on the Johns Hopkins Homewood campus to be interviewed for a job there. I haven’t done that since the week before Thanksgiving in 1998.
A few months ago the project manager I had when I retired asked if I would be interested in returning to the Institute to work part time. I told him yes, definitely. That was the way I wanted to retire initially; not belly flop into full time retirement but gradually, starting with part time work. But at the time my project manager said that part time work wasn’t a possibility. So I retired full time. Now it seemed it was on the table and yes I was still interested. Very much so.
So then he and I talked on several occasions about my coming back part time. We would meet for lunch or dinner at one of the local eateries. He indicated that part time work was something they were working on setting up and was I still interested. It would be, he said, for the same work I was doing before I retired, but mostly for the next generation space telescope, named for Nancy Grace Roman. I’d already done some initial work on that project, coding a progress report in python, that was to be sent to NASA.
For a while I heard nothing, and began to wonder if the idea had been shelved. Then about a month ago I was informed that a part time position I could apply for was being posted, doing basically the same work I had been doing when I retired. There was also a full time position of the same kind opening. So I applied for the part time position.
About a week ago I got a call from HR to schedule an interview with my project manager and another co-worker who’d been bumped up the chain. That was the interview I had yesterday. It went very well.
They still have some people to talk to, but I think I’m in a good place to get the position because it’s doing stuff I was involved in when I retired, so I won’t need any training on any of it, and a lot of the work will be tweaking code and systems that I either wrote myself or helped to build. I know the culture at the Institute and how things are generally done. I think I’m a pretty good fit.
But nothing is final yet, and so I was told, most likely won’t be until possibly end of September to mid October. But this felt good. In fact, I’ve felt more alive since the interview than I ever have since retiring.
Retirement has a lot of perks, but I’ve found it to be very confusing too. There is always housework to do, and I can travel more freely. But some days I just don’t know what to do with myself and at this age that isn’t good. I don’t think I have the stamina for full time anymore, but part time is good. They say it’s a permanent, not temporary position. I could see working it all through my 70s if the position stays viable that long (space work is always at the mercy of the Federal budget) and my health stays good. Maybe even longer. And I keep getting excellent reviews from my cardiologist so there’s that.
It’ll mean no more months long stays in California anymore, but I’ll still get vacation time so it’ll be more like it was all along when I was working. And supporting two different living spaces on two different coasts was starting to stress my budget. It’ll also mean I can stop feeding from my 401k and just let it grow which is Very Good. They’ll be making contributions to the 401k again and I can make my own as well. And I’ll still be getting social security and my annuity to make up the difference between a full and park time check.
And I can enjoy a morning walk to the office again, weather permitting. Not having to deal with commuter traffic was one of the best perks I worked out for myself by getting this house so close to Hopkins.
So we’ll see. I think I’m a pretty good fit for the position but I’m not going to count my chickens before they’re hatched. What I’d really like is to be working on Space Stuff again, and having that purpose and structure back in my life. It was a great trip. I could take it again.
Why? Why on Earth?? When I have so many other things around the house that need doing.
So I’ve been doing some “downsizing” here at Casa del Garrett, mostly getting off of old computer manuals and documentation I will never need again (these go to recycling so at least the paper can have another life), plus some other items in my extensive (not kidding) library that I will probably never read again, and don’t seem likely to ever be reference material. I’m still trying to find a second hand book repository for these.
It began when I had to buy a new furnace/AC unit and had to move around a bunch of furniture for the contractors to work. That gave me an opportunity to clean in places that are otherwise hard to get at. In addition I had a duct cleaning done, which had probably not ever been done since the house was built, judging by what the duct cleaners found. So I had to move around a bunch of other furniture too.
Before putting it all back, I decided to use the opportunity to do a little downsizing. The fact is I have too much Stuff. I’ve lived in this house since the summer of 2001, but moved into it with a lot of stuff I’d accumulated over the years. Much of that, like my hand and power tools, and all my spare parts, proved to be even more useful when owning a house than they were when I was living in apartments and the basement of friends. But I’d also managed to collect a pretty large library of books and LPs…a fact the movers probably didn’t appreciate since both are very heavy when boxed up. And I was already loaded with computer stuff, since I was by then making a living as a software engineer, which was what enabled me to buy a house of my own in the first place. And before that I was into computers partly as hobby, partly as a means of communicating over a modem. When I discovered modems and BBSs I dove into it. That led me to volunteering on a local gay BBS, and that led me to my first jobs writing software.
Which brings me to this. It’s an IBM PS2 Model 80…the top of the PS2 line once upon a time. My first big W-2 software gig was at Baltimore Gas and Electric Home Products and Services, which was an exclusively IBM worksite The big iron downtown was all IBM, and in the offices where I worked everything on the desktops was a PS2…usually a model 50. or 55. So when I came across this model 80 for sale at a computer flea market years later, I was already pretty familiar with them.
Poor thing has just sat in my basement storage area for over a decade, beside an Apple PowerMac G5 I bought for the art room and eventually replaced with an Intel based Mac Pro. As I began deciding what to downsize around here, I looked at both of those computers and the space they were taking up. It seemed ridiculous to just be holding onto them when I knew I’d probably never need either one ever again. But I didn’t want to just take them to the city recycling place. This wasn’t like giving up an old VCR or TV…both those machines were the top of their lines back in the day. I knew some collector would want them both. But how to find them good homes?
And the more I thought about the PS2, the more I remembered the days of DOS and how the advent of the personal computer seemed to open up fantastic new worlds…worlds which, surprisingly I found I could navigate pretty easily. I didn’t have a college degree in computer science and wasn’t likely to ever get one since I had no money for college. No matter in retrospect. Computer logic just seemed to click with me.
Long before that first job, and those first days volunteering at G.L.I.B. (The Gay and Lesbian Information Bureau) I discovered I could build my own IBM PC compatible from parts. There was no way I could afford an actual IBM PC, but I could buy a part here and a part there until I had all that I needed. I remember after I built that first IBM compatible and got it to boot, just sitting on the edge of my bed staring at the monitor with it’s 640k memory test still on the screen and an ‘A’ prompt (that first computer initially booted PC-DOS from a floppy disk) and looking at the blinking caret in something like awe. Until that moment my computer was a little Commodore C64. Now I had a Serious computer…and IBM no less. Well…a pretty good copy since it booted genuine PC-DOS, not the more generic MS-DOS. This was no toy. This was International Business Machines serious business. I sat there for I don’t know how long stunned at the awesome computing power I suddenly had at my control. What have I got myself into…
Well…what I’d got myself into, though I didn’t know it then, was a career that would pull me out of near poverty and eventually into the space program. Walt Disney was fond of saying his success story all began with a mouse. Well mine began with a boot to DOS. And I rode it all the way to the James Webb Space Telescope Mission Operations Center and Integration and Test Lab.
So that PS2 machine had more of my life wrapped up in it than the PowerMac by light years. I began to wonder if I could just find a place for it in my den where I could work on it again as a kind of hobby.
I tried booting it the other day and it threw a couple error codes that I needed to look up, but I was pretty sure what they were. The PS2s need a small internal battery to maintain their configuration memory and the one in mine had likely died many years ago. It’s a simple fix…replace the battery and boot with the configuration disk and restore your configuration. But while Googling the error codes I discovered there are hobbyists out there who love to work on these machines. And they know where you can get parts. So that notion of keeping the PS2 as a hobby became lots more attractive.
So I got it running again and I’m just going to let it run for now and see what I can make of it. See if I can give the PowerMac to a good home later.
And try to get all my other stuff around the house done. I still have a lot of Stuff to sort through and decide what to get off of, and what to keep. It’s going to take weeks, but I’m 70, on retirement income, and I need to simplify.
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.
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.
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.
[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.
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…
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:
…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)
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.
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.
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.