WTF Bites


  • Banned

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    blakeyrat WORDS MEAN THINGS

    I hope using pedantic terminology straight from academia will clear things up.

    In that you're apparently admitting that you used the wrong word, yes.

    I never used any wrong word. You just can't read.

    Two more wrong sentences!

    I'd say words have meaning but you're too far gone and I'll never be able to make you use "wrong" correctly.

    You just took what turned out to be a super roundabout way of pointing out what you meant because you remembered the context and I didn't and gave a very LaoC level vague response that would seem nonresponsive to someone who had lost the context. And I definitely did go up several replies but obviously it wasn't far enough.

    When you play blakeyrat, expect to be treated like blakeyrat. Or: don't be an asshole and I won't be either.

    Oh go fuck yourself. I wasn't being an asshole. I just made a blakey joke.

    I don't mean that post. I mean the later posts. Where you said "apparently admitting that you used the wrong word" and "two more wrong sentences". But yeah, now that I calmed down a little and looked back, these aren't particularly egregious. Definitely much below your average. Still, before saying I'm wrong, it would be nice to at least check what I'm wrong about.


  • Banned

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @topspin what I like the most about it is that it's not a random chain of words, but an actual precise description of the problem. But only someone who's recently taken relational database course in college will understand.

    Haha! Wrong.

    I know. It was overexaggeration. Still, you need some understanding of the academic-theoretic side of databases for that to make sense for you, and most people here lack that (and I don't blame them, just like I don't blame them for hating functional programming).


  • ♿ (Parody)

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    blakeyrat WORDS MEAN THINGS

    I hope using pedantic terminology straight from academia will clear things up.

    In that you're apparently admitting that you used the wrong word, yes.

    I never used any wrong word. You just can't read.

    Two more wrong sentences!

    I'd say words have meaning but you're too far gone and I'll never be able to make you use "wrong" correctly.

    You just took what turned out to be a super roundabout way of pointing out what you meant because you remembered the context and I didn't and gave a very LaoC level vague response that would seem nonresponsive to someone who had lost the context. And I definitely did go up several replies but obviously it wasn't far enough.

    When you play blakeyrat, expect to be treated like blakeyrat. Or: don't be an asshole and I won't be either.

    Oh go fuck yourself. I wasn't being an asshole. I just made a blakey joke.

    I don't mean that post. I mean the later posts. Where you said "apparently admitting that you used the wrong word" and "two more wrong sentences". But yeah, now that I calmed down a little and looked back, these aren't particularly egregious. Definitely much below your average. Still, before saying I'm wrong, it would be nice to at least check what I'm wrong about.

    Oh, you mean after you got yourself confused and skipped a bunch of the conversation? Uh huh.


  • Banned

    @boomzilla FFS you replied to the post that said "my original point was"! What did you think it was going to be about other than the original point I was making when the discussion started!?

    This is precisely why I hate talking to you. First you make a post that ignores the very words you're quoting and then you try to convince me it's somehow my fault that you ignored them.


  • ♿ (Parody)

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @topspin what I like the most about it is that it's not a random chain of words, but an actual precise description of the problem. But only someone who's recently taken relational database course in college will understand.

    Haha! Wrong.

    I know. It was overexaggeration. Still, you need some understanding of the academic-theoretic side of databases for that to make sense for you, and most people here lack that (and I don't blame them, just like I don't blame them for hating functional programming).

    That's true.

    Honestly I kind of like functional programming. I use those paradigms in a few places, including in some old C++ (it's really how a library is used, and the code is actually not very functional but to be able to do anything worthwhile with it you kind of have to think that way).


  • Notification Spam Recipient

    @Gąska said in WTF Bites:

    now that I calmed down a little and looked back

    Words to live by.


  • Banned

    @Tsaukpaetra well, it only lasted a brief moment. There's only so much bullshit I can withstand, and it's not a whole lot.


  • Notification Spam Recipient

    @Gąska said in WTF Bites:

    @Tsaukpaetra well, it only lasted a brief moment. There's only so much bullshit I can withstand, and it's not a whole lot.

    I stand a lot of bullshit. It's better warm and wet than dry, but still stinks either way.


  • Fake News

    @Gąska said in WTF Bites:

    @boomzilla FFS you replied to the post that said "my original point was"! What did you think it was going to be about other than the original point I was making when the discussion started!?

    This is precisely why I hate talking to you. First you make a post that ignores the very words you're quoting and then you try to convince me it's somehow my fault that you ignored them.

    Since we're all @boomzilla alts you only have yourself to blame. :thonking:


  • Banned

    @JBert touchę.


  • BINNED

    @Gáska said in WTF Bites:

    @JBert touchę.

    twitch


  • BINNED

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @topspin what I like the most about it is that it's not a random chain of words, but an actual precise description of the problem. But only someone who's recently taken relational database course in college will understand.

    Haha! Wrong.

    I know. It was overexaggeration. Still, you need some understanding of the academic-theoretic side of databases for that to make sense for you, and most people here lack that (and I don't blame them, just like I don't blame them for hating functional programming).

    That's true.

    Honestly I kind of like functional programming. I use those paradigms in a few places, including in some old C++ (it's really how a library is used, and the code is actually not very functional but to be able to do anything worthwhile with it you kind of have to think that way).

    Oh, I definitely find functional programming interesting, I just don’t get to use it outside of the concepts that got adopted in mainstream languages. (You can write some functional code like pure functions in every language, but that’s just the basics)
    Back as a freshman in college I had already dabbled in several procedural languages and in the programming intro they taught us two things: ML as an example of FP and Java as an example of OOP. The latter was pretty boring as it wasn’t anything particularly new, the former I found really enlightening back then.

    The problem really is when you ask the FP people what some of their moon language means and they can’t explain their fucking monads and endofunctors so that anyone can understand, then call you an idiot who just doesn’t think in functional terms. Well, if your explanations of FP weren’t so fucking recursive...



  • @topspin I just helped someone with a very simple issue[1] who tried to think in terms of functional programming. Except without really understanding much of it beyond a few random buzzwords. It was...sigh.

    [1] "why should I return data from my Python functions instead of simply relying on side-effects[2]?"

    [2] specifically, he was using Pandas, which has a mutable dataframe object. So sure. You can pass it into a function, mutate it, and the mutation sticks outside the function (because Python treats all mutable parameters as being ref implicitly, one of the more annoying things it does). So he was passing it in, mutating it, and then returning None (technically not including a return statement at all, but...). And was getting confused as to how the magic was happening. Yet he was also talking about functional programming and first-order functions, preferring map over loops, etc. Didn't seem to understand the concept of pure functions, however.


  • Banned

    @topspin said in WTF Bites:

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @boomzilla said in WTF Bites:

    @Gąska said in WTF Bites:

    @topspin what I like the most about it is that it's not a random chain of words, but an actual precise description of the problem. But only someone who's recently taken relational database course in college will understand.

    Haha! Wrong.

    I know. It was overexaggeration. Still, you need some understanding of the academic-theoretic side of databases for that to make sense for you, and most people here lack that (and I don't blame them, just like I don't blame them for hating functional programming).

    That's true.

    Honestly I kind of like functional programming. I use those paradigms in a few places, including in some old C++ (it's really how a library is used, and the code is actually not very functional but to be able to do anything worthwhile with it you kind of have to think that way).

    Oh, I definitely find functional programming interesting, I just don’t get to use it outside of the concepts that got adopted in mainstream languages.

    It was a very different discussion 6 years ago. All the "but I'll never need to do that" have become "but I'm already doing it without any functional programming". Well, some of them. Some remained :airquotes: useless :airquotes:. It's kinda like RAII - non-C++ programmers used to find it unnecessary because they don't need it, then they've got using and now they find it unnecessary because they already have it under different name.

    Back as a freshman in college I had already dabbled in several procedural languages and in the programming intro they taught us two things: ML as an example of FP and Java as an example of OOP. The latter was pretty boring as it wasn’t anything particularly new, the former I found really enlightening back then.

    Same. Although I was already a little enlightened by Rust before, so it was easier to digest all the amazingness of OCaml. BTW, I consider Rust to be a functional language, but without all the usual snobbiness attached to it. It shares many of the same concepts, but its low-levelness and C++-ness have made a language that feels very different.

    The problem really is when you ask the FP people what some of their moon language means and they can’t explain their fucking monads and endofunctors so that anyone can understand,

    Try explaining calculus to freshman highschoolers. There's simply some level of abstract computational theory you need to internalize before you can even begin to understand those concepts. Unfortunately, I can't point you to any useful resources. I learned what I know through osmosis.

    then call you an idiot who just doesn’t think in functional terms.

    How's that different from asking any other programmer about anything else? :half-trolling:


  • Banned

    @Benjamin-Hall said in WTF Bites:

    @topspin I just helped someone with a very simple issue[1] who tried to think in terms of functional programming. Except without really understanding much of it beyond a few random buzzwords. It was...sigh.

    [1] "why should I return data from my Python functions instead of simply relying on side-effects[2]?"

    [2] specifically, he was using Pandas, which has a mutable dataframe object. So sure. You can pass it into a function, mutate it, and the mutation sticks outside the function (because Python treats all mutable parameters as being ref implicitly, one of the more annoying things it does). So he was passing it in, mutating it, and then returning None (technically not including a return statement at all, but...). And was getting confused as to how the magic was happening. Yet he was also talking about functional programming and first-order functions, preferring map over loops, etc. Didn't seem to understand the concept of pure functions, however.

    Weird. Sounds like he knows everything he needs to know except reference semantics. How he arrived there, I have no idea.



  • @Gąska said in WTF Bites:

    @Benjamin-Hall said in WTF Bites:

    @topspin I just helped someone with a very simple issue[1] who tried to think in terms of functional programming. Except without really understanding much of it beyond a few random buzzwords. It was...sigh.

    [1] "why should I return data from my Python functions instead of simply relying on side-effects[2]?"

    [2] specifically, he was using Pandas, which has a mutable dataframe object. So sure. You can pass it into a function, mutate it, and the mutation sticks outside the function (because Python treats all mutable parameters as being ref implicitly, one of the more annoying things it does). So he was passing it in, mutating it, and then returning None (technically not including a return statement at all, but...). And was getting confused as to how the magic was happening. Yet he was also talking about functional programming and first-order functions, preferring map over loops, etc. Didn't seem to understand the concept of pure functions, however.

    Weird. Sounds like he knows everything he needs to know except reference semantics. How he arrived there, I have no idea.

    To be honest, this person has...issues. He's not stupid, but there are certainly other mental health issues involved, plus pushing out of some substance abuse issues. So I'm pretty sure he understands lots of things that are just scrambled due to prior problems. But it was mostly "can talk cogently about higher-order functions, etc, but struggles with really basic concepts that are at the core of those things."


  • Considered Harmful

    @topspin said in WTF Bites:

    The problem really is when you ask the FP people what some of their moon language means and they can’t explain their fucking monads and endofunctors so that anyone can understand, then call you an idiot who just doesn’t think in functional terms. Well, if your explanations of FP weren’t so fucking recursive...

    It's easy. A monad is flatMap / and_then / SelectMany, except in general. It's a kind of endofunctor, which represents its property of the same type coming out as went in.



  • @pie_flavor said in WTF Bites:

    @topspin said in WTF Bites:

    The problem really is when you ask the FP people what some of their moon language means and they can’t explain their fucking monads and endofunctors so that anyone can understand, then call you an idiot who just doesn’t think in functional terms. Well, if your explanations of FP weren’t so fucking recursive...

    It's easy. A monad is flatMap / and_then / SelectMany, except in general. It's a kind of endofunctor, which represents its property of the same type coming out as went in.

    Case in point :half-trolling:


  • Considered Harmful

    @Benjamin-Hall do you know how flat-map tends to work? and do you know what the same type coming out as went in means?



  • @pie_flavor said in WTF Bites:

    @Benjamin-Hall do you know how flat-map tends to work? and do you know what the same type coming out as went in means?

    My point (other than the trolling) is that you threw a lot of jargon that sounds great, but doesn't really answer the important practical questions


  • Considered Harmful

    @Benjamin-Hall It's the other way around. The practical application of monads is flatMap. Letting you functionally transform collections, or other things that can be mapped over, not by mapping an element to another element, but by mapping an element to another collection, and all the resulting collections get concatenated together. Endofunctor neither does nor doesn't have practical applications; it's just a category of functor, like 'ordered' is a category of collections.



  • @pie_flavor said in WTF Bites:

    @Benjamin-Hall It's the other way around. The practical application of monads is flatMap. Letting you functionally transform collections, not by mapping an element to another element, but by mapping an element to another collection, and all the resulting collections get concatenated together. Endofunctor neither does nor doesn't have practical applications; it's just a category of functor, like 'ordered' is a category of collections.

    Again. Jargon. Which I'm sure means something interesting, but it comes across as just pure jargon. Word salad at that.

    Can you explain a monad (both the idea and the application) without using any term associated with functional programming? That is, no flatMap, no talking about mapping, functors, or any such thing? Basically, I'm asking you to ELI5.

    My experience is that there are great concepts buried under a mountain of navel-gazing, almost string-theory-level jargon. And recursively so--when you try to explain one jargon piece in terms of another, which is then defined in terms of the first....



  • @pie_flavor I guess the point is that, so far, I've never heard anything that makes me want to know more. Because it's all cloaked in impenetrable words that each require unpacking. I've never heard an elevator pitch that answers "why should I expend my energy and time finding out more about this? WHY SHOULD I CARE?" It all sounds like mental mathturbation. I'm sure there's a point, but I've never seen it and every explanation I've heard or read has made me less caring.

    I can understand some of the benefits of using pure functions and keeping things idempotent and simple, from a practical standpoint. But the rest seems like an obsession with "pure" or "fascinating" mathematical properties of type systems, rather than something that actually lets me solve problems easier than the other ways. Which is what I care about.


  • Considered Harmful

    @Benjamin-Hall Okay, I expected at least the level of understanding of the set of features that you find in non-nutbar languages like Java or C#. But fine. Much easier to explain the things I mentioned instead: mapping means you take a function accepting a value and producing a different value, and apply it to each element of a thing to produce a new thing. For example, given the list l = [1, 2, 3], and the function square(x) { x * x }, you would map square over l to get a new list [1, 4, 9]. For a single operation like this it's hard to see the benefit over the standard solution of appending to a second list in a foreach-loop, but once you've got a lot of operations it can be much more convenient to represent a series of transformations to a collection rather than a series of transformations to each element of a collection. Monads i.e. flat-map is the best example of why, and is where rather than mapping input elements to output elements one-to-one, you map the input element to the type you're mapping over, so if you're mapping over a list, then a flat-mapping function returns a list. If you want to transform each element into a list of elements, e.g. [1, 1, 2, 4, 3, 9], with a procedural thing now you've got to have nested loops or intermediate lists both of which are a pain in the ass to work with and really obfuscate your code to the reader. But with a functional transformation, mapping originalAndSquare(x) { [x, x * x] } over [1, 2, 3] to produce [1, 1, 2, 4, 3, 9] can be expressed as a single function call, and a very simple one at that. That's the root of why functional programming is useful to people who do not have their heads up their asses: it does what you were using something else to do, but it does it without intermediate variables, explicit looping constructs, or a bunch of other intermediate noise that gets in the way of just expressing what you want to happen.

    Functor, by the way, was not really relevant to the definition; it's just a category of things, like 'collection' is. Specifically it means a function that takes another function. If you need me to define what 'function' or 'list' means, then you're just willfully being obtuse.


  • Considered Harmful

    @pie_flavor and you don't even need functions to do it per se. Consider the C# syntax a?.b. If you're unfamiliar, this means a == null ? null : a.b, and is called the null-conditional operator (Kotlin has it too). The ? here, if you consider it separate from the . even though it isn't really, is a functor, and because the output may be nullable as well, letting you do a?.b?.c?.d, specifically it's a monad. Instead of a list, you're mapping over the concept of nullability; there are either one or zero values to map over, and your flat-mapping function, which here is just the . operator, returns either one or zero values (either a real value or null).

    @Benjamin-Hall said in WTF Bites:

    @pie_flavor I guess the point is that, so far, I've never heard anything that makes me want to know more. Because it's all cloaked in impenetrable words that each require unpacking. I've never heard an elevator pitch that answers "why should I expend my energy and time finding out more about this? WHY SHOULD I CARE?" It all sounds like mental mathturbation. I'm sure there's a point, but I've never seen it and every explanation I've heard or read has made me less caring.

    99% of it is useless. The trick is to get your practical uses from procedural-programming areas, like C#'s LINQ or Rust's iterator combinators, and never once bother with the theory because nobody gives a shit. Mapping is useful because one-to-one collection transformation is a very frequent operation, flat-mapping is useful because one-to-many collection transformation is a very frequent operation too, and almost every other use is a special case of the first two.



  • @pie_flavor

    I can see that it basically lets you do multiple things at once and stuff it all into the same output structure. Except I'm still wondering why I would want to stuff all that back into one list to begin with. I'd say that getting [1,1,2,4,3,9] out of a call like that way more confusing than getting [(1,1), (2,4), (3,9)] (to use Python's notation) or any number of other nested data structures. And to me, nested lists and other "procedural" statements are way more clear. I can trace what's happening at each iteration, instead of the whole thing just falling out of magic math. And it's WAY more natural to learn and explain. So again why should I care about something that's a matter of taste about what looks cleaner?

    Nice condescension, by the way. You'd make a great teacher /s



  • @pie_flavor said in WTF Bites:

    @pie_flavor and you don't even need functions to do it per se. Consider the C# syntax a?.b. If you're unfamiliar, this means a == null ? null : a.b, and is called the null-conditional operator (Kotlin has it too). The ? here, if you consider it separate from the . even though it isn't really, is a functor, and because the output may be nullable as well, letting you do a?.b?.c?.d, specifically it's a monad. Instead of a list, you're mapping over the concept of nullability; there are either one or zero values to map over, and your flat-mapping function, which here is just the . operator, returns either one or zero values (either a real value or null).

    Yes. I understand that. But cloaking it in all the jargon makes it harder to understand, even if it's more precise. That's the big point. Simple words are good. Simple words that focus on the actual benefits (I don't have to check if it's null up front!) are even better. Focusing on the mathematical properties and jargon is exactly bass-ackward. It shoves all the things that only compiler designers (and other freaks of nature :trollface:) care about in your face before you can actually do anything with it.

    @Benjamin-Hall said in WTF Bites:

    @pie_flavor I guess the point is that, so far, I've never heard anything that makes me want to know more. Because it's all cloaked in impenetrable words that each require unpacking. I've never heard an elevator pitch that answers "why should I expend my energy and time finding out more about this? WHY SHOULD I CARE?" It all sounds like mental mathturbation. I'm sure there's a point, but I've never seen it and every explanation I've heard or read has made me less caring.

    99% of it is useless. The trick is to get your practical uses from procedural-programming areas, like C#'s LINQ or Rust's iterator combinators, and never once bother with the theory because nobody gives a shit. Mapping is useful because one-to-one collection transformation is a very frequent operation, flat-mapping is useful because one-to-many collection transformation is a very frequent operation too, and almost every other use is a special case of the first two.

    Then why manufacture all the BS jargon to begin with. As I said, mathturbation.


  • Considered Harmful

    @Benjamin-Hall It was an example, it's not like that squaring thing is something you'd ever end up using. Mainly because the original and the square have different utility and you're not likely to be using them in the same context. But maybe you want to convert a list of lists to a single list (called flattening, and where the flat in flat-map comes from). Or maybe you want to chain optional values, like I mentioned with ?. - mapping operations that might just not produce a new value to replace the old with are still monads, and probably the most common use of them. There's lots of places to use these. Generally the reason I explain it as 'it's just flat-map' is because most people already use flat-map because they learn the features of the language at their disposal, and flat-mapping is a really useful operation that they have a lot of use-cases for, and they assume a monad is some impenetrable math thing but really it's the thing that they were already using and knew perfectly.

    @Benjamin-Hall said in WTF Bites:

    Then why manufacture all the BS jargon to begin with. As I said, mathturbation.

    What's BS about it? 'A function taking a thing with elements and also taking a function that takes one of said elements and returns another thing that's the same kind of thing as the first thing, which then applies the function to each element of the first thing and produces the same kind of thing as the first thing with all the produced things joined together' is pretty long, and longer if you make it not as roundabout, so people say 'monad' for short. It's a concept used frequently, so it gets a new word. That's a normal reason to use a new word. Why, how would you say it? What way would you use it that makes it more understandable?



  • @pie_flavor said in WTF Bites:

    @Benjamin-Hall It was an example, it's not like that squaring thing is something you'd ever end up using. Mainly because the original and the square have different utility and you're not likely to be using them in the same context. But maybe you want to convert a list of lists to a single list (called flattening, and where the flat in flat-map comes from). Or maybe you want to chain optional values, like I mentioned with ?. - mapping operations that might just not produce a new value to replace the old with are still monads, and probably the most common use of them. There's lots of places to use these. Generally the reason I explain it as 'it's just flat-map' is because most people already use flat-map because they learn the features of the language at their disposal, and flat-mapping is a really useful operation that they have a lot of use-cases for, and they assume a monad is some impenetrable math thing but really it's the thing that they were already using and knew perfectly.

    First, flatMap is, in and of itself, jargon. Language-specific jargon at that. I'm familiar with the concept of flattening a multi-dimensional array, but had never heard it called that. And I'm still not seeing the connection to chaining optionals--that seems to be a function (operator) that takes a single element of type Optional<T> (without caring what it is) and either returning T or Optional<T>. Which doesn't map List<T> onto List<T> (which seems to be implied by your "definition" of a monad). It's flow-control syntactic sugar. Sure, it's nice to have if you have nullable elements, but it isn't anything new.

    @Benjamin-Hall said in WTF Bites:

    Then why manufacture all the BS jargon to begin with. As I said, mathturbation.

    What's BS about it? 'A function taking a thing with elements and also taking a function that takes one of said elements and returns another thing that's the same kind of thing as the first thing, which then applies the function to each element of the first thing and produces the same kind of thing as the first thing with all the produced things joined together' is pretty long, and longer if you make it not as roundabout, so people say 'monad' for short. It's a concept used frequently, so it gets a new word. That's a normal reason to use a new word. Why, how would you say it? What way would you use it that makes it more understandable?

    The referent of "BS" there was the "99% of it [that] is useless". My complaints with functional programming zealots (like with string-theory zealots) go way beyond one single term, although it's a common source of friction.

    And maybe it's just the sort of programming that I've done most of (being entirely self-taught and having only really done small projects), but I still don't see how this sort of magic is wide-spread enough to need a fancy new term. The term only seems to be useful for talking about categories of functions. Unless you're developing a new language or compiler, it seems orthogonal to my normal concerns. Which rarely have to do with mapping that data onto a new set of data in a way that can be expressed simply. The larger stuff I did was heavily mathematical (wave-packet evolution), but most of the heavy lifting was off-loaded to math libraries. The hard part wasn't doing the transformations (that's a well-defined algorithm), but in getting the input into a form that will work (which required massaging through smoothing routines, because it needed to be nicely-gridded, but came out of a bunch of independent trajectories sampled at dynamic intervals) and (more importantly), interpreting the output.



  • I'm getting some mixed messages here

    5996460a-15a6-4086-aa60-506ddfefcc3a-image.png


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    Okay, I expected at least the level of understanding of the set of features that you find in non-nutbar languages like Java or C#.

    FWIW I read your prior five posts about this and it made no more sense the first time than the sixth. Could have fooled me for channeling Dr. Seuss.


  • Considered Harmful

    @Benjamin-Hall As I understand it, you are complaining that there is a word for a concept. Even though you acknowledge the concept exists, even though every modern programming language and quite a few archaic ones too have it, even though it's an operation that's useful sometimes to express independently of what language you're implementing it in.

    And yes, if you don't know something exists, then you're probably not using it. "If I had asked them what they wanted, they would have said faster horses." Yes, your normal concerns have to do with mapping data onto a new set of data that can be expressed simply - you just don't notice it because you already know how to solve it, just with a lot more code, and you probably didn't associate null-coalescing with it because that would involve noticing it. There's a difference between not wanting to wade through functional theory and not wanting to learn new things because your old things work just fine goddammit.


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    As I understand it, you are complaining that there is a word for a concept.

    I think it's more that you were unable to define the word for a concept without resorting to field-specific lingo. I like the ELI5 part. If you can't describe bricks without describing the macro particles in the heterogeneous substrate composites and cross-bonding tetramorphic congealment mechanisms inherent in the things, perhaps you're doing it wrong...


  • Considered Harmful

    @Tsaukpaetra But the concept of function mapping isn't field-specific. It is the simplest thing ever and in every high-level language. There's examples of them in the beginner tutorials of most programming languages, because they're 99% of the use-case for closures. I am genuinely astounded at meeting two veteran programmers who have never encountered them. It is like never having encountered pointers, or closures themselves.


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    @Tsaukpaetra But the concept of function mapping isn't field-specific. It is the simplest thing ever and in every high-level language. There's examples of them in the beginner tutorials of most programming languages, because they're 99% of the use-case for closures.

    I wasn't talking about just mapping. Unless modads and enctofunctorings are also the simplest thing ever and in every high-level language.


  • Considered Harmful

    @Tsaukpaetra You said:

    I think it's more that you were unable to define the word for a concept without resorting to field-specific lingo.

    Monad was the word. The "field specific lingo" in the definition was function-mapping. Unless you mean flatMap / SelectMany / and_then, which are also not field-specific lingo, because those refer to standard library functions from Java, C#, and Rust, each just about the furthest thing from functional languages.



  • Was debugging some DNS issues with our Panama office. We have a site-to-site VPN set up between the offices on our SonicWall firewalls. We're slowly impementing a new domain in the US office, let's call it usa.local. I put a forwarder in the Panama DC for usa.local, and the guy in Panama just can't seem to log in. Find out their ISP DNS has a wildcard so that *.local resolves to... 127.0.0.1. WTeverlovinF?

    So can I use Google DNS without causing Panama problems, and if not, does anyone know anything I can use in Panama?


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    Monad was the word.

    I'm still trying to figure out what that is. You say things are an example of that, but I can't seem to figure out what it is from your examples.

    @pie_flavor said in WTF Bites:

    Unless you mean flatMap / SelectMany / and_then, which are also not field-specific lingo

    Out of the three, I've only ever seen SelectMany due to it being an intellisense suggestion from LINQ, and of the dozen or so languages I've experienced I have not seen that or the other two.

    @pie_flavor said in WTF Bites:

    , because those refer to standard library functions from Java, C#, and Rust, each just about the furthest thing from functional languages.

    Tangential, but see above. Through mental gymnastics I can interpolate what each word means, but until ten minutes ago I've never encountered them as terms used "standardly".


  • Notification Spam Recipient

    @SirTwist said in WTF Bites:

    .local

    I heard it was dangerous to use the .local TLD because of multicast DNS or something... 🤔


  • Considered Harmful

    @Tsaukpaetra What are the dozen or so languages you've experienced? And SelectMany is not simply an example of the concept but the concept itself: that exact operation, on anything that semantically has 'elements'.



  • @Tsaukpaetra Great, last doc I lloked at said that was a good one because .internal wasn't. WTF should I have used then? Not that I really feel like changing it again, that's a pain in the ass.

    This *.local wildcard would fuck up mDNS too presumably, so is still a WTF.


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    What are the dozen or so languages you've experienced?

    Assembly. C. C++. BASIC (five other irrelevant flavors). Javascript. C#. SQL (four-ish dialects). Java. SH (three flavors). PHP (three versions). A little Java. A few other low-level languages that definitely wouldn't even apply here.



  • @pie_flavor said in WTF Bites:

    @Benjamin-Hall As I understand it, you are complaining that there is a word for a concept. Even though you acknowledge the concept exists, even though every modern programming language and quite a few archaic ones too have it, even though it's an operation that's useful sometimes to express independently of what language you're implementing it in.

    Not complaining. Just wondering why it's such a big deal. And why it's so darn difficult to get people to use simple terms for things instead of immediately resorting to jargon. And I have the exact same complaint about 90% of my fellow physicists. Their language is the issue--they only care about being understood by other experts. And boils down to "look at me and my big words, aren't I cool?"

    I still don't see that the need to talk about the categories of such functions as a discrete thing comes up enough (in my admittedly limited experience) to need a jargon-term for. And if it's really simple, then use simple terms. Coming up with a pseudo-scientific term for things immediately raises the "this must be complicated" flags.

    And yes, if you don't know something exists, then you're probably not using it. "If I had asked them what they wanted, they would have said faster horses." Yes, your normal concerns have to do with mapping data onto a new set of data that can be expressed simply - you just don't notice it because you already know how to solve it, just with a lot more code, and you probably didn't associate null-coalescing with it because that would involve noticing it. There's a difference between not wanting to wade through functional theory and not wanting to learn new things because your old things work just fine goddammit.

    Again. Condescension. And most of the time, the mapping part is the easy part and takes very little code or thought. It's the actual transformation (which isn't something that can be expressed simply in any language, because it's a nasty group of mathematical tricks, even if it can be expressed in a "simple" mathematical formalism that hides all the interesting and difficult parts) that's the issue. Glazing that over as a simple mapping is arrogant and ignorant. And even more so than the actual math of the packet propagator (which is, in the scheme of things, pretty simple), figuring out what the results mean, if anything is the actual interesting part. I mean, it's been a decade since I was really involved in that sort of thing, and most of what I've been doing recently is much more UI/IO involved (which functional techniques are notorious for not handling well). And I'd say that 99% of what all programmers do is much more along the lines of handling user input and mucking around with files and data stores. The vast majority of all business rules either
    a) aren't simple maps (being large conditional chains based on dynamic conditions)
    or
    b) are trivially simple

    So it's not about not knowing it exists or not being willing to learn new things, it's about never having someone explain why I should care in words that aren't jargon and assume I already care. Functional programming, in my experience, has all the hallmarks of any other fad/cult. Its devotees are so sure that it's "the one true way" and that anyone who doesn't get it is a heathen or (at maximum charity) ignorant and needs to be educated and then they'll join the True Faith. There's no room for people understanding it and not agreeing, or understanding and deciding it's not for them. Either you don't understand (and need to be cured) or you're a lazy/bad programmer and your opinion doesn't matter.

    And you still haven't explained how null coalescing (which I understand just fine, thank you very much) is a monad/flatMap--it doesn't fit the definition you provided. It's just syntactic sugar for nested conditionals. It doesn't care about collections of things at all--it doesn't care what T is in Optional<T>. Unless you force Optional to be a collection type. Which it isn't necessarily, or if it is, that's an implementation detail not an underlying fundamental.


  • Notification Spam Recipient

    @SirTwist said in WTF Bites:

    @Tsaukpaetra Great, last doc I lloked at said that was a good one because .internal wasn't. WTF should I have used then? Not that I really feel like changing it again, that's a pain in the ass.

    This *.local wildcard would fuck up mDNS too presumably, so is still a WTF.

    I've always used real domains. So for example, home.tsaukpaetra.com, where I own tsaukpaetra.com. Surely your company owns a domain?

    I would have done (depending on size) something like panama.myCompany.com and usa.myCompany.com.

    Edit: And they don't even have to be actually externally-resolvable either, just reasonably expected to not coincide with something else. I.e. not blah.google.com.



  • @Tsaukpaetra The old domain uses our old .com. Which causes fuckups when the world and the local DNS disagree on what the IP address is for e.g. www. Or are we expected to have a seperate domain for internal shit? This isn't really my job except nobody else wants to do it, I'm only google-certified network admin, not a real one.

    Besides, why does mDNS even come into it when anything on the network gets the DC as DNS server in the DHCP response?


  • Considered Harmful

    @Tsaukpaetra said in WTF Bites:

    @pie_flavor said in WTF Bites:

    What are the dozen or so languages you've experienced?

    Assembly. C. C++. BASIC (five other irrelevant flavors). Javascript. C#. SQL (four-ish dialects). Java. SH (three flavors). PHP (three versions). A little Java. A few other low-level languages that definitely wouldn't even apply here.

    Assembly does not have data structures, so this doesn't apply. C doesn't add anything ever so it's understandable it doesn't have it. C++ calls it std::transform. BASIC predates sanity. JS calls it Array.prototype.flatMap. SQL calls it INNER JOIN. Java calls it Stream.flatMap. SH doesn't have arrays and Bash doesn't have functions for them. PHP does not directly have flat-map, but it has regular map via array_map which you can merge with array_merge. You mentioned Java twice.

    Like I said. Absolutely everywhere and not field-specific at all.


  • Notification Spam Recipient

    @SirTwist said in WTF Bites:

    Or are we expected to have a seperate domain for internal shit?

    No no no, you put your internal domain as a subdomain that's not resolvable to the outside world, see my example above (though I think I accidentally left the subdomain resolvable because I'm forgetful and haven't deleted the record).

    The main reason .local was used originally was because it was unresolvable anywhere (except well, locally). It was a guarantee that if you can't resolve it, you're not in that particular neighborhood and can't talk to anyone from that network.

    The point of using one hanging off your real domain is you can be sure nobody else could possibly ever make a real outside subdomain with that name, hence

    @SirTwist said in WTF Bites:

    the world and the local DNS disagree on what the IP address is for

    this would never happen because the domain name you chose would not cross that boundary (from internet to intranet or vice-versa).

    @SirTwist said in WTF Bites:

    Bedsides, why does mDNS even come into it when anything on the network gets the DC as DNS server in the DHCP response?

    Because raisins. :mlp_shrug: I blame Apple.


  • Notification Spam Recipient

    @pie_flavor said in WTF Bites:

    @Tsaukpaetra said in WTF Bites:

    @pie_flavor said in WTF Bites:

    What are the dozen or so languages you've experienced?

    Assembly. C. C++. BASIC (five other irrelevant flavors). Javascript. C#. SQL (four-ish dialects). Java. SH (three flavors). PHP (three versions). A little Java. A few other low-level languages that definitely wouldn't even apply here.

    Assembly does not have data structures, so this doesn't apply. C doesn't add anything ever so it's understandable it doesn't have it. C++ calls it std::transform. BASIC predates sanity. JS calls it Array.prototype.flatMap. SQL calls it INNER JOIN. Java calls it Stream.flatMap. SH doesn't have arrays and Bash doesn't have functions for them. PHP does not directly have flat-map, but it has regular map via array_map which you can merge with array_merge. You mentioned Java twice.

    Like I said. Absolutely everywhere and not field-specific at all.

    Sure, different names for the concept. So when you say flatMap I'm going to automatically understand it's actually std::transform or whatever? Because you said that a single term is effectively ubiquitous yet you provided four different names for the apparently-same thing!

    Wait.

    You almost had me there, I was talking about modads and ectoplams, stop changing the question!


  • Considered Harmful

    @Benjamin-Hall said in WTF Bites:

    @pie_flavor said in WTF Bites:

    @Benjamin-Hall As I understand it, you are complaining that there is a word for a concept. Even though you acknowledge the concept exists, even though every modern programming language and quite a few archaic ones too have it, even though it's an operation that's useful sometimes to express independently of what language you're implementing it in.

    Not complaining. Just wondering why it's such a big deal.

    It's not.

    And why it's so darn difficult to get people to use simple terms for things instead of immediately resorting to jargon.

    The difference between 'a simple term' and 'jargon' is whether you understand it yet. Monad is the simple term for 'a function taking a thing with elements and also taking a function that takes one of said elements and returns another thing that's the same kind of thing as the first thing, which then applies the function to each element of the first thing and produces the same kind of thing as the first thing with all the produced things joined together'. Dunno how you'd simplify it further.

    And yes, if you don't know something exists, then you're probably not using it. "If I had asked them what they wanted, they would have said faster horses." Yes, your normal concerns have to do with mapping data onto a new set of data that can be expressed simply - you just don't notice it because you already know how to solve it, just with a lot more code, and you probably didn't associate null-coalescing with it because that would involve noticing it. There's a difference between not wanting to wade through functional theory and not wanting to learn new things because your old things work just fine goddammit.

    Again. Condescension.

    Absolutely. Both for fun and because this is really simple and used everywhere, even in procedural programming.

    And most of the time, the mapping part is the easy part and takes very little code or thought. It's the actual transformation (which isn't something that can be expressed simply in any language, because it's a nasty group of mathematical tricks, even if it can be expressed in a "simple" mathematical formalism that hides all the interesting and difficult parts) that's the issue. Glazing that over as a simple mapping is arrogant and ignorant. And even more so than the actual math of the packet propagator (which is, in the scheme of things, pretty simple), figuring out what the results mean, if anything is the actual interesting part. I mean, it's been a decade since I was really involved in that sort of thing, and most of what I've been doing recently is much more UI/IO involved (which functional techniques are notorious for not handling well). And I'd say that 99% of what all programmers do is much more along the lines of handling user input and mucking around with files and data stores. The vast majority of all business rules either
    a) aren't simple maps (being large conditional chains based on dynamic conditions)
    or
    b) are trivially simple

    You're talking about it as though it needs to be the core of your primary business-rule pipeline. It doesn't. It's a simple tool you generally use in simple ways. I've got a list of strings I need to pass to a function expecting a list of file paths. list.map { s -> Paths.get(s) }

    So it's not about not knowing it exists or not being willing to learn new things, it's about never having someone explain why I should care in words that aren't jargon and assume I already care. Functional programming, in my experience, has all the hallmarks of any other fad/cult. Its devotees are so sure that it's "the one true way" and that anyone who doesn't get it is a heathen or (at maximum charity) ignorant and needs to be educated and then they'll join the True Faith. There's no room for people understanding it and not agreeing, or understanding and deciding it's not for them. Either you don't understand (and need to be cured) or you're a lazy/bad programmer and your opinion doesn't matter.

    And you still haven't explained how null coalescing (which I understand just fine, thank you very much) is a monad/flatMap--it doesn't fit the definition you provided. It's just syntactic sugar for nested conditionals. It doesn't care about collections of things at all--it doesn't care what T is in Optional<T>. Unless you force Optional to be a collection type. Which it isn't necessarily, or if it is, that's an implementation detail not an underlying fundamental.

    It doesn't have to be a collection type. It just has to be a type that semantically has 'elements'. Optional either has one element or no elements. And assuming you're talking about the Java Optional, it's got a flatMap function that does the monad thing.

    Just because you think functional programming is stupid does not mean every feature in it is stupid. Tagged unions are useful. Typeclasses are useful. Treating each function as though it has only one parameter and returns another function with the rest of the parameters is beyond stupid and I really can't wrap my mind around someone who would program in a language with those semantics and call it fun. But that doesn't make monads any less useful.


  • Considered Harmful

    @Tsaukpaetra said in WTF Bites:

    @pie_flavor said in WTF Bites:

    @Tsaukpaetra said in WTF Bites:

    @pie_flavor said in WTF Bites:

    What are the dozen or so languages you've experienced?

    Assembly. C. C++. BASIC (five other irrelevant flavors). Javascript. C#. SQL (four-ish dialects). Java. SH (three flavors). PHP (three versions). A little Java. A few other low-level languages that definitely wouldn't even apply here.

    Assembly does not have data structures, so this doesn't apply. C doesn't add anything ever so it's understandable it doesn't have it. C++ calls it std::transform. BASIC predates sanity. JS calls it Array.prototype.flatMap. SQL calls it INNER JOIN. Java calls it Stream.flatMap. SH doesn't have arrays and Bash doesn't have functions for them. PHP does not directly have flat-map, but it has regular map via array_map which you can merge with array_merge. You mentioned Java twice.

    Like I said. Absolutely everywhere and not field-specific at all.

    Sure, different names for the concept. So when you say flatMap I'm going to automatically understand it's actually std::transform or whatever? Because you said that a single term is effectively ubiquitous yet you provided four different names for the apparently-same thing!

    Wait.

    You almost had me there, I was talking about modads and ectoplams, stop changing the question!

    That is a monad. I'm not changing anything.


Log in to reply