Thur. May 21, 2020 – older daughter’s birthday today

Hot and humid, chance of rain. Yuck.

SUPER hot yesterday. 107F in the driveway, in the sun. Humid as a greenhouse too. I stayed inside most of the day.

I spent much longer than I wanted to or expected to getting the video out of my NVR and in a form that my neighbors and the Constable’s deputies can use. There was more than one victim on our street, and we’re not the only street these guys hit. Since there was a firearm stolen, they want these guys. Felony charges, minor in possession to start with, are worth going after. They lifted some prints, and collected a handkerchief with DNA on it. I’ve got the guy on video with the rag… HPD might not be chasing crooks, but our Constable is. That is why we pay him after all.

I changed some settings on cameras, so I hope I do better at capturing the events I want to capture. I need to get working on knocking down my list and get the other new camera up. It would have given me good coverage of the breakin. FWIW, my plan to have the cams record with high sensitivity on internal SD card, and highest resolution, while the NVR has slightly less aggressive settings worked pretty well. It’s easier to scrub through the video on the NVR, and I have much more stored time, but the higher rez of the camera and the shorter time balance out. It also means I’ve got two chances to catch a transient event. Someone running across your lawn at 4am is a pretty transient event.

Older daughter’s birthday is today. We’ll be opening presents and having special meals. No party or get together with friends is a bummer, but we’re trying to make it a special and fun day anyway. She’s a good kid and I like spending time with her. Decorations went up last night, and presents were wrapped. The forearm guards didn’t arrive yet, but the arrows did. Of course the first thing I did was hit my arm with the string… I’m giving her all three bows as a set, so she can share with her sister when it’s time to shoot.

The School District thing I started doing before all this happened it going to try to have a Zoom meeting tonight. Topic is the special response (academically) to COVID-19 and the abrupt shift to online learning. I’ve got some observations about that, and an interest in what they’ve got to say, so I’ll try to attend, even though it’s in the middle of dinner time.

Dinner was homemade hamburgers, on fresh buns. Since I was doing a store order, I got buns, hun… sides were canned baked beans, and the rest of the corn relish my wife made. I really like ‘backyard burgers’. There is something different about the taste that just says ‘summer’ to me.

I woke up yesterday before my alarm and was awake enough to get up. The lethargy I’ve been feeling seems to be going away, finally. I’m gonna blame depression rather than wuflu, since I didn’t get a fever at any point. Maybe I’ll start getting more done in the day, like I used to.

Keep stacking,

nick

Author: Nick Flandrey

Mid 50s, stay at home dad, with two elementary school age girls. Love my family and my life.

