back to article Brackets go there? Oops. That’s not where I used them and now things are broken

Have you remembered it’s 2025 yet? The Register asks the question because it’s often the small things that make for the kind of big problems that we share each week in “Who, Me?”, the column that celebrates readers’ escapes from their errors. This week, meet a reader we’ll Regomise as “Henry” who told us of his early career …

  1. Anonymous Coward
    Anonymous Coward

    Any system...

    ...that require a signoff by two people (one "senior"... like they never make mistakes, right?) for a trivial change and doesn't have a 'TEST' env or a 'test' options is a badly designed system in need of overhaul.

    (aks me how I know)...

    1. graemep

      Re: Any system...

      My thought exactly, but they also should have fixed or replaced a system that has error prone syntax.

      1. Gene Cash Silver badge
        Coat

        Re: Any system...

        > error prone syntax

        You mean like sendmail or perl?

        1. l8gravely

          Re: Any system...

          sendmail was designed to be easy for computers to parse, so of course it's painful to work in. Eric has admitted he made a poor decision there. Then he compounded it by using m4 to try and make it readable.

          As for perl, you think the syntax (not semantics!) is worse than any other language? You think python with forced indentation is great? Or rust, or go or C? They all suck to some degree or other.

          Heck, I wish all languages would get rid of the ternary operator!

          1. John Sager

            Re: Any system...

            I wish all languages would get rid of the ternary operator

            I saw a multiply nested one of those today so it took me a moment to understand the logic. I'm not fussed though and I use them myself. Its more succinct and more expression-like than if - then - else.

            1. techulture

              Re: Any system...

              A low-code platform I used only allowed a single Javascript statement in some configuration fields. I resorted to nested ternary operators.

              1. RichardBarrell
                Trollface

                Re: Any system...

                in an expression context you may be able to use an IIFE like `(function() { /* do stuff */ return "something"; })()`

                unless there's some heinously evil filtering thing that parses the code you paste in and rejects it if it contains functions, I guess

          2. Philo T Farnsworth Silver badge

            Re: Any system...

            sendmail syntax looks like line noise from a crashed modem connection (yes, I'm old and I remember those things. Both of them.).

            I'm not a big fan of perl but I don't especially dislike it, either. At least it has curly braces. I could do without the dollar signs in the variable name, though. I've never completely understood why those should exist. They seem to be the bane of exec* scripting languages for some reason. I suppose they make things easier to parse but I find they make it harder to write.

            python. Ah, python, dear python. A wonderfully powerful languange that makes itself harder to use with semantic indentation. Many's the time when I wanted to just comment out the head of an if whilst debugging but you can't, since the language won't let you. And the number of times a stray indent (or lack thereof) at the end of a for block has tripped me up exceeds that of the number of times the cat has done the same.

            Language designers give CCD imager designers a run for their money in sheer craziness.

            ______________

            * Here I'm thinking of the IBM mainframe scripting languages like exec and exec2 under VM/CMS, the environment whence I came before finding honest work.

            1. Yes Me Silver badge

              Re: Any system...

              You can comment out an if with if True: #day=="Tuesday":

              I also find the statement 0/0 very useful for checking that the code works up to a certain point.

              1. Philo T Farnsworth Silver badge

                Re: Any system...

                Understood.

            2. KarMann Silver badge
              Holmes

              Re: Any system...

              Well, without the dollar signs etc., how else are you going to overload variables so that a scalar, array, and hash can all have the same name? Checkmate, bare-variable-languages!

          3. DrkShadow

            Re: Any system...

            > Hell, I wish all languages would get rid of the ternary operator!

            I generally agree........ however I've found myself using it occasionally, recently.

            The problem is: initial assignment to a const variable. Either 1. use a language that `const`ifies the assignment on _first_ assignment (Java), or use a ternary to determine the value at _this_ assignment (C).

            I suppose you could also use a code block that returns a value `const myval = ({int myvar2; if (a) myvar2 = 3; else myvar2 = 4; myvar;});` but that's even more evil imo. (it feels like very recent C standard syntax, as well - I don't think it's K&R C). I've done that a couple times to avoid temporary variables creeping into function scope. I don't know how I feel about it.

    2. MJB7

      Re: Any system...

      EVERY system has a TEST environment. Some people are lucky enough to have the luxury of a separate production environment too.

    3. SVD_NL Silver badge

      Re: Any system...

      What do you mean? Any senior worth their salt would undoubtedly devote their full attention to every single email filter rule they need to approve, and diligently check the syntax of said rules to account for missing or misplaced brackets... /S

      You'd literally be better off letting your seniors write a small syntax debug program.

      1. that one in the corner Silver badge

        Re: Any system...

        You just need to gamify[1] the process:

        "I've made a change somewhere on this line I copied from a rule written by you three years ago; when the lovely Samantha sounds her horn you have one minute to write a matching input for a chance to win one of these fabulous prizes! And don't forget the Booby Prize that Sven is showing the audience now - and for the listeners at home, the Mystery Voice ('Documenting the regex language; documenting the regex language')"

        Parp

        [1] apparently, *not* pronounced like a side of ham

        1. Bebu sa Ware
          Coat

          Re: Any system...

          《you just need to gamify[1] the process:》

          I assume not gāmeify to avoid comparision with gāmey (of wild [hunted] game) of which one connoisseur opined:

          "the taste of gamey meat very much comparable to rotting meat or meat that has started to rot."

          which to my mind wouldn't be entirely inapplicable to the idea of gāmification.

          I suppose your gămmon could a whiffy leg from a feral pig that is past its best before date and definitely gamey.

        2. James Wilson

          Re: Any system...

          Upvote for the ISIHAC reference, even if it was a little obvious. I suspect Samantha and Sven would have complained it wasn't hard enough to satisfy them.

      2. DS999 Silver badge

        Re: Any system...

        You'd literally be better off letting your seniors write a small syntax debug program

        How about have them rewrite the "terrible interface" mentioned that's really the cause of this?

        Or at minimum make the terrible interface usable with a relatively small addition where before committing the change you can type in a sample address, subject line or whatever else it was capable of filtering on. Then it shows you whether that sample address/subject would be passed or blocked both BEFORE and AFTER the proposed change is implemented. They don't need a full test environment like some people are talking about here, just a way to sanity check whether what they are doing is having some unintended effects.

        Because if they had that and someone still screwed up they should be fired. Because you'd know if you implemented a block for @example.com that you should check example.com as a sample address to verify your change had its intended effect, and then sanity check a "normal" address (maybe your own email address) to insure you didn't accidentally wildcard the entire internet.

    4. TimMaher Silver badge
      Devil

      Re: “ask me how I know”

      Go on then... how do you know?

  2. 42656e4d203239 Silver badge

    Not quite a misplaced bracket but definitely misplaced testing...

    Once upon a time a senior analyst wrote a script to delete the mailbox records from AD for everyone who had an email account on the old exchange server...

    You can see where this is going can't you?

    I had only just (3 months) joined the organisation, so watched, with a kind of crazy grin, as other user accounts were getting deleted... along with their access to Office365.... My account, being new, was not affected.

    That was a few years ago now - analyst has moved on, but the long term effect is that users no longer trust cloud services (which is a win I gess)

    1. K555

      Re: Not quite a misplaced bracket but definitely misplaced testing...

      The UI is/was a also bit like that in Exchange, so you could do similar even without an errant script!

      Because you were in the Exchange Management Console it was very easy to assume the 'delete' button was just for exchange stuff. It deleted the user's AD account too. I'm sure everyone managed to do that once, but at least it's good practice on recovering objects once the user phones up to tell you they can't log in any more.

  3. Michael H.F. Wilkinson Silver badge

    Not sure it was a syntax problem, but our mail system developed a tendency to block everything from the IEEE Computer Society (of which I am a member, so it shouldn't count as spam), and, worse still, anything from NWO, which is the main Dutch funding body. Not only was I in one of their assessment committees, I was also preparing a very large funding proposal (to the tune of 1.5 million euro), which I did not want to go AWOL due to some email cock-up. It got so bad that NWO would call me to see if the emails they sent me had arrived. Fortunately, I could put two rules in place, one preventing the spam filter from touching the IEEE emails, and one for NWO. Of course I gave these rules the highest priority (5), higher than the regular filter (3), and all was well.

    For a time.

    I then noticed things went missing. I inspected the filter settings, and somehow the priorities had been reset to the default (3). I set the priorities back to 5. This happened twice. I then sent an angry email to the system administration that if this happened again, and I missed a deadline for responding to reviews due to this, causing me to miss out on the funding, I would send them bill to the tune of 1.5 million euro.

    That seemed to have sorted the issue.

    1. J.G.Harston Silver badge

      One of my early spam filters killed anything with three or more repeated characters, so IEEE....

  4. Andy Non Silver badge

    Crashed an IBM 360 mainframe

    I once accidentally missed a full stop at the end of a line of COBOL and the compiler didn't handle it gracefully, crashing the computer.

    Usually such syntax errors would be picked up but there must have been something about that particular line and what followed that wasn't catered for.

    1. David Harper 1

      Re: Crashed an IBM 360 mainframe

      You, sir, are a Real Programmer.

    2. UCAP Silver badge

      Re: Crashed an IBM 360 mainframe

      Ahh, yes - COBOL. An abomination unto Nuggan, and must therefore be shunned.

      Many decades ago, when I was a research student at university, I made the serious mistake of admitting that I had done some COBOL programming in the Real World. This unfortunately meant that my Comp Sci department had precisely two people in it who new COBOL - a lecturer who was providing courses in the language to under- and postgrad students, and myself. Guess who got to take most of the tutorials!

      The biggest problem I had during this time was trying to teach the students how to work out which error message was actually the meaningful one, and how to identify and discard the many errors generated because the compiler had developed a headache and wanted to lie down. I think the record was 1 meaningful message embedded in about 200 spurious ones - again caused by a missing full stop at a critical point.

      1. MiguelC Silver badge

        Re: Crashed an IBM 360 mainframe

        I remember once in my first work in a bank's IT department a room filled with 90+ developers, typing silently (as silently as those wonderful keyboards allowed us to be) when suddenly we hear a really loud and prolonged "Fuuuuck!" Everyone turns to the new guy, who's turning bright red by then. His compilation had just produced over 4000 errors and he thought he'd have to rewrite his program from scratch... I think he was as embarrassed about his loud expletive as for the public explanation he got from our manager about the error count.

        From then on we would hear, day in day off, someone muttering the prolonged fuuuuck whenever something was awkward, had really gone awry, or just because.

        1. Anonymous Coward
          Anonymous Coward

          Re: Crashed an IBM 360 mainframe

          We used to have a whiteboard where everyone's favourite expression of exasperation was listed and we'd add a mark every time someone used theirs loudly. The one in front each week had to buy waffles for the others come Friday lunch. That's where I learned to turn my emotions inwards.

          1. BenDwire Silver badge
            Windows

            Re: Crashed an IBM 360 mainframe

            That's where I learned to turn my emotions inwards.

            ... And another techie is born, conforming to the stereotype.

        2. swm

          Re: Crashed an IBM 360 mainframe

          I once got 40,000 errors on a simple assembly program. It had a source code loop that generated lots of lines of code. The error was not prefixing the assembly with a character set card changing EBCDIC codes to ASCII.

      2. Doctor Syntax Silver badge

        Re: Crashed an IBM 360 mainframe

        "how to work out which error message was actually the meaningful one"

        That was easy with the ICL FORTRAN compiler. It was the first. All the rest were presumably because it couldn't get its parser back on the rails again so everything after the first error looked wrong.

      3. heyrick Silver badge

        Re: Crashed an IBM 360 mainframe

        "how to work out which error message was actually the meaningful one"

        Isn't it the same as C? Work with the first error message and ignore all the rest (which are due to the compiler having a panic attack)?

        1. swm

          Re: Crashed an IBM 360 mainframe

          A student of mine had a program with a syntax error but couldn't find the error. Turns out he had a comment ending in '\'. This caused the C++ parser to delete the '\' and the new line effectively deleting the next line of code.

    3. Flocke Kroes Silver badge

      Re: Crashed an IBM 360 mainframe

      C permits leaving parameter names in function prototypes. Only good taste prevents you from putting different names in the definition. This used to crash some compilers but not others, but only when compiling the file with the definition if that file included the prototype. Until you discovered the cause you could easily discount the possibility that the problem was in the header file because it did not cause problems compiling other files.

    4. Anonymous Coward
      Anonymous Coward

      Re: Crashed an IBM 360 mainframe

      Brings back a memory from the early 1980's where I was the lead engineer on a project to design and implement a material traceability system across our entire site five large workshops with machining, fabrication, assembly and test facilities for a wide range of oilfield equipment. I was the interface between the IT team and the rest of the organisation, looking at the real world issues whilst the IT team got something working on the mainframe (which, incidentally, was backed up overnight, by a satellite link, I believe, to the USA).

      The workshop interface with the system was through punch card readers and numeric keypads, which was quite limiting in what would be entered. It was complicated by having to be compatible with parts and equipment from our parent organisation based in the USA (and who had no interest in material traceability - we were transitioning from a "it's OK if it looks right and doesn't fall apart" mentality to one of ensuring it actually is right. The system had to cope with a variable traceability standard ranging from not traceable, through traceability to a batch, to one where every component had to be traceable back to raw material. I set out four trace codes"

      N - Not traceable (self-explanatory, no action - for non-critical parts and material).

      U - Unique traceability required (for components and small sub-assemblies needing traceably back to raw material certificates, or an approved equivalent from the manufacturer).

      T - Traceable (the default for most things, traceable back to our supplier or production batch).

      S - Serialised (for major equipment, whereby I could enter a serial number into the system and receive a full breakdown printout).

      Naturally, the system was totally NUTS - something I used to gain buy-in from the workforce.

      But, to the point (sic). The computer ran its main processing as an overnight batch and I received a morning printout of any errors (such as an incorrect trace number entered) - usually quite short and all cleared in an hour. One morning, however, everything had been rejected - and it was clear there was a glitch in the program. The code (COBOL) was printed out and I dived into it with the programmers. I didn't know COBOL that well (I'd learned FORTRAN IV at university, and then BASIC in my previous job), but I was able to follow the logic. Come lunchtime, we'd discovered a missing full stop at the end of one line. The code was updated and the batch rerun (not popular with other users but, unless we reran the overnight batch, nothing new could be entered). Success and underwear changed!

    5. shamgetz
      Childcatcher

      Re: Crashed an IBM 360 mainframe

      The mention of COBOL is giving me PTSD. Fortunately I'm not quite old enough to have used it in the field, but in a classic case of completely missing the point, I spend two years at college having to write my COBOL programs onto squared paper (one character per square) before we were allowed to enter them into the PC on the desk because our lecturer told us earnestly that that's how it worked in business. Of course, given this was 1993 rather than 1963 we all typed our code into the PC, 'tested' it, then transposed the code onto the coding sheets at the end. I shudder to think how many hours I wasted on that!

    6. Mage Silver badge
      Coat

      Re: Crashed an IBM 360 mainframe

      Ha, in 1987 a mistake in MS C for DOS could cause the HDD to format!

      1. Anonymous Coward
        Anonymous Coward

        Re: Crashed an IBM 360 mainframe

        And now Windows does it for you. We call that progress.

        :)

    7. DS999 Silver badge

      Re: Crashed an IBM 360 mainframe

      That's pretty impressive, given how bulletproof IBM's mainframe OS is.

  5. IanRS

    Opportunities for error

    About 20 years ago I briefly worked on the Galileo GPS system. Because this was an EU funded system, politics came into play, and all suppliers had to be from the EU. I had to configure some of the firewalls. EU supplier? Firewall? Yes, there was one, from Austria, that I had never heard of before and never used since. Their rules used what looked like CIDR notation, typically with /8 and /24 networks for what we needed, but they had their own special syntax, where the number after the slash gave the number of variable bits in the range, not the fixed bits, possibly copying the idea from the Cisco wildcard masks. Hence a /24 was a large network and a /8 was a small one.

    1. Flightmode

      Re: Opportunities for error

      Ah, the Cisco wildcard mask.

      I once had to write a classic IOS extended access list which allowed certain traffic from every fourth /28 network out of a /22 - meaning for example 10.10.0.48/28, 10.10.0.112/28, 10.10.0.176/28, 10.10.0.240/28. 10.10.1.48/28 all the way up to 10.10.3.240/28. Rather than one line for each subnet, totalling 16 lines per TCP/UDP port, I experimentally discovered that a single line per destination port with the source range 10.10.0.0 0.0.3.207 worked just fine. I'm still proud of that one, even though more than a decade has passed.

  6. ArrZarr Silver badge
    Unhappy

    Not Syntax, but

    We used to develop our own in-house tech where I work, and that tech was thrown out the door by competent developers who were never given anywhere near enough time to make something even approximate user-friendly.

    Sadly I was the only person anybody trusted to do anything scary in the UI. For about 18 months, this was all well and good but one fateful day, the toggle switch to the Include list was left on so I reduced the size of an important feed file from ~70k rows down to 10. Not 10k, 10.

    This has left me with strong opinions (TM) about any tool's ability to check for weird changes in core systems. Needless to say, my feedback on how to prevent this happening again was never implemented until the tech was shut down a few years later.

  7. Korev Silver badge
    Coat

    This could have been worse, Henry could now be an Exim-ployee

    1. Anonymous Coward
      Anonymous Coward

      I've emailed you your P45 - phone us when you get it.

      1. Korev Silver badge
        Coat

        Henry is maintaining the email server, so I think I'm OK...

  8. MrBanana
    FAIL

    Mind your language

    I can see the problem with config files that have a strange syntax structure, but usually I find Emacs has an edit mode that can help somewhat with keeping on the correct path. But I struggle to see how some languages can get cross mangled, like one recent example I came across. An install script written for bash was failing due to a syntax error. Fortunately the install package had the script tacked on to the front of the binary, so I could see that some dimwit C++ programmer had commented out part of the script with '//' type syntax - Doh!. Unfortunately the install process was protected by a checksum so that it wasn't possible to just change the script. No idea how it got past any testing or QA process.

    1. Richard 12 Silver badge

      Re: Mind your language

      As CrowdStrike have demonstrated, a lot of suppliers don't even attempt to install their released product.

  9. Camilla Smythe

    I got bored with SEO/APP spam...

    ... So I blocked outlook.

    1. Doctor Syntax Silver badge

      Re: I got bored with SEO/APP spam...

      And not gmail?

      1. Camilla Smythe

        Re: I got bored with SEO/APP spam...

        For some reason gmail is not so much of an irritant if at all. At worst they may give gmail return addresses but the majority if not all of it comes from outlook hosts. I did go through a phase of reporting them but it took at least three emails to Microsoft before they both understood the problem and took action. Then the miscreants would just sign up for another freebee and continue spamming. Of course blocking outlook, unlike something like or associated with mailchimp, can be counterproductive. Mailchimp are the spammers whose forums are packed with idiots moaning about having their spam blocked by Gmail and Microsoft which begs the question that given Microsoft can protect their users from incoming spam then why can't they protect everyone else from their own collection of spammers.

        X-Microsoft-Antispam:

        YUP: CHECKED THAT.

        X-Microsoft-Antispam-Message-Info:

        NOPE: SURE DON'T LOOK LIKE SPAM TO US.

        X-Ms-Exchange-Antispam-Messagedata-Chunkcount: 1

        NO SEO APP SPAM THAT I CAN SEE IN THIS ONE.

        X-Ms-Exchange-Antispam-Messagedata-0:

        CHEW on THIS MATE.

        Mime-Version: 1.0

        X-Originatororg: outlook.com

        Wankers.

        1. Anonymous Coward
          Anonymous Coward

          Re: I got bored with SEO/APP spam...

          The reason Google isn't as bad is because they bought Postini which was *way* ahead in filtering and so fast it pretty much passed on email realtime whilst doing the job.

          Google kept it going for a while as a business because it was making quite a mint from filtering for Swiss banks (for which by law Postini required an office in Switzerland as you're not allowed to manage those system from outside, not even by VPN which I knew because I had the office next to them in Zurich before they were bought).

          The takeover by Google meant banks had to stop using it, but banks are not super fast when it comes to changing systems so it took a while. Meanwhile the Borg, sorry, Google was slowly assimilating the tech into their own platform so eventually they closed it.

          It was a shame - Postini had damn good tech but Google locked it away unless you were willing to trust the US.

  10. david 12 Silver badge

    AND / OR

    Those words have an (English) ambiguity which often confuses real users.

    (I'd like ORANGES and LEMONS with mine)

    Library search terms used to have careful explanations. Now Google and Bing avoid those words by using "+" and +"+

    1. JulieM Silver badge

      Re: AND / OR

      Out of interest, are there human languages that sidestep this by having distinct words that explicitly mean "||" and "^" ?

      (I sort of expected there to be human languages where the word for "first" is based on 0, "second" on 1 &c., but haven't found much evidence. Nor have I found the language where 3 is "prop" and 4 is "but", though, so I'm probably just not searching right -- and I really cannot rule out AI helping me to search wrong.)

      1. Oliver Humpage

        Re: AND / OR

        I don't know about natural languages, but Lojban just about counts as human and almost certainly will. Especially given it can disambiguate "John and Alice moved the piano" to be either they did it together, or individually at separate times…

        Section 14.14: https://lojban.org/publications/cll/cll_v1.1_xhtml-no-chunks/#section-non-logical-connectives

        1. heyrick Silver badge

          Re: AND / OR

          "Especially given it can disambiguate "John and Alice moved the piano" to be either they did it together, or individually at separate times…"

          So can English, with a few extra words. I think a lot of the ambiguity is due to people overoptimising their sentences...

          1. TimMaher Silver badge
            Coat

            Re: AND / OR

            I’m thinking of coding my next gig in Esperanto.

            The manual is in my coat pocket.

          2. John Brown (no body) Silver badge

            Re: AND / OR

            " I think a lot of the ambiguity is due to people overoptimising their sentences..."

            Or, in the case of project managers, managing to both under and over optimise their sentences to the extent that it can mean mean both multiple different and opposing things to the same read and many multiples of different and opposing things to multiple readers :-) "Your reading it wrong" being the best response from them.

            1. heyrick Silver badge

              Re: AND / OR

              That's quite intentional. By carefully writing things to have multiple meanings, when the brown stuff hits the ventilation device they'll tell you it was all misinterpreted and it actually meant <the other meaning>, but if it all goes well, then that's exactly what they meant.

      2. Martin an gof Silver badge
        Boffin

        Re: AND / OR

        where the word for "first" is based on 0, "second" on 1 &c., but haven't found much evidence

        What you mean like where in the US, the building floor level with the ground is the "first" floor whereas in the UK it's the "ground" floor, effectively the "zeroth" because if you go up one floor you'll find yourself on the "first" floor, which in the US is the "second"?

        I mean, not counting certain buildings which due to topography have a "ground" and an "upper ground" and/or a "lower ground"...

        M.

        1. A.P. Veening Silver badge

          Re: AND / OR

          And depending on the region or country, the counting completely goes haywire around 4, 8 or 13 (other numbers available as well, but those are rarer).

        2. Anonymous Coward
          Anonymous Coward

          Re: AND / OR

          Yup. Here in the US we avoid the fencepost error. Highest floor on a 12-floor building is the 12th floor. Simple.

          1. JulieM Silver badge

            Re: AND / OR

            You aren't avoiding the fencepost error at all. You're just counting ceilings as opposed to floors.

            1. Benegesserict Cumbersomberbatch Silver badge

              Re: AND / OR

              And inducing a new fencepost error: to get to the twelfth floor, you have to go up eleven flights of stairs.

      3. KarMann Silver badge
        Boffin

        Re: AND / OR

        Out of interest, are there human languages that sidestep this by having distinct words that explicitly mean "||" and "^" ?
        Latin has vel for 'inclusive or' and aut for 'exclusive or'. The shape of the first letter of vel inspired the logical symbol ∨, used for 'inclusive or' or 'logical disjunction'. The symbol that looks like it might be related, ∧, means 'and', however, and is so styled for the 'A' in ac or atque, rather than aut.

    2. vulture65537

      Re: AND / OR

      In a cafe I once ordered coffee and strawberry ice cream which got me dual flavour ice cream and no coffee.

      1. J.G.Harston Silver badge

        Re: AND / OR

        When I lived in Hong Kong, many servers couldn't tell the difference between Chick-En burger and Cheeeeeeeeze burger.

        Mak hern gai, shikh gho sun dai m goi.

  11. John Robson Silver badge
    Facepalm

    rm -rf /etc /usr /bin

    Very early in my career I was trying to clear out a chroot jail whilst doing some dev work, but there hadn't been an available test server, so my manager had said "just use the build server". After all everything I was doing was in chroot jails...

    Yep - I managed to either miss the "." from the start of each dir, or add in the "/".

    Whichever way you like to look at it I'd just hosed the build server really nicely... Oh well...

  12. evadnos nibor

    You fool! You think your puny brackets can defeat *me* ...?

    Print and mail, about 15 years ago, we printed water bills (sorry) amongst other things. My job was perl-munging data from customers into a format acceptable to the various print composition tools we had and, once or twice, to help out with any macros in the composition templates if they were tricky. We got the water bill gig from TakingYourShitAwayAndPuttingItInTheSea Ltd and management decided this was the project to do with the new composition tool which had - trigger alert - "smart" templates, supporting a language similar to VB.

    A good few of you will have had the experience where "I can't write application XYZ code" is meaningless (cuz you iz a programmarer, yeah?) and the negative verb in "I won't write application XYZ code" is negotiated down through "refuse to", "shoudn't", "would prefer not to" and "will just ONCE, to get you out of a hole, alright?" to ... nothing. This happened to me and so I found myself looking at a little function to adjust the paragraph flow depending on how long the form letter's furniture (address, title, pictures etc) was.

    No big deal, couple of ifs and some maths, thought I.

    However, run it through the composition and the flow would be wrong, in preview and in print. Check it and it looks right. Do it by hand, it's right. Mock it up in perl, those expressions work.

    Remember I said the language was "similar" to VB? In appearance yes, but definitely not in tooling: no console output, no debugger. I hard-coded the numbers in for a particular case. Still wrong.

    Stumped, I raise a ticket with the supplier and they come back startlingly quick: "there is no operator precedence, expressions are evaluated left to right."

    Wow. I stick some brackets in - (it (looks) (stupid)) ((,) (but)) that'll force operator precedence, won't it?

    Nope, didn't work on the test, so I broke it down to separate, consecutive expressions and my little function is now fifty plus lines of horror, but *working* horror.

    I followed up on the ticket about the brackets: "we strip them out because it makes parsing the expressions easier".

    Wow again. Last bit of application XYZ code I ever wrote.

    1. l8gravely

      Re: You fool! You think your puny brackets can defeat *me* ...?

      So why don't you mention what this horror XYZ is then? C'mon, share the pain with us, because that vendor needs shaming for sure!

      1. evadnos nibor

        Re: You fool! You think your puny brackets can defeat *me* ...?

        I honestly can't remember. The vendor name isn't the kind of thing you'll let pack hard in your memory ...

        1. Anonymous Coward
          Anonymous Coward

          Re: You fool! You think your puny brackets can defeat *me* ...?

          Well done ... that man !!!

          :)

    2. PRR Silver badge
      WTF?

      Re: You fool! You think your puny brackets can defeat *me* ...?

      > I broke it down to separate, consecutive expressions and my little function is now fifty plus lines of horror, but *working* horror.

      I had (still have) a hobbyist language/compiler for DOS, which could not swallow two operators in one line. Brackets no help. FORTRAN spoiled us all.

      In fairness, FORTRAN expression processing was brilliant for its time, and the other language was freeware then $5 shareware (and then the developer released all his tools near-free and vanished).

    3. gnasher729 Silver badge

      Re: You fool! You think your puny brackets can defeat *me* ...?

      In reality there is nothing simpler than a recursive descent parser for expression as long as you resist the temptation to make your tokeniser too clever.

  13. Anonymous Coward
    Anonymous Coward

    "the service had a terrible user interface that relied on some decidedly odd syntax that he wasn’t entirely across."

    Eh? "across" ?

    Is this some USA English phrase? "familiar with" or "proficient in/with/at" would make sense but "across" ???

    1. Anonymous Coward
      Anonymous Coward

      'England and America are two countries divided by a common language'

      It is a phrase I am "familiar with" from communications with a 'left-pondian'and would appear to be of US of A origin AFAICR !!!

      Remember that English is not just 'UK English' and it has been used/changed/mangled by a huge number of people around the world.

      :)

      1. evadnos nibor

        Re: 'England and America are two countries divided by a common language'

        >> Remember that English is not just 'UK English' and it has been used/changed/mangled by a huge number of people around the world.

        An Indian lad I worked with used to say "English is just another Indian language. We've got _loads_"

      2. Stevie

        Re: [across] would appear to be of US of A origin AFAICR

        Never heard it in 40 years of living in the USA.

        I assumed it was a bad edit.

        1. Anonymous Coward
          Anonymous Coward

          Re: [across] would appear to be of US of A origin AFAICR

          Same here. Lived in USA all my life (I'm in my 40s) but haven't heard this one.

        2. Robert Carnegie Silver badge

          Re: [across] would appear to be of US of A origin AFAICR

          Each U.S. state has a different word for "carbonated beverage"! ;-)

  14. vulture65537

    I worked at a major email system where the 'block email from that address' control was mixed in and hard to separate from such other powerful features that minor changes to the block list (could be several a day) all had to come to someone as senior as me

  15. Boris the Cockroach Silver badge
    Facepalm

    In my line

    brackets are the least of your problems....... although it was funny when someone added an opening bracket at the start of a program while editing it on the laptop... then wondered why the machine refused to run it at all, (brackets define non-executable comments in my world and you must use both or the machine thinks the entire program is a comment....)

    It did take a while to figure out what was going on when everything looked ok on the laptop :)

  16. Prst. V.Jeltz Silver badge

    user interface that relied on some decidedly odd syntax that he wasn’t entirely across.

    Thats some decidedly odd syntax right there

POST COMMENT House rules

Not a member of The Register? Create a new account here.

  • Enter your comment

  • Add an icon

Anonymous cowards cannot choose their icon

Other stories you might like