MUMPS Madness

« Return to Article
  • PIercy 2008-11-12 09:12
    wow, i really feel sorry for steve. i hate going through code as it is let alone something as poorly written as that.

    as for CC card numbers, thats a mistake a 12yo makes when creating scripts for people. a sure WTF!

    frist lol
  • The Undroid 2008-11-12 09:13
    Who needs MUMPS for this kind of thing? I see it all the time in MySQL databases.
  • Me 2008-11-12 09:13
    Great. Now that they have a web server written in MUMPS, they can write a server-side MUMPS parser, so all of their web apps can be written in MUMPS as well.
  • Submarine 2008-11-12 09:13
    99,9% uptime means whole 8 hours of downtime per year
    P.S. Freights
  • SoonerMatt 2008-11-12 09:15
    I kept accidentally reading:
    Normally, hearing that a developer is storing off live credit card numbers

    AS
    Normally hearing that a developer is LIVING off of stored credit card numbers


    I think I my error may have been more correct...

  • dkf 2008-11-12 09:21
    The Undroid:
    Who needs MUMPS for this kind of thing? I see it all the time in MySQL databases.
    I've heard (on this site) that people write SQL databases in MUMPS. I feel sorry for their users.
  • Dennis 2008-11-12 09:25
    What's with the wiki [[ ]] markup?
  • chuck 2008-11-12 09:30

    N1amOrdr - 1am Order
    N2amOrder - 2am Order
    ...
    N11pOrder - 11pm Order
    N12mOrder – 12 Midnight Order
    N1amSgnt - 1am Signature
    ...
    N12mSgnt - 12m Signature
    N1mDtTm - 1am Date/Time
    ...
    N9mDtTm - 9am Date/Time
    [ un-named column ]
    [ un-named column ]
    [ un-named column ]
    N1pDtTm - 1pm Date/Time
    ...
    N12DtTm – 12 Midnight Date/Time
    N1amUser - 1am User
    ...
    N12mUser – 12 Midnight User
    N1amCmmn - 1am Comment
    ...
    N12mCmmn – 12 Midnight Comment

    That’s right: At least 5 fields for every hour of the day.


    Ouch... yeah, you definitely /don't/ need MUMPS for this kind of thing. In fact, I'd call this a case of someone not really understanding how to use MUMPS... MUMPS uses a hierarchical database, not a relational one, so there's no need for this "namespaced columns" anti-patters. The "table" could have just had children for each hour, and each hour having the date/time/user/comment children beneath it. Even then, there's probably an even better way to handle it, that's just off the top of my head.

    Or at least, so says this PHP programmer... :P
  • Undisclosed 2008-11-12 09:38
    That sounds very very very familiar.
  • cbatologin 2008-11-12 09:42
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.
  • EatenByAGrue 2008-11-12 10:12
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    What, credit card fraud and embezzlement not good enough for you?
  • murder 2008-11-12 10:12
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    did tyson murder steve after learning that steve had deleted his stolen credit card stash?
  • mrmunkey 2008-11-12 10:12
    This article is really strange. Either they're using some other version of MUMPS that I'm not aware of, or they don't know MUMPS. I've been working at this hospital for about 6 months doing mostly MUMPS programming.

    The MUMPS "database" is set up around the idea of globals that are stored on the drive. Globals are prefixed with "^" to identify them as being a global. Globals act kind of like a multi-dimensional array. The example given of the loop

    set ^tnc("scramble","notes",d0,d1)=data


    Actually means

    SET Global TNC(node "scramble", sub-node "notes", sub-sub-node d0, sub-sub-sub-node d1)=data


    A loop would look something like

    F S I=1:1:10 D
    . W I,!
    . Q


    In pseudo code that would be

    for (int i=1; i<=10; i++) {
    echo i;
    echo "\n";
    }



    With all that said, MUMPS works, and it works well. It's just a nightmare to know where all the data is coming from (at least in the product we're using). We have a several thousand page document that documents where all the data is stored.

    It's possible that they are using a newer version of MUMPS called Caché, and they can access the database layer that sits on top of the globals. If you care Caché is object relational, which makes for some interesting compatibility issues over ODBC.
  • St Mary's Hospital for the Uncurable Damned 2008-11-12 10:16
    MUMPS Madness


    I'm waiting for R Madness. Seeing that there are no stories of that kind, I can safely assume that I get my MSc degree one day...
  • cbatologineventhoughIshould 2008-11-12 10:33
    EatenByAGrue:
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    What, credit card fraud and embezzlement not good enough for you?


    No, unless there's rape, murder and a bit of comic tomfoolery it's not good enough.

    murder:
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    did tyson murder steve after learning that steve had deleted his stolen credit card stash?


    Then raped his corpse?

    Captcha : sino - onis - onus - anus - anal rape.
  • khanti 2008-11-12 10:36
    Ha! I think I interviewed with this company a couple of years ago. The large wood-paneled group meeting hall, the MUMPS-based medical software and the cult-like atmosphere are all eerily familiar. Glad I turned down their offer. I'd hate to have been in Steve's shoes. And to all the other employees there, "Get out while you still can!"
  • Resistance 2008-11-12 10:38
    I'd take x * 1.3 * 0.7 over x any time
  • b0ttomfeeder 2008-11-12 10:43
    murder:
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    did tyson murder steve after learning that steve had deleted his stolen credit card stash?


    No, he just bit his ear off.
  • snoofle 2008-11-12 10:45
    cbatologin:
    ...programming based murder mystery...

    As the pointy haired boss slithered down into the depths of the developers' lair, he inadvertently discovered their evil scheme: to correct the PHB's inept plans and deliver a properly functioning system. "I cannot allow this!" he exclaimed. He grabbed a nearby hatchet, snuck up on the unsuspecting programmers and bludgeoned them to death. He then dragged each carcass back to its cubicle and propped it up in the chair, mitts on the keyboard.

    At the next status, it was reported that the staff was not making their deadlines. Senior management wanted proof. The PHB brought them into the cubicle farm only to discover the bodies.

    *ominous Dun dun dunnnnnnnnnn*

    Take it morbius...
  • Benanov 2008-11-12 10:49
    snoofle:
    cbatologin:
    ...programming based murder mystery...

    As the pointy haired boss slithered down into the depths of the developers' lair, he inadvertently discovered their evil scheme: to correct the PHB's inept plans and deliver a properly functioning system. "I cannot allow this!" he exclaimed. He grabbed a nearby hatchet, snuck up on the unsuspecting programmers and bludgeoned them to death. He then dragged each carcass back to its cubicle and propped it up in the chair, mitts on the keyboard.

    At the next status, it was reported that the staff was not making their deadlines. Senior management wanted proof. The PHB brought them into the cubicle farm only to discover the bodies.

    *ominous Dun dun dunnnnnnnnnn*

    Take it morbius...


    Bludgeoning with a hatchet is the real WTF.
  • KD 2008-11-12 10:57
    Congratulations on the promotion Mark, I hope your articles are better than your comics (I'm joking, I love MFD really...)!
  • dkf 2008-11-12 11:06
    Resistance:
    I'd take x * 1.3 * 0.7 over x any time
    Great! More money left for me!

    (x * 1.3 * 0.7 is x * 0.91)
  • Anon 2008-11-12 11:06
    Just replace all mentions of MUMPS with blow job and the story is much better!
  • dhromed 2008-11-12 11:24
    The scene was a three-hour, seemingly unending procession of PowerPoint slides with enough laser pointers to take down an incoming ICBM.


    I am amused.
  • Steve 2008-11-12 11:39
    I guess the question to ask after reading this horror story is: did the system work? And did it work any better after it was audited (modulo removing the credit card numbers, which is certainly a Good Thing, though, given the load of other personal information in the system may have been largely moot from an identity theft standpoint)?

    Sometimes, as ugly as a system might be, if it ain't broke, don't fix it.

    Just sayin'.
  • mjk340 2008-11-12 11:41
    So, working in a red taped filed corporate environment on a proprietary, poorly implemented system is a WTF? I thought this was the model that the entire for-profit IT industry was based on.
  • Fuzzypig 2008-11-12 12:04
    When I read that line about hiving off the numbers "just in case", a chill ran down my spine!

    Nothing I despise more than "job-safers", refusing to document and obsfucate so management won't fire their sorry asses!
  • tragomaskhalos 2008-11-12 12:05
    You've got to love an environment that allows you to create unnamed columns in your database tables. Stitch THAT, maintenance programmers !
  • Valerion 2008-11-12 12:07
    In the mid-nineties I worked tech support for a (then) huge online service/ISP. Think "had been-around-a-long-time-and-not-AOL".

    Anyone working support (tech and customer) could access any credit card number for any member because everything was stored for us to see.

    Of course, nobody ever used an annoying customer's card details to sign up to porn sites. Oh no.
  • Charles400 2008-11-12 12:13
    Bagels and T-shirts... no shit?
  • seamustheseagull 2008-11-12 12:18
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.
  • Edward Royce 2008-11-12 12:42
    cbatologin:
    The real WTF is how this boring article got published. Can't we have some programming based murder mystery or something? Really, nobody cares about MUMPS, we want murder.


    We were waiting for a victim who says he wants a "murder".

    Seeeeeeeen one around here?
  • Mark 2008-11-12 12:43
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.


    If all table names are <= 5 alpha characters then that gives you 32^5 = 33,554,432 different table names. Surely SAP needs more tables!
  • Edward Royce 2008-11-12 12:44
    dkf:
    Resistance:
    I'd take x * 1.3 * 0.7 over x any time
    Great! More money left for me!

    (x * 1.3 * 0.7 is x * 0.91)


    Nobody in accounting ever noticed?
  • Edward Royce 2008-11-12 12:46
    Mark:
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.


    If all table names are <= 5 alpha characters then that gives you 32^5 = 33,554,432 different table names. Surely SAP needs more tables!


    Better yet convert SAP to Chinese or some other ideographic language with 15,000+ characters.

    Bounty of Tables!
  • Daniel 2008-11-12 12:50
    I really don't see the point of analysing MUMPS "tables" as if they were structured like relational databases instead of B* tree's that they are.
  • snoofle 2008-11-12 12:51
    Benanov:


    Bludgeoning with a hatchet is the real WTF.

    Not really; I have something - not really sure what to call it - that has a hatchet blade on one side and what can only be called an 8 inch spike on the other - you could easily bludgeon someone with it and then use the hatchet to ... well, you know ;)
  • Jamie 2008-11-12 12:54
    Let's see:
    - Covert insertion of obfuscated code (or at least, uncommented!)
    - Attempted to hide the data by obscuring the data
    - Attempted to circumvent an action to keep the company from privacy violations, legal problems, and hefty fines


    The Real WTF: Why was he not fired on the spot?
    People get fired for far less than that!
  • ContraCorners 2008-11-12 13:02
    "To summarize, if you’re associating MUMPS with the awful disease of the same name, you’re very close."

    Not hardly, the disease has been nearly eradicated.
  • Jay 2008-11-12 13:06
    Mark:
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.


    If all table names are <= 5 alpha characters then that gives you 32^5 = 33,554,432 different table names. Surely SAP needs more tables!


    If they are alpha characters, where do you get 32 possibilities? What alphabet are you using? Last I checked the Latin alphabet had 26 if only one case is allowed, 52 if we distinguish. Greek has 24. Russian has 33. ...
  • Mattintosh 2008-11-12 13:09
    You said "status"... *chuckle*
  • Anon 2008-11-12 13:21
    Jay:
    Mark:
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.


    If all table names are <= 5 alpha characters then that gives you 32^5 = 33,554,432 different table names. Surely SAP needs more tables!


    If they are alpha characters, where do you get 32 possibilities? What alphabet are you using? Last I checked the Latin alphabet had 26 if only one case is allowed, 52 if we distinguish. Greek has 24. Russian has 33. ...


    Polish and estonian, for example. Mostly the latin alphabet but with a bunch of extra letters and a few missing. I'm sure there are others with the same letter count.
  • Dirk Diggler 2008-11-12 13:43
    snoofle:
    Benanov:


    Bludgeoning with a hatchet is the real WTF.

    Not really; I have something - not really sure what to call it - that has a hatchet blade on one side and what can only be called an 8 inch spike on the other - you could easily bludgeon someone with it and then use the hatchet to ... well, you know ;)
    A hatchet with an 8 inch spike? Is it intended to be a tool or a fighting weapon? I'm looking at a fire axe right now, the spike is only 3-4 inches. You could put your eye out with that thing.
  • Mark 2008-11-12 13:55
    Jay:
    Mark:
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.


    If all table names are <= 5 alpha characters then that gives you 32^5 = 33,554,432 different table names. Surely SAP needs more tables!


    If they are alpha characters, where do you get 32 possibilities? What alphabet are you using? Last I checked the Latin alphabet had 26 if only one case is allowed, 52 if we distinguish. Greek has 24. Russian has 33. ...


    Clearly you had your morning coffee before commenting. I, sir, did not.

    26^5 = 11,881,376

    There. Fixed it. Now someone call SAP, we kan haz lots mor tablez!
  • obediah 2008-11-12 13:59
    Benanov:

    Bludgeoning with a hatchet is the real WTF.


    I'm guessing snoofle is a programmer at Bethesda ( that's a dumbing down of video games zing for the grown ups in the audience ).

    Also, I'm calling shenanigans. If the CASTLE team was able to create and orphan hundreds of such horrible, terrible tables over decades, then surely the code would be riddled with useless references to these tables, nasty side effects, etc. Doing the analysis and testing to safely remove these tables from production would not be a project that one person could step in and do in a few months.

  • the-moss 2008-11-12 14:08
    Epic fail!
  • Dan 2008-11-12 14:15
    Seriously now, you're just effing with my head for sport, aren't you?
  • Dan 2008-11-12 14:19
    Charles400:
    Bagels and T-shirts... no shit?

    I prefer cream cheese myself...

    PS. CAPTCHA = "Eros"....yeah baby YEAH!
  • pointy 2008-11-12 14:20
    Dirk Diggler:
    snoofle:
    Benanov:


    Bludgeoning with a hatchet is the real WTF.

    Not really; I have something - not really sure what to call it - that has a hatchet blade on one side and what can only be called an 8 inch spike on the other - you could easily bludgeon someone with it and then use the hatchet to ... well, you know ;)
    A hatchet with an 8 inch spike? Is it intended to be a tool or a fighting weapon? I'm looking at a fire axe right now, the spike is only 3-4 inches. You could put your eye out with that thing.


    A Pickaxe type tool?
  • Glow-in-the-dark 2008-11-12 14:22
    Valerion:
    In the mid-nineties I worked tech support for a (then) huge online service/ISP. Think "had been-around-a-long-time-and-not-AOL"


    If I recall correctly they serve-d moderately OK from their Compu-ters (and made me go back to BBS use as it was seriously cheaper)..

    Having everything accessible isn't news. I once audited a big law firm which handled gazillion dollar cases. When I took their IT apart I discovered every single senior partner (the ones collecting the real big bonuses) had their harddisk shared at the root "so the techies could fix things easier" - and they bought that line, hook, line and sinker. Needless to say, that was the first to go once we had a support process set up..

    :-)
  • Franz_Kafka 2008-11-12 15:20
    dhromed:
    The scene was a three-hour, seemingly unending procession of PowerPoint slides with enough laser pointers to take down an incoming ICBM.


    I am amused.


    I first read that as enough laser pointers to take down a 747. I'm a bad man.
  • rfsmit 2008-11-12 15:51
    PIercy:
    as for CC card numbers, thats a mistake a 12yo makes when creating scripts for people.

    I find it interesting that you've reviewed sufficient variety of credit card processing code written by twelve year olds to make that assertion.

    Glad to see there was something to laugh at in today's story.
  • pink_fairy 2008-11-12 16:29
    Submarine:
    99,9% uptime means whole 8 hours of downtime per year
    P.S. Freights
    In this case there's absolutely no evidence whatsoever that the 8,754 hours of "uptime" serve any better purpose than the 8 hours of "downtime."

    Uptime? Status!
  • daqq 2008-11-12 17:19
    This code was not written, it grew organnically.
  • campkev 2008-11-12 17:45
    Benanov:


    Bludgeoning with a hatchet is the real WTF.


    Damn, beat me to it
  • NotSoSure 2008-11-12 18:53
    Not really. It's been greatly reduced in the first world, but is still very much a factor in the developing world.

    See: http://en.wikipedia.org/wiki/Mumps
  • Spider-Man 2008-11-12 19:52
    Dr. Octo Barnett is behind the MUMPS? I have to stop Doc Ock before he infects the city!
  • Carnildo 2008-11-12 20:22
    Dirk Diggler:
    snoofle:
    Benanov:


    Bludgeoning with a hatchet is the real WTF.

    Not really; I have something - not really sure what to call it - that has a hatchet blade on one side and what can only be called an 8 inch spike on the other - you could easily bludgeon someone with it and then use the hatchet to ... well, you know ;)
    A hatchet with an 8 inch spike? Is it intended to be a tool or a fighting weapon? I'm looking at a fire axe right now, the spike is only 3-4 inches. You could put your eye out with that thing.


    If you rotate the "hatchet" side 90 degrees, he could be describing an ice axe. Rather fearsome-looking, but not too good for bludgeoning.
  • Alan 2008-11-12 20:34
    And this is why the avegae punter ends up hating and dis-trusting IT types. If I was the manager there they would be changing. I don't care how much red tape.
  • bbmonster 2008-11-12 21:27
    The guys at http://groups.google.com/group/Hardhats?hl=en are really defensive if you say one bad thing about MUMPS.
  • N Morrison 2008-11-12 22:43
    And even if you get it, you will be over it in a few weeks with minor side effects:
    --------------------------
    Symptoms usually last about 10 days and may include:

    Swelling and pain in one or more of the salivary glands. One or both cheeks may look swollen.
    Fever of 101F to 104F.
    Headache, earache, sore throat, and pain when swallowing or opening the mouth.
    Pain when eating sour foods or drinking sour liquids, such as citrus fruit or juice.
    Tiredness, with aching in the muscles and joints.
    Poor appetite and vomiting.
    Swollen testicles or sterility.
    --------------------------
    So as you can see it is much to be preferred to the MUMPS systems.
  • fdr 2008-11-12 23:52
    @dkf - are you sure you're not "tnc"?? ;)

    the whole price calc formula looks like tyson might have tried some code at some point that transferred the remainders of transactions into a personal account. ;)
  • lolwtf 2008-11-13 00:10
    MUMPS is a great example of how good marketing can sell a terrible product. I mean, I've never seen its marketing, but just the fact that people besides its creators are using it says enough.
  • adsfg 2008-11-13 01:22
    seamustheseagull:
    Our SAP system (cue: "TRWTF is SAP") has over 70,000 tables, with the vast majority of table names having five characters or less.

    I refuse to believe that you could gather any group of SAP developers who can tell what even 10% of those tables are for.
    SAP is old. Real old. It's so damn old, the dropdown was not invented when it was initially released. Neither was multiline textboxes. You should be lucky that you have table names with five characters. Do you know how much memory that uses?
  • Rob 2008-11-13 02:04
    Surprise, surprise! It's possible to create a real mess in Mumps just like in any other language and database, and someone can be out of control in a department. I dare say that with a few minutes dregding I could come up with similar horror stories related to Java, .Net, PHP, Python etc etc.
  • dkf 2008-11-13 03:03
    fdr:
    @dkf - are you sure you're not "tnc"?? ;)

    the whole price calc formula looks like tyson might have tried some code at some point that transferred the remainders of transactions into a personal account. ;)
    A good question. No. While it would have meant I'd have had the opportunity to get a lot of money, it would have also meant that I'd be completely mad due to MUMPS. (I reserve my madness for WSDL…)
  • Bas 2008-11-13 03:21
    I want status!
  • GalacticCowboy 2008-11-13 06:59
    snoofle:
    Benanov:


    Bludgeoning with a hatchet is the real WTF.

    Not really; I have something - not really sure what to call it - that has a hatchet blade on one side and what can only be called an 8 inch spike on the other - you could easily bludgeon someone with it and then use the hatchet to ... well, you know ;)


    And which definition of "bludgeon" would this be, then? "A short, heavy club with one end weighted, or thicker and heavier than the other", "to strike or knock down with a bludgeon", or "to force, coerce or bully"? Anyone who's seen CSI at least once has heard the term "blunt force trauma"... I don't think either side of your hatchet thingy would qualify as a bludgeon, nor would the victim be "bludgeoned". Sounds more like you're looking for "hacker".
  • Smash King 2008-11-13 07:04
    Rob:
    Surprise, surprise! It's possible to create a real mess in Mumps just like in any other language and database <snip>
    Yeah yeah we know it. "There's no language that will prevent a bad programmer from writing bad code" et al.

    To which I answer "There is no way a good programmer will write good code if it is in MUMPS"
  • T $ 2008-11-13 07:18
    Having...Mandatory Fun Day...withdrawals...M...F...D...
  • mauhiz 2008-11-13 10:29
    - this is MUMPS Madness
    - NO, THIS IS SPARTA
  • Worf 2008-11-13 11:42
    Franz_Kafka:
    dhromed:
    The scene was a three-hour, seemingly unending procession of PowerPoint slides with enough laser pointers to take down an incoming ICBM.


    I am amused.


    I first read that as enough laser pointers to take down a 747. I'm a bad man.


    It only takes 1, actually to bring down an airliner. You just have to dazzle the pilot flying (not necessarily the captain - could be the first officer) with it and there may not be enough time to react or go around. Or to be doubly sure, do both pilots. More effective at night too, since the light will seriously screw with the night vision required to land.

    That's why it's not only dangerous, but the FAA takes a very dim view of people doing so at airports (I believe it's a criminal offense, even).

    Taking down an ICBM, though, takes more lasers since dazzling the "eye" of it will just make it go off course but it still will explode.
  • Lutikka 2008-11-13 12:12

    So it's not possibly to create such a system with some other development platform, than MUMPS? Seems to me it was just a badly designed, not really the platform's fault.


  • iToad 2008-11-13 16:32
    Steve:
    I guess the question to ask after reading this horror story is: did the system work? And did it work any better after it was audited (modulo removing the credit card numbers, which is certainly a Good Thing, though, given the load of other personal information in the system may have been largely moot from an identity theft standpoint)?

    Sometimes, as ugly as a system might be, if it ain't broke, don't fix it.

    Just sayin'.


    Unfortunately, some systems are so ugly that if they do break, you can't fix them.
  • OBloodyHell 2008-11-14 02:21
    > To give a little more “real world” example of the horror that is MUMPS, start by taking one part [[International Obfuscated C Code Contest]], a dash of Perl, two heaping measures of FORTRAN and SNOBOL, and the independent and uncoordinated contributions of dozens of medical researchers, and there you go.

    Well, there you go.

    A Real Programmer would have devised it to use the APL character set.

    Ahhhh, SNOBOL. If Edsger Dijkstra ever wound up as a programmer in Hell, he would be forced to program in SNOBOL, in which one of the five optional sections of EVERY executable statement is a Goto based on the Success/Fail rating of the statement's execution (Not a criticism -- SNOBOL was my favorite language ever, with APL a close second).
  • Rob 2008-11-14 02:35
    Utter nonsense.
  • Rob 2008-11-14 03:05
    Smash King:
    Rob:
    Surprise, surprise! It's possible to create a real mess in Mumps just like in any other language and database <snip>
    Yeah yeah we know it. "There's no language that will prevent a bad programmer from writing bad code" et al.

    To which I answer "There is no way a good programmer will write good code if it is in MUMPS"


    This is unfounded nonsense. Anyway for a somewhat more reasoned assessment see http://www.outoftheslipstream.com/node/125
  • Dredge Slug 2008-11-14 08:11
    N Morrison:
    And even if you get it, you will be over it in a few weeks with minor side effects:
    --------------------------
    Symptoms usually last about 10 days and may include:

    Swelling and pain in one or more of the salivary glands. One or both cheeks may look swollen.
    Fever of 101F to 104F.
    Headache, earache, sore throat, and pain when swallowing or opening the mouth.
    Pain when eating sour foods or drinking sour liquids, such as citrus fruit or juice.
    Tiredness, with aching in the muscles and joints.
    Poor appetite and vomiting.
    Swollen testicles or sterility.
    --------------------------
    So as you can see it is much to be preferred to the MUMPS systems.



    Hmmmm...programming hell or sterility. Being of the male gender, I'll opt for programming hell over sterility!
  • Duke of New York 2008-11-14 13:50
    [quote user="Rob"][quote user="Smash King"][quote user="Rob"]"There is no way a good programmer will write good code if it is in MUMPS"[/quote]

    This is unfounded nonsense. Anyway for a somewhat more reasoned assessment see http://www.outoftheslipstream.com/node/125[/quote]
    So the way to write good code in MUMPS is... not to write it MUMPS? You'll have to do better than that.
  • Duke of New York 2008-11-14 13:51
    Let's try that again...
    Rob:
    Smash King:
    "There is no way a good programmer will write good code if it is in MUMPS"

    This is unfounded nonsense. Anyway for a somewhat more reasoned assessment see http://www.outoftheslipstream.com/node/125

    So the way to write good code in MUMPS is... not to write it in MUMPS? You'll have to do better than that.
  • jt 2008-11-14 16:33
    Does MUMPS also cause "swollen testicles or sterility"? Or does it just make you wish that that was your worst problem?
  • method1 2008-11-15 12:46
    If you follow the above links, you can see that an GPL Affero implementation of MUMPS is being touted as another "Internet-scale" database like simpleDB & AppEngine. It does make sense that, as a hierarchical (rather than relational) database it would be ideally suited to XML-style data. Whilst MUMPS looks like a horrible language to develop in, the excoriation delivered in these comments is probably excessive.
    I'm sure its no worse than its relatives of the same vintage.

    However,the WTF related here seems like just the sort of thing that can happen when large scale development is based on a tightly controlled closed-source archaic language.Any community that grows up can become like a group of high priests or magicians, invoking their "black arts" and "cargo cult" programming, trying to know the unknowable.
    I've never worked with SAP, but all those big old enterprisey systems look the same to me."Jehovah" would be a good name for one of those products.
  • Anonymous Coward 2008-11-17 06:48
    To be fair; bad design, bad naming conventions, bad coding are hardly unique to MUMPS applications. All examples in the "interesting findings" part could have been picked up from any system which has evolved over the past twenty years - regardless of the implementation tools. It would've been interesting to see some MUMPS-specific problem examples of the implementation.
  • Random832 2008-11-17 14:00
    Mark:
    If all table names are <= 5 alpha characters then that gives you 32^5 =


    What alphabet are you using?
  • Steve X 2008-11-18 14:38
    Great. Now that they have a web server written in MUMPS, they can write a server-side MUMPS parser, so all of their web apps can be written in MUMPS as well.


    The MUMPS webserver is now the central core of the CASTLE application. Large quantities of badly-written MUMPS code that used to serve up screens of data via telnet now serve up HTML. Most of the functions that do so will both retrieve and print data, preventing their re-use in other parts of the application.

    did tyson murder steve after learning that steve had deleted his stolen credit card stash?


    Steve lives, cause Tyson is such a nice guy and all.

    The example given of the loop ....


    You're correct, it's not a loop. It's code inside a loop that was going through clients and notes. It was inserted right before the code that destroys the credit card number.

    I guess the question to ask after reading this horror story is: did the system work? And did it work any better after it was audited (modulo removing the credit card numbers, which is certainly a Good Thing, though, given the load of other personal information in the system may have been largely moot from an identity theft standpoint)?

    Sometimes, as ugly as a system might be, if it ain't broke, don't fix it.


    Yes, the system worked even though about 60% of it's tables were no longer in use. We're in the process of removing them from production. So far, about 50 tables have been removed without incident. We're still categorizing the rest of the unused ones to see what needs to be archived to CD before deletion.

    In a related analysis project, we discovered that over half the code isn't being used either. I removed 1300 source files that contained no code that was still in-use. Of the remaining 900 source files, it's quite likely that less than half the functions in them are used.

    There's absolutely no sense of reverence for the production system; neither the tables on it nor the code checked out onto it are considered carefully. In fact, it was common practice until a few months ago to create new tables on the production system and THEN copy them over to the test system to work on.

    I really don't see the point of analysing MUMPS "tables" as if they were structured like relational databases instead of B* tree's that they are.


    Although the database is technically stored as B*Trees, the Fileman DBMS creates a relational database structure on top of that. Aside from some hacks that make use of the B*Tree structure to allow you to have some features that are widely available in other DBMS systems (cascading deletes, one-to-many relationships), it's still basically a relational database with tables.

    The Real WTF: Why was he not fired on the spot?
    People get fired for far less than that!


    Cause he's a really nice guy and all.
  • turnip 2009-01-22 12:34
    In re: bad mathematics --
    In the years before I was a MUMPS programmer (which is to say, before 1985), I had a co-operative education job with a company that made satellites. I discovered in the code (Fortran) a subroutine (called from all over) to find the difference between two signed numbers. How did it do it? It found the difference between the absolute values of the two numbers, then made the result positive if the two numbers had the same sign, negative if they were different. I couldn't believe it! This program would believe that -4-3=1! And this when Fortran is perfectly happy to subtract signed numbers. I triple-checked to make sure I wasn't seeing things, then brought it up to my boss, who agreed it needed to be fixed. This is a program they had been using for more than a decade. The purpose of the difference calculation? To see how far an instrument shifted pre- and post-(simulated) launch, to make sure things wouldn't, say, fall off. Fortunately, it appears to have never made a difference in real life, but it could have meant $$$$$$.

    The point is, bad mathematics and brain hiccups are possible in any language, not just MUMPS, no matter how many pairs of eyes are overseeing the code (and they, like my current MUMPS shops, had many).
  • Ponedonkey 2009-01-27 12:42
    I would totally be down for some random programer in my company grabbing thousands of phone numbers and holding on to them forever.
  • Ponedonkey 2009-01-27 12:43
    Ponedonkey:
    I would totally be down for some random programer in my company grabbing thousands of phone numbers and holding on to them forever.

    Oh snap, I put phone numbers insted of credit card numbers.
    I need some sleep.
  • huojia 2009-03-02 01:09
    &nbsp;&nbsp;
    货架racking.&nbsp;&nbsp; 仓储货架
    南京货架设备要产品包括:重型货架
    ,阁楼货架,超市Shelf,重量型货架,横梁式货架,驶入式货架... 仓储笼
    货架的形式与材料 · 立体仓库 · 货架厂
    物流规划设计的步骤与程序(货架的设计... 中国物流行业呈现三足鼎立抢市场 · 亚洲第三方物流的现状和发展 ... 托盘
    抽出式货架系列 · 重力式 货架/推入式货架钢托盘
    移动式货架 · 阁楼式货架 · 悬臂式货架
    系列 长件物料储存货架&nbsp;货架公司
  • Chasmoe Brown 2009-03-13 00:23
    I've seen this type of thing before, not just in IT, and I fail to see how MUMPS is the culprit here.
  • Joey Rukkus 2009-03-31 10:15
    I'm not sure i understand how MUMPs is the part of this equation that sucks. It sounds to me that the programmers were shit. Same with "A case of the mumps" story. Both sound like the company and the programmers are a bunch of failures. If you are good enough to use MUMPs correctly then its fairly easy. I use it everyday for a large Medical company and I love it.
  • Chris 2009-06-09 07:50
    All programming languages have their upsides and downsides. The fact that this application was obviously badly designed is down to the application designers, not the programming language.

    MUMPS is an old language, developed in the 60s. That doesn't make it a bad thing in itself - Unix is about the same age, as are the protocols that drive the Internet, and we're not about to throw them out any time soon. It does mean, of course, that there are lots of applications out there that were build 40 years ago and have been added to piece by piece to end up with monstrosities like the ones described above.

    But let's put it in context. In the 1970s, technology was expensive. A lot of the atrocious features attributed to MUMPS date from a time when saving a byte or two of memory was all important. This led to one-character abbreviations, poor data design (repeating groups rather than a decent hierarchical design) and cramming several statements on one line (that saves a whole two bytes per statement - CR/LF). This lead to code that ran quickly on the hardware available (usually a PDP/11 in those days) but was difficult to maintain.

    Most of those features are still available for backward compatibility but it is possible to write efficient but readable code and implement good database design in MUMPS. Indeed, the hospitals my company deals with have been horrified on moving to shiny "new" hospital systems costing them millions of pounds (which often turn out to be poorly designed systems with some pretty front ends) that the six PCs that are currently running the hospital applications with a database of around a million patients quite happily and efficiently will need to be replaced with about four times as many servers at vast cost, and that processes that used to take seconds to run cause the department to grind to a halt when they "upgrade" to the shiny and expensive new system.

    Our data extract (pulling off all the data from a large system into a flat file format to be imported into the new system) took us about 12 hours to run under MUMPS running on a very old legacy Unix box. On a one-year old PC running Cache, it took about 20 minutes. The suppliers of the new system said they would need two weeks to load up the provided files, even though they were in the format that *they* specified.

    The fact is that MUMPS does what it was designed to do very well. It's a good, efficient database, and extremely scaleable - from one-user systems handling a few thousand records to vast thousand-user systems handling the entire medical history of over a million patients.

    It has some terrible features too - namely that database design is entirely down to the application developer. At least with any relational database you know what the fields are called (even if the names aren't very helpful). In MUMPS, you don't even know what the field delimiter is, let alone the names of a field - so maintaining old applications without any documentation is a nightmare: a patient demographic record may look like this, for instance:

    ^LCF(309887)=MN 2600314`EINSTEIN`ALBERT`906423

    The fact that the first character is the sex, the second the NHS status, the third a deceased flag, the fact that 2600314 means 14 March 1960, and that 906423 is a pointer to another global - none of that is inherent. That structure was designed years ago by an application developer, who if they forgot to document it (or more likely the documentation is printed out on 30 year old lineprinter listings and is sitting in a cupboard somewhere in the bowels of the hospital) means that trying to work out what is going on is impossible. It's very easy to knock up code in MUMPS, and very difficult to maintain it if it's not well written - and it's very easy to write BAD code in MUMPS. There's no database integrity either - the application is responsible for creating and maintaining indexes.

    As for Cache, I'm dubious. MUMPS is an efficent but old-fashioned green-screen programming language, and it's good at what it does - dealing efficiently with massive databases with highly variable length data (patient records are excellent examples - Mrs. Smith went to hospital once in 1989 and had a single blood test; Mrs. Jones practically lives in hospital and has had 30 operations, 1000 blood tests and a huge long history to be recorded). Trying to rebrand it as "post-relational" and sticking a load of clunky and unintuitive layers on top of it and pretending it's a web-based technology is disingenuous.
  • a mumps guy 2010-06-17 09:51
    350,000 lines? That seems pretty trivial to me.
  • cindy 2011-01-24 05:35
    find for all kinds of watches and handbags .
    A Lange & Sohne watches
    Audemars Piguet watches
    Ulysse Nardin watches
    Vacheron Constantin watches
    Michele Watches
    Ebel watches
    And so on

    http://www.replica038.com
  • Iver Erling Årva 2013-01-10 03:49
    I have been a programmer since 1984 and Mumps is by FAR the most effective, compact, easy to change programming language I have ever come across. People saying otherwise simply doesn't know how it is to program in Mumps. There is of course a learning curve and you need to get used to the abbreviated commands, but once you have this covered there's simply no contest. Typically one command in M(umps) is replaced by 10-20 in other languages. It is SO frustrating to have to remember all those commands. I have found myself writing libraries that emulates the M(umps) commands when using languages like C++, VB or others, simply to make my program code more compact and effective. So that! And the database speed... wow! Oracle and MS SQL go hang yourselves!
  • Roger Foco 2013-11-15 13:22
    It is not the fault of the language or database that someone is an idiot analyst. The same guy or girl could have just as easily screwed up any other application in another programming language.
  • Roger Foco 2013-11-15 13:34
    I concur, I have worked with all of the above.

    Oracle and MS SQL databases are not even out of the gate and Global DB (MUMPS DB) is already finished, gone home, had dinner and is comfortably watching a movie.

    Nothing else comes close. That is why the largest banks and trading institutions in the world use it - for its speed, reliability and scalability. Additionally, here is another cost saver, the database is self maintaining, where the ratio of production databases to DBAs is 100 to 1.

    With InterSytems Cache (OOD/OOP there is no limit and no equal).

    Case Closed.