66 thoughts on “Thur. May 21, 2020 – older daughter’s birthday today”

  1. After the kid’s birthday meal you should tell her that now that she’s eleven (or whatever) it’s time for her to start helping out more around the house, and hand her a daily chore list that’ll take her about two hours per day.

    You don’t need to limit this to only the older kid. Do the same with the younger kid at her next birthday. When she objects that OlderKid didn’t have to do all that when she turned nine, tell YoungerKid that that’s because OlderKid is the heir but YoungerKid is the spare so different rules apply.

  2. My neighbors with younger kids (5 – 7 years old) did a drive-by birthday party for one of them a few weeks ago. They stood in the front yard and waved while the friends drove past in decorated cars, honking, flashing lights, and yelling “Happy Birthday” to the lucky youngster.


  3. Software is mostly garbage and I’m surprised when any of it works.

    This is true. The demand for software greatly outstrips the supply of competent programmers. Plus: One person’s beautiful program is sometimes another person’s garbage, because the idea of what a program ought to do varies from person to person.

    I remember when my wife and I produced a school administration system. We thought we would start by marketing this to all the schools in a chain, and only within Switzerland. After we got things established, we could expand. You would think that franchises of the same chain, working in the same country, would have similar business processes. You would be wrong. Every single school did things differently, and expected different things from the software.

    I’m the guy who once blue screened our company ‘gold master’ release candidate by right clicking in a blank spot on the UI

    One of the most difficult-to-diagnose bugs in the aforementioned software: For one of the key users at one school, it crashed every time she entered a male student. The reason: she would always open the “gender” dropdown, even though “male” was already selected. Since “male” was the default, she didn’t click on it, but simply “clicked away” from the dropdown to close it. Which would be fine, except: she clicked off of the application, somewhere else on her desktop. And that particular combination of events crashed the program. I finally had to visit the school and look over her shoulder to figure out what was going on…


  4. I finally had to visit the school and look over her shoulder to figure out what was going on…

    Just curious, how did you fix it?

  5. ” I finally had to visit the school and look over her shoulder to figure out what was going on… ”

    — once you knew, did you change the software or the user’s behaviour?

    n


  6. I’d always do a document review when I started a new project…

    Absolutely critical in aviation. Anytime we got an update to an operator manual or procedure. “Hey, I know if I engage these three steps, I’m gonna crash at 90kts.” The 737Max fiasco comes to mind.

  7. When I was at the bank in San Antonio the IT department was sold to MTech. MTech wanted to replace the Unisys (Burroughs) system with their IBM system running in Dallas. Item capture to be done in SA, reports printed in SA, all banking terminals in SA. A big pipe from SA to Dallas, expensive in the late ’80’s. I told MTech it would never work as simply changing the protocol would not solve the problems. It was the way data was entered on the Unisys terminals into an IBM system.

    Regardless, I was tasked to write the program that would do the conversion into a format the IBM banking software would understand. Based on my testing it worked, worked well. All the fields converted correctly, data was correct, time for the big test.

    The bank scheduled all the banking staff, tellers and front line people, to work on a Saturday on overtime. A lot of people and a lot of money. Of course the IT people were involved at no overtime.

    Come time for the test. The first bank logs in and starts doing transactions. Everything is working, at least for the teller machines. There were still known issues with the terminals (unsolvable in my opinion) that were glossed over for the test.

    About 15 minutes into the test the IBM mainframe crashes, hard. System had to be rebooted. Test starts up again, five minutes later the IBM crashes again. IBM engineers are on standby and start their head scratching as IBM systems are not supposed to crash. So everyone waits. IBM gives the OK as they think the found the problem. Test starts again, five minutes later almost the same result. This time only the banking application crashes. So the problem is narrowed down to the application.

    The software vendor gets involved. They can find nothing wrong. Start the system back up. It has now been six hours since the test originally started. Five minutes in, boom, crashed. Everyone is mystified, puzzled, has to be something in my program. So people start looking at my conversion program. All looks good and no issues are found.

    Then someone looks at the actual banking application program. Turns out the program was so stupidly coded that if a field was not properly filled with zeros it would crash on the logon portion. My conversion program was properly passing the logon credentials (the teller number) to the program as it was specified. My program to never modify this field, just pass it on. One of the tellers was logging with her teller number and not placing zeroes in front. One of the differences between the Unisys and IBM terminals. IBM zero filled numeric fields, Unisys did not.

    Entire day was wasted and a lot of money spent. I was raked over the coals for not properly converting the field. I showed management the specifications to which I had conformed. I showed them my notes with the specific question “Should I zero fill the teller number or just left justify?” to which the answer was do nothing, never modify that field, the banking application would handle the field properly.

    In my book another example of stupid management and poorly written software. Software that assumed too much, management that was clueless, and stupid, even lazy, software developers for the banking application.

    Why the entire IBM system crashed I do not know. With CICS, VTAM, RACF, and multiple other four letter acronyms involved who knows what happened.

    Shortly after I left the bank. The new person in charge of the conversion could not make the program work with their changes. The Unisys terminals were never able to work with the protocol conversion. The effort was abandoned and shortly after the bank went into receivership with FDIC, assets bought by another bank, hundreds put out of work, dozens lost their entire retirement. CEO and CFO land on their feet with a massive severance bonus and a job at another bank.


  8. CEO and CFO land on their feet with a massive severance bonus and a job at another bank.

    And that’s why there’s no top-down push to fix broken business methods.


  9. My neighbors with younger kids (5 – 7 years old) did a drive-by birthday party for one of them a few weeks ago. They stood in the front yard and waved while the friends drove past in decorated cars, honking, flashing lights, and yelling “Happy Birthday” to the lucky youngster.

    Those were a big deal around here for the first month or so of the pandemic. However, it kind of snowballed and it got to the point that if you got on Facebook or Nextdoor there would dozens of requests from people for a drive-by/parade for their youngster and I think everyone just got burnt out on it. If your birthday was the last week of March you probably had 100 cars drive by. If your birthday was the first week of May you probably had 5 cars drive by.

    As of right now, in my flyover state, EVERYTHING is set to reopen June 1st.

  10. Presents are opened and breakfast is eaten, and younger sister is sobbing on the couch looking for attention….

    Oh joy.

    n


  11. My neighbors with younger kids (5 – 7 years old) did a drive-by birthday party for one of them a few weeks ago.

    Great for kids of that age. For my 45 yo BIL who had one last month, not so much…

  12. If H&I sticks to schedule, tonight’s “Deep Space Nine” episode should be “In the Pale Moonlight”, one of the best hours in the series’ run if not the entire Stage 8/9 “Star Trek” production era.

  13. @Ray:

    We had a similar failing situation many years ago (’70s)with an analytical, engineering program coded in Fortran. Initially coded by a good guy, but not formally educated in proper coding methodology. Coded originally using IBM 7092, all OK. Then facility switched to Univac 1108, the failures began. Turns out in 7092, dividing by decimal 0.0 resulted in quotient of 0.0, that was acceptable, went from there. With Univac, result was infinity which made endless looping until operator shut down with octal dump. Then we had to fix them sequentially.

  14. xkcd: x
    https://xkcd.com/2309/

    I say that we tar and feather Cueball. The base code of my calculation engine was written in Fortran II back in the middle 1960s. I have entire subroutines with only one letter variables names. X = liquid flowrates, Y = vapor flowrates, T = temperature, P = pressure, I = general index, J = supplemental index, K = supplemental supplemental index, A = calculation intermediate result, B = calculation final result.

    Explained at:
    https://www.explainxkcd.com/wiki/index.php/2309:_X

  15. Presents are opened and breakfast is eaten, and younger sister is sobbing on the couch looking for attention….

    Oh joy.

    Just wait until the hormones start kicking in at 12 – 14. Then they sit in their room sobbing all the time.

    Of course, there is the opposite case. My wife started menopause at age 45 and is still going through it at 62. Yup, you guessed it, sobbing. Or, very aggressive.


  16. I say that we tar and feather Cueball. The base code of my calculation engine was written in Fortran II back in the middle 1960s. I have entire subroutines with only one letter variables names. X = liquid flowrates, Y = vapor flowrates, T = temperature, P = pressure, I = general index, J = supplemental index, K = supplemental supplemental index, A = calculation intermediate result, B = calculation final result.

    Yes, my example was also started in early ’60s and was liquid an gaseous flows for environmental control and life support systems for manned space systems. And yes, X, T, P, W, ETC, ……

    Oh yeah, and in ’70s bought complete steam table codes in Fortran program; put in any two properties and get out all the others.

  17. “Coronavirus-triggered layoffs in US hit nearly 39 million”
    https://apnews.com/900aa1955a82b7bbe2e028a8bc1a4be7

    Please, somebody stop the pain ! This is not going to end well.

    My checker at HEB last night was a 60 year old guy like me instead of a teenager. Obviously got laid off and desperate for a job. Who could not hear and the plastic partitions made that worse. I was trying to tell him about the two Ozarka 24 bottle water cases under the buggy and he did not get it until after he concluded the transaction. So we had a second transaction.

    Hat tip to:
    http://drudgereport.com/

  18. Since I’m not a programmer I feel I have every right to be an a$$ and complain about software. Most (a majority) of the software I use at work is web based. Time cards, document creation, document control, exception management, remote instrument control, etc. It’s a long a list.

    They are all picky about the browser. One only works in IE, one only in Chrome, a few oddballs insist on Edge. Some will work in multiple browsers but a few functions won’t be available. Bah Humbug! Are browser programmers just unaware of the non-universality of their work? Or are they secretly gleeful at the chaos they cause?

    Don’t forget the cluster f*** of multiple logins. First log into some sort of interface software (like Citrix) then into the program itself. Each with a different user name and password. Each with different username and password rules. The IT guys tell us “don’t write it down because of security”. Well, I have to write some down because I can’t keep them all straight (actually not written on paper, password protected on my phone). I have 14 UN/PW combinations to keep track of to do my work right now.

  19. “A.F. Branco Cartoon – Death Row”
    https://comicallyincorrect.com/a-f-branco-cartoon-death-row/

    “Florida is doing well thanks to DeSantis compared to the disaster in New York state thanks to Cuomo but not according to the bias media, Political cartoon by A.F. Branco 2020.”

    And Cuomo wants to be President. His horrible decision to send known SARS-COV-2 infected people out of the hospitals to the nursing homes probably killed 10,000 people already in the nursing homes. There needs to be consequences for his bad decision making.

  20. It was VB6, and I don’t remember the details. But she triggered n error, and I did change the software to catch it, so it would work correctly and not crash. I mean, what she wad doing was weird, but shouldn’t cause a crash.

    Biy enough years of that did put me off running my own software company. It was not fun.

  21. And Cuomo wants to be President. His horrible decision to send known SARS-COV-2 infected people out of the hospitals to the nursing homes probably killed 10,000 people already in the nursing homes. There needs to be consequences for his bad decision making.

    DeSantis is never going to stop paying for winning in 2018. Whether or not Trump carries the state in November, the Dems will be out of power in Florida for a long time, and they have no one to blame but themselves.


  22. There needs to be consequences for his bad decision making.

    No no no. That’s the wonderful about sovereign immunity. Il Douche won’t ever stand in front of a jury or a lynch mob.


  23. Since I’m not a programmer I feel I have every right to be an a$$ and complain about software

    I used to be a programmer. I complained loudly about stupid code by stupid programmers. Computers are supposed to be smart and can be with the correct code.

    The teller system at the bank I worked used a Florida Software’s banking system. Numbers had rigid input requirements. Inpu “10” and the software thought it was $0.10. Put a comma in the number and the input was rejected. Stupidity or laziness on the part of the programmer.

    After seeing this stupidity while observing the teller line I decided it need fixed. I wrote a routine that all numeric input was passed through. The routine would properly justify the number, “10” became $10.00 as it should, commas were allowed, negative signs allowed, etc. The computer figured out the value input. Teller productivity went up 20%.

    Florida Software was told about the changes, offered the code, nope not interested. Thus I sold the software to other banks running the same software. That got a nasty-gram from Florida Software, something about propriety code being modified. I ignored the letter as most users of the software modified the software in some way.

  24. We had a similar failing situation many years ago (’70s)with an analytical, engineering program coded in Fortran. Initially coded by a good guy, but not formally educated in proper coding methodology. Coded originally using IBM 7092, all OK. Then facility switched to Univac 1108, the failures began. Turns out in 7092, dividing by decimal 0.0 resulted in quotient of 0.0, that was acceptable, went from there. With Univac, result was infinity which made endless looping until operator shut down with octal dump. Then we had to fix them sequentially.

    We fight with division by zero, underflows, and overflows every freaking day. I have changed:

    x = y / z

    to

    if ( z .ne. 0) then
    x = y / z
    else
    x = 0
    end if

    so many times in our software that I can do it in my sleep.

  25. I’m not a programmer beyond a couple of .bat files using xcopy.

    I don’t count messing with HTML and CSS.

  26. “IHS Markit: North America to halt 2.25 million b/d of production”
    https://www.ogj.com/drilling-production/production-operations/article/14176456/ihs-markit-north-america-to-halt-225-million-bd-of-production

    “Due to the collapse in oil prices, US producers are in the process of curtailing about 1.75 million b/d of existing production by early June. Canada, hit by its own economic and storage issues, is set to cut an additional 500,000 b/d from its production.”

    Wow, that is significant, probably around 20% of production at the beginning of 2020. One problem with shutting in a well is that sometimes the well shuts down, or locks up (the parafins (waxes) plug the fractures in the ground). One does not generally know until the valve is reopened what the well has done while shut in.

  27. “Climate change and a pandemic of lies”
    https://wattsupwiththat.com/2020/05/21/climate-change-and-a-pandemic-of-lies/

    “THE health establishment was looking away when the coronavirus struck; it had other priorities. If you look at the World Health Organisation’s list of health threats, number one is climate change. Pandemics were down in third place, behind ‘non-communicable diseases’ such as diabetes and obesity.”

    Looks like the WHO is a fine example of Pournelle’s Iron Law of Bureaucracy.
    https://www.jerrypournelle.com/reports/jerryp/iron.html

  28. We fight with division by zero, underflows, and overflows every freaking day.

    I assumed Fortran did something more graceful with division by zero, similar to recent C++ flavors. std::inf is handy to avoid the cost of catching the exceptions.

    My new-ish daily driver calculator, an HP Prime, handles division by 0 in the symbolic mode with the symbol for infinity, and pressing the 1/x operation for that value returns 0. Sadly, this does not apply in the RPN mode which I am most comfortable using.

    My side challenge lately has been to implement our interview coding problem in one convoluted line of Python. Unlike C++ or Java, exceptions in Python do not have a cost so they are part of normal flow control, making the single line theoretically possible.

  29. Keep stacking,

    “You May Not Understand This Now, But You Need To Get Prepared For The Food Shortages That Are Coming”
    http://themostimportantnews.com/archives/you-may-not-understand-this-now-but-you-need-to-get-prepared-for-the-food-shortages-that-are-coming

    “Here in the United States, our stores still have plenty of food. But empty shelves have started to appear, and food prices are starting to go up aggressively.”

    “In fact, we just witnessed the largest one month increase in food prices that we have seen since 1974.”
    http://theeconomiccollapseblog.com/archives/a-taste-of-what-is-coming-food-prices-just-increased-by-the-most-that-we-have-seen-since-1974

    There were some weird empty shelves at HEB last night. My daughter’s favorite single serving EZ-Mac shelf was totally empty. Very strange. Makes me want to start buying canned goods by the pallet.

    Hat tip to:
    http://www.woodpilereport.com/html/index-628.htm

  30. We fight with division by zero, underflows, and overflows every freaking day.

    I assumed Fortran did something more graceful with division by zero, similar to recent C++ flavors. std::inf is handy to avoid the cost of catching the exceptions.

    I would assume nothing. Fortran has serious mathematical interrupt handling issues since it dates back to 1954. Especially when you build your software as a bunch of Win32 DLLs as we do. Our Win32 Exes are very short, just a couple of lines of C code. We do this so our software can be embedded in MS Excel. Which, Excel turns off all specialized mathematical interrupt handling so catching a division by zero does nothing for you then. I want our reaction to problems to be the same in all environments, so, no specialized handling of any problems. Instead, I want our software to explicitly handle all potential errors and move beyond them.

    For the longest time, we were the largest Win32 DLL called by Excel, 13 MB. I am not sure if this is the case anymore.

  31. Friend asked me to repair an old photo with special significance. The photo was badly damaged. She wanted an 8″ x 10″ of the photo only giving me the original at 2″ x 1.5″. I had to do a lot of work on the photo. The results are not perfect and if I had better skills it would have looked better.

    Here is the final image next to the original.

  32. Looks like the WHO is a fine example of Pournelle’s Iron Law of Bureaucracy.

    WHO and The Fed.

    And every single one of our customers are poster children for the Iron Law.

    Heck, our organization is getting there. In order to pick up the expertise of one of the last remaining — read not dead or retired — technical insiders from the company which makes the old school loop induction vehicle sensors, we had to give that person a management title and subordinates for their resume entry covering the time with us.

  33. We fight with division by zero, underflows, and overflows every freaking day

    Why not make it a function?

    function real divide (real y, real z);
    begin
    if z = 0
    return 0
    else
    return y / z;
    end;

    x = divide(y,z);

    Surely I am missing something.

  34. Friend asked me to repair an old photo with special significance. The photo was badly damaged. She wanted an 8″ x 10″ of the photo only giving me the original at 2″ x 1.5″. I had to do a lot of work on the photo. The results are not perfect and if I had better skills it would have looked better.

    Pretty impressive. Stick it in an old timey frame under glass, and no one would know that it wasn’t the original.

  35. Friend asked me to repair an old photo with special significance. The photo was badly damaged. She wanted an 8″ x 10″ of the photo only giving me the original at 2″ x 1.5″. I had to do a lot of work on the photo. The results are not perfect and if I had better skills it would have looked better.

    Here is the final image next to the original.

    Neat ! Looks like a picture from the early 1960s.


  36. Looks like a picture from the early 1960s

    I think it was from the 1950’s. It is the lady’s brother and she is the same age as I. Her brother is deceased and they wanted a picture for their wall that matched her picture. That is the best they could find.

  37. Why not make it a function?

    function real divide (real y, real z);
    begin
    if z = 0
    return 0
    else
    return y / z;
    end;

    x = divide(y,z);

    Surely I am missing something.

    You really don’t want to make every division into a function call. That would slow our software significantly.

    And here is real life:

    if (fk .ne. 0 .and. xt .ne. 0) then
    y = 1.0 – x / 3.0 / fk / xt
    else
    y = 0
    end if
    if (gammag .gt. 0 .and. y .gt. 0) then
    vaporcalc = fg / gammag / y**2
    else
    vaporcalc = 0
    end if
    if (gammaf .gt. 0) then
    liquidcalc = ff / gammaf
    else
    liquidcalc = 0
    end if
    delp = 0
    if (n6 .gt. 0 .and. fp .gt. 0) then
    delp = w**2 / n6**2 / fp**2 * (liquidcalc + vaporcalc)
    end if

  38. @lynn … I’ve always wondered if function calls ‘cost’ more than putting that code inline. I tend towards using function calls (in php code for my web sites) even if they are only ‘called’ once, just to modularize things – and to make it easier to find that hunk of code. I don’t have to optimize the code, so in my case it doesn’t matter.

    But I would think that a commonly used function call (like the example above) would be called multiple times in a ‘project’. And having to maintain that call in only one place would be an advantage, rather than trying to find that block of code throughout the project.

    But, I don’t write complex pages of code. So maybe OK for me, but not for you.

    I did find this discussion on Stack: https://softwareengineering.stackexchange.com/questions/318055/how-much-do-function-calls-impact-performance .

    I suspect that you already know all of this, though.


  39. having to maintain that call in only one place would be an advantage

    My premise has always been that people time, coding, debugging, maintaining is expensive and slow. Making things modular, even for simple functions, will significantly improve readability and maintainability. If speed is an issue, get a faster system. One system upgrade is probably cheaper than spending 20 manhours to find a flaw in the code or searching for 100 different locations where some piece of code may be located that has been used multiple times.

    I would take simple functions such as the DIVIDE mentioned above and install optional parameters that would allow for MODULUS division or integer division. Yes a little more code overhead but still only a matter of milliseconds for a large program.

    I even went so far as to eliminate literals in code and made them constants. Even values like 1 and 0 were coded as ONE and ZERO. No ambiguity between the letter O and the number 0. Yes it involved a lot more typing and a little more time. That was more than offset by the elimination of issues within the code. Or maybe it comes from my old COBOL days. That was when it was tedious as to use long names as we had to hand print coding sheets to send off to the keypunch department.

    I did one large program in Algol where I did something stupid but at the time I thought it was humorous.

    DEFINE MAYBE = (Not True) and (Not False);

    Which of course was always false. In the code every once in awhile I would assign MAYBE as a result or a check for MAYBE. Yeh, it was confusing to people who first saw the program. Their first question was why Algol had a MAYBE value.

  40. @lynn … I’ve always wondered if function calls ‘cost’ more than putting that code inline. I tend towards using function calls (in php code for my web sites) even if they are only ‘called’ once, just to modularize things – and to make it easier to find that hunk of code. I don’t have to optimize the code, so in my case it doesn’t matter.

    But I would think that a commonly used function call (like the example above) would be called multiple times in a ‘project’. And having to maintain that call in only one place would be an advantage, rather than trying to find that block of code throughout the project.

    But, I don’t write complex pages of code. So maybe OK for me, but not for you.

    I did find this discussion on Stack: https://softwareengineering.stackexchange.com/questions/318055/how-much-do-function-calls-impact-performance .

    I suspect that you already know all of this, though.

    We cannot inline code in our variant of Fortran with arguments like you can in many more modern languages. And our calculation engine is 700,000+ lines of F77 code. Plus 10,000 lines of C and C++ code. I don’t know about Fortran 90 / 95 / 2003 / 20?? as we cannot get a modern Fortran compiler to work with our code. All of the F90 and above compilers are rewrites and do not support extension usage very well. The last time I tried Intel Visual Fortran they told me to go away as I could not duplicate the linker bug without a full copy of my source code, I have trust issues.

    Been there, done that, got the tshirt many times. I have ported this code to 10+ platforms.
    1. Univac 1108
    2. CDC 6600 / 7600
    3. IBM 370 MVS
    4. Prime 450 / 750 / 11xx something
    5. IBM 3090 MVS / CMS
    6. Apollo Domain
    7. IBM RS/6000
    8. Sun Unix
    9. VAX VMS
    10. IBM PC DOS
    11. IBM PC Windows 3.x
    12. IBM PC Windows NT

    I think that I forgot a couple.

    Function calls in C / C++ are not very expensive since C passes by value. Function calls in Fortran are expensive since Fortran passes by reference as the compiler has to make a copy of each argument to the stack so that it can rewind the call and that load immediate values are not changed. IBM had a horrible problem with this in the 1970s.

    subroutine x (y, i)
    double precision y
    integer i
    i = i * 2
    y = y / 2.0
    return
    end

    C this call blows the load immediate storage for these constants
    C IBM used to store all constants in the SAME place
    C the next call to x using this code would have modified values
    call x (3.141592654, 1)

    BTW, we have over 5,000 subroutines.


  41. I’ve always wondered if function calls ‘cost’ more than putting that code inline.

    As a general thing, it depends. It depends on the language, on the implementation of the compiler or interpreter, on the virtual machine, on the degree of optimization you chose at compile time, on the amount of RAM, and probably on a dozen other factors.

    In practice, you need to test whether you get a performance boost or even a slowdown for your code in the expected runtime environment. You can’t rely on the language specification or the compiler vendor’s claims. You can’t even rely on common sense.

    I speak from bitter and often baffled experience here, across a dozen and a half languages used professionally and who-knows-how-many compilers and interpreters (not all of which claimed inline function optimization) from a bunch of vendors, both commercial and Free.


  42. Function calls in C / C++ are not very expensive since C passes by value. Function calls in Fortran are expensive since Fortran passes by reference

    Eh? That seems backward. You expand a bit on what the FORTRAN compiler does but I think that’s implementation-specific, not a defined part of the language.

    Lynn, I’ve suggested before that you rewrite your code in Forth, and I think it’s time for you to reconsider your “Wut?” (loosely translated) Forth is great because function calls are literally no added cost — the control flow jumps to a function just as quickly as it passes to the next symbol in the “calling” code. No expensive stack loading and unloading, no overhead at all. Forth is exactly what you need, Lynn.

  43. Lynn, I’ve suggested before that you rewrite your code in Forth, and I think it’s time for you to reconsider your “Wut?” (loosely translated)

    Yeek !!!

    I have actually written code in Forth. Never again ! And now I disavow all knowledge of Forth.

    My goal is to convert all that 700,000 lines of Fortran code to C++. It is pushing a big rock uphill though since Fortran begins all array indexing at one and C / C++ begin at zero. Probably never going to happen since we do not have a plan. And I am old and can barely function anymore.

  44. @lynn, what little programming I know, from the being the guy who has to sit and monkey punch the UI and see if I can break it, 90% of the errors I see and catch end up being ‘off by one’ errors. NO WAY would I consider a switch from starting at 1 to starting at 0! I can’t even imagine the number of errors that you’d be searching for.

    n

  45. @lynn, what little programming I know, from the being the guy who has to sit and monkey punch the UI and see if I can break it, 90% of the errors I see and catch end up being ‘off by one’ errors. NO WAY would I consider a switch from starting at 1 to starting at 0! I can’t even imagine the number of errors that you’d be searching for.

    Thousands.

    There is a government tool for converting Fortran to C++, FABLE. They recommend allocating all C++ arrays by one more and using the old array indexing.
    http://cci.lbl.gov/fable/


  46. They recommend allocating all C++ arrays by one more and using the old array indexing.

    Yes, but…

    But there are still a bunch of things that can go wrong.

    I’ve converted FORTRAN to C or C++. It was basically a rewrite of the FORTRAN code into the new syntax, keeping the structure the same. Global variable pool. GOTOs. Ugh. I did on the order of a thousand lines, maybe a couple thousand. Nothing approaching 700k. Well, I guess I know what your weekend project will be for the next month or two.

  47. Well, I guess I know what your weekend project will be for the next month or two.

    Well, I guess I know what your weekend project will be for the next DECADE or two.

    Fixed that for you.

    I converted our 300,000 line Smalltalk Win16 user interface to a 400,000 line C++ Win32 user interface using a custom tool that I wrote. Took me, junior senior programmer, and another programmer 18 months in 2002 – 2003 to get it converted and WORKING. And both languages used array indexes of zero. I converted all the Smalltalk objects to classes in C++ using Virtual tables in C++ and just typecasted all the C++ variables to the base class of ObjPtr *. Smalltalk is untyped until runtime, everything was declared as var and garbage collected as necessary using mark and release.

    I’m getting too old for all this.

  48. I’ve converted FORTRAN to C or C++. It was basically a rewrite of the FORTRAN code into the new syntax, keeping the structure the same. Global variable pool. GOTOs. Ugh. I did on the order of a thousand lines, maybe a couple thousand. Nothing approaching 700k.

    We’ve got about 10,000 lines of C and C++ code in our calculation engine to complement the 700,000 lines of F77 code. Over the years, we brought in a bunch of NIST code in the form of Win32 DLLs. Plus I brought in my Excel spreadsheet code into the calculation engine last year using OLE. All of that interfacing code is in C++. Plus all of our security code is in C++. The errors that I have run into over the years have been … interesting. Stack corruption. Global variable overwrites. Mysterious crashes inside Excel taking down our software with it. Debugging Excel using an assembly language debugger is … interesting. Not.

  49. @Greg, Tesla may be moving to Oklahoma, “Report: Texas-size rivalry for Tesla’s Cybertruck factory heats up”
    https://www.fastcompany.com/90508076/report-texas-sized-rivalry-for-teslas-cybertruck-factory-heats-up

    “In what feels a bit like a blue-collar version of Amazon’s famous HQ2 competition, the Associated Press has reported that Austin and Tulsa are rivals for a new Tesla “gigafactory” that would produce the company’s forthcoming Cybertruck.”

  50. Well, birthday girl’s in bed. She says it was “the best birthday ever”, so Hooray for the Mrs and me.

    Tomorrow we’ll set up the archery lane. She got a ton of art supplies too, so she can mess about with all of that with only minimal guidance from me. I have at least a minimum of instruction in most media, except I’ve never done pure oil or acrylic painting. I really like messing around with the art stuff and wish I could spend more time doing it. It’s really all about the practice.

    Dinner was a success, and the dessert came out fine too.

    One of her friends brought her balloons and some gifts, and some pastries too. Then they did a zoom meeting to open the gifts. It was very sweet.

    Grandparents got together on facetime and reviewed the haul and drooled over the cake… All in all, a good day.

    n


  51. We fight with division by zero, underflows, and overflows every freaking day. I have changed: x = y / z
    to
    if ( z .ne. 0) then
    x = y / z
    else
    x = 0
    end if
    so many times in our software that I can do it in my sleep.

    In 1974 at SAC HQ I was in charge of the rewrite of the compiler for the SAC Automated Command and Control System (SACCS). The many divide zero errors were eliminated when did exactly that: no division until we checked for zero values. Simplified the coding for the programmers as the compiler created subroutine calls before dividing. We also issued a warning to the console every time a divide by zero attempt was made.

  52. GOTOs.

    Our code has 32,721 gotos in it. Luckily, C / C++ supports goto.

    C:\dii>grep -i goto *\*\*.f | wc
    Lines Words Chars
    8807 43415 475573

    C:\dii>grep -i “go to” *\*\*.f | wc
    Lines Words Chars
    23914 139339 1280444

  53. We also issued a warning to the console every time a divide by zero attempt was made.

    Oh man, on our software that could be millions XXXXXX billions of warnings.

  54. I’m just hoping to keep the arrows in our yard 🙂 Both girls have some training and experience from Girl Scout camp. Oh, and the forearm protectors came in, so that’s a plus. I don’t have a mark today, but dang that hurt.

    n

  55. @Greg, Tesla may be moving to Oklahoma, “Report: Texas-size rivalry for Tesla’s Cybertruck factory heats up”

    Didn’t the Perot family build a bunch of infrastructure up there somewhere to take advantage of the Trans Texas Corridor? Rail would be critical to getting a factory up and running quickly, doing final assembly at first, and I remember the proposed TTC scheme 20 years ago was to haul import containers from Mexican seaports into Oklahoma and do customs clearing there before the goods spread out across the country on trucks and other train routes.

    Austin has a lot of geographical limitations, but Tulsa lacks the bacchanalia. 6th Street reopens this weekend. I wonder if the drunk tank -er- sobering center will have social distancing on the cots.

  56. @Rick: Function overhead really depends on the compiler – in the end, if you’re writing code where performance is an issue, you have to know your tools. Many compilers will “inline” small functions, effectively removing any extra overhead. But not all compilers do that, and I expect Lynn’s does not.

    @Lynn: What I don’t understand (but I haven’t programmed Fortran 77 since – geez – since the early 1980s): why do you want zero as the result of a division by zero? That is a manifestly wrong result, and I assume that you have to catch it somewhere else (if result is zero, then…). Floating point math on the processor supports the result “infinity”, which is the normal result of a floating point division by zero. Does Fortran 77 not support this?

    Anyhow, converting a huge program to a new language, or even to a newer edition of the existing language: Horror. Been there, done that, but it really is horrible. And the automatic conversion tools never do more than the obvious 90%, leaving you with the worst 10% to handle manually. It’s frankly almost easier to rewrite from scratch, using the old program as a specification and basis for testing. Of course, I’m sure you have the time and resources to write a new million-line program…

  57. Our code has 32,721 gotos in it. Luckily, C / C++ supports goto.

    I had to dig out the Stevens book the other night to refresh on Unix setjmp(). Super Goto!

  58. @lynn … I’ve always wondered if function calls ‘cost’ more than putting that code inline. I tend towards using function calls (in php code for my web sites) even if they are only ‘called’ once, just to modularize things – and to make it easier to find that hunk of code. I don’t have to optimize the code, so in my case it doesn’t matter.

    Php actually has a decent optimizer since Facebook’s HHVM lit a fire under the Php 7 developers. Small functions are probably optimized into inline bytecode.

  59. Ahh togos. We had a rule that required a COME FROM comment at the entry point. The compiler would issue a warning and on the next run would fail if still missing. A senior programmer had to validate that the come from(s) were correct. Sure made debugging easier.

    Not that many divide by zeros. Our data set tracked available aircraft and ICBMs (missles) and their availability and deployment. Seldom zero.

  60. If you’ve just used your last ICBM, you have bigger worries than a divide-by-zero.

Comments are closed.