Please create a I Hate Microsoft Club too



  • @Groaner Oh, boy, if we want to get into exporting data to a CSV spreadsheet, I think that is one thing that Oracle has done (slightly) better than Microsoft, but only because Oracle can properly delimit their columns and M$ doesn't do anything about that, so users have to work around it by supplying their own escaping and delimiting of data.


  • :belt_onion:

    @Groaner said in Please create a I Hate Microsoft Club too:

    I love how this turned into an I Hate Oracle thread.

    See my implied INB4:

    @darkmatter said in Please create a I Hate Microsoft Club too:

    Unpossible.
    Unless Microsoft starts storing empty strings as NULL in MSSQL or C#, they are not even close.
    Creating those extra clubs would only result in the Oracle guys posting about Oracle to show you why those products/companies are not as bad as Oracle. So it might as well go in the Oracle Hate club area.



  • @djls45 said in Please create a I Hate Microsoft Club too:

    @Groaner Oh, boy, if we want to get into exporting data to a CSV spreadsheet, I think that is one thing that Oracle has done (slightly) better than Microsoft, but only because Oracle can properly delimit their columns and M$ doesn't do anything about that, so users have to work around it by supplying their own escaping and delimiting of data.

    Importing, on the other hand...

    I can't remember the exact details, but a few years ago I ran into an issue with Oracle's CSV import tool where it was completely impossible to specify a certain combination of delimiter and quote character.


  • kills Dumbledore

    @boomzilla said in Please create a I Hate Microsoft Club too:

    But I don't see it as that big a deal, either, in practice

    Blub blub blub


  • ♿ (Parody)

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    @boomzilla said in Please create a I Hate Microsoft Club too:

    But I don't see it as that big a deal, either, in practice

    Blub blub blub

    Exactly! That's why I was asking for examples. No one else has managed to explain this...do you think that you can?



  • I tend to be lucky and not run into whatever worst-thing-everTM it is this month, but last week Skype started to update itself while an incoming call was ringing :(


  • Banned

    @boomzilla your insistence that having meaningful empty user-provided strings is :doing_it_wrong: reminds me of that one guy who told me no sane person would ever want to post an MD5 checksum of asterisk character in bold italics, so they don't feel obliged to handle that.


  • ♿ (Parody)

    @Gąska said in Please create a I Hate Microsoft Club too:

    @boomzilla your insistence that having meaningful empty user-provided strings is :doing_it_wrong: reminds me of that one guy who told me no sane person would ever want to post an MD5 checksum of asterisk character in bold italics, so they don't feel obliged to handle that.

    Sounds like you might be having a stroke. I recommend 911.

    But in case you're still healthy and just having reading problems: Do you know how these people are distinguishing user entered empty strings and user entered nulls?


  • kills Dumbledore

    @boomzilla a field the user leaves blank is '', A field they never had the option to full in is NULL.

    Say I have a system that manages foos. After a while, we add a textual bar field to the foo object. Since no pre existing foos had any bar data, the field is pre filled with NULL. They may have bar data but it's unknown since the question was never asked.

    Later, more foos have been added to the system. Many have a value in bar, but for some there is no bar, so that field was left blank when filling them in, so their bar value is ''. If I want to compare two foos and see if their bar values are the same or not, there is a difference between "this foo has a bar value of ''" and "this foo never had its bar filled in".

    Later still, I want to make sure that every foo has an up to date bar value, so I send an email to everyone who maintains a foo with a bar value of NULL, warning them that they should update their foo as they haven't set a bar value. I can avoid sending this to people who have explicitly set their bar to '', because I'm searching for bar IS NULL, not bar = ''

    There are ways around this in Oracle, and any well designed system where it was likely for this sort of thing to come up would have been set up so the maintainers don't necessarily see it, but it would be more work having to emulate a distinction that Oracle simply doesn't have, hence blub


  • ♿ (Parody)

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    @boomzilla a field the user leaves blank is '', A field they never had the option to full in is NULL.

    So the middle name example that everyone trots out is bogus?

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    There are ways around this in Oracle, and any well designed system where it was likely for this sort of thing to come up would have been set up so the maintainers don't necessarily see it, but it would be more work having to emulate a distinction that Oracle simply doesn't have, hence blub

    No, you're still not explaining how this works. The examples people are giving are when people have had an opportunity to fill out the data and have left it blank. For some reason. You still haven't explained how a user tells you the difference between "skipped a field" (maybe accidentally, like their browser autocompleted most but not all fields) and "this thing should be blank."

    Look, stop focusing on Oracle. That's besides the point! How does the form work? If this is so critical and everyone does it why can't anyone describe how they do it?

    Let's say that the field is marked and validated as a required field. Because like you said, "Later still, I want to make sure that every foo has an up to date bar value." A user's actual bar value is "". How does he enter that on your form?



  • @boomzilla said in Please create a I Hate Microsoft Club too:

    So the middle name example that everyone trots out is bogus?

    Depends on whether the empty string is a valid middle name or not. Either you don't validate what the user enters for their middle name, or you do validate it, and if middle name is optional but must be validated, a validated middle name left blank should be stored as null in the database.


  • ♿ (Parody)

    @LB_ OK, so there's a second, "Review this information" step and if they still leave it blank then it's an empty string?



  • @boomzilla three separate points in time.

    1. Foo doesn't exist in the form.
    2. Foo added, but not required. All entries before point 2 have null in for Foo. Users that don't respond to Foo have an empty string.
    3. now. Foo is still not required, but we want everybody to have decided to give a value or leave it blank intentionally, that is, get rid of all nulls. How do we do that if empty on purpose and null are stored identically?


  • @boomzilla I agree the middle name example is not a good example, because null vs empty string is an implementation detail up to the developer. But the example of adding a new field that didn't exist before is a definitive case where null and empty string are different.


  • kills Dumbledore

    @boomzilla said in Please create a I Hate Microsoft Club too:

    You still haven't explained how a user tells you the difference between "skipped a field" (maybe accidentally, like their browser autocompleted most but not all fields) and "this thing should be blank."

    I haven't said that's an issue, so I'm not sure why you'd want me to explain it.

    And why are you focusing on things people fill out in forms? There are other ways of getting data into databases.

    Do you also think that any string object in C#/Java that's set to "" should immediately be changed to null?


  • ♿ (Parody)

    @Benjamin-Hall said in Please create a I Hate Microsoft Club too:

    now. Foo is still not required, but we want everybody to have decided to give a value or leave it blank intentionally, that is, get rid of all nulls. How do we do that if empty on purpose and null are stored identically?

    The closest thing I can think of is where we have users validate their information once a year. We store the dates when they did this, so I'd know if their account has been validated. But I'm still not sure why I care about the distinction between null and empty string, at least in this case. I'm probably too focused on things like names because those were the given examples and it's something to which I can relate.

    But backing up a bit, the validation date is important to me for a variety of reasons, so I can use that to reason about what changed in the form, I suppose.

    @LB_ said in Please create a I Hate Microsoft Club too:

    @boomzilla I agree the middle name example is not a good example, because null vs empty string is an implementation detail up to the developer. But the example of adding a new field that didn't exist before is a definitive case where null and empty string are different.

    Yeah...I'm just having a difficult time trying to understand the real use cases here. I don't recall needing to solve this dilemma or caring about it. And I am using Oracle, so if it were a real problem then presumably I'd have needed to solve it.

    And, INB4 @Jaloopa again, it's a self admitted case of blub-like apathy. But maybe some people just really care about getting your middle name right.


  • ♿ (Parody)

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    @boomzilla said in Please create a I Hate Microsoft Club too:

    You still haven't explained how a user tells you the difference between "skipped a field" (maybe accidentally, like their browser autocompleted most but not all fields) and "this thing should be blank."

    I haven't said that's an issue, so I'm not sure why you'd want me to explain it.

    It seems to be the issue with the middle name example. Or certainly an issue with making assumptions about "" vs null.

    And why are you focusing on things people fill out in forms? There are other ways of getting data into databases.

    Sure. And a lot of those don't have the ambiguity of user entered data. But people enter their names all the time, and everyone likes to talk about middle names.

    Do you also think that any string object in C#/Java that's set to "" should immediately be changed to null?

    You have that backwards. I'd prefer null to be changed to "" . Of course, I have a helper method that checks for either of those conditions, because in my system they're synonymous.



  • @boomzilla
    I think you've done a pretty thorough job of burning down the middle name strawman. But there are some pretty legitimate uses for "this field has UNKNOWN data" as a distinct value from "this field has NO data", especially in data warehousing and schema changes, as outlined above.

    I could probably get by without NULL in string/integer fields. It would be more of a pain in datetime fields (and I have no idea what Oracle does in those fields anyway, since I use the superior MS-SQL anyway).


  • kills Dumbledore

    @boomzilla said in Please create a I Hate Microsoft Club too:

    Of course, I have a helper method that checks for either of those conditions

    .net has one built in. String.IsNullOrEmpty()

    @boomzilla said in Please create a I Hate Microsoft Club too:

    because in my system they're synonymous.

    So you are acknowledging the possibility of a system where they're not? And presumably you realise that an Oracle backend on such a system would mean having to work around the fact that it doesn't acknowledge that possibility


  • ♿ (Parody)

    @izzion said in Please create a I Hate Microsoft Club too:

    But there are some pretty legitimate uses for "this field has UNKNOWN data" as a distinct value from "this field has NO data", especially in data warehousing and schema changes, as outlined above.

    Yeah, I admit that I don't have a lot of experience there, which is partly why I'm asking about the sorts of situations where someone would care about this. I'm trying to think of a place in my system where it makes a difference but I'm not coming up with anything.

    @izzion said in Please create a I Hate Microsoft Club too:

    I could probably get by without NULL in string/integer fields. It would be more of a pain in datetime fields (and I have no idea what Oracle does in those fields anyway, since I use the superior MS-SQL anyway).

    Uh...now I'm confused. Everyone has null in strings and integers, right (explicitly non-nullable columns excluded). Can't MS-SQL have a null date/time field? Does it also have an empty-string equivalent date?



  • @boomzilla You're making a mistake that a lot of inexperienced software engineers make - tightly coupling the data model to the user interface. When developing your data model, you should never ask how something will be presented to the user. The data model should only be designed to store the data for your system as completely, accurately, and consistently as possible. If you get something wrong in the design of your data model, it can be a major project to fix it, since it potentially affects every part of the system that depends on it. Making changes to the presentation layer, on the other hand, is generally pretty straightforward, since nothing else depends on it.

    This is why the MVC paradigm easily became so popular. It's what any competent software engineer, who learned about separation of concerns back in school, would naturally do.



  • @boomzilla One case I can imagine--

    Take a user survey that asks something along the lines of "How would you rate X?" and then a second question "Optionally explain your rating?"

    • Version 1 only had the numeric rating question.
    • Version 2 introduced the free-response explanation. It's optional, so leaving it blank is a valid answer. Users who answered version 1 have null for that answer (they weren't asked the question so they never had a chance to answer it).
    • Now we want to do statistics like "What percentage of the people who rated X 3 or lower did so because of Y?" If you include the Version 1 answers in the "not because of Y" category, you're making an error and messing with the data unjustifiably. You could remove all blank or null answers from the pool, but that can screw with the statistics as well (assuming the statistical question is better worded than my lazy attempt). Without a way to distinguish null (meaning "wasn't asked the question") from string.Empty, your statistics have holes.

    Note--I'm neither a statistician nor a data warehousing expert, so this example may have flaws. But it's an obvious one that doesn't seem to suffer from the issues with names (which I agree don't really fit the problem here).


  • ♿ (Parody)

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    So you are acknowledging the possibility of a system where they're not?

    :wtf: are you talking about? I never said otherwise.

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    And presumably you realise that an Oracle backend on such a system would mean having to work around the fact that it doesn't acknowledge that possibility

    Have you been reading the thread? Obviously...if I cared. I've been asking two basic questions:

    1. Why should I care?
    2. How do you identify this situation from user input?

  • ♿ (Parody)

    @Dragnslcr said in Please create a I Hate Microsoft Club too:

    You're making a mistake that a lot of inexperienced software engineers make - tightly coupling the data model to the user interface.

    No, I'm absolutely not. I'm asking how to make the user interface work with the data model.

    I mean, I'm also questioning why this is an important part of a data model. And I understand that some of my thinking is at least partly conditioned by my environment, which is why I'm asking people to help me feel their pain of differentiating unknown vs empty data.


  • ♿ (Parody)

    @Benjamin-Hall said in Please create a I Hate Microsoft Club too:

    Now we want to do statistics like "What percentage of the people who rated X 3 or lower did so because of Y?" If you include the Version 1 answers in the "not because of Y" category, you're making an error and messing with the data unjustifiably. You could remove all blank or null answers from the pool, but that can screw with the statistics as well (assuming the statistical question is better worded than my lazy attempt). Without a way to distinguish null (meaning "wasn't asked the question") from string.Empty, your statistics have holes.

    This seems like a case where I don't care whether they had a chance to enter data or not. If they did or didn't enter anything in the free text, I still don't have any information on why they made that rating.

    By the logic of the empty-stringers, would I assume they had no reason for their rating and were just clicking at random?



  • @boomzilla Maybe, but there are many statistics where introducing extra noise is a bad thing. Often in research the assumptions drive the results. There also may be legal issues (although those may be better solved by including an explicit waver item in the form).

    What I'm trying to say is that it's not all about forms and UI. The UI is secondary. Often the data comes from paper forms or transcriptions of verbal conversations. Regularizing data is painful and often requires knowing whether that data is absent on purpose or not. It's why in contracts you see "this space left intentionally blank." I'm dealing with getting a mortgage currently and have seen plenty of those. This is a real world problem, not just an electronic form entry issue.



  • @boomzilla
    I guess I mis-skimmed the thread, if Oracle supports NULL in string fields, since I thought that was how we got to :kermit_flail:


  • ♿ (Parody)

    @Benjamin-Hall said in Please create a I Hate Microsoft Club too:

    What I'm trying to say is that it's not all about forms and UI.

    Yeah, I get that. It was just a follow up to the conversation. Everyone is telling me how critical this distinction is, so I wondered how they dealt with it from user data based on the stuff I was reading.

    @Benjamin-Hall said in Please create a I Hate Microsoft Club too:

    Often the data comes from paper forms or transcriptions of verbal conversations. Regularizing data is painful and often requires knowing whether that data is absent on purpose or not. It's why in contracts you see "this space left intentionally blank." I'm dealing with getting a mortgage currently and have seen plenty of those. This is a real world problem, not just an electronic form entry issue.

    Right. And I assume this is where some final validation comes in handy. The electronic equivalent of initialing and signing a contract. And if stuff is important, you store that (similar to what I mentioned about our users validating their information periodically). Relying on implementation details of the database for empty string vs null seems like a less reliable and auditable method for this sort of thing to my mind.

    But I also think people are nuts for doing all of their DB work through stored procedures.



  • @boomzilla True enough. It is a sensible implementation detail though (except on Oracle's part. They can burn in hell).


  • ♿ (Parody)

    @Benjamin-Hall A combination of contrariness and possibly Stokholm syndrome on my part makes me happy it is so, if only for reactions like yours.



  • @boomzilla said in Please create a I Hate Microsoft Club too:

    I'm just having a difficult time trying to understand the real use cases here

    Consider a company that has finally decided to sacrifice a few trees for its less tech-savvy customers, and now wants to offer to send snail mail. You add a new address field to the database and initialize it with nulls. Then, when users log in, you check if the field has a value, and if it's null, you direct them to a form where the address is labeled as optional. They can submit an empty string or an address, and either way the field won't be null anymore and thus they won't get prompted to enter an address every time they log in. Think of it as a tri-state:

    1. null = prompt for address
    2. empty string = don't send snail mail
    3. other string = do send snail mail

    You might present it to the user with a checkbox in the form, but storing their address when they have no intent to receive snail mail is weird.


  • ♿ (Parody)

    @LB_ said in Please create a I Hate Microsoft Club too:

    You might present it to the user with a checkbox in the form, but storing their address when they have no intent to receive snail mail is weird.

    Yeah, I would think an explicit opt-in would be better. Then you know if that becomes a required field or not and you have an explicit field about them wanting snail mail, which is better than relying on the address not being an empty string when you want to send something.

    You're making this data do double duty, which is kind of OK when it's all fresh in your head and you know all the inferences that're supposed to be made about it. This is what I was referring to as a dangerous practice.

    Some developer is going to come along and not be aware of that and wonder why adding an address for a user caused other things to happen and then he'll submit it to the front page and the authors will mangle the story so that it becomes about the middle name but I won't care because who reads the front page these days?


  • Discourse touched me in a no-no place

    @boomzilla said in Please create a I Hate Microsoft Club too:

    because who reads the front page these days?

    While not technically the front page...

    0_1498138689300_25f6e6ab-316e-4268-9445-9df95d01164e-image.png


  • ♿ (Parody)

    @PJH Someday we'll get around to installing @NedFodder's front page plugin.



  • @boomzilla said in Please create a I Hate Microsoft Club too:

    You're making this data do double duty

    That's the entire purpose of null in every language and data storage format ever. Some people say null was a mistake...



  • @LB_ said in Please create a I Hate Microsoft Club too:

    @boomzilla said in Please create a I Hate Microsoft Club too:

    You're making this data do double duty

    That's the entire purpose of null in every language and data storage format ever. Some people say null was a mistake...

    And they were wrong. Next debate people.


  • :belt_onion:

    @LB_ said in Please create a I Hate Microsoft Club too:

    That's the entire purpose of null in every language and data storage format ever. Some people say null was a mistake...

    That seems to be @boomzilla's position. And I think I largely agree with it by this point. In the example of no address yet/opted-out/opted-in, I'd have a flag and a text field, because it seems like the less potentially ambiguous the data, the better. You never know when you're going to have to migrate to or interoperate with a data source with different semantics.

    On the middle-name example, I have this theory that the whole government runs on Oracle (I mean, I kind of already knew that), as exemplified by every form I know of requiring "NMN" for no middle name vs. no value, and NONE for fields that are required but have no value in practice.


  • ♿ (Parody)

    @LB_ said in Please create a I Hate Microsoft Club too:

    @boomzilla said in Please create a I Hate Microsoft Club too:

    You're making this data do double duty

    That's the entire purpose of null in every language and data storage format ever. Some people say null was a mistake...

    You've gone to far there. Sure, it's reasonable to have null and empty address be distinguishable. I'm not making that argument. I'm saying that it's wrong to have that distinction also stand in for..."Does the user want mail."

    For instance: Today, you only want the address to send them junk mail or whatever. But maybe next month there's another reason you need it (the actual reason doesn't matter, here). So they enter their address and then suddenly they start getting your junk mail but they never opted in!

    So...you've provided yet another case where I don't really care if the address is null or empty. They're effectively the same thing to me, and doing what you advocate is :doing_it_wrong: at least for the reason I gave above.



  • @boomzilla ah, my example still works in that case no matter what or how many things the address is used for. Just provide a checkbox for each, and the null vs empty difference still applies. It was the empty vs not-empty difference you didn't like.


  • ♿ (Parody)

    @LB_ said in Please create a I Hate Microsoft Club too:

    It was the empty vs not-empty difference you didn't like.

    Well, it's not that I don't like it, exactly. I just don't see why it matters. The distinction is overwhelmed by other factors. Any of those checkboxes or whatever would indicate that they need an address, so I'm presuming an empty address is just as invalid as a null address.

    If none of the boxes are checked, then I still don't care, because I'm not planning on using the address anyways.



  • @boomzilla null just means the user has yet to be asked. Empty means they were asked and chose not to provide an address, which would just make the checkboxes disabled / ignored.



  • @boomzilla said in Please create a I Hate Microsoft Club too:

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    @boomzilla a field the user leaves blank is '', A field they never had the option to full in is NULL.

    So the middle name example that everyone trots out is bogus?

    @Jaloopa said in Please create a I Hate Microsoft Club too:

    There are ways around this in Oracle, and any well designed system where it was likely for this sort of thing to come up would have been set up so the maintainers don't necessarily see it, but it would be more work having to emulate a distinction that Oracle simply doesn't have, hence blub

    No, you're still not explaining how this works. The examples people are giving are when people have had an opportunity to fill out the data and have left it blank. For some reason. You still haven't explained how a user tells you the difference between "skipped a field" (maybe accidentally, like their browser autocompleted most but not all fields) and "this thing should be blank."

    Look, stop focusing on Oracle. That's besides the point! How does the form work? If this is so critical and everyone does it why can't anyone describe how they do it?

    Let's say that the field is marked and validated as a required field. Because like you said, "Later still, I want to make sure that every foo has an up to date bar value." A user's actual bar value is "". How does he enter that on your form?

    OH! Ok, I think I see what the issue is that your concerned about.
    To answer it, a user cannot enter a null into the field. If a user leaves a field blank, it will be filled with "".
    If the user never submitted a form with that field, that field would be null.

    Edit: Aaaaaaaand :hanzo:'d by everyone already. That's what I get for being late to the party. :P


  • ♿ (Parody)

    @LB_ said in Please create a I Hate Microsoft Club too:

    null just means the user has yet to be asked.

    Right.

    Empty means they were asked and chose not to provide an address, which would just make the checkboxes disabled / ignored.

    Oh, so they can't change their mind later? I know we're going down a rat hole here, but you've actually found a good place to do null checks! It's not with the address but with the checkboxes.

    Because maybe you want to pester an "unasked" user the next time they log in and you just added one of them, so they have something that's unasked. Granted, there's no "empty" equivalent for a boolean value.


  • ♿ (Parody)

    @djls45 said in Please create a I Hate Microsoft Club too:

    OH! Ok, I think I see what the issue is that your concerned about.
    To answer it, a user cannot enter a null into the field. If a user leaves a field blank, it will be filled with "".
    If the user never submitted a form with that field, that field would be null.

    Yeah, exactly. Which is why this stuff falls apart for user entered data that's optional. The only thing you can determine from that "" is that the user declined to put any information there.



  • @izzion said in Please create a I Hate Microsoft Club too:

    @boomzilla
    I guess I mis-skimmed the thread, if Oracle supports NULL in string fields, since I thought that was how we got to :kermit_flail:

    The issue that Oracle has is not whether they support NULL in string fields, but rather that to Oracle, a NULL is saved as NULL and an empty string is also saved as NULL.



  • @djls45
    So, they apply the Syndrome approach to NULLs.

    If everyone is NULL, nobody is NULL. 🏆


  • ♿ (Parody)

    @izzion Do not try to read the empty string. There is no string.



  • @boomzilla
    The string is a lie, but your database is still ALIVE?


  • ♿ (Parody)

    @izzion People who use Oracle are too serious for video games.

    That was a video game reference, right?



  • @boomzilla
    Oracle admins have to be so serious because their database platform is trying to kill them.

    If that's a spoiler for you at this day and age, I don't know what to tell you 🤷


Log in to reply