|
Look Around You posted:I'm pretty sure he's not saying the criticism itself is abusive, but rather the manner in which it's delivered is. There's way more professional and tactful ways to express disagreement/misunderstanding than literally saying "WHAT? \n NONE OF WHAT YOU SAY MAKES ANY SENSE." and other very vitriolic poo poo ("you should be retroactively aborted", etc). Talking to someone that way (esp. in a semiprofessional environment) honestly is abusive. *For example you'd have to be emotionally retarded to view that sentence as vitriolic too. And I mean materially vitriolic, with actual vitriol behind it.
|
# ? Jan 29, 2015 09:04 |
|
|
# ? Jun 13, 2024 04:29 |
|
Look Around You posted:Also in what loving world do you live in where repeatedly posting/sending death threats to "express disagreement" to someone online is not abusive? Or having multiple people do it? How about posting their address and threatening to rape and murder them? How is any of that not abusive? Like do you honestly think that the #gamergate bullshit is actually about "ethics in video game journalism" and not a way to further disempower and subjugate women to push them further away from their sacred loving video games or whatever the gently caress their goal is now? What.
|
# ? Jan 29, 2015 09:06 |
|
When I said "... and then a bunch of people rush in to defend his use of acerbic language..." I didn't expect to actually that happen in this thread. Thanks for the demonstration of the terrible cult of personality around Linus.
|
# ? Jan 29, 2015 09:22 |
|
TIL the link between strict aliasing and gamergate.
|
# ? Jan 29, 2015 10:02 |
|
Post more spurious anecdotes about linus being both abusive and wrong
|
# ? Jan 29, 2015 10:20 |
|
We all know Linus Torvalds has unparalleled communication skills that should be emulated by all. Second only to RMS, really. Any differing opinion is just trolling. https://www.youtube.com/watch?v=I25UeVXrEHQ
|
# ? Jan 29, 2015 10:34 |
|
Suspicious Dish posted:My former coworker was Jerome Glisse, not Rik. He's going to continue working on HMM, but he expressed frustration when trying to convey his ideas to Linus. He's not overly abusive in that thread, no, but he was wrong. To be honest that just looks like a stern discussion to me, not abuse. The whole thing boils down to "I don't like how this looks and I don't understand why it's needed. Am I missing something?" It's also not personal (unlike that thing directed at the gcc devs), the side-jab at *someone else* who Linus has worked with for years notwithstanding. quote:Make sure to read the followup where he admits he hasn't read the actual patches or actually tried to understand the problem space at all while Jerome tries to carefully explain to him the problems he faces using the simple solutions he suggested. You're referring to https://lkml.org/lkml/2014/11/10/724 "But maybe I'm misreading it and it actually has good reasons for it" quote:In one of those revisions, Linus said "wait, you're doing it way X? What the gently caress is wrong with this idiot? Do it way Y instead!" and then in a follow-up, "jesus, wow, I think I liked way X instead". I can't point to the specific ML posts, since this was just in person talking on the T back home, and also a year ago. Again, not clear how this is abusive. If you're landing something that's complicated and non-obvious then you should expect the maintainer to grill you why the more obvious solutions weren't acceptable, especially if it's not clear from the code/documentation/commit messages...and no, expecting them to read up on all past discussion that lead to it just doesn't scale. The grilling is filter to see if the person who made the odd-looking decisions has done their homework/isn't doing a quick hack, and if it's clear they aren't, the code can go through without the maintainer necessarily completely understanding it in detail. If anyone has solutions for this I'm all ears since I've been on both sides there in code reviews. I can see where the frustration comes from, though. Such discussions are always difficult and often frustrating, people being jerks is the last thing you need to add to the mix. And it's definitely par for course on lkml, from the same thread: https://lkml.org/lkml/2014/11/11/861
|
# ? Jan 29, 2015 11:27 |
|
It's fairly mindboggling to see that people ITT need clarification as to why some may consider Linus' reactions abusive.
|
# ? Jan 29, 2015 12:31 |
|
Sagacity posted:It's fairly mindboggling to see that people ITT need clarification as to why some may consider Linus' reactions abusive. Given that between the quotes there's quite a bit of variation in tone, that's a pretty vague complaint.
|
# ? Jan 29, 2015 13:47 |
|
if not "abusive" can we at least agree on "grossly unprofessional"
|
# ? Jan 29, 2015 15:46 |
|
daft punk railroad posted:if not "abusive" can we at least agree on "grossly unprofessional" This has been commented on many times, the strong language has proved productive in the LKML in order to make progress. Being overly courteous leads to significant delays, wasted time and misunderstanding between parties not only due to cultural differences. There are a lot of patches pushed by extremely arrogant individuals who have not responded to feedback and requests. In a corporate environment you would discuss with their manager or similar, in the real world you don't have such avenues. I'm interested in what other options are available? I guess you could go the nefarious route and simply block all the non-responsive contributors, but that is clearly worse. I was watching the release management video someone posted yesterday, Facebook's solution was an internal blacklist against bad contributors. Everyone who messed up got more and more anti-points and beyond a certain point all their contributions are blocked. Not very social, as was raised by one viewer in the video, managers eager to get access to the list for consequences. MrMoo fucked around with this message at 16:19 on Jan 29, 2015 |
# ? Jan 29, 2015 16:12 |
|
MrMoo posted:This has been commented on many times, the strong language has proved productive in the LKML in order to make progress. I think there's a reasonable middle ground between overly courteous and 'you should be retroactively aborted', but that's just me I guess? IT BEGINS fucked around with this message at 16:23 on Jan 29, 2015 |
# ? Jan 29, 2015 16:21 |
|
MrMoo posted:I guess you could go the nefarious route and simply block all the non-responsive contributors, but that is clearly worse. It's somewhat obvious that the other extreme to lkml is just passive-aggressively dropping all the patches you don't like silently on the floor.
|
# ? Jan 29, 2015 16:21 |
|
IT BEGINS posted:I think there's a reasonable middle ground between overly courteous and 'you should be retroactively aborted', but that's just me I guess? I think he has apologised, or noted previous err many times for these: Linus posted:From a technical standpoint, no single decision has ever been that important. Everything can be fixed.... The problems tend to be around alienating users or developers and I'm pretty good at that. I use strong language. But again there's not a single instance I'd like to fix. There's a metric s---load of those. http://readwrite.com/2014/10/16/linux-linus-torvalds-community-mistakes-toxic-environment
|
# ? Jan 29, 2015 16:32 |
|
Coding horrors: posting that makes you
|
# ? Jan 29, 2015 16:37 |
|
Soricidus posted:Coder horrors: posting that makes you Fixed.
|
# ? Jan 29, 2015 16:42 |
|
sarehu posted:You have to be emotionally retarded to interpret that retroactive abortion comment as vitriolic.* When I read comments like that I think, yes, I have felt that way and written like that, and I know how he feels, and it doesn't turn me off at all. So I think if other people are turned off then they are wrong to be so and their reasons or mere feelings are invalid. Also you are overlooking all the benefits of the tone he has. You'll see that sort of thing at other check-your-ego-at-the-door type environments. You seem really autistic
|
# ? Jan 29, 2015 18:40 |
|
sarehu posted:You have to be emotionally retarded to interpret that retroactive abortion comment as vitriolic.* When I read comments like that I think, yes, I have felt that way and written like that, and I know how he feels, and it doesn't turn me off at all. So I think if other people are turned off then they are wrong to be so and their reasons or mere feelings are invalid. Also you are overlooking all the benefits of the tone he has. You'll see that sort of thing at other check-your-ego-at-the-door type environments. sarehu posted:What. Ok so let me reframe. You seem to be saying that since it's written online, it cannot be abusive. If you went up to someone in real life (either someone you were working with or someone you disagree with) and said those exact same things (anywhere from "you deserve to be retroactively aborted" to the more direct "you deserve to die" and "maybe someone should rape you" etc) in real life, it would 100% be considered at best extremely in appropriate, and most likely as verbal abuse (and potentially illegal!). I guess I'm failing to see how the medium in which the threats/comments are made is a deciding factor in whether the language is abusive or not. I mean, yeah it's "just words on a screen" or whatever people want to say, but in the end a real life person is reading it and (typically) a real life person wrote it, and the person on the receiving end definitely knows this and it usually (and that's conservative)will affect them similar to non-online interactions. Your defense of Linus' speech is almost word for word the kind of defense people like those in that stupid loving #gamergate poo poo use to defend themselves. Language has power beyond words spoken literally person to person in real life like you seem to think does, and just because it's (semi)anonymous in most cases, or even just disconnected through an email chain with your acutal name on it, it still affects most people to (at the very least) almost the same degree.
|
# ? Jan 29, 2015 19:55 |
|
NovemberMike posted:I can't remember who it was, but there was a contributor that was basically considered the leading expert on a certain space. I can't remember if it was memory management or networking or graphics or security or what, and it's not particularly important. The important bit was that this was an old unix greybeard dude that built everything in this space originally so when he says something you listen. Linus didn't listen, he heard something he didn't understand, mixed it up with a different bug and started bitching at the guy to stop being retarded. They go into a bit of a back and forth and now the dude is building an OS for some weird architecture that was obsoleted in the 80s instead of contributing to Linux. I don't mean to pick on you or anything, but I found it funny that this incredibly vague post was in response to someone asking for a "specific example".
|
# ? Jan 29, 2015 20:06 |
|
Hammerite posted:I don't mean to pick on you or anything, but I found it funny that this incredibly vague post was in response to someone asking for a "specific example". Although the Z80 isn't a particularly weird architecture, it's just old. The 6502 port is a lot more challenging.
|
# ? Jan 29, 2015 20:29 |
|
I want people defending Linus in this thread to resolve disagreements with coworkers the way Linus would and let us know how it turns out for them.
|
# ? Jan 29, 2015 20:35 |
|
Hey all, let's get this thread back on the topic of horror by clearing up some misconceptions about a language that DailyWTF has everyone thinking is the worst thing ever. I know that, even though I program in it, I'm guilty of propagating the hate as well. That is why I am now posting IN DEFENSE OF MUMPS Side note: The commented code can be kinda hard to read without syntax highlighting. If you use notepad++, someone's made a custom language for it to highlight MUMPS code: http://npp-wiki.iwi.me/index.php?title=User_Defined_Language_Files#M First let's talk a little bit about MUMPS (or M) syntax, and why it can kinda lend itself to horrifying code if you are a dick developer. The first thing to know is that every MUMPS command can be abbreviated to one or two characters. This can, if you're good, lead to very compact but still readable code that doesn't take a long time to type out. If you're an rear end in a top hat, you can write nightmarish garbage. The second thing to know is that MUMPS doesn't have an reserved words. In the same routine, X can be the name of a variable, the command eXecute, and the name of a subroutine. The MUMPS compiler (or interpreter, depending on platform), figures out which one you want based on context. It's able to do this reliably because whitespace is semantically meaningful in MUMPS. One space separates a command from its argument. Two spaces separates commands from each other. Again, this can be convenient or a tool of the devil depending on who you are as a dev. Some basic M commands: Set (s) - Sets a variable to a value. Usage is: s var = value Read (r) - Reads input from the console into a variable. Can optionally display a message. Usage is: r "message to display",varToRead Write (w) - Prints output to the console. Usage is: w !,"Hello world!" ;Note that the ! ;operator represents a newline and that the semicolon begins a comment. All M comments are one line. Do (d) - Calls another subroutine/routine, or begins a nested block of code, such as within a loop or if statement. Usage for subroutine call: d foo^BAR(arg) ;calls the foo subroutine of ;routine ^BAR and passes arg as an argument to the subroutine. eXecute (x) - Executes a string's content as though it were code. Does not do any validation on the code contained in the string, just blindly tries to run it. It's commonly used to do things like build code based on user input. Usage: x "w ""careful with me, I can be a nightmare!""";Note that you escape quotes in an M string by doubling them up. New (n) - Declares a new copy of a variable of the given name (and sets it to null) local to the current stack frame. M is dynamically scoped so a subroutine has access to its own locals and the locals of every stack frame beneath is except locals whose names are shadowed somewhere along the way. This one leads to some of the biggest horrors because the ability to pass arguments to a subroutine weren't part of early M specs, so subroutines had to assume certain variables. In fact, New wasn't added to the spec until the 90s. Until then you just kinda started using whatever variable names whenever you wanted. Some developers still think they're being super clever by using assumed variables all over the place, but usually they're actually making code that can never be updated again. Quit (q) - It's both a BREAK statement and a Return statement. When used in the outer scope of a subroutine, it ends the subroutine and optionally returns a value. When used in a nested scope (such as in a loop), it breaks out of that iteration of the loop (but the loop keeps running). You can also use it as a pre- or post-conditional on a loop to indicate when a loop should stop running. Some other commands: If (i), Else (e), For (f). ------------------------------------------------------ OK, now that I've introduced some basic syntax, let's look at some M code. I think this shows the strengths of the language, as I have to type very little to achieve a simple result. The following program prompts a user for a number of times to run a loop, then loops that many times, printing the current number. However, it quits at 100 iterations no matter what: code:
Now we've had a basic example of how compact you can make MUMPS code. Now let's talk about the real reason I think it's awesome. You see, MUMPS has its own built in data structure. M was created by a hospital to store a medical database. As a result, they build into the specification a model for how data is stored. All permanent data is stored in the form of b-trees known as "globals". Some documents refer to them as "sparse" b-trees because you can have subscript levels that have no values and simply point to a lower subscript level. There are no arrays in M, although if you create a b-tree with only one level with only numeric subscripts, some interpreters are smart enough to treat it as an array and give you O(1) access to indices. If you know the subscript of a global that holds your data, access time is O(1). If you're traversing the tree to find data, the average case access time is O(log n) where N is the number of subscripts in the tree. Worst-case would be O(N) if your data was at the very last possible subscript in the sort order. Local arrays and globals have the same structure. The only difference is that one is in memory and one is on disk. You make a global by prefixing the name of the array with a "^". For example, if I write: s ^MYGLOBAL(1)=1 the MYGLOBAL array is now permanently stored on disk (unless I wipe it out with a Kill command). There's two additional really cool things about M arrays/globals that makes them an awesome convenience that I miss a lot when working in other languages. 1-Subscripts in an array are placed in sorted ASCII order automatically. Yes, that's right, you can sort for free in M without any special code or data structures to handle it. It just happens. 2-Because the data structure is part of the language specification, the compilers and interpreters are aware of the physical structure of the files and memory structures used and have extremely optimized functions for traversing and accessing data. Most pure data access is always O(log n) average case, and you don't have to do anything special to attain that. Let me explain a little more of what I mean by subscripts. A subscript is kind of like an array index, except that any valid string (up to *I think* 200ish characters) can a subscript of a global. For example, take this code: code:
code:
Now it's time to introduce two new commands that really tie together the power of M. $Order ($O) and $Query($Q). $O traverses a level of the tree, stopping at each subscript that exists. $Q traverses the entire tree, stopping at each subscript that contains data. $Q functions in a sortof depth-first fashion (e.g., it searches all the children of ^X(A) before moving on to ^X(B) and so on). $Q is extremely fast because it knows the physical structure of the global on disk and can literally walk over it without attempting to access any non-existent subscripts. $O is useful when you have a global with a known structure and you want to look at the data at a particular level. For example, imagine a global with the following structure: code:
code:
Another cool trick of globals is the ease of making indexes through inversion. For example, if I want to be able to look up employees by name, I can make a second global like this: code:
Now let's look at $Q. I'm going to demo this one by sharing an actual use-case I employed it for recently: A cheap natural sort. As you know, most sorting schemes will sort "ab10a" before "ab1a", but humans would typically expect the opposite order. I had a use case where I needed to perform a natural sort (aka human-friendly sort) in M. $Q Does this dirt cheap. Assume that I start with an array like the following: code:
code:
code:
Now we need to cat these things back together and put them into a line-structured array like we started with to preserve order. As you can imagine, this would be a huge hassle with $O since these subscripts can go arbitrarily deep. Step in $Q. $Q knows the actual structure of the global as it's stored in memory/on disk, and can walk over all of the paths of a global that have data, walking them in sorted order. code:
There's other commands and functions that can do equally slick poo poo if you are more familiar with the language, but the use cases are less general so I won't get into those. One final note before I conclude. I frequently miss M's string function's when I'm coding in other languages. M has a ton of built-in string handling it all works pretty intuitively. $e you saw up above, here's some others: $l(string) returns the length of a string $l(string,delimiter) returns the number of pieces in the string as broken up by the specified delimiter. The delimiter can be a string of any length, by the way. $p(string,delimiter,n) returns the nth substring of string as broken up by the specified delimiter. Can also replace the piece found using an optional parameter. $e can also be used to replace a substring. You specify the source string, the range you want to replace, and the string to replace the range with. $f(string,substring) returns the ending position of the substring within the string. Searches for the first instance unless you specify an index to start from. $r reverses a string $t can replace all instances of one character in a string with another character. $l+$p is just so useful for breaking up strings and parsing them that I go crazy whenever I have to resort to poo poo like Mid in VB or the various horrors Java inflicts for string parsing. A final useful function is pattern-matching. The syntax is <string>?<args>. It returns 1 if the string meets the args and 0 if it doesn't. It's basically a simplified regex, but with friendlier (arguably) syntax. Here's an example of using pattern matching to confirm that a string containing an SSN complies with SSN formatting: code:
3N = "exactly 3 numbers" and then 1"-" = "exactly 1 hyphen" and so on. You can specify either string literals or certain predefined character classes. N= number, A=upper case or lower case letters, C = ASCII control characters,L matches lower case chars, U matches upper case chars, and there's a few more. You can specify ranges. This matches a string that is between 1 and 3 letters: string?1.3A This matches a string that is arbitrarily many characters (and only characters): string?.A If one side of the period is blank, the boundary is infinite on that side, so you can specify only a minimum or maximum count if desired. Thought it's not quite as powerful as regex, I think it's way more human readable most of the time, which makes it easier to debug and maintain later. To conclude, M is a pretty powerful language that can actually make a lot of common data-driven work easier. If your application's workload is heavily dependent on organizing and retrieving data, I think it's pretty pleasant to work with. It's great as a back-end database. Please use something modern for your client, however. I like working in it a lot. If you want to try it out, GT.M is a free, open-source implementation of MUMPS that anyone can download and play with for free. This has been your "weird, misundersood language" care post of the day.
|
# ? Jan 29, 2015 20:40 |
|
In "the real world" it's not abusive to make statements of the form Linus made either. That is, saying "people that read bytes one at a time deserve to be retroactively aborted" is not abusive. It's hyperbolic nonsense and meant to be taken that way. The same goes for saying somebody likes seeing their name on "acked-by" lines, in the context that it was in. I have no idea why you're talking about people saying other people should be raped, Linus is not doing that. People that find the word abusive useful for being unspecific and non-falsifiable have begun using it to talk about Linus. And other people repeat it word by word like the good little followers they are.
|
# ? Jan 29, 2015 20:43 |
|
sarehu posted:In "the real world" it's not abusive to make statements of the form Linus made either. That is, saying "people that read bytes one at a time deserve to be retroactively aborted" is not abusive. It's hyperbolic nonsense and meant to be taken that way. The same goes for saying somebody likes seeing their name on "acked-by" lines, in the context that it was in. Hyperbolic or not it's extremely inappropriate to say that someone is too stupid to live when you're actually trying to work with other people. Even (especially) if you're in a supervisory role, demeaning people that you don't agree with/who are actually wrong is Very Inappropriate and extremely unconducive to continued contribution/constructive interaction. And the reason I brought the other stuff up is because it's literally the same defense that they use. "Well I say it all the time so I wouldn't be offended if someone said it to me, so you shouldn't be offended either and you're dumb for being offended" is actually a pretty antisocial way of looking at this kind of thing. Like I don't know how anyone considers saying even the stuff Linus does appropriate for... anything really. If you did it IRL you'd probably be fired (as well you should). Doing it online on a mailing list for a project he runs doesn't make it any more appropriate than doing it in real life to one of your subordinates at work. The only difference is that he doesn't have anyone above him to tell him to knock that poo poo out for driving valuable contributors away.
|
# ? Jan 29, 2015 20:54 |
|
sarehu posted:In "the real world" it's not abusive to make statements of the form Linus made either. That is, saying "people that read bytes one at a time deserve to be retroactively aborted" is not abusive. It's hyperbolic nonsense and meant to be taken that way. The same goes for saying somebody likes seeing their name on "acked-by" lines, in the context that it was in. I'm pretty sure the majority of people would find it hostile if someone said they should be retroactively aborted.
|
# ? Jan 29, 2015 20:56 |
|
Soricidus posted:Coding horrors: posting that should be retroactively aborted.
|
# ? Jan 29, 2015 21:06 |
|
sarehu posted:You have to be emotionally retarded to interpret that retroactive abortion comment as vitriolic. Linus says emotionally retarded things a lot. Like if someone else said what he said you'd totally be saying it was emotionally retarded. I mean, "retroactively aborted", jesus gently caress is he 14?
|
# ? Jan 29, 2015 21:25 |
|
return0 posted:Linus says emotionally retarded things a lot. Like if someone else said what he said you'd totally be saying it was emotionally retarded. I mean, "retroactively aborted", jesus gently caress is he 14? Yeah. Some people ITT seem to think there's a distinction between "being a dick" and "being abusive". In reality, there isn't. Whether something is "abusive" might be somewhat dependent upon how the target receives it depending on your definition, but if you say something that would cause a reasonable person to think "gosh, you're kind of a dick", then you are dishing out abuse, full stop.
|
# ? Jan 29, 2015 21:27 |
|
Snapchat A Titty posted:I'm pretty sure the majority of people would find it hostile if someone said they should be retroactively aborted. You're not responding to a post that was talking about whether something should be considered hostile. That does not mean the same thing as the word abusive.
|
# ? Jan 29, 2015 21:33 |
|
Why do people keep saying "some people ITT" or "people defending Linus". It's just shrughes.
|
# ? Jan 29, 2015 21:34 |
|
Linus Torvalds is an rear end in a top hat.
|
# ? Jan 29, 2015 21:38 |
|
Pie Colony posted:You seem really autistic Abuse and name-calling: terrible when Linus does it, but great when I do it!
|
# ? Jan 29, 2015 21:39 |
|
Deus Rex posted:Abuse and name-calling: terrible when Linus does it, but great when I do it! Context matters. We are on the something awful dot com forum, where there is an expectation for verbal jabs, and few assumptions of professionalism. Linus sends his stuff to public mailing lists for serious development projects, for which there is an expectation of professionalism.
|
# ? Jan 29, 2015 21:43 |
|
ryde posted:Linus sends his stuff to public mailing lists for serious development projects, for which there is an expectation of professionalism. LKML, the pinnacle of professionalism
|
# ? Jan 29, 2015 21:51 |
|
LeftistMuslimObama posted:IN DEFENSE OF MUMPS This is a joke right
|
# ? Jan 29, 2015 21:52 |
|
LeftistMuslimObama posted:Now we've had a basic example of how compact you can make MUMPS code. Now let's talk about the real reason I think it's awesome. You are suffering from a serious case of Stockholm syndrome. Which other languages do you have experience with? (Bragging about how a string can be "of any length" is really telling.)
|
# ? Jan 29, 2015 22:08 |
|
^You're confused. Obv a string can be of any length, what I said was that you can piece out strings based on delimiters that are of any length. This can be helpful if, for example, you want to piece out something that has a bunch of <br /> tags in it or something. And so far I've worked in M, ancient crusty VB6, modern VB.Net, C#, Java, and C. Avenging Dentist posted:This is a joke right Nope. I really think everyone who's super jaded on mumps is stuck maintaining really lovely code. Like, 90% of the MUMPS code out there is the M-equivalent of factoryfactorybeanproxyfactoryinitializer, but I genuinely think that for some applications it has inherent benefits that aren't present in other languages. However, we both post in a certain other thread so I know exactly what code you're looking at that would cause you to disagree with me
|
# ? Jan 29, 2015 22:09 |
|
LeftistMuslimObama posted:IN DEFENSE OF MUMPS Pssh, MagicFS is where it's at code:
LeftistMuslimObama posted:^You're confused. Obv a string can be of any length, what I said was that you can piece out strings based on delimiters that are of any length. This can be helpful if, for example, you want to piece out something that has a bunch of <br /> tags in it or something. That's not back-end anything! That's hell on wheels!
|
# ? Jan 29, 2015 22:11 |
|
Pollyanna posted:Pssh, MagicFS is where it's at I posted this before, but here's the same program in MUMPS: code:
|
# ? Jan 29, 2015 22:13 |
|
|
# ? Jun 13, 2024 04:29 |
|
Come see my new web framework, SQL on Minecart. edit oh noooooooooooo also that will break tables no matter what Pollyanna fucked around with this message at 22:16 on Jan 29, 2015 |
# ? Jan 29, 2015 22:14 |