1. 17

    From my perspective, these kinds of behaviors seem to creep up more on culture, person and practices threads. Could we try marking those tags as inactive and see if the site behavior improves/number of flags on comments drops?

    1. 12

      I expect for at least a while they’d be submitted and tagged with just programming. How much content relevant to culture/person/practices would prompt you to remove such a story? Would your answer change if all the comments are about that aspect of the story? Or if it’s the elephant in the room?

      Some test cases, in the hopes that they’re useful for figuring out how to draw a line:

      • A famous programmer dies
      • A famous programmer joins or departs a project and writes about technical issues they will/did encounter
        • and they were forced out for discriminatory behavior, though the post never mentions or refers to it
      • A study (academic or ad-hoc) of bug rate by language
        • and by development methodology (agile, scrum, tdd, etc.)
        • Would your answer to the previous change if it was a one-sentence mention of a correlation vs half the study?
        • How about if it was a one-sentence mention suggesting it for future work?
      • A retrospective on the author’s contributions to an open source project
        • that was paid work for their employer
        • and the employer is accused or held liable for discriminatory behavior, is a political party, or is a political advocacy group
        • Or the author thanks a business like Patreon or Github Sponsors for making their work possible
      • A blog post about the author’s first contribution to fix a bug in an open source project
        • and the PR is rejected
        • and the submitter believes it’s for discriminatory reasons
        • or the reasons given are explicitly discriminatory
      • A blog post about x86 minutiae from a programmer who famously advocates for discrimination
        • A blog post about why nobody should contribute to that famous author’s project because of their political views
      • A blog post about using ML to locate humans in video
        • in surveillance video from a military drone
        • that refers to the military or political conflict it will be or was used in

      And of course this all comes up again in comments.

      How do you feel about culpability? I’m thinking of sayings like “the standard you walk past is the standard you accept” that cast a failure to act as a position in favor of the status quo.

      1. 5

        Good test cases. Ones I’ll point at in particular:

        and they were forced out for discriminatory behavior, though the post never mentions or refers to it

        If the post is about the technical issues they encountered, I think it should stay. Them getting kicked out (or brought in!) due to discriminatory behavior is drama and only leads to poor discussion.

        and the employer is accused or held liable for discriminatory behavior, is a political party, or is a political advocacy group

        We had this happen with a newbie lobster who worked at Palantir–they were roasted with pointy questions before they could really represent their work. That was super shitty.

        A blog post about the author’s first contribution to fix a bug in an open source project

        I think this is fluff, and attracts fluff, unless the framing is explicitly “here is this super interesting technical thing that also happens to be my first contribution back”. Further subpoints all boil back down to drama.

        A blog post about x86 minutiae from a programmer who famously advocates for discrimination

        If it’s valid x86 minutiae it should be tagged assembly, and commentary about their political hobby horses is just as relevant as speculation on what configuration of genitals they prefer during intercourse. Users repeatedly dragging that up she be flagged and if needed encouraged to find communities with a more humanitarian focus elsewhere.

        ~

        I’m thinking of sayings like “the standard you walk past is the standard you accept” that cast a failure to act as a position in favor of the status quo.

        I think those sayings are troublesome because they by definition assume bad faith on the part of the people walking by. Also, I dislike them because they remove all shades and alternative interpretations of interaction in favor of plain “you’re either with us or against us”…and if folks keep asking for that sort of conflict, I think they’re gonna be rudely surprised by the outcomes they get. Blind tribalism doesn’t lend itself to healthy discussion.

        1. 5

          If the post is about the technical issues they encountered, I think it should stay. Them getting kicked out (or brought in!) due to discriminatory behavior is drama and only leads to poor discussion.

          I infer from this that you think drama should be removed. Can you define that term? Is it a heckler’s veto, such that any reading of “drama” into a post means it should be removed? Same for “fluff”? Especially with those being new, unspecific terms, I think the questions about where “how much content” mean a comment or story should be removed are vital.

          1. 5

            “Fluff” is the easier one to define here: pieces that are based in exceptionally common experiences but which are also going to probably get sympathetic upvotes. The example of “my first PR” is fluff because a) a lot of people have their first PR and b) what kind of asshole would flag such a thing. Fluff tends to have an advantage against other content in any memetic ecosystem lacking explicit pressures against such simple content. That simplicity is also why I have the exception for framing it as a real technical issue that just so happens to be somebody’s first PR.

            “Drama” is much harder, but as I use it: content that is significantly about the internal politics or disagreements inside some community. A test might be “if you replaced the people with other people could the problem be made to go away?” Donglegate could have been resolved with either party being replaced, Heartbleed could not. I believe that the corollary to this is that any discussion involving drama will ultimately involve calls to remove or reprogram other humans, and thus are inherently corrosive for a community such as ours to engage in.

        2. 3

          I personally feel that either all of your “discriminatory behavior” test cases should be in-scope for discussion within this community, or there should otherwise be an outright ban on anything that breaks the meta barrier (or not-strictly-about-hard-tech barrier), emulating something akin to a dry technical journal with a strictly-moderated comments section.

          But let’s be honest: there’s already precedent on this website for discussion of topics that intersect with computing; I’ve seen a number of well-upvoted/discussed stories including:

          • blog posts and updates from prominent community members about things happening in their lives
          • posts discussing history and context of open source projects
          • news stories about prominent community members
          • (this one may sound a little salty, but:) fluff pieces, rants, and straight-up advertisements written by darlings of the community
          • meta-tagged posts such as this one that explicitly encourage us to think critically about the community

          So IMO it’s at best not self-reflective and at worst intellectually dishonest to value critical engagement with topics that intersect in interesting ways with computing, except for the cases in which those intersectional topics touch on problems of discrimination and representation in tech. A strong message is sent to newcomers and passersby when they hop into the comments section, and see that many of the well-upvoted comments on this website are in fact hostile and intended to trivialize and demean when the topic at hand is actually critical to community health. Whether it’s meant to or not, this sends an unkind message to marginalized members of this community, and it will – as it has – homogenize participation on this platform over time.

          1. 1

            I distilled these examples to express a couple problems with defining and enforcing topicality.

          2. 5

            +1 from me.

            I’ve had a number of long discussions with 35 recently over whether retiring those tags would skew the amount of incidents back down to normal.

            1. 3

              I agree with you those tags lead to toxic discussion more than others, but I think it’s worth emphasizing that a lot of @itamarst’s examples are in a person thread.

            1. 14

              While suckless as a way to build software is definitely interesting (and a lot of the benefits of suckless come from disregarding edge cases, internationalization and accessibility), I’d argue that suckless as a project is something one should handle really carefully.

              They’re doing literal torch hikes through southern Germany at their conferences, fighting online against “cultural marxism”, and their mail server has the hostname “Wolfsschanze” (see: https://twitter.com/pid_eins/status/1113738766471057408)

              I recommend reading this thread (with a suckless.org developer with enabled hat speaking officially) and looking at this photo from one of their conferences.

              1. 19

                The topic pops up here and there, and one should always consider that Lennart Poettering used this bait to easily escape from a discussion about his software that I personally think should take place. Suckless is not directly a coherent group and more of a group of like-minded individuals, so I’m careful to speak “for” the project even though I’m first chair of the legal entity suckless.org e.V..

                What I can say is that we are probably one of the very very few software projects left that do not politicize. We have members from all political spectrums, but make it work, because we only discuss software and nothing else. Those disagreeing with us or unaccustomed to non-political software projects try to put us into a corner, but it makes no sense when it is used to disregard the suckless philosophy itself, which is non-political.

                Torch hikes are nothing unusual in Germany and there was no political intent behind it. Though I do understand now that it might send a different message worldwide, I expect more cultural sensibility from every observer before “calling us out” for allegedly re-enacting nazism or celebrating a Charlottesville march, which is a ridiculous assessment.

                1. 23

                  One should always consider that Lennart Poettering used this bait to easily escape from a discussion about his software that I personally think should take place.

                  Perhaps, but I don’t think calling out getting emails from a wolfsschanze host is that unreasonable to be honest; as I mentioned in my other post I’m not going to attach far-fetched conclusions to it but I do find it in pretty bad taste. At any rate, to ask it plainly, what’s the deal that?

                  1. 3

                    There is no such thing as “non-political”, because we live in a society with power imbalances. Therefore not taking an explicit political stance, translates to implicitly supporting the status quo, whatever that status quo is in a given society at a given time. You’ll find that people in underrepresented demographics will largely avoid your project as a result, regardless of the political views among members of your project.

                    If supporting the status quo is what you intend to do, then that is one thing. But please stop presenting it as “non-political”, because that is simply not the reality of it. It only looks non-political if you yourself are in a position where the status quo benefits you. Which I am also - so this is not a personal accusation, to be clear. But it is something you need to be aware of.

                    1. 17

                      not taking an explicit political stance, translates to implicitly supporting the status quo

                      No no no, I cannot agree with that. Let’s take an example. I’m working on a crypto library, that on many aspects is very close to the Suckless ideals: it’s in C, it’s small, it’s easy to integrate into other projects… One of the motivations for it was to fight unnecessary complexity. A fairly political goal if you ask me: if software becomes as simple as I think it can (and should) be, the changes could be felt throughout the global economy itself.

                      My project also has an implicit endorsement of the status quo: it is written in English, and I have no intention to translate the documentation, or even the web site to other languages. Not even French, my native language. Sorry, you need to learn English to use my project. That’s kind of an implicit endorsement of US hegemony. Not that I’m very happy about that, but not fighting that fight does make me reinforce the ubiquity of the English language.

                      But there’s no way my project can have a stance on everything. Its stance on many many subjects is really neutral. It does not fight nor reinforce the status quo. Veganism? Patriarchy? White supremacy? I hardly have a community to speak of, there’s just not enough people to warrant something like a code of conduct. That does not mean my project implicitly rejects vegan transgender black women. In fact, I do hope they’ll feel as welcome as anyone else. And right now, I believe being nice to whoever contacts me is enough.

                      1. 8

                        I couldn’t have put it better, thanks for sharing your thoughts. I always like to consider the example of Chemistry: In the 19th and 20th century, German scientists were leading in chemistry and most papers were published in German. Chemistry students were more or less forced to learn German to understand these papers, and German became the lingua franca of Chemistry, which has changed to English though.

                        In computer science, English is the lingua franca. I don’t think it’s exclusionary to only offer software documentation and code comments in English.

                      2. 7

                        That is a good point and I understand what you mean with that. For our conferences, we actually offer those who are unable to attend due to financial reasons to pay their travel expenses and accomodation for them, which was greatly appreciated especially by younger programmers who often don’t have the means to fund such a travel.

                        Apart from income differences, that might be a deciding factor being unable to attend a conference and meeting like-minded people, I see no other factors that might hinder someone from joining us. You basically only need an internet connection and a computer. The computer doesn’t even need to be that fast, unlike if you, for instance, intended to work with deep learning software.

                        And if you still criticize the conferences for being exclusionary in some way: Most communication takes place on a mailing list and IRC, many people use pseudonyms. Factors like race, country of residence, gender are thus irrelevant and even non-determinable, if you choose to, and the development on mailing lists and IRC is the main way development happens and there’s no need to do anything else to partake or make submissions.

                        So, again, I know what you mean, but suckless is not an example for a project supported by the status quo. Most people disregard suckless as too extreme in terms of software philosophy and conclude that we would also be extreme in other areas of life, but suckless, for me, is software zen, and everyone is welcome to adopt this philosophy.

                        1. 5

                          Factors like race, country of residence, gender are thus irrelevant and even non-determinable, if you choose to, and the development on mailing lists and IRC is the main way development happens and there’s no need to do anything else to partake or make submissions.

                          This is a common point of view among those in privileged demographics. However, it is also a misunderstanding of how underrepresented people in demographics actually choose where to hang around and contribute, and why.

                          Imagine for a moment that you are someone in a demographic who’s frequently a target of harassment. The exact demographic doesn’t matter much - maybe you’re black, or you’re a woman, or you’re transsexual, or whatever else. But for the sake of the example, imagine that you are a woman.

                          Now, there are two different communities for you to choose from:

                          1. A community that says “we don’t police member’s politics, this is purely a tech project”.
                          2. A community that says “we actively welcome women”.

                          Where are you going to feel safer? In the second community - because there, it’s clear that if someone finds out you’re a woman, them harassing you over it isn’t going to be tolerated and the harasser is going to be thrown out.

                          In the first community, you just kind of have to stay quiet about your identity, have everyone assume that you’re a guy, and hope that no-one finds out the truth. If they do - maybe there’s some persistent stalker following you around and posting about you in every community you join - you can basically predict ahead of time that harassment and other discriminatory behaviour is not going to be acted upon, because “people’s own politics are not policed”.

                          In a way, there are parallels here to how gay people are “tolerated” in many countries. It’s “fine so long as you don’t bother me with it”, which effectively means that you cannot speak about it publicly or have a public relationship with someone of the same sex, because then the cover falls away and you are no longer “okay”, because your identity can no longer be ignored. Harassment (and often violence) promptly follows.

                          “Don’t ask, don’t tell” policies like this don’t make for healthy, diverse environments. They make for environments in which the status quo is preserved, and where the only way to be vaguely safe as a minority is to never tell anyone that you don’t fit into that status quo. This is not inclusive, and it absolutely does support the status quo. Those who fall outside of it will silently move on to healthier communities.

                          I would like it if “who you are doesn’t matter, it’s about the project” were the reality, I really would. But that just isn’t how things work by default in a society with power imbalances, and the only way to get there is by actively enforcing it - and that means taking a political stance, one that disavows discriminatory behaviour and harassment.

                          1. 12

                            Now, there are two different communities for you to choose from:

                            1. A community that says “we don’t police member’s politics, this is purely a tech project”.
                            2. A community that says “we actively welcome women”. Where are you going to feel safer?

                            I don’t know how the suckless community is, but I am convinced that, if I had a dime for every company, group or project that claimed to “actively welcome women” or “promote equal opportunity for everyone” or “have a zero tolerance” towards discrimination, sexual harassment or any other one of the multitude of abhorrent behaviours that plague our industry – and then turned out to be cesspools of prejudice and discrimination, I would be so outrageously rich that even thinking about it is embarrassing.

                            (FWIW, in addition to witnessing it enough times that it’s part of why I seriously contemplated switching careers at one point, I have some first-hand experience with some of that: my most useful skill, career-wise, has been an impeccable accent. Slightly Irish-sounding (which lots of folks in the US seem to fetishize for some reason), which I developed purely by accident (I’m from nowhere near Ireland, I’ve never been there, and I am not a native English speaker) and is extremely embarrassing every time I’m talking to someone who has a real Irish accent. I certainly had it easier than my black or hispanic colleagues – most Western managers of various importance in the corporate hierarchy could immediately identify them as worthy of contempt, whereas in my case it could take weeks before they realized I’m not a white expat, just some Eastern European programmer.

                            Edit: in case anyone’s wondering – the reason why I can be so light-hearted about it is that, for better or for worse, this experience has been largely confined to the workplace, after-work drinks, conferences and the like. I got to live with it for like 40 hours a week at most, and never really got a taste of it before well into adulthood. I always had alternatives and always had refuge – I could always put up with it on my own terms, which most people can’t)

                            Coming from a culture whose closet is not devoid of skeletons in this department, either, I certainly agree that the mere act of not discussing race, or gender, or ethnicity is in itself a privilege that not everyone has. And that it’s up to every one of us to actively fight discrimination, and to make the world safer and more inclusive for those whose voices are silenced by intolerance. But I don’t think it’s reasonable to ask people to integrate that in every single thing they do. Even activists don’t fight the good fight 24/7, I don’t think it’s unreasonable that some people choose to do it only to a limited extent, or in a possibly misguided way, as part of their hobby project.

                            1. 9

                              I might’ve been a bit unclear. A don’t-ask-don’t-tell approach can be taken by members, if they prefer (many communities don’t provide that luxury and e.g. require clear-name-contributions), but doesn’t have to be. We just don’t care about genders or other aspects other than your coding skills. I see that you have a different opinion on this, which is cool, but the suckless philosophy does not extend beyond software aspects and I personally (not speaking for the group) don’t see a reason to extend that.

                              1. 5
                                1. A community that says “we don’t police member’s politics, this is purely a tech project”.
                                2. A community that says “we actively welcome women”.

                                The two may not be mutually exclusive. Although there’s certainly a huge overlap, there’s a difference between advocating the revocation of women’s right to vote, and actually harassing women in a particular group, be it an open source project or a chess club.

                                A president of a chess club, or a maintainer of an open source project, can hardly be expected to be aware of the political views of the members, no matter how extreme. He could pry, but that would be uncomfortable for many people, and ultimately exclusionary. We could do it anyway, and define the range of acceptable political opinions, and exclude the outliers. We could exclude traditionalists, or we could exclude gay marriage supporters. We could exclude white supremacists, or we could exclude black panthers sympathisers.

                                In my opinion this would be neither ideal nor possible. As long as people stay courteous and focus on working towards whatever common goal the group has, we could actually have, say, gay and homophobic people working together. So we probably want to define a range of acceptable behaviours instead. For instance, revealing your sexual preferences is generally acceptable (unless maybe you’re too loud about this), and revealing your contempt for people who don’t share that preference is generally not.

                                That’s what codes of conduct ultimately do: they don’t talk about the politics one might have outside of the group, they define a range of acceptable behaviours within the group. Yes, that range will tend to filter out people with some particular political opinions. Few white supremacists will follow a black maintainer. But I would think real hard before I make that filter explicit.

                                I’ve seen it done, and it’s not pretty. I’ve heard of someone being disinvited from some conference because of their political beliefs, even though they (allegedly) never let them seep through or ever behaved inappropriately. I have also heard of someone being fired over their sexual practices (at the behest of SJW, ironically). And at the same time, some people who seem to engage in genuinely harmful behaviour (such as straight up sexual harassment) are not excluded. My suspicion? Enforcement goes after the easy targets, instead of going after the important ones.

                                1. -5

                                  we could actually have, say, gay and homophobic people working together.

                                  Honestly, this free speech absolutism is whack and that’s why I’m out.

                                  You don’t know what the fuck you’re allowing. I do - you’re allowing someone who literally spreads hate to walk into work, meekly get some shit done, then go home to post on the internet how trans people are all pedophiles and should be killed.

                                  Fact is, you can’t divorce your life from politics because where many of us stand, all minorities, live under the continuous threat that we’ll be murdered, denied service, beaten and reviled all because some free speech absolutist like you envisions a future where racists and their victims can work side by side.

                                  My community just had their 12th death. Death because people like you continually give deference to allow our killers to bask in their hate speech until one of them spots us and brutally kills us.

                                  You enable this. I’m so happy (not) to be the sacrificial lamb for your perverse ideology.

                                  1. 2

                                    we could actually have, say, gay and homophobic people working together.

                                    Honestly, this free speech absolutism is whack and that’s why I’m out.

                                    Who said anything about free speech? I never said hate speech should be allowed. Actually, I do believe we free speech should have limits (though I’m not sure exactly what those should be), and people who cross those limits should be punished.

                                    The question is who should punish them, and how. Forums can (and most probably should) ban hate speech however they can. Police and Judges could intervene whenever appropriate. The worst offenders could be sent to jail.

                                    Wholesale ostracism though? Exclusion from all groups, not just wherever they spread their filth? That’s a death sentence: no job, no home, no shelter. Are you prepared to follow through all the way? (Not a rhetorical question: sometimes, killing your enemy is the right thing to do. But this question is so fraught with self serving cognitive biases that one must be very careful about it.)

                                    Then there are false positives. The guy who was fired over his sexuality? He practised BDSM. One way of putting it is that he liked to whip bound women. When he was outed, there was an SJW outcry about him being some twisted archetype of patriarchy that should be removed from any public position.

                                    I don’t know the guy, I haven’t investigated, so I cannot presume. I’m not even certain this story is even true. But I guess this may have been a huge misunderstanding. See, done properly, BDSM is very careful about safe words, physical and psychological safety… everyone is supposed to enjoy this, including (perhaps even primarily) the bound and gagged “victim”. Being a good dom typically requires empathy and respect for their sub. Pretty far from the simplistic image of the misogynistic man taking pleasure from the suffering of women.


                                    Going back to gays and homophobic working together, that probably requires that they are mutually unaware of their position. It’s when they do become aware of their position that we have a problem, and the group may have to make a choice. My first step would be something like “you don’t like them being gay? deal with it or get the fuck out”. If it’s just gay people being uncomfortable, we may need to know why. If it’s because the other dude displayed an homophobic attitude within the group, that’s pretty obvious grounds for exclusion. If it’s because gay people learned of his views outside the group, this is more delicate, and I honestly have no right answer.

                                    The problem is made even harder because actual bullying, embarrassment, and other inappropriate behaviour within a group, are often hard to see for anyone but the victim. Hence the temptation to rely on more visible, but less reliable, external signs.

                                    For instance, let’s imagine: religious people and atheists working together in the same group. One atheist have written in their blog about how religion is stupid, unfounded, and how religious people are either critically misinformed, or just plain delude themselves. Oh and by the way if there is a God, it’s morals are highly questionable at best. So there we go: no personal insult, but a harsh criticism and a good dose of blasphemy.

                                    Should we exclude this atheist from a chess club because some religious people in that club feel uncomfortable being next to someone who has written a blasphemous pamphlet? Should we exclude the religious people from the club because wearing a cross, a star, or a scarf makes the atheist uncomfortable? Depending on who you ask, you’ll have very different answers.

                            2. 4

                              On the other hand, I don’t think it’s realistic to expect every project to look in depth at difficult social problems and form some sort of consensus on how to best deal with it.

                              You’ll find that people in underrepresented demographics will largely avoid your project as a result

                              Why would that be the case?

                              1. -4

                                On the other hand, I don’t think it’s realistic to expect every project to look in depth at difficult social problems and form some sort of consensus on how to best deal with it.

                                I think that’s entirely reasonable. This is pretty much the basis of community management in general. It doesn’t even need to be done by the core developers, but someone in the community needs to do it, if you want a healthy community.

                                Why would that be the case?

                                Because they know that their safety is not assured in communities that refuse to take an active stance against bigotry of various kinds. I’ve gone into more detail about this in this other subthread.

                                1. 4

                                  Because they know that their safety is not assured in communities that refuse to take an active stance against bigotry of various kinds.

                                  But there is a difference between belief and action. If someone is actually doing something bad within the project then obviously that’s an issue. If someone just believes something you disagree with (whether you label it bigoted or not) then refusing to work with them in a non-political atmosphere just makes you seem like a bit of a dick, IMO.

                              2. -4

                                There’s no such thing as “non-political” software projects because any political actor can decide that the way your software project run things is bad and should be made to change. And if you resist this, you find yourself in a political conflict, even if you didn’t want to be.

                                1. 1

                                  Why would you care what a political actor thinks about your free software project? Do you mean an actual national politician? Why would they be concerned with a free software project?

                                  1. 1

                                    No, anyone trying to argue that a software project should change their practices for political reasons is a political actor with respect to software, not just national politicians. Tech industry activists are political actors. joepie91 in this thread is a political actor. I’m a political actor too, for trying to prevent other political actors from carrying out their will.

                              3. -1

                                What are you doing to keep this kind of toxic behaviour from forming inside of the suckless communities you participate in?

                                You have not denied that these people exist in your community. How are they not a problem for you?

                                1. 3

                                  Calling people toxic, I think, is the wrong approach. What matters is how people behave in the context of the community. I couldn’t care less about their private political/social/other endeavours as long as it doesn’t affect their actions within the community.

                                  I don’t know why there is such a push to politicize software projects, from the inside and outside. It may make something look more homogenous on the outside, but I believe it mostly creates social stress and shifts the focus on issues that shouldn’t be a problem in the first place. But this is just my opinion, and I don’t think there’s a true or false answer to that. It heavily depends on your Weltanschauung.

                                  1. 1

                                    I’m sorry, my first approach was a bit antagonistic and too political because I tried to keep my questions short.

                                    People sometimes express their political ideologies in behavioural ways, which might cause exclusion and secularity in the communities that they take part in. I haven’t been much in contact with the suckless community, although I have used and I respect the software and the philosophy, but I have seen communities suffer this. I have no prejudice, but toxic (extreme, hateful) ideologies do lead to toxic behaviour, especially in like-minded groups where it can be cultured. This is why people feel the need to keep them from spreading to their own group.

                                    Have you noticed any exclusive or secular behaviour in the suckless communities that you take part in? If yes, what have you been doing to counter it?

                                    1. 2

                                      Have you noticed any exclusive or secular behaviour in the suckless communities that you take part in? If yes, what have you been doing to counter it?

                                      No, I’ve never seen such secular behaviour like that. The conferences we organize have always been very harmonic and there was never such a push or even a culturation. Thanks though for elaborating what you meant, and I have to say that I’ve seen this problem occuring within other communities. I am and will be very careful that this won’t happen within our community.

                              4. 20

                                I was subscribed to the suckless mailing list for a long time (though no longer, simply out of disinterest), and never had the impression I was dealing with a group of extremists (other than a rather extreme take on software). I don’t recall any political discussion off-hand, and would certainly have unsubscribed if people started ranting about “cultural Marxism” and the like.

                                I read the Lobsters thread you linked and there are many things I personally don’t agree with, but I also find it’s a lot more nuanced than what you’re suggesting (specifically, there was a lot of confusion what was even intended with “Cultural Marxism”). I saw that on HN you (or someone else?) linked to an old tweet of yours that screenshotted just the initial “Cultural Marxism” mention of FRIGN, and I think that’s unfairly out of context. That’s not a defence of the contents if his posts, only a defence of treating people with fairly and with kindness.

                                I find putting the picture of the torches next to literal Nazis and the “Unite the Right” rally incredibly tasteless and offensive. Note the suckless event happened before the Charlottesville march (not that it really matters). [edit: incorrect, see follow-up]. I’ve done torch hikes – they’re actually used to celebrate the end of Nazi occupation in my home town every year and participated regularly. I’ve also done them with scouts just for the fun of it. Maybe some day someone will dig up a picture of that too and put it next to a bunch of Nazis to prove a point… I’m very disappointed anyone would try to make a point like that, here or elsewhere. This part of your post in particular is really bad in many ways IMHO; it’s really not acceptable to just sling around grave insinuations like that based on a friggin’ contextless photo of what is almost certainly just a harmless social event.

                                The mail server belongs to an individual (@FRIGN here). I agree it’s in very bad taste, offensive, and that Poettering was completely right in calling that out, but it’s hardly proof that “they’re a bunch of Nazis”. I find the jump from “edgy hostname” to “literal neo-Nazis” a bit of a leap.


                                I doubted for a long time if I should post this reply as it has the potential to spark a long heated discussion, but I find public casual comparisons to Nazis in particular serious enough to warrant something of a rebuttal.

                                1. 6

                                  Note the suckless event happened before the Charlottesville march (not that it really matters).

                                  I just want to comment on this one factual point, according to the suckless website this event happened in September 2017, just a couple of weeks after Charlottesville.

                                  https://suckless.org/conferences/2017/

                                  I do think the proximity in time to the Unite the Right rally is important, especially given the insistence that they were just enacting a German cultural practice.

                                  1. 6

                                    Oops, I checked the website and I misread that date as being on “2017-01-03”, instead of “2017-09-(01-03)”. How silly 😅🤦‍♂️

                                    I’m not sure it matters all that much though; it still seems incredibly tenuous at best. This happened on the other side of the world and I’m not sure if the entire world should tip-toe around sensitive topics in the United States. Were these people even aware of Charlottesville? And to what degree? Me, personally, I mostly stopped following US news since the 2016 election as I find it emotionally draining and serving little purpose as it’s not in my power to do something about anyway.

                                    Either way, I’d sure like to see some more evidence exactly because I take it serious: you just don’t go around insinuating people of such serious things with such slim “surely it can’t be coincidence…” type of stuff.

                                    1. 30

                                      I was at the torch hike and hadn’t even heard of the Charlottesville marches then. When I heard the accusation that we in some way celebrated it, which would make no sense in the context of a software conference, I first had to look up what they were.

                                      The thing is, Americans tend to overestimate the importance of domestic events like the Charlottesville marches and think that nothing happens in the whole world and, e.g., we Germans are just sitting at home and waiting for something to happen in the USA to witness it.

                                      The truth, and I think everyone would agree that this also makes much more sense, is that torch hikes are perfectly normal in Germany. I have an understanding for this cultural misunderstanding, and I’ve been guilty of those, as well, but it doesn’t help when one continues to spread this nonsense that this torch hike was some political event every time suckless is discussed here.

                                      To give an example for how normal torch hikes in Germany are, there is a so-called Sommertagszug in the Kurpfalz which also involves torch hikes at night. They are also offered by tourist organizations, e.g. Breitbach Klamm.

                                      1. 8

                                        What’s with the mail server host name though? Do you think that’s fine?

                                        1. 2

                                          It bothers me that he is actively ignoring this question and by saying nothing, he is saying enough.

                                        2. 2

                                          As an American, thanks for sharing your perspective. It makes me wonder if the Internet, and particularly social media, make it too easy to carelessly make connections between things that should remain disconnected. Maybe Facebook’s stated mission of making the world more connected (whether or not that’s their real mission) isn’t a totally good thing.

                                          1. 5

                                            It definitely comes at a cost. Still, as I could see from my own experience, after a few years one gets more careful with culture-relative judgements. There are still many things Americans do that I don’t quite understand or find interesting.

                                            To give an example, I found out a few years ago that the German “mhm” (i.e. the expression to acknowledge you are listening to someone while he speaks) is often interpreted by Americans as a “huh?”. You could imagine how much confusion that caused.

                                            Cultural differences are valuable, though, and I would not want to miss them, even if they become troublesome. I can imagine an American coming to Germany to experience a torch hike and liking it.

                                            1. 0

                                              To give an example, I found out a few years ago that the German “mhm” (i.e. the expression to acknowledge you are listening to someone while he speaks) is often interpreted by Americans as a “huh?”. You could imagine how much confusion that caused.

                                              I have never in my life seen or heard “mhm” interpreted as “huh?”, and while I’m just one American and this is anecdotal I’ve lived in three fairly distinct regions of the USA.

                                              1. -1

                                                German “mhm” is very distinctly different to American “mhm”. I wouldn’t know how to describe it in words, though.

                                                1. 0

                                                  It’s it very distinct from the British “mhm”?

                                          2. 1

                                            Going on a torchlit hike at night sounds fun to me in the abstract, and also like the sort of activity that could hardly be unique to any one place, time, or culture. For ages before the invention of electric flashlights, how else were human beings supposed to light their way when walking around at night, wherever in the world they happened to be? I was unaware that some people associated the practice of going on torchlit hikes with specifically the NSDAP (or maybe just going on a torchlit hike while being an ethnic German??) until I saw people mentioning it in the context of suckless. Even if it’s true that the historical Nazis practiced torchlit hikes (which I assume is true, because I think it would be very easy for any group in human history to do so), I don’t think that confers any obligation on people alive today to refrain from it, any more so than Adolf Hitler’s famous vegetarianism confers any obligation on people today not to be vegetarians.

                                            1. 3

                                              I agree. I’m pretty well read on the topic, including having read Shirer’s “Rise and Fall of the Third Reich,” and I hadn’t heard about the association between torchlit hikes and Nazis before it was brought up in the context of suckless either. If I’m actually educated on the topic and still didn’t know about it, how could I really expect others to know about the association?

                                              Personally, a torchlit hike sounds like a blast to me. If the opportunity presented itself to me, I would absolutely participate.

                                              I agree with others in this thread that people are generally way too quick to bring up Nazi associations. I like to think I’m not naive about it either, since there are trolls and Nazis online that like to play these kinds of games. But I personally expect some pretty firm evidence before I’m willing to entertain Nazi accusations seriously. It’s a pretty serious thing to say.

                                    2. 9

                                      As an engineer child of social scientists, I’ve concluded that mental models like that are basically what you get when you take an engineering approach to social systems to its logical conclusion without considering people as, well, people. You end up with very efficient, streamlined, rational systems that place no value upon the people who are crushed in the process. It’s a simple, effective solution to the very complicated problem of human society, and it makes the complicated problem simple by saying “the people on the losing side don’t matter”. You can see this approach working efficiently and effectively all throughout human history, usually in the form of mass graves.

                                      Everything should be made as simple as possible, but no simpler.

                                      1. 3

                                        Because I can’t be sure which comment you’re replying to (AFAIK there’s no “parent” link for comments here), can you please clarify what you mean by “mental models like that”?

                                        1. 4

                                          Sorry, I was talking about mental models such as the ones described by this comment: https://lobste.rs/s/nf3xgg/i_am_leaving_llvm#c_01mpwm . Essentially “we are not going to worry about equity and equality because it is irrelevant to the problem we are actually trying to solve”. Works fine when the problem you are trying to solve is “design a machine that does a particular thing well”, but ignores lots of ugly externalities when it comes down to the social structures and organizations of the people actually doing the design. Like unfettered free-market capitalism, it sounds ideal in theory and that makes it an appealing position. But my observation has been that it works great for the people already powerful enough or lucky enough to be unaffected by those externalities, and does not actually make the world a better place for anyone else.

                                      2. 3

                                        Extremes are rarely good. There should not be an aura of aggressivity around any project.

                                        1. 1

                                          They’re doing literal torch hikes through southern Germany

                                          I have no idea what holding torches might mean in this context. Could you explain, or provide links?

                                          1. 6

                                            It looks like one of those things Nazis ruin for everyone - https://www.theatlantic.com/politics/archive/2017/08/why-they-parade-by-torchlight/537459/. Whether that is intentional on the part of the suckless folks, is not clear to me.

                                            The other top hit I got when googling was a torchlit tourist hike through Partnach Gorge in Garmisch-Partenkirchen. I’ve been to that gorge (not by torchlight) and it’s pretty cool!

                                        1. 2

                                          I think we may be overdue for a tools tag–would that slight generalization satisfy you?

                                          1. 1

                                            Sure looks like this didn’t go over well.

                                          1. 2

                                            “Programming” also covers the programming environnent or does not? A full blown unix programming environment article might be “practices” but a (build) tool alone still fits in the “programming” umbrella which is by default quite large

                                            1. 5

                                              Maybe I just hate the programming tag because it’s so general.

                                            1. 110

                                              Thanks for your efforts!

                                              After four links, a domain can’t have a majority of its stories submitted from a single user.

                                              As a datapoint, I currently can’t submit stories from my domain as I’ve submitted 14 (9 by others). I’m probably biased, but most stories have been reasonably well received so I’d consider that a loss.

                                              1. 46

                                                A simple tweak to this rule: bumping against the ceiling makes new submissions from that domain require mod approval. If posts are consistently well-received, mods can whitelist that (UserName, Domain) pair?

                                                1. 9

                                                  I like this idea! If this is too much moderation overhead, maybe users with sufficiently high karma could see this queue and add approvals?

                                                  1. 12

                                                    Maybe. I dunno. I just threw it out there, but concerns around mod overreach and cabals of power-users are as old as time.

                                                    Tying site privileges to karma creates all sorts of Goodhart’s-law-shaped problems.

                                                    1. 3

                                                      Yeah, but maybe the same trust system that lobsters already has would work here: namely, a mod can delegate this queue to a user they trust? It’s all highly transparent anyway so abuse could be punished?

                                                      1. 2

                                                        A hidden, secondary confidence score that is calculated based on outcomes that are subjectively chosen is where pushcx may be heading with this in due time. Putting a number to it might be a good idea.

                                                  2. 39

                                                    As a datapoint, you are not alone. I wrote:

                                                    in the meantime bumping up against this limit posts a note to moderators so if it goes wrong we’ll see problems

                                                    This definitely went wrong.

                                                    My apologies to those inconvenienced by it, there’s a lot more false positives than I recognized. We’ve had a couple suggestions on how to reduce the error rate like only looking at the last N months or skipping it if any of the domain’s stories have done especially well (better than average or median?). I especially appreciate the folks writing and tweaking queries to try to build up our understanding, and I expect there’s probably some novel angle to separate noise from signal that we’ll think of in the next few days.

                                                    1. 10

                                                      There’s a “homepage” link in the profile. Perhaps the limit could be increased for your declared domain, (possibly, only if it’s unique across users?)

                                                      1. 4

                                                        This is a good idea, but what if the user is submitting from two blogs? For example, their personal blog and the blog of a project (perhaps a project the user contributes to) that the Lobsters community might be interested in.

                                                        1. 8

                                                          We have an authored by checkmark, that might work?

                                                          1. 2

                                                            How many people are doing that? I think it may be acceptable collateral damage.

                                                            1. 1

                                                              Aren’t hats available for that purpose?

                                                              1. 2

                                                                Hats can’t be attached to posts… yet? Also, hats are generally used more for speaking on behalf/with significant involvement for more major projects, less associating sites to users. I suppose it can be changed…

                                                                1. 1

                                                                  To clarify, are you suggesting that hats be used as a signal for increasing the (proposed) limit as to how many times a user can submit stories from a particular domain?

                                                                  1. 2

                                                                    No, but to have people make it clear that they are posting personal or project related. A separate limit per hat would be an idea yes for the post limit.

                                                            2. 2

                                                              Perhaps rate limiting posts rather than an absolute limit (or some combination of trust - whatever that means, account lifespan, etc to generate a score/threshold coupled with rate limits).

                                                            3. 35

                                                              Yes, this rule doesn’t really make sense to me. Users who write good stories will most likely be punished in this category.

                                                              1. 25

                                                                yes, I came to the comment section to ask specifically how to handle posting entries for our own blog posts. I enjoy blogging and this is one of the few places I share my blog posts. Don’t how to handle this now.

                                                                1. 5

                                                                  So, it is mostly me posting my own stories as can be seen in https://lobste.rs/domain/andregarzia.com

                                                                  1. 4

                                                                    Yeah. I don’t blog about stuff as much as I should and lobsters is one of the good signal to noise places I’d wanna share with.

                                                                  2. 17

                                                                    Looking at @arp242 submissions, they look relevant and interesting, so I agree it seems to be a problem with the new algorithm. It will reduce the amount of interesting niche content - precisely what Lobste.rs should be about.

                                                                    I’m probably in the same boat as @arp242 as I submit posts from my domain. One of my submissions is a book announcement with 26 upvotes, and the other five are Elm and Postgres posts and projects, which are neither low-effort nor frequent (this is over two years). I agree with @akkartik’s comment that the timeframe needs to be taken into account too.

                                                                    I was going to suggest that the problem could be addressed by checking whether the user submitted other sites or participated in discussions, with an additional check for community approval in the form of a certain number of upvotes across submissions/comments. However, after looking at @UV’s comment history I see that they would have still gamed that, primarily because it’s still easy to get upvoted low-effort comments here.

                                                                    1. 16

                                                                      Same boat. On the other hand, maybe this will motivate me to start digging through your archives to find interesting things, because I can’t rely on you just posting them here for me ;)

                                                                      1. 11

                                                                        Yeah, it’s a hard choice. I like to think that my own stories, at least as of the past couple of years, are a reasonable fit for this community, and at my current rate of about one post per year I don’t feel like I’m spamming down the site. At the same time, we’ve all seen those account which just post blogspam article after blogspam article from the same domain.

                                                                        Maybe these measures are necessary, but I consider it a good thing that people like yourself, and drew devault, and other people who write in-depth about technology topics they’re genuinely interested in, are able to post their stories here.

                                                                        Besides, this restriction would mostly affect real users who have the community’ best interests at heart, right? If I was a marketing shill and wanted eyeballs I can show content advertising to, I could just create a new account every fourth article, right?

                                                                        1. 8

                                                                          If I was a marketing shill and wanted eyeballs I can show content advertising to, I could just create a new account every fourth article, right?

                                                                          I think we’re actually good in that case! You’d have to invite the alt account, making what you’re doing SUPER obvious. And then we’d bad the entire domain, so you’d never get links from lobsters ever again :D

                                                                          1. 3

                                                                            I sat down at my laptop after work to respond to this because, yes: I was aware of the perverse incentive, but at least it’s pretty darn obvious and it reveals bad intentions. And I was distracted from finishing this comment to investigate and confirm that, yes, this happened.

                                                                            1. 2

                                                                              Why was this user banned? The user submitted 3 things, all of which are relevant and on topic? One of the github links is pretty low quality, but again, not off topic.

                                                                              Or, maybe the things I want to see no longer align with the site…

                                                                              1. 2

                                                                                They were a sockpuppet of vermaden, not a person. I left the three on-topic stories that he submitted as cover for a link promoting his blog.

                                                                                1. 2

                                                                                  Thanks for the explanation!

                                                                                  So, if that’s provably the case that the account was a sock puppet, ban vermaden?

                                                                                  But, how is having multiple accounts any different than asking “joe rando” to post on my behalf, which I did today (it happened to be posted by someone I actually know, but only after I asked)?

                                                                                  I’m going to start following the hashtag on twitter “#promotemeonlobsters” and submit links that appear to be on topic, that don’t appear to be spam to me.

                                                                                  If I get enough people also do this, there will be a wide variety of potential submitters to these stories, making this silly change irrelevant. Additionally, cannot exactly ban submissions found in that stream, since I can plausibly deny I found it there, and not directly from the source by happenstance.

                                                                                  OR, you could stage same domain posters, showing them to a random sampling of users until they reach some upvote threshold (say 3?), at which point everyone can see them. While you’re at it, perhaps this should be the way all posts start out…

                                                                                  1. 2

                                                                                    I thought about banning vermaden for the sockpuppeting, but I don’t read him as a badly intentioned content marketer, I read him as overly enthusiastic about FreeBSD. And if he’s clever enough to find bugs and foolish enough to not realize I’m paying a lot of personal attention to him while he does it, I’d rather let him continue a bit to catch other bugs/misdesigns.

                                                                                    1. 1

                                                                                      I’ve reread your comment multiple times now, am taken aback, and instead of replying how I really feel about it, I’m going to :eyeroll: and leave it be.

                                                                          2. 8

                                                                            Want to second this.

                                                                            It feels like a rule that will punish personal blogs. I’ve been posting stories from my personal blog here before, I’m not sure if there are stories from my blog others posted. I think they match the content people expect here (mostly infosec related) and I don’t think that’s abuse, some of them got well received.

                                                                            If I’d post on medium etc. I wouldn’t have that problem.

                                                                            1. 5

                                                                              It could be time bounded, or tested against multiple time ranges?

                                                                              For instance, user cannot post from a domain if more than half of stories in the last 6 months are from them.

                                                                              Or combine that with the original: a user cannot post a domain if they are more than half of all time posts AND they posted more than half within the last 6 months. That way if you could be the majority of all time, but not the majority of recent posts, or vice versa, and still be allowed to post for a certain domain.

                                                                              And “the last 6 months” could be 3 months, could be 1 year, or what-have-you.

                                                                              1. 3

                                                                                I agree. The four link thing is kinda messed up. I write essays every couple of weeks or so, all about making better tech. I’ve spent some time making sure there’s no ads, no email lists, no sales at all on these links. I can’t make them any more innocuous, and I use the comments and feedback from here to learn more and (hopefully) write better stuff.

                                                                                It doesn’t make sense that I can’t keep doing this. Perhaps the four link rule would work better when the domains were already high traffic sites? You don’t wanna kill the mom and pop grocery stores simply because you don’t like the new WalMart moving into town.

                                                                              1. 17

                                                                                Spitballing a couple ideas here.

                                                                                On the topic of the 70 day new-user timer:I think this will just make the spammers much more difficult to notice as they will create dormant accounts waiting for the timer to expire while maybe posting a low-effort comment here and there. Possibly even automating it by copying or generating content based on previous comments on lobste.rs. I don’t see a direct solution to this, but it’s worth to keep in mind how their approach will change with this.

                                                                                Regarding the new-user limitations in general: How about having two different types of invites you can send out? One regular invite as it is now, and one for people you trust? Sending the trusted invite would mean you personally take responsibility for actions taken by the person you invite (for a reasonable time frame that is) and their limitations are relaxed somewhat. This means you still can extend invites to people you don’t trust all that much, and they would end up having to display their trustworthiness, or you can shortcut that mechanism and allow someone you already trust onto the platform.

                                                                                1. 12

                                                                                  Why would you invite somebody you don’t trust? Two levels of that and we’re back to where we started.

                                                                                  I’m not totally sold on a time-based “newness” metric. Something more informed by usage would be good–are they submitting new content, are they actively commenting, are they helping suggest tags and whatnot. And sure, those are all gameable, but if we can trick the growth droids into performing vital community service why not?

                                                                                  1. 30

                                                                                    I was invited by @flyingfisch because I asked on IRC. He invited me in good faith but doesn’t trust me as a personal friend. If I was banned he might get told “hey be more careful” but that’s about it. There are a couple of people I invited like that. I also invited @rwhaling because he’s someone I trust. If he got banned, I’d feel obligated to apologize to the lobsters community, because I personally “vouched” for him and was wrong.

                                                                                    That’s how I see this. I’d come in as a “standard” newbie and would have all the restrictions at first. @rwhaling would come in as a “vouched-for” user and would have fewer restrictions. But if he got banned, I’d be suspended or put on probation or something.

                                                                                    1. 6

                                                                                      Nice explanation. As a newbie who’s not enitrely sure how the whole community “breathes”, I’m constantly afraid of posting something so bad that my inviter has to feel bad about me. And they only gave me invite because I saw on Mastodon that they are a user here, we have low interraction otherwise.

                                                                                      1. 5

                                                                                        Thanks for your explanation!

                                                                                        But if he got banned, I’d be suspended or put on probation or something.

                                                                                        I like this approach for taking responsibility for downtree users.

                                                                                        1. 5

                                                                                          Suspend future invitations for some time.

                                                                                        2. 1

                                                                                          I think leaning into the social network/web of trust is a good idea. I think it may be useful to express beliefs and confidences, about users you do not invite.

                                                                                          What reward you get to balance the risk ventured, I don’t know. Maybe just the knowledge that you’re helping the anti-spam network.

                                                                                          1. 1

                                                                                            This is exactly the mechanics I was thinking about. The punishments and rules of it would need to be hashed out, but you are spot on with the idea.

                                                                                        3. 9

                                                                                          I think this will just make the spammers much more difficult to notice as they will create dormant accounts waiting for the timer to expire while maybe posting a low-effort comment here and there.

                                                                                          This is certainly existentially possible, but not actually true in my experience. One kind of abuse I deal with is fraudulent activity in my billing system. One surprising aspect of these behaviors is how impatient the people engaging in them are. Instead of waiting for the ‘right’ opportunity, they go to where there is an immediate ‘return’ on their effort. One explanation for this is that it reduces the evidence of the behavior, lowering legal risk. I think part of it is high time preference, however.

                                                                                          It is true that there are innovations in parasitism (e.g., spamming), just as there are innovations in productive and positive behaviors. What happened here was “innovative” in the sense that we had not seen it before. Since it provided an unearned benefit, the behavior was repeated until discovered and suppressed. That will happen again, perhaps even in the manner you articulate but probably in a more novel way–but that is going to be true every time we suppress an unwelcome behavior. Incremental suppression increases the cost of imposing on us–requiring more effort for the same reward is a feature, regardless of whether it fully eliminates the unproductive behavior or not.

                                                                                          1. 7

                                                                                            This also happens with SMTP servers, interestingly. One of postfix’s most basic spam-prevention settings is just waiting a small amount of time at the beginning of each SMTP session and canning it if the client talks first. Apparently, the server is meant to talk first, but most spambots are so impatient (because they have to spam as much as possible before they get blacklisted) that they send their HELO before the server has sent them anything.

                                                                                          2. 4

                                                                                            I wonder if it would be possible to take the max between 70 days and an arbitrary karma count (maybe the median user karma level?). New accounts that genuinely want to join the community and actively participate shouldn’t be tagged as potential spammers for over 2 months.

                                                                                            When I was invited 5 years ago, the person sending the invite was responsible for the new users that they invited and could lose their account/run into trouble if they abused the invite feature. It is my understanding that that was the main reason for showing the invite tree back then. Does anyone know if that policy has changed or if I just misremember the “good old times”?

                                                                                            1. 5

                                                                                              In practice “upstream” users have only been banned for downstream user’s indiscretions once or twice. It basically doesn’t happen.

                                                                                              1. 1

                                                                                                Off the top of my head, I only know of one user banned because of behavior by someone they invited, and they wrote the code to disable invites, so I don’t think there have been any since then.

                                                                                            2. 2

                                                                                              Expect owners of older accounts that aren’t used that much to start getting cash offers for them…

                                                                                            1. 8

                                                                                              Does someone have a proper doc on this I could replace this thin blog post with?

                                                                                              1. 5

                                                                                                There is the document on homed itself here: https://systemd.io/HOME_DIRECTORY/

                                                                                                The merge request is here, merged 10 days ago: https://github.com/systemd/systemd/commit/4119d1e60a111bacca359b61b5bc3dae29932b67

                                                                                                1. 4

                                                                                                  My gut feeling tells me it’s mostly due to the fact that a hash value of an int is the int itself, so there’s no time wasted on hashing.

                                                                                                  Oh wow I hope not. Is this actually true in CPython?

                                                                                                  1. 6

                                                                                                    This is the most sensible implementation as you want to avoid collisions in a hash table. It isn’t supposed to bear any cryptographic properties if that’s your concern. Here’s more: https://github.com/python/cpython/blob/master/Objects/dictobject.c#L134

                                                                                                    1. 5

                                                                                                      It’s not the most sensible implementation, because simple key patterns cause collisions that never resolve, even when resizing the hashtable. The comment you linked specifically mentions this pathology, and the numerous ways it destroys performance.

                                                                                                      The rest of the comment describes how CPython mitigates the issue by adding weak integer hashing to its collision probing. At first I thought integer keys were never hashed at any point, hence my surprise.

                                                                                                      From the comments it sounds like sequential integer dict keys are somehow common in Python, which I don’t understand. But I don’t write much Python.

                                                                                                      1. 6

                                                                                                        From the comments it sounds like sequential integer dict keys are somehow common in Python, which I don’t understand. But I don’t write much Python.

                                                                                                        While you can have a dict with keys of any hashable type – and a single dict may have keys of many types – the most common case, so overwhelmingly more common that it’s almost not even worth thinking about other cases, is a dict whose keys are all strings. This is because, sooner or later, basically everything in Python is backed by a dict. Every namespace is backed by a dict with string keys (the names defined in that namespace). Every object is backed by a dict with string keys (the names of the object’s attributes and methods). Keyword arguments to functions/methods? Yup, dict. In comparisons of languages by their “one big idea”, Python is sometimes described as having its big idea be “what if everything was a string-keyed hash table”?

                                                                                                        Anyway. This is so common that Python goes out of its way to have special-case optimized implementations for the case of a dict whose keys are all strings (and for what it’s worth, in CPython as of Python 3.4, str is hashed using SipHash-2-4).

                                                                                                        As to hashing of numeric types, it’s a bit more complicated than “ints hash to themselves”. Here’s what the Python documentation has to say. For the specific case of int, you can think of it as reducing to hash(n) == hash(n % sys.hash_info.modulus), where in CPython sys.hash_info.modulus is 2^61 - 1 on systems with 64-bit long and 2^31 - 1 on systems with 32-bit long.

                                                                                                        While I don’t have a way of being certain, I suspect the linked comment’s note that the hashing of int is “important” has to do with the importance of real-world int key values being unlikely to collide with the hashes of other common real-world key types.

                                                                                                        1. 1

                                                                                                          In comparisons of languages by their “one big idea”, Python is sometimes described as having its big idea be “what if everything was a string-keyed hash table”?

                                                                                                          I’ve always thought of PHP’s “one big idea” as “What if everything is an array” where array means PHP’s strange half-dict half-list interface that funnily enough Python is now one small step closer to.

                                                                                                      2. 1

                                                                                                        Avoiding collisions isn’t as important as using up a larger % of the spots before you need allocate and move things, I believe.

                                                                                                        1. 3

                                                                                                          Aren’t those the same thing? Less collisions implies you can go longer without expanding.

                                                                                                          1. 1

                                                                                                            It depends on the exact implementation, but in my understanding, not exactly; you also want a good distribution between your buckets, even if there are patterns / non-random distributions in the actual encountered keys. It might waste space rather than time, but it’s still not great.

                                                                                                            1. 3

                                                                                                              Python’s hash table isn’t implemented as an array-of-buckets. It’s a single contiguous array into which you insert a new element at the position determined by the hash of its key, and if that position is occupied you try the next one in a pseudo random order. Same with lookups: you try entries in succession until you find the one that equals (it’s usually the first one). And this is why the number of free spots and the probability of collisions are directly related.

                                                                                                      3. 2

                                                                                                        it is:

                                                                                                        Python 3.7.6 (default, Dec 21 2019, 11:56:31)
                                                                                                        [Clang 10.0.1 (clang-1001.0.46.4)] on darwin
                                                                                                        Type "help", "copyright", "credits" or "license" for more information.
                                                                                                        >>> hash(2)
                                                                                                        2
                                                                                                        >>> hash(37)
                                                                                                        37
                                                                                                        >>> hash(892474)
                                                                                                        892474
                                                                                                        
                                                                                                        1. 8

                                                                                                          Almost! hash(-1) returns -2.

                                                                                                          Python 3.8.1 (default, Jan  8 2020, 23:09:20)
                                                                                                          [GCC 9.2.0] on linux
                                                                                                          Type "help", "copyright", "credits" or "license" for more information.
                                                                                                          >>> hash(-1)
                                                                                                          -2
                                                                                                          >>> hash(-2)
                                                                                                          -2
                                                                                                          >>> hash(-3)
                                                                                                          -3
                                                                                                          
                                                                                                          1. 4

                                                                                                            wat

                                                                                                            do you happen to know why?

                                                                                                            1. 7

                                                                                                              Ah, it’s because the C API function uses -1 as an error code. It goes deeper than that too:

                                                                                                              In [1]: class yolo:
                                                                                                                 ...:     def __hash__(self):
                                                                                                                 ...:         return -1
                                                                                                                 ...:
                                                                                                              
                                                                                                              In [2]: y = yolo()
                                                                                                              
                                                                                                              In [3]: hash(y)
                                                                                                              Out[3]: -2
                                                                                                              
                                                                                                          2. 2

                                                                                                            I’ve heard that this is a somewhat common way to implement hashing for ints, but I don’t understand why it’s a good idea. Isn’t hash collisions terrible for hash tables? And isn’t a somewhat common key pattern “some number with some low bits masked”? And wouldn’t that be a pathological case for a hash table which grows with a factor of 2?

                                                                                                            Are hash table implementations which does hash(x) = x somehow better at handling collisions than most hash tables, or do they just hope that the ints people want to put in their tables have high entropy in the lower bits?

                                                                                                            1. 3

                                                                                                              IIRC there is some sort of random salt added to it and it goes through some internal hash for the actual hash table, since there was a DoS attack by abusing worst case scenario over HTTP requests.

                                                                                                          3. 2

                                                                                                            Why would that be a problem?

                                                                                                          1. 7

                                                                                                            Was the link supposed to lead to the submission for last year’s competition? I joined our leaderboard, under the name grxnola.

                                                                                                            1. 3

                                                                                                              Shoot! I pinged pushcx to edit the URL.

                                                                                                            1. 9

                                                                                                              With Python 3 being out for so long and the Python 2 deadline being delayed I think it is somewhat embarassing Mercurial still doesn’t use it as default. Sure, 3rd party plugins are not up to date, but the longer they wait with the migration, the longer Python 2 will need to be kept alive.

                                                                                                              1. 13

                                                                                                                Python 3 has been especially difficult for Mercurial because Mercurial does not use encodings. It’s an application to store your bytes and your bytes are just bytes. You don’t want Mercurial (or git, for that matter) to start having opinions about how to interpret the bytes you give it. All the data that hg deals with – all of it – is just bytes.

                                                                                                                The Python 2 deprecation deadline was mostly extended by 5 years for Mercurial. A bunch of us (not just Mercurial, but probably we were the loudest ones) crowded around Guido at Pycon 2014 and told him about how difficult Python 3 was for Mercurial. In response, Guido later announced that day that we would have 5 more years. The bare minimum we needed was PEP 461, which wasn’t available back in 2014, and once that was done, the rest was just a lot of hard work.

                                                                                                                I am not at all embarrassed by the gargantuan effort that my fellow Mercurial maintainers have made to port Mercurial to Python 3. Quite the contrary, I’m proud of them and have gotten a little resentful that the Python 3 upgrade path has not been nearly as easy as its proponents claim.

                                                                                                                1. 6

                                                                                                                  Oil is the same way – it doesn’t use Python’s unicode object. it uses bytes, since libc calls all take and return bytes (e.g. execve, chdir, listing directory entries, etc.)

                                                                                                                  http://www.oilshell.org/blog/2018/03/04.html#faq

                                                                                                                  Right now the Python 2 interpreter is bundled with Oil. I removed at least half of the interpreter, which I’m not using [1] (e.g. the whole front end, unicodeobject.c, complexobject.c, etc.)

                                                                                                                  Eventually I want to get rid of the dependence on the interpreter. But I think this was a decent way to make progress quickly and have a working program the whole time.

                                                                                                                  Since hg is already a mature and working program, I imagine bundling the interpreter might also have been a worthwhile strategy.

                                                                                                                  It would also largely fix the startup time issue (which I think got worse in Python 3) since you’re not dependent on the system PYTHONPATH and you can modify the startup sequence with some #ifdefs.

                                                                                                                  People always talk about maintenance of Python 2 but I don’t really think it’s a problem. It’s a very mature and understandable codebase. I’ve made dozens of small, localized modifications to it.

                                                                                                                  And if Python 2 has a security issue in say the tempfile module, well it doesn’t affect a program that doesn’t use that module.

                                                                                                                  [1] http://www.oilshell.org/blog/2018/11/15.html

                                                                                                                  1. 6

                                                                                                                    We’re actually vaguely planning to bundle Python with Mercurial via PyOxidizer - it should be a one-file binary at that point.

                                                                                                                    I’m sure Greg would be interested in Oil doing it too, but I think it can’t be done on Python 2 for a variety of reasons.

                                                                                                                    1. 1

                                                                                                                      People always talk about maintenance of Python 2 but I don’t really think it’s a problem. It’s a very mature and understandable codebase. I’ve made dozens of small, localized modifications to it.

                                                                                                                      So you’ve made dozens of small modifications to it (python) and are now carrying those changes, and you don’t see a problem with many people doing the same thing? It seems like you’ll quickly end up in a situation where one implementation of python2 used by/included in one program is not the same as another used by/included in another, and that is a bigger maintenance problem.

                                                                                                                      1. 1

                                                                                                                        Why is that a maintenance problem? There can be N different forks of Python 2, e.g. one used for hg, one used for Oil, and I don’t see the problem. Each team maintains it separately.

                                                                                                                        Python 2 is a stable, well-tested, and well-understood codebase.

                                                                                                                        It’s somewhat analogous to there being N forks of the BSD kernel. In that case I’d say it’s also a feature and not a bug.

                                                                                                                        Although you could argue why they don’t combine their efforts (though I don’t think it makes sense to argue). Either way, that argument doesn’t make sense for hg or Oil or dozens of other programs that are written in Python and may want to make small, local, backward incompatible modifications.

                                                                                                                        1. 1

                                                                                                                          The problem is that you have a bunch of different teams maintaining essentially (but not quite) the same thing in their own gardens. So when a vulnerability is found, you have to rely on them all to 1) notice it then 2) fix/deploy. And users now have N number of “python 2” installs on their one system that are in all sorts of different states. How do you know if you have something using a broken “version” of python 2? When a CVE is posted, how can you possibly tell if you’re affected in all the different “versions” of python 2 on your system?

                                                                                                                          1. 2

                                                                                                                            On balance, I think using Python 2.7 and statically linking it reduces the number of vulnerabilities. (Although it’s not ideal for other non-security reasons, which is why it’s not a permanent solution).

                                                                                                                            If you rewrite the functionality from scratch rather than reusing well-tested pieces of code, you’d have as many or more vulnerabilities in your own code. Unless of course there is something you’re doing that the Python team isn’t (possible but not that likely).

                                                                                                                            I’d say Python 2.7 more solid than the average piece of code simply because it’s undergone a lot of testing and usage. There have been a lot of eyeballs on that code.

                                                                                                                            And as mentioned, the vulnerabilities in stdlib modules that Oil don’t use don’t matter because they’re not even in the binary (e.g. I see CVEs in XMLRPCServer, which has nothing to with Oil). On top of that, I also remove around 150K lines of other interpreter code, leaving somewhere around 100K. That’s more than I would like, but it’s not a problem to maintain.


                                                                                                                            On a related note, I think there is some cargo culting of the “CVE treadmill”. Newer code isn’t always better. If the development team isn’t careful about security, you can patch one CVE and introduce another one. In fact I think that’s pretty common because software tends to get larger over time.

                                                                                                                            I’d rather move to a model where there is actual reasoning about security from first principles rather than “I heard about this CVE so I need to update all the places where it occurs, and now I did, so the problem is gone”. It’s kind of where the industry is now, but it doesn’t reflect the underlying reality.

                                                                                                                    2. 2

                                                                                                                      bare minimum we needed was PEP 461

                                                                                                                      Can you expand on that? That request looks just like some convenience feature that could have just been a normal method.

                                                                                                                      1. 1

                                                                                                                        It’s because mercurial used % formatting on python2 strings heavily to encode the mercurial wire protocol. Before pep 461, % formatting on bytestrings was not allowed, so they would have needed to carefully rewrite the wire protocol code in a way that would have left the code less readable.

                                                                                                                        1. 2

                                                                                                                          Isn’t that pretty much a basic refactoring operation in any typed language?

                                                                                                                          1. 7

                                                                                                                            If you take a stroll through the gargantuan effort of hundreds of commits I linked above, I think you’ll see that it wasn’t a basic refactoring operation.

                                                                                                                            1. 4

                                                                                                                              Not sure what you mean, regardless it doesn’t matter much for Mercurial because it’s not written in a typed language.

                                                                                                                              Also I think the aspect of rewriting the code for no gain but leaving the code less readable is a big deal, readability counts.

                                                                                                                        2. 1

                                                                                                                          It’s an application to store your bytes and your bytes are just bytes.

                                                                                                                          Python 3 has a “just bytes” type. One that’s actually far better than Python 2’s, because Python 2’s was overloaded by also needing to be the default string object. For example, a while ago I went back and did the first couple sets of cryptopals challenges again using Python 3 instead of 2, and it was night-and-day how much nicer Python 3 was for working with “just bytes”.

                                                                                                                          And the fact that Mercurial was apparently utterly blocked by not being able to use % on bytes objects indicates Mercurial was not treating these bytes as “just bytes” – the % operator is there to let you do string formatting operations with printf()-style syntax, which only makes sense if the bytes are in fact being treated as strings (which in turn means you need to “use encodings”, because formatting operations on byte sequences of unknown encoding are a ticking time bomb in the code).

                                                                                                                          1. 6

                                                                                                                            Please read PEP 461. Its use cases are explained there and apply to Mercurial.

                                                                                                                            1. 4

                                                                                                                              I have read it. I’m not disagreeing that the Mercurial team says PEP 461 makes the their lives easier. I’m disagreeing that use of % on str in Python 2 was a “just bytes” operation.

                                                                                                                              Even the rationale in the PEP, and the discussion on python-dev when the PEP was being drafted, acknowledged this – the whole purpose for this is to allow treating some bytes as actually being encoded text, and manipulate them in ways that only make sense for encoded text. Which in turn carries an assumption about what encoding was used to produce the bytes, etc.

                                                                                                                              Which means that all of your insistence on “just bytes”, “no encodings”, “no interpretation”, and so on in your original comment was, to be charitable, a red herring. Mercurial didn’t need % formatting for “just bytes” operations; it needed it for operations on bytes that Mercurial assumes are ASCII-encoded text.

                                                                                                                              I don’t doubt it’s perceived as easier for Mercurial to continue doing things that way. I do doubt whether it’s the right approach to wire protocols which consist of mixed encoded text and “just bytes”.

                                                                                                                        3. 4

                                                                                                                          Actually with the latest release (Mercurial 5.2), Python3 is the default.

                                                                                                                          1. 1

                                                                                                                            …except on Windows, unless I missed something, correct?

                                                                                                                            1. 3

                                                                                                                              Yep. Windows has a little ways to go yet. :(

                                                                                                                        1. 4

                                                                                                                          As a general rule it’s frowned upon for most of your posts on this site to be self-promotion. So far you’ve submitted three stories, all from your blog. I’d encourage you to try to submit less often from your own blog and more often from other sources.

                                                                                                                          1. 11

                                                                                                                            I disagree. This is real technical content, and while it’s not especially interesting to me personally, I’m glad that it was submitted. I regard your use of the spam flag as inappropriate, because the post is not promoting any commercial product or service. I’ve upvoted the story to compensate, and I suggest you have a look at the guidelines.

                                                                                                                            1. 7

                                                                                                                              I flagged it as spam because:

                                                                                                                              1. this user is clearly promoting their blog (not contributing to lobste.rs in any other meaningful way other than, heh, spamming links to their own articles)

                                                                                                                              2. this is a very low effort post (“TIL about cp” and “go read about BorgBackup!’ (but no actual info about how to configure/use it).

                                                                                                                              I suggest you have a look at the guidelines.

                                                                                                                              Unfortunately there’s no clear ‘guideline’ for this type of crap. So ‘spam’ is (IMHO) the best fit.

                                                                                                                              1. 3

                                                                                                                                I didn’t flag this as spam, someone else did.

                                                                                                                                1. 0

                                                                                                                                  Mea culpa. I do appreciate your having commented with your opinion. I think there are a few Lobsters users who flag stories they don’t like as ‘spam’, and it’s hard to respond to them if they don’t comment.

                                                                                                                                2. 2

                                                                                                                                  As technical content it’s bad. It’s bad advice that for the most part should not be followed. At best it serves as a polemic.

                                                                                                                                  1. 1

                                                                                                                                    Having looked a little closer at the content, I agree – I just think that a brief comment (like yours!) is a better way to respond, both to the poster and to other readers, than a flag.

                                                                                                                              1. 3

                                                                                                                                Interesting. Looking forward to seeing what @andyc has to say about this one, although I suspect it’s pretty much already been said at http://www.oilshell.org . Do you suppose the author (Terry Jones) is aware of https://xon.sh ? It’s not mentioned in the README.

                                                                                                                                1. 3

                                                                                                                                  There’s an issue on the bug tracker: https://github.com/terrycojones/daudin/issues/6

                                                                                                                                  1. 1

                                                                                                                                    I used Xonsh for a while, until I ran into some pretty annoying performance issues (that was ~2 years ago). I did love the blending of Python and shell, but remember it lead to some awkward syntactic edge cases. I eventually settled for Fish, but continue to write my scripts in Bash (and the amazing ShellCheck) – the pipe remains a very powerful abstraction, so maybe Daudin would hit that sweet spot, where we get first-class integration with the command-line environment and a good language. It seems to me it has more potential as a shell-scripting replacement than a real REPL shell.

                                                                                                                                    1. 1

                                                                                                                                      Hi Sebastien. I’m also a fish user :-) I’m trying to avoid awkward edge cases in daudin, but sometimes it’s not clear how best to do things. E.g., if you run ls --color=auto in daudin you get nice coloured output because it runs in a pseudo-tty and you probably want to keep the output for later pipeline usage. But if you run git status you also want the coloured output in your terminal but do you actually want to keep the output to use in a pipeline. Worse, what if you run (say) vim from inside daudin? It works fine, but what should be in the output / pipeline from that command? I could “fix” that at the expense of not allowing one to continue a pipeline by starting the subsequent line with a pipe.

                                                                                                                                      Anyway, I tried to stay as close to pure Python as I could manage, with the explicit goal of minimizing edge cases. The special % commands can all be done with a very small (usually one line) piece of Python, so they’re just syntactic sugar.

                                                                                                                                      There are certainly rough edges in daudin with respect to exception handling. Hopefully I’ll improve that as issues arise.

                                                                                                                                      BTW, tonight I made some changes so that you can run a daudin script by putting commands in a file (#!/usr/bin/env daudin works too).

                                                                                                                                      Thanks for the comment. I don’t know where this is all going, and I didn’t think much before writing it. It’s just a fun project. But I think it’s getting to the point where I can consider actually using it (I now also have a dynamic and coloured prompt). But I’ll certainly miss the awesome predictive powers of fish…

                                                                                                                                    2. 1

                                                                                                                                      Hi @minimax. As @ngoldbaum says below, I didn’t know about xonsh. I’ve since had a little look at it, but only a bit. I should make time to read it more carefully. If I’d known about it I might not have started. But OTOH, I figured I could make something work in one evening and I love coding, so…… Implementing daudin was really more of an exercise in thinking than anything else - provoked by comments from my Lisp-loving friend.

                                                                                                                                    1. 5

                                                                                                                                      Maybe you want conda and the packages on conda-forge?

                                                                                                                                      1. 2

                                                                                                                                        Yes, conda looks good. The fact that it is advertised for Python and R suggests some genericity. It is hard to find documentation about anything not Python though.

                                                                                                                                      1. 20

                                                                                                                                        Sad :-( I still think Mercurial far better meets the needs of most people, and that the chief reasons for git’s popularity are that Linus Torvalds wrote it, GitHub, and that Linus Torvalds wrote it.

                                                                                                                                        That said, I did end up switching from BitBucket/mercurial to GitHub/git a few years ago, simply because it’s the more pragmatical thing to do and I was tired of paying the “mercurial penalty” in missed patches and the like. I wrote a thing about it a few ago: https://arp242.net/git-hg.html

                                                                                                                                        1. 6

                                                                                                                                          Why do you think hg is better for most people? I honestly find it vastly more complex to use.

                                                                                                                                          1. 15

                                                                                                                                            The hg cli is light years ahead of git in terms of intuitiveness.

                                                                                                                                            1. 6

                                                                                                                                              I’d say it’s years behind ;)

                                                                                                                                              1. 10

                                                                                                                                                How long have you been using Mercurial? I find most people who dislike Mercurial’s UI, are mainly coming from years of experience with Git. I disliked Mercurial at first as well, but after a few years of forced usage it clicked. Now I appreciate how simple and well composed it is and get frustrated whenever I need to look up some arcane Git flag on StackOverflow.

                                                                                                                                                In general, I’d say you need several years experience with both Git and Mercurial before you can draw a fair comparison.

                                                                                                                                                1. 3

                                                                                                                                                  I used mercurial for about 2 years before using git.

                                                                                                                                                  1. 3

                                                                                                                                                    Sorry if my post came across a bit accusatory (not my intent). In that case I guess to each their own :).

                                                                                                                                                  2. 3

                                                                                                                                                    but after a few years of forced usage it clicked.

                                                                                                                                                    I’m pretty sure that git clicked for me in a much shorter timeframe.

                                                                                                                                                    1. 1

                                                                                                                                                      Me too, but I know many (otherwise perfectly competent engineers) 5-10 years in who still don’t get it and aren’t likely to.

                                                                                                                                                  3. 9

                                                                                                                                                    I’m going to strongly disagree. I’ve used git intensively and I find Mercurial to be a well-designed delight. I’ve run across features that Mercurial supports flawlessly, with a nice UI, and Git requires a hacky filter-branch that takes hours to run and doesn’t even behave correctly.

                                                                                                                                                    IMO, a lot of the badness in projects is down to Git badness. it doesn’t scale and people feel compelled to break things down into tiny sub-projects.

                                                                                                                                                    The only reason Git is winning anything is GitHub’s support of it.

                                                                                                                                                    1. 3

                                                                                                                                                      The only reason Git is winning anything is GitHub’s support of it.

                                                                                                                                                      Why then was github ever used in the first place? Kind of a strange proposition.

                                                                                                                                                      1. 1

                                                                                                                                                        Network effect of the social network is pretty important.

                                                                                                                                                        1. 1

                                                                                                                                                          Why would there ever be a network effect in the first place if git was so bad that github was the only reason to use it. I get that the argument technically holds but it seems very unlikely.

                                                                                                                                                2. 8

                                                                                                                                                  You find mercurial more complex to use than git? That’s an… unusual view, to say the least. The usual recitation of benefits goes something like this

                                                                                                                                                  • Orthogonal functionality in hg mostly has orthogonal commands (compare git commit, which does a half-dozen essentially unrelated different things).
                                                                                                                                                  • hg has a somewhat more uniform CLI (compare git branch -a, git remote -v, git stash list).
                                                                                                                                                  • hg either lacks or hides a bunch of purportedly-inessential and potentially confusing git functionality (off the top of my head, partial commits aren’t baked into the flow a la git’s index/staging area; and rebasing and history rewriting are hidden behind an extension).

                                                                                                                                                  I personally prefer git, but not because I think it’s easier or simpler; I’m more familiar with it, and I find many of those purportedly-inessential functions to be merely purportedly, not actually, inessential.

                                                                                                                                                  1. 5

                                                                                                                                                    One more thing I like about mercurial that the default set of commands is enough for >90% of people, and that everything else is “hidden” in extensions. This is a very different approach than git’s “kitchen-sink” approach, which gives people 170 commands (vs. Mercurial’s 50, most of which also have much fewer options/switches than git).

                                                                                                                                                    Git very much feels like “bloatware” compared to Mercurial.

                                                                                                                                                    1. 3

                                                                                                                                                      I used git for many years, and then mercurial (at FB) ever since we switched over. The cli interface for mercurial is definitely more sensible, crecord is delightful, and overall it was fine. But I was never able to build a mental model of how mercurial actually worked. git has a terrible interface, but it’s actually really simple underneath.

                                                                                                                                                      1. 1

                                                                                                                                                        I didn’t think that underneath they were different enough to matter much. What differences do you mean? I guess there’s git’s remote tracking stuff. Generally, it seems like they differ in how to refer to and track commits and topological branches, locally and remotely. (IMHO, neither has great mechanisms for all the things I want to do.) Mercurial is slightly more complex with the manifest, git is more complex with the staging area that feels absolutely critical until you don’t have it (by using hg), at which time you wonder why anyone bothers with it. I’m a heavier hg user than git user, but that’s about all I can come up with.

                                                                                                                                                      2. 2

                                                                                                                                                        You find mercurial more complex to use than git?

                                                                                                                                                        I actually found – in a professional shop – mercurial far more complex to use. Now, the fact is that mercurials core – vanilla hg is IMHO absolutely without doubt vastly superior to git. Git keeps trying to make the porcelain less painful (including a release just a bit ago) – but I still think it is ages behind.

                                                                                                                                                        The problem is – I never used vanilla mercurial in a professional environment. Not once. It was always mercurial++ (we used $X extension and $Y extension and do it like $Z) which meant even if I knew hg, I felt painfully inexperienced because I didn’t know mq, share, attic, collapse, evolve, and more… not to mention both the bigger shops I worked with using mercurial has completely custom workflow extensions. I suspect part of this was just the ease of writing mercurial extensions, and part of it was wanting to fall into a flow they knew (mq, collapse). But, regardless of how we got there, at each place I effectively felt like I had to relearn how to use the version control system entirely.

                                                                                                                                                        As opposed to git, wherein I can just drop in and work from day one. It might be less clean, it might be more finicky and enable things like history rewriting by default. But at the end of the day, the day I start, I know how to generally function.

                                                                                                                                                        I am curious how Mercurial would have faired if instead of shipping default extensions you had to turn on – if they had just baked a little more functionality, to try to cover the 80% of what most shops wanted (not needed, I think most could have gotten by with what vanilla mercurial had) – if the shop to shop transition would have been easier.

                                                                                                                                                        1. 2

                                                                                                                                                          mq, I think, is responsible for many of the “mercurial is too complicated” complaints people have. Evolve, if it ever stabilized and ships with core hg would really enable some killer capabilities. Sadly for social and technical reasons it’s perpetually in beta.

                                                                                                                                                        2. 1

                                                                                                                                                          whoa, no index? Admittedly I didnt really use index as intended for several years, but now its an important part of my workflow.

                                                                                                                                                          1. 1

                                                                                                                                                            In Mercurial, commits are so much easier to make and manipulate (split, fold, move), that you don’t miss the index. The index in git is just a limited special cased “commit”.

                                                                                                                                                            1. 3

                                                                                                                                                              The index in git is just a limited special cased “commit”.

                                                                                                                                                              I disagree.

                                                                                                                                                              The index is a useful way to say “these lines of code are ready to go”. If you are making a big commit, it can be helpful to add changes in logical blocks to the index as you go. Then the diff is not polluted with stuff you know is already fine to commit.

                                                                                                                                                              You might say, “why not just make those changes their own commits, instead of trying to do one big commit?” That’s a valid question if you are talking about a 200 line commit or similar, but sometimes the “big” commit is only 50 lines. Instead of making a bunch of one line or few line commits, its helpful to “git add” small chunks, then commit at the end.

                                                                                                                                                              1. 0

                                                                                                                                                                You can as well amend to a commit instead of adding to the index.

                                                                                                                                                                1. 3

                                                                                                                                                                  True, but all thats doing is bastardizing the commit process. If you are committing a one line change, just to rebase minutes or hours later, thats not a commit.

                                                                                                                                                                  Rebase to me is for commits that were intended to be commits, but later I decided it would be better to squash or change the history. The index is for changes that are never meant to be a full commit on their own.

                                                                                                                                                                  1. 1

                                                                                                                                                                    Having a distinction between draft and published phases in mercurial I think makes it easier to rewrite WIP work. There’s also a number of UI affordances for it. I don’t miss the index using mercurial. There’s also academic user interface research that shows the index is a big conceptual barrier for new users.

                                                                                                                                                                    1. 1

                                                                                                                                                                      There’s also academic user interface research that shows the index is a big conceptual barrier for new users.

                                                                                                                                                                      this isnt really a valid point in my opinion. some concepts are just difficult. if some goal can be achieved in a simpler way i am on board, but I am not a fan of removing useful features because they are hard to understand.

                                                                                                                                                                      1. 1

                                                                                                                                                                        But the point is the index is hard to understand and unnecessary.

                                                                                                                                                                        There’s no need to have a “commit process”. Just commit whatever you want and rewrite/amend it for as long as you want. As long as your commits are drafts, this is fine.

                                                                                                                                                                        Is the problem the word “commit”? Does it sound too much like commitment?

                                                                                                                                                                        There’s no need to have two separate ways to record changes, an index, and a commit, each with different degrees of commitments. This is multiplying entities beyond necessity.

                                                                                                                                                                        1. 1

                                                                                                                                                                          That’s your opinion. The index is quite useful to me. I’d rather make a proper commit once it’s ready, not hack together a bunch of one line commits after the fact.

                                                                                                                                                                          1. 2

                                                                                                                                                                            The index is a commit. Why have two separate ways of storing the same sort of thing?

                                                                                                                                                                            Also, it’s not my opinion that it’s hard to understand and unnecessary; it’s the result of usability studies:

                                                                                                                                                                            https://spderosso.github.io/oopsla16.pdf

                                                                                                                                                                            You’re also not “hacking together” anything after the fact. There’s no more hacking together after the fact whether you use git amend (hypothetically) or git add. Both of those mean, “record additional changes”.

                                                                                                                                                                            1. 0

                                                                                                                                                                              It seems you have a fundamental misunderstanding of the difference between add and commit. Commit requires a commit message.

                                                                                                                                                                              1. 1

                                                                                                                                                                                This isn’t a useful distinction. You can also create commits with empty commit messages in both git and Mercurial.

                                                                                                                                                                                With both git and Mercurial you can also amend commit messages after the fact. The index in git could well be implemented as a commit with an empty commit message that you keep amending and you wouldn’t notice the difference at all.

                                                                                                                                                                                1. 1

                                                                                                                                                                                  you keep amending and you wouldn’t notice the difference at all.

                                                                                                                                                                                  yeah, you would. again it seems that you either dont know git, or havent used it in some time. when you amend a commit, you are prompted to amend the message as well. another facet that doesnt exist with git add, because add doesnt involve a message.

                                                                                                                                                                                  if you wish to contort git internals to suit your agenda thats fine, but git add has perfectly valid use cases.

                                                                                                                                                                                  1. 0

                                                                                                                                                                                    you are prompted to amend the message as well.

                                                                                                                                                                                    This is UI clutter unrelated to the underlying concepts. You can get around that with wrappers and aliases. I spoke of a hypothetical git amend above that could be an alias that avoids prompting for a commit message.

                                                                                                                                                                                    Don’t git users like to say how the UI is incidental? That once you understand the data structures, everything else is easy? The UI seems to have locked you into believing the index is a fundamentally necessary concept, but it’s not. It’s an artifact of the UI.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      The UI seems to have locked you into believing the index is a fundamentally necessary concept, but it’s not.

                                                                                                                                                                                      Nothing has locked me into believing its a necessary concept. Its not necessary. In fact, for about 7 years I didnt use the index in any meaningful way.

                                                                                                                                                                                      I think what you are missing is that Im not compelled to use it because its the default workflow, I am compelled to use it because its useful. It helps me accomplish work more smoothly than I did previously, when I would just make a bunch of tiny commits because I didnt understand the point of the index, as you still dont.

                                                                                                                                                                                      The argument could be made to move the index into an option, like somehow make commit only the default workflow. Im not sure what that would look like with Git, but I dont think its a good idea. It would just encourage people to make a bunch of smaller commits with meaningless commit messages.

                                                                                                                                                                                2. 1

                                                                                                                                                                                  You have a set of things you want to accomplish. With git, you have N+1 concepts/features/tools to work with. With hg, you have N (because you drop the index). That means you have to expand your usage of the remaining N.

                                                                                                                                                                                  Specifically, since you no longer have this extra index concept, you now expand commits to cover the scenarios you need. Normally, you’d make an initial commit and then amend a piece at a time (probably with the interactive curses hunk selector, which is awesome.) If you’re unsure about some pieces, or you have multiple things going on that you’d like to end up in separate commits, you can always make a series of microcommits and then selectively collapse them later. (In practice, it’s even easier than this, because of the absorb extension. But never mind that.)

                                                                                                                                                                                  Yes, those microcommits need commit messages. They don’t need to be good ones, because they’re temporary until you squash them out of existence. I usually use a one word tag to specify which of the separate final commits they belong to. (If you don’t have separate final commits, you may as well amend, in which case no messages are needed.)

                                                                                                                                                                                  …or on the other hand, maybe mercurial ends up with N+1 concepts too, because phases really help in keeping things separate. As I understand it, one reason git users love the index is because it keeps rapidly changing, work in progress stuff separate from mostly set in stone commits. Phases perform the same purpose, but more flexibly, and the concepts are more orthogonal so they compose better. In my opinion.

                                                                                                                                                        3. 6

                                                                                                                                                          I never particularly liked git and find it unintuitive, too.

                                                                                                                                                          I wouldn’t consider myself a git poweruser. But whenever I had to work with alternatives I got the feeling that they’re just inferior versions of git. Yeah, maybe the usage was a bit more intuitive, but all of them seemed to lack things that I’d consider really basic (bisecting - hg has that, but e.g. svn has not - and shallow copying - not avaible in hg - are examples what I often miss).

                                                                                                                                                          1. 3

                                                                                                                                                            Mercurial was actually my first DVCS, and like you I ended up switching to git not out of a sense that it was technically better, just more pragmatic. For me, the change is more of a mixed bag, though. It is definitely the case that Mercurial’s UI is worlds better, and revsets in particular are an amazing feature that I sorely miss, but when I made the switch I found that the way git handles branches was much more intuitive to me than Mercurial’s branch/bookmark system, and that the affordances around selectively editing commit histories were very much worth the risk in terms of being able to manage the narrative of a project’s history in a way that makes it more legible to others. Ultimately, I found that git’s advantages outweighed its downsides for my use case, since learning its UI idiosyncrasies was a one-time cost and since managing branches is a much more common occurrence for me than using revsets. That said, I think this is a really unfortunate development.

                                                                                                                                                            1. 2

                                                                                                                                                              I occasionally convert people’s git repos to hg for my use. Stubborn like that.

                                                                                                                                                            1. 4

                                                                                                                                                              That’s unexpected.

                                                                                                                                                              1. 4

                                                                                                                                                                Only if you haven’t been paying attention, the writing has been on the wall for a while now.

                                                                                                                                                              1. 17

                                                                                                                                                                Do not delete the path part of that URL, yikes.

                                                                                                                                                                Anyway, what is “Suckless”? That’s what I was trying to see, and instead got an image of a naked man holding a bottle of wine.

                                                                                                                                                                1. 16

                                                                                                                                                                  For Suckless, see https://suckless.org/, not the users subdomain.

                                                                                                                                                                  It’s a project/group related to cat-v and classical-unix/plan9 advocacy, rejecting tools that “suck” and wanting to replace them with “simpler” alternatives (dwm for window managment, st for terminals, dmenu for reading keyboard input, …). This often entails that configurations have to be applied pre-compilation and that the default distributions of various tools and projects are pretty lean – hence additional features are collected as patches, which are listed here, showing which can be successfully applied, and which can’t.

                                                                                                                                                                  1. 4

                                                                                                                                                                    I can report that dwm and st are great tools.

                                                                                                                                                                    The only hitch is recompiling them after modifying their configuration files, which are written in C. Many people don’t like this. Some, like myself, don’t mind.

                                                                                                                                                                    1. 3

                                                                                                                                                                      I used st (off and on) for a while (~1yr), and for me the biggest annoyance was having to rebase some patches when multiple patches modify similar lines of code. Once that headache was resolved, it was generally OK unless some st commits triggered rebasing some stuff again. Basically it was all the fun of maintaining your own branch of st with patches someone else wrote.

                                                                                                                                                                  2. 13

                                                                                                                                                                    Suckless was in its heyday around the time of the systemd eruption, as far as I know. This would be around 2010. Slightly prior was this one weird viral video of an artist named Gunther, a self-styled “sex prophet,” who made the rounds with a (completely SFW in the most technical of senses, though apparently not germane to your sensibilities, bheisler, which is fine with me, thus this explanatory note to lessen the blow of freakishness herein) music video called “Ding Ding Dong.” Pop music beats, euro summer beach ditzy style. Not amazing, but pretty good, definitely unique. The naked man is that same gunther. Just wanted to clear that up, because this is a clear case of an overreaction to a misunderstood joke. As far as I know, the suckless community was and is to the extent that it still exists, pretty insular. Probably didn’t anticipate being posted on an HN style board

                                                                                                                                                                    1. 7

                                                                                                                                                                      Probably didn’t anticipate being posted on an HN style board

                                                                                                                                                                      Lobste.rs has even “suckless developer” hat used by several people. Not quite buying the unanticipated part.

                                                                                                                                                                      1. 1

                                                                                                                                                                        Reasonable.

                                                                                                                                                                        Would you, however, admit that Gunther, the individual who presumably is the man behind gunther.suckless org, is not the OP of this link?

                                                                                                                                                                        In admitting this, if you do admit this, are you not therefore forced to agree with me that the post we’re discussing was not intentionally put forth as a display of nudity to eyes averse to that same nudity?

                                                                                                                                                                        If a list of patches to utilities and other programs is hosted at a path of a subdomain which contains the image a naked man holding a vertical wine bottle (with suggestive verticality) is posted without awareness of the suggestive verticality of said bottle, then can’t we conclude that the proximate nature of that suggestively vertical bottle to said list of patches to utilities and programs is in some sense accidental, and therefore unanticipated?

                                                                                                                                                                        By this argument, I intend to demonstrate that your claim, while seemingly reasonable, is eliding the quite clear nature of the circumstances, in an effort to maintain that all suckless developers and subdomain holders should be aware of all possible audiences for their online “speech” (or however you wish to define what the image is), when in fact it is absurd to believe that all speech of all suckless developers would be anticipated to agree with all possible audiences. I’m afraid that, unless Gunther appears to justify his position, we’ll have to remain in a misunderstanding silence regarding the reason why a suggestively vertical bottle and naked man are so closely associated with this list of patches.

                                                                                                                                                                        I tried to explain it, because it seemed necessary to explain, to me. Perhaps one day, your doubt regarding this explanation will itself be exposed to the eyes of someone on a far away news site, and they will be as horrified as if they had seen a vertical and suggestively placed bottle.

                                                                                                                                                                        1. 2

                                                                                                                                                                          @varjag simply wanted to inform you that @FRIGN not only has an account here, but also has the [suckess.org developer] hat. So a lot of the community knows about Suckless (presumably not @bheisler, who asked the question in the first place).

                                                                                                                                                                          I must confess to be in the same position as @bheisler. I knew of suckless, but had no idea what the linked page meant in context of that project.

                                                                                                                                                                      2. 3

                                                                                                                                                                        So the guy probably thought since he had the same name as this weirdo that for internet reasons (remember when memes were cool and unique signifiers of in-group identification?) it would naturally follow to have him around on the ol’ personal page

                                                                                                                                                                        1. 2

                                                                                                                                                                          Sorry for the long-winded explanation, but I miss the old web, and I am not even old! Would you, Herr heisler, have been hip to a tidy game of Flash-powered Sandspiel, even if it were on a subdomain of ebaumsworld?

                                                                                                                                                                      3. 8

                                                                                                                                                                        The suckless project makes and maintains a bunch of Unix programs that meet their definition of “sucking less” - http://suckless.org/philosophy/

                                                                                                                                                                        I’ve been caught off guard by them offering personal subdomains on their site before, too - suckless.org is SFW, but any individual subdomain?

                                                                                                                                                                        I use and like dwm when I can.

                                                                                                                                                                        1. 17

                                                                                                                                                                          They like to send mail from hosts with names like wolfsschanze. You can also see FRIGN’s opinion about diversity as shared on lobsters. Or the time someone pointed out there are torchlit marches at suckless conferences and someone else asked FRIGN to clarify and he basically admitted to being a white nationalist, complete with dogwhistles like “cultural marxism”?

                                                                                                                                                                          I’m not saying that suckless is definitely a white nationalist organization but I am saying someone would have to do a lot of work to convince me otherwise.

                                                                                                                                                                          1. 4

                                                                                                                                                                            Must we do this everytime someone posts something suckless related? Can we please just talk about technology instead of all this political nonsense and random accusations?

                                                                                                                                                                            1. 13

                                                                                                                                                                              Look, for every person who thinks this is “political nonsense and random accusations,” there’s at least one person who thinks this is so damning that they want literally nothing to do with suckless ever again.

                                                                                                                                                                              And despite Lobster’s general “politics is off-topic” policy, this thread is literally someone asking “what is ‘Suckless’?”, so if it’s on-topic anywhere, it’s here.

                                                                                                                                                                              1. 2

                                                                                                                                                                                Please see my reply above.

                                                                                                                                                                                1. 5

                                                                                                                                                                                  Um. Welcome to lobsters? A couple of words to a wise guy:

                                                                                                                                                                                  1. Your previous comment is not “above” this one. The whole tree gets reordered based on upvotes.
                                                                                                                                                                                  2. That stream-of-consciousness-wall-of-text style may play well wherever @enkiv2 invited you from, but it’s gauche here. At least, I find it exhausting more than amusing.
                                                                                                                                                                                  3. For heaven’s sake, please don’t feed the trolls! No matter how many big buckets of troll slop you may have handy.
                                                                                                                                                                                  1. 0

                                                                                                                                                                                    Thank you, minimax! – for your welcome, since it is utterly welcoming. A couple more words in response, and whether they contain a wisdom equivalent to my similar and apparently inherent quality of same is entirely your determination. I am so grateful to have run into an authority on these matters. Perhaps you can finally solve the trolley problem for us all, and divide good people from bad ones, as you scry into your palantir of forum posts.

                                                                                                                                                                                    To wit -

                                                                                                                                                                                    (1) My previous comment is in a tree of comments.

                                                                                                                                                                                    (a) What is the precise and preferred nomenclature, such that an ignoramus could understand?

                                                                                                                                                                                    (b) In the sense that a tree (such as this comment tree) goes from a single node to plenty of nodes, is it entirely inappropriate to say “above” in order to indicate, where n is the depth indicated away from the origin, trunk, root, or base of the tree, the position n - 1? I understand if your perspective is like the protagonist of Ender’s game, and you feel like n-1 compared to n is down, not up, but Ender held that of his enemies, and I am not yours. Are you mine?

                                                                                                                                                                                    (2) I don’t care. Actually, like a total four-year-old, I feel an evil glee.

                                                                                                                                                                                    (a) When you say, “stream-of-consciousness-wall-of-text,” you are committing a grammatical error by hypenating between “chunks” of words. One noun is “stream-of-consciousness” and the other is “wall-of-text,” and, while neither necessitates hyphens, it is an elegant stylistic choice, and redounds back upon my usage of “implied-by-you.” But the nouns you connected simply don’t need to be joined. In fact, they should be separated by a comma. I’m running out of breath just looking at it.

                                                                                                                                                                                    (b) Gauche – what is the meaning of this word in the sense you’re applying?

                                                                                                                                                                                    (b, cont.) John Ohno is no concern of yours in this regard, is he? What are you, a partisan of webbiness that wants to condemn hypertext? What beef could you possibly have with the guy? How do you even go from his proto-post-communism on the one hand and quasi-Ludditic radically conservative ideals of “small computing” on the other, to me? Am I to consider you as thinking that my response, “below,” (in opposition to ngoldbaum’s unfair condemnation of an entire ideal of technical practice in contemporary FOSS on the basis of his own flawed reasoning, equating cultural marxism, which predates the ilk whom ngoldbaum is, in abject ignorance, confusingly attempting to condemn, by about 45 years) the same as enkiv2’s opinions?

                                                                                                                                                                                    (b, cont.) That you find it exhausting to read: good for you. :)

                                                                                                                                                                                    (3) This would be humorless, except it is meaningless.

                                                                                                                                                                                    Please, oh minimax, solve the trolley problem, since you know how to identify trolls and can give advice to the gauche. I am happy to lay on the tracks if you want to flip that switch to experimentally determine once and for all whether it is worth saving some arbitrary group of people as opposed to me. Regarding the basic subject matter at hand, which is suckless, and someone’s unfair-in-my-opinion (see how that’s grammatical?) condemnation of suckless, I should say that I find a policy of opposition to affirmative action intolerant. I support techne, and it follows that I support suckless. It does not therefore follow that I support what ngoldbaum very confusedly understands to be a persecution of the Jews by FRIGN. This seems absurd to have to point out, but here we are. Again: I find intolerance disgusting. I also find vendettas disgusting. Lastly, I find hubris disgusting. I am painfully aware that I, too, sadly lack the cleanliness that would come with an absence of this very quality. However, you have to admit, your hubris in judging me is incomparably greater than my hubris in defending myself against your allegations of . . .

                                                                                                                                                                                    1. Being a “wise guy.”
                                                                                                                                                                                    2. Having a “gauche” “style.”
                                                                                                                                                                                    3. Having an exhausting and unamusing style.
                                                                                                                                                                                    4. Feeding the trolls, in contradiction to the “sake of heaven.”
                                                                                                                                                                                    5. Having handy “troll slop.”

                                                                                                                                                                                    Your welcome is most welcome.

                                                                                                                                                                                    And you’re welcome.

                                                                                                                                                                                    Regards,

                                                                                                                                                                                    Myself

                                                                                                                                                                                    P.S.: “A couple of words” is merely a figure of speech! And you don’t have to type “um,” even if you habitually say it!

                                                                                                                                                                                    1. 4

                                                                                                                                                                                      This sardonic flippancy is tedious and unwelcome. Please treat others better than this.

                                                                                                                                                                                      1. 2

                                                                                                                                                                                        Noted

                                                                                                                                                                                      2. 1

                                                                                                                                                                                        (a) What is the precise and preferred nomenclature, such that an ignoramus could understand?

                                                                                                                                                                                        I prefer to simply provide a link to the comment.

                                                                                                                                                                                        (2) I don’t care. Actually, like a total four-year-old, I feel an evil glee.

                                                                                                                                                                                        This is not a good attitude to have on Lobste.rs.

                                                                                                                                                                                        (b) Gauche – what is the meaning of this word in the sense you’re applying?

                                                                                                                                                                                        I’m not @minimax, but I would read it as “socially awkward”.

                                                                                                                                                                                        (b, cont.) John Ohno is no concern of yours in this regard, is he?

                                                                                                                                                                                        Actually he is, as he invited you and has a certain responsibility for that invitation.

                                                                                                                                                                                        1. 2

                                                                                                                                                                                          Yeah, um, @lettucehead, please don’t get yourself banned. I would not have invited you if I didn’t expect you to acknowledge community norms & practices.

                                                                                                                                                                                          1. 0

                                                                                                                                                                                            I just saw your reply to this thread, and I want to thank you again for the invite, and assure you that I won’t be a troll or otherwise possess sardonic flippancy in the future. Well I will try to tone it down. A lot.

                                                                                                                                                                                            I still have all my questions from this thread (how the heck can somebody using the words “cultural Marxism” to discuss radical forms of Marxism having to do with culture, which are genuine phenomena, be considered an anti-Semitic “dogwhistle?” Why was I considered a troll for pointing out this exhausting and unfair absurdity? Will pushcx ever change his mind about my sardonic flippancy, and see it for the charmingly wonderful firehose of Furby-faced unicorns it really is? Like the center of a Tootsie Pop’s per-lick depth scalar, the world may never know)… Thus I have decided to just let it go. Or maybe I’ll start a tech blog and collect $20 from Drew DeVault.

                                                                                                                                                                                            I just wanted to make a splash. I will certainly be more careful moving fwd, and not imperil your reputation. Any further than you yourself do all the time with all the “small computing” heresies I hear you’ve been spreading among the faithful, turning Microsoft customers into the reprobate worshippers of Alan Kay. Tsk, tsk. Cheers

                                                                                                                                                                              2. 1

                                                                                                                                                                                Hey, because minimax decided to play mod with my “gauche style,” and I suspect he just disagrees with what he believes to be my assumptions about what you said, I have some further, legitimate, serious questions. What can you say to substantiate your reduction of the “stream-of-consciousness, wall-of-text style” (to use minimax’s phrase with my improvement) post by which FRIGN “[clarified,] and … basically admitted to being a white nationalist,” in the torchlit marches link, above?

                                                                                                                                                                                I’m honestly confused, I just don’t see how you get that from what he said. Can you, please, substantiate your reduction of what he actually said, to what you said he said?

                                                                                                                                                                                Or, can you remove your unnecessarily politicizing post, in violation of pushcx’s general wishes for this forum? I will happily delete (or respect the deletion of) my replies to it, so that we’re “even.” But let it be known, I do wish substantive answers because I am sincerely curious about your opinion and understanding, and would rather not have the kabosh put on a polite and principled discussion. We’re all crustaceans here, instead of denizens of the orange site, because the discussion is of a much higher quality. At least, that’s what I’m here for, and I care deeply about that.

                                                                                                                                                                                I should also add that I never would have been aware of any rift between certain members of this community were it not for one of your posts on almost the exact same subject several months ago, and while I have picked on specific points of contention regarding the “dogwhistles,” I was glad to receive the intelligence represented by your… saintly screeds… in this regard, both initially and now.

                                                                                                                                                                            1. 25

                                                                                                                                                                              With respect to email, don’t forget that pull requests were once intimidating too - as anyone who frequently works with onboarding new developers to its workflow can attest. To help make onboarding users with email easier, I wrote this tutorial:

                                                                                                                                                                              https://git-send-email.io

                                                                                                                                                                              I also wrote a rebase guide which applies to both workflows for making your changes more consistent and easier to review:

                                                                                                                                                                              https://git-rebase.io

                                                                                                                                                                              1. 26

                                                                                                                                                                                https://git-send-email.io

                                                                                                                                                                                That nicely outlines how to send patches, but I think people have far more difficulty receiving patches via email. Not everyone uses mutt, aerc, or runs a patchwork instance. Many mail clients, that people are otherwise generally fairly happy using, are just super not great at handling emailed patches. Emailed patches also generally don’t show a CI status that you can view ahead of time (I have heard of some, but I don’t ever remember seeing it firsthand in the wild).

                                                                                                                                                                                It’s great that it (an email patch workflow) works well with your workflows and tooling, but for some people it just… doesn’t work as well.

                                                                                                                                                                                1. 4

                                                                                                                                                                                  I mean, those people who don’t have such a mail client are missing out. It’s like arguing that we should use SVN because not everyone has git installed, in my opinion. And testing your patches against SourceHut CI is pretty easy, before or after it’s sent.

                                                                                                                                                                                  1. 26

                                                                                                                                                                                    I think one issue is that for most of us, sending and receiving patches is a very small part of what we do with email, so choosing a mail client on that basis doesn’t make sense.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      But we aren’t forced to use only one mail client. I use several depending on context / the task at hand.

                                                                                                                                                                                      1. 1

                                                                                                                                                                                        I am curious about your multiclient workflow. Do you use multiple addresses, or use filters and one shared address? Or just all the mail in all of them?

                                                                                                                                                                                        1. 4

                                                                                                                                                                                          Whether you use local maildir or imap, mail stores are designed for concurrent access. How many people check email on their phone and not their phone?

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            Sure, but my question was specifically about their workflow with it.

                                                                                                                                                                                          2. 2

                                                                                                                                                                                            As it happens I do use multiple accounts for multiple “hats”, but that’s slightly orthogonal to multiple clients, which I use even for a single account. My daily driver is mutt; I use thunderbird for rare occasions when I need to see rendered html properly or perform a search (still haven’t got mairix or not much etc set up) and I often use ios mail app but mostly read only.

                                                                                                                                                                                            At work we use Gmail. I do check that from ios mail app too. I recently started configuring mutt to read my work mail too but it’s a work in progress so I still regularly open the Gmail website.

                                                                                                                                                                                      2. 23

                                                                                                                                                                                        I mean, those people who don’t have such a mail client are missing out. It’s like arguing that we should use SVN because not everyone has git installed, in my opinion.

                                                                                                                                                                                        To me it sounds a bit more like arguing “anyone who doesn’t ride a penny-farthing to work every day is totally missing out”.
                                                                                                                                                                                        Well…maybe.. I do find it unlikely that is going to convince very many people who weren’t already riding them, or weren’t already inclined to do so. Even if it is amazing.

                                                                                                                                                                                        Sidenote1: I may be wrong, but it even appears that Mutt itself uses gitlab instead of email based patches. If true, I find that oddly humorous.

                                                                                                                                                                                        Sidenote2: I have nothing against email based patch flows, and if I am going to contribute to a project, I generally contribute in whatever form a project requires (within reason). But for my own projects, I do not desire an emailed patches based workflow (EPBW), nor do I desire to run/manage/admin/moderate(remove spam) a mailing list. That’s just me though.

                                                                                                                                                                                        1. 7

                                                                                                                                                                                          To me it sounds a bit more like arguing “anyone who doesn’t ride a penny-farthing to work every day is totally missing out”.

                                                                                                                                                                                          I don’t really like this take. Having sunk thousands of hours into the GitHub, Gerrit, and email-driven workflows, I can confidently assert that the email-driven workflow, even setting aside the many respects in which it is politically and technically superior, is simply the most efficient for both contributors and maintainers. The penny farthing comparison is unfair.

                                                                                                                                                                                          Sidenote1: I may be wrong, but it even appears that Mutt itself uses gitlab instead of email based patches. If true, I find the humorous.

                                                                                                                                                                                          Mutt uses Gitlab and mailing lists and Sourcehut, actually. The dominant avenue of contributions to mutt is through its hosted mailing list. They use Sourcehut CI, however.

                                                                                                                                                                                          Sidenote2: I have nothing against email based patch flows, and if I am going to contribute to a project, I generally contribute in whatever form a project requires (within reason). But for my own projects, I do not desire an emailed patches based workflow (EPBW), nor do I desire to run/manage/admin/moderate(remove spam) a mailing list. That’s just me though.

                                                                                                                                                                                          That’s why Sourcehut can do it for you.

                                                                                                                                                                                          1. 9

                                                                                                                                                                                            I don’t really like this take. Having sunk thousands of hours into the GitHub, Gerrit, and email-driven workflows, I can confidently assert that the email-driven workflow, even setting aside the many respects in which it is politically and technically superior, is simply the most efficient for both contributors and maintainers. The penny farthing comparison is unfair.

                                                                                                                                                                                            A bit of an “Ipse dixit”, but I’ll take it at face value anyway. To be clear, my comment was in response to your statement:

                                                                                                                                                                                            I mean, those people who don’t have such a mail client are missing out.

                                                                                                                                                                                            Which is what I made the comparison against. You have now pulled in other concerns in your response, and attributed them to the comment I made. I find that a bit uncharitable. I guess at this point we can just agree to disagree.

                                                                                                                                                                                            Mutt uses Gitlab and mailing lists and Sourcehut, actually. The dominant avenue of contributions to mutt is through its hosted mailing list. They use Sourcehut CI, however.

                                                                                                                                                                                            That’s odd. I looked through the last 2 months of their mutt-dev mailing list, and saw no mailed patches, but several gitlab PRs. Maybe I saw the wrong mailing list? Maybe I didn’t go back far enough? Overlooked it?
                                                                                                                                                                                            It doesn’t really matter, and I’ll take your word for it that they predominantly use emailed patches.

                                                                                                                                                                                            1. 2

                                                                                                                                                                                              The last 2 months have only seen one patch on Gitlab:

                                                                                                                                                                                              https://gitlab.com/muttmua/mutt/merge_requests?scope=all&utf8=%E2%9C%93&state=merged

                                                                                                                                                                                              After reviewing it myself I have to correct myself, I reckon that Gitlab and the mailing lists are at about an even pace these days.

                                                                                                                                                                                              1. 2

                                                                                                                                                                                                Do note: that was merged PRs. There were a couple of more (not many though!) in All which is what I looked at.

                                                                                                                                                                                        2. 5

                                                                                                                                                                                          Not everyone is productive using such mail client. Personally, I just plainly cannot remember more than a few shortcuts, which is already a massive roadblock for effectively using CLI tools as for most of them rely on shortcuts to increase productivity, they also do not provide me with options of what I can do, and I cannot for my life remember what can I do for all the possible contexts, cause of course options on what you can do are dependent on the context which you are currently in. Some people just aren’t productive using CLI tools, and saying that they “are missing out” because they plainly cannot effectively use the tool is simply gatekeeping.

                                                                                                                                                                                          1. 3

                                                                                                                                                                                            saying that they “are missing out” because they plainly cannot effectively use the tool is simply gatekeeping.

                                                                                                                                                                                            This is absurd. If a mechanic decides that he “is not a ratchet person” and will only ever use open-end wrenches, then I will question his professionalism just as I would question a software developer that “is not a CLI person” and will not learn to use a CLI mail client.

                                                                                                                                                                                            He doesn’t need to use the CLI mail client for his day-to-day email, but he should be capable of learning how to use it to handle the occasional emailed patches.

                                                                                                                                                                                            1. 5

                                                                                                                                                                                              Or this person will work with whatever, when paid for (professionals are paid for their work by definition!), but will only work with tools he/she finds enjoyable when doing charity. Thus FLOSS projects forcing inconvenient, last century methods with arrogant communication are missing contribution.

                                                                                                                                                                                              I thing the FLOSS community should focus on this kind of openness more, instead of CoCs.

                                                                                                                                                                                              1. 3

                                                                                                                                                                                                Good point. For work I’ll use whatever tools get the job done, no matter how gruesome. But for FOSS contributions, I agree that if the tool is difficult or simply frustrating to use, then it may as well not exist.

                                                                                                                                                                                              2. 1

                                                                                                                                                                                                Wrong assumption. Difference between using GUI and CLI clients is not like between open-end and ratcheted wrenches. Using those wrenches is basically the same. Meanwhile the experience between using CLI and GUI mail client is a lot bigger. I’d compare it to using automatic and manual wood planes. You can work with higher precision and similar speed with manual hand plane, but most carpenters would choose automatic hand plane, as it “just works” and doesn’t require that much skill and learning to do.

                                                                                                                                                                                                And why should you care what kind of wrench does your car mechanic uses, if he does the job well? This isn’t a problem not using better tools, but a problem of tool abilities. The tools that an average developer uses does not represent the tools that are created for that workflow. And that is a problem.

                                                                                                                                                                                                1. 2

                                                                                                                                                                                                  I’ll entertain the analogy to a wood plane, though I’m unfamiliar with the devices. You say it yourself: the manual wood plane is useful in certain circumstances but requires skill. So does the CLI mail client. Use the automatic wood plane where it fits, but at least learn the skill to use the manual wood plane where the higher precision is necessary.

                                                                                                                                                                                                  A developer that refuses to acquire a skill is simply not professional.

                                                                                                                                                                                                  1. 1

                                                                                                                                                                                                    It’s not like it requires much skill. It is the basically the same skill. The difference is, you need to move the manual wood plane along the plank 10 times, while with automatic you only need to move it once and the motor does its job. Some people just don’t have the patience and/or physical stamina to use manual wood plane. Manual hand plane is in fact more configurable, and can be used in more specialized scenarios. So enthusiasts use hand planes. Your average carpenter does not.

                                                                                                                                                                                                    1. 2

                                                                                                                                                                                                      The analogy was not mine.

                                                                                                                                                                                              3. 0

                                                                                                                                                                                                Consider acme?

                                                                                                                                                                                                1. 2

                                                                                                                                                                                                  I am unable to find such email client. And the point is, for a workflow to be usable by a wide range of people, it should require as little new tools that do the same as the ones they use. And in case of email clients, most people probably like their current email client, and they do not want to change it. So they, in turn, do not want to switch to this new workflow, which, while potentially increases productivity, requires them to switch to tools they do not like.

                                                                                                                                                                                                  1. 4

                                                                                                                                                                                                    acme is a text editor which can be easily coaxed into being a mail client.

                                                                                                                                                                                                    Consider as well that you needn’t discard your daily mail client in order to adopt another. What difference does it make if some technology is backed by email or by some other protocol? Just because you already have an HTTP client (e.g. your web browser) doesn’t mean another isn’t useful (e.g. curl).

                                                                                                                                                                                                    1. 7

                                                                                                                                                                                                      Acme does not seem like general user friendly. My colleagues all use JetBrains IDE’s and use Thunderbird as their mail client. And acme would be a downgrade for their experience. I might use it, but they wouldn’t. If I cannot offer them a good GUI email interface, there is no way they would switch to email-based workflow.

                                                                                                                                                                                                      1. 0

                                                                                                                                                                                                        I was recommending acme particularly for you, given the following:

                                                                                                                                                                                                        I just plainly cannot remember more than a few shortcuts

                                                                                                                                                                                                        If your colleagues won’t join you I consider your colleagues to be in the wrong, not the software. A bicycle is easier to use than a car but it’s not going to get you to the other end of town in time for the movie.

                                                                                                                                                                                                        1. 14

                                                                                                                                                                                                          If your colleagues won’t join you I consider your colleagues to be in the wrong, not the software.

                                                                                                                                                                                                          Don’t you think peace within a team is more important than any particular software or workflow? Or, to put it another way, the feelings of people are more important than any workflow, so if a large group of people reject a workflow, it’s better to conclude that the workflow is wrong for those people than to say that those people are wrong.

                                                                                                                                                                                                          1. 7

                                                                                                                                                                                                            My colleagues wouldn’t join me because the workflow is bad, but because there is no tooling suitable for them and the workflow. If tooling for a specific workflow just isn’t comfortable for me, I’m just not going to use it.

                                                                                                                                                                                                            1. -8

                                                                                                                                                                                                              Then you ought to be coding in basic. Good things often require effort.

                                                                                                                                                                                                              Edit: this comment seems to be being misinterpreted, so a clarification: I’m not earnestly suggesting that he should use basic. I’m extending his logic to an incorrect conclusion to demonstrate the flaw in his argument. Most languages are harder than Basic, therefore Basic is more comfortable, therefore why ever learn anything else? Obviously it doesn’t make sense.

                                                                                                                                                                                                              1. 18

                                                                                                                                                                                                                You are literally making the exact same argument that @ignaloidas’ colleagues are. The only difference is that the tooling you find suitable and the tooling they find suitable is a null set. They want to be in JetBrains’ IDEs, you want to be in email. You built tooling that demands email-based workflow because it’s what you want and then tell them they have to change; they’ve got tooling that demands GitHub (or a workalike) and then tell their colleagues that they have to change.

                                                                                                                                                                                                                As an aside, I pay for and generally enjoy using Sourcehut, and I respect your diehard allegiance to email, but you’ve got to quit acting like this in the threads. I get that you love an email-based workflow, and find it superior for your use cases. Having used Git and Mercurial since, what, early 2006 I guess—certainly before GitHub and Bitbucket existed—I disagree (especially when your workflow starts to involve binary assets, so most websites, games, mobile apps, and so on), but I’m also comfy in that workflow, and happy to support an SCM that fully supports that flow. But if you insist that people who do not use your workflow are wrong, and do so in this offensive manner, you’re going to start losing customers.

                                                                                                                                                                                                                And as an aside to that aside, you need to do what you want with Sourcehut, but the fighting against this on principles to me, as a former SCM lead, looks a bit forced: looking at this whole thread, and thinking back to a very early comment, all you’d have to do to satisfy him is to make temporary branch names that can be pulled in some mechanism based on the patch series. That’s it. It’s not trivial, but it’s also not that difficult, since you’re already doing 90% of that with the patch view. If you don’t want to do it, that’s fine, but it seems like that’d still mandate patch-accessible workflows, while also meeting the PR crowd a bit.

                                                                                                                                                                                                                1. 2

                                                                                                                                                                                                                  Note about the JetBrains’ IDEs. It’s not like they are incompatible with with email driven workflow, they just have tools that are better suited for pull-request workflow. I gave JetBrains IDEs as an example of what an “average” developer as I know it uses from day to day, as it seems that many bloggers have a distorted view of “average” developer. Average developer actually doesn’t want to fiddle with settings and try 10 different variants before deciding to use one. They want tools that “just work” without massive setup. Average carpenter wants a table saw that simply does the job they want to, they do not fiddle around it to make it the best saw for them.

                                                                                                                                                                                                                2. 14

                                                                                                                                                                                                                  Hi this is not a very nice tone, please try to argue in good faith.

                                                                                                                                                                                                                  1. 13

                                                                                                                                                                                                                    Is insulting prospective customers really the best way to grow your business?

                                                                                                                                                                                                                    1. 0

                                                                                                                                                                                                                      That was no insult, it was a logical extension of his logic. I didn’t mean it sincerely, I was using it to explain his error.

                                                                                                                                                                                                                    2. 2

                                                                                                                                                                                                                      Ok, in simpler terms. I would probably still use an SUV instead of Smart even if Smart can go through some shorter paths, because I feel cramped when driving it. Same with software. Some software is in fact more useful than other, but is harder/inconvenient to use for some than software which doesn’t have those fancy features.

                                                                                                                                                                                                                      1. -5

                                                                                                                                                                                                                        This isn’t such a case. This is a case where you (or your colleagues, I’m not sure at this point) are refusing to try unfamiliar things and, being ignorant of the experience, asserting it’s worse.

                                                                                                                                                                                                                        1. 3

                                                                                                                                                                                                                          It is. The thing is, I have tried mutt and aerc, and the problem is that I just plainly am not comfortable using bigger CLI programs, that is, those, whose scope goes out of pipes and command line rguments. About the only programs that of such style that I can use is nano and htop, only because they have a handy shortcut guide in the bottom at all times. Acme is also not the kind of editor I would like to use casually. It is easy to blame the people that don’t use it, without understanding the reasons why they don’t use it.

                                                                                                                                                                                                                          1. 0

                                                                                                                                                                                                                            You didn’t know anything of acme not even 2 hours ago. You’ve evaluated it in that time?

                                                                                                                                                                                                                            Herein lies my point. I have a vision and I must at some point exercise my creative authority over the project to secure that vision. Yes, it’s different from what you’re used to. You can construct reasons to excuse this away, but I fundamentally believe that being unwilling to learn something new is the underlying problem. As evidence, I submit that there’s no way you could have given acme a fair evaluation since my suggestion of it. I don’t consider this sort of behavior acceptable cause for changing my system’s design to accomodate.

                                                                                                                                                                                                                            1. 12

                                                                                                                                                                                                                              As someone who used Acme for two years, @ignaloidas does not sound like someone for whom Acme would even be worth trying. It’s great, but incredibly dependent on how you want to use your editor. You can’t disable word wrap, or use any shortcut to move the cursor down a column, for Christ’s sake. It’s really not for everybody (perhaps not even most people).

                                                                                                                                                                                                            2. 2

                                                                                                                                                                                                              So they, in turn, do not want to switch to this new workflow, which, while potentially increases productivity, requires them to switch to tools they do not like.

                                                                                                                                                                                                              What happened to using the right tool for the job?

                                                                                                                                                                                                              1. 1

                                                                                                                                                                                                                The question here is not about “the right tool for the job” but about the usability of those tools for the wider audience. Currently I do not see the majority of the developers switching to email-based workflow purely because of the usability of tools. “Rockstar developers” think that CLI’s are very usable and productive, but that is not the case for the average programmer.

                                                                                                                                                                                                                1. 3

                                                                                                                                                                                                                  “Rockstar developers” think that CLI’s are very usable and productive, but that is not the case for the average programmer.

                                                                                                                                                                                                                  Good to know that we were all rockstars for decades without realizing it!

                                                                                                                                                                                                                  This is probably just an age thing but I don’t know any professional programmers who aren’t comfortable with CLIs.

                                                                                                                                                                                                                  1. 3

                                                                                                                                                                                                                    There is CLI, and there is CLI application. Git is used through CLI. Vim is a CLI application. Surely you know at least one professional programmer that isn’t comfortable with Vim and alike.

                                                                                                                                                                                                        2. 3

                                                                                                                                                                                                          I am not particularly experienced at using git with email. One problem I have had in the past is when I want to pull in a patchset from a mailinglist archive, where either I am not subscribed to the mailinglist, or wasn’t subscribed at the time when the patches were sent. Can these mail clients help me with this problem? (By contrast, I find it very easy to add a branch / PR as a remote and pull or cherry-pick commits that way)

                                                                                                                                                                                                          1. 3

                                                                                                                                                                                                            lists.sr.ht, the sourcehut web archive for mailing lists, has a little copy+paste command line thing you can use to import any patch (or patchset) into your local git repo. Here’s an example:

                                                                                                                                                                                                            https://lists.sr.ht/~sircmpwn/aerc/patches/7471

                                                                                                                                                                                                            On the right, expand the “how do I use this” box and a short command is given there.

                                                                                                                                                                                                            Integration directly with your mail client would require more development but isn’t necessarily out of the question.

                                                                                                                                                                                                            1. 3

                                                                                                                                                                                                              That’s good to see, but presumably doesn’t help for non-sourcehut mailinglists?

                                                                                                                                                                                                              1. 3

                                                                                                                                                                                                                No, I’m afraid that there are fewer good solutions for non-sourcehut mailing lists. Patchworks has a similar feature, if the list in question has that set up. You could also ask someone else for a copy of the mail. I don’t think this damns the idea, it just shows that we need better software to support the idea - which is what sourcehut tries to be.

                                                                                                                                                                                                      2. 2

                                                                                                                                                                                                        I am still trying to find some time to check out Sourcehut. My only concern is how to configure it to run CI builds on mailing list patches as I couldn’t find it anywhere in the docs.

                                                                                                                                                                                                        1. 1

                                                                                                                                                                                                          This hasn’t been implemented yet, but it will be soon.

                                                                                                                                                                                                          1. 1

                                                                                                                                                                                                            Great. If that happens I will think about migrating some of my personal projects to the Sourcehut as it seems pretty as a pretty nice solution.

                                                                                                                                                                                                      1. 1

                                                                                                                                                                                                        That is a really excellent gif in the readme.

                                                                                                                                                                                                        1. 6

                                                                                                                                                                                                          Maybe I am mis-remembering my C, but isn’t this more like ++i pre-increment? In that the expression evaluates to the incremented value? I am basing this off of the psuedocode presented of:

                                                                                                                                                                                                          class Integer
                                                                                                                                                                                                            define_method '++' do
                                                                                                                                                                                                              self = self + 1
                                                                                                                                                                                                            end
                                                                                                                                                                                                          end
                                                                                                                                                                                                          

                                                                                                                                                                                                          For which the result of the assignment is returned from this ++ method (if it worked).

                                                                                                                                                                                                          Now that I think about it, true i++ post-increment feels like very awkward Ruby, both at its object-oriented core, and in its functional flourishes. On the other hand, pre-increment fits easily as “just another method”, akin to i+=1 though possibly without the gotchas of assignment precedence.

                                                                                                                                                                                                          Post-increment has to concern itself with manipulating which immutable value object that is assigned to a variable, more than a mutation internal to an object itself. A true i++ would need to:

                                                                                                                                                                                                          1. Store the original value.
                                                                                                                                                                                                          2. Change the value assigned to the variable name, ala Binding#local_variable_set.
                                                                                                                                                                                                          3. Return the original value.

                                                                                                                                                                                                          This still likely require an MRI patch, though I haven’t though too deeply about it.

                                                                                                                                                                                                          1. 4

                                                                                                                                                                                                            Good observation, your memories of C are right. What I implemented is a weird the pre-increment operator working as postfix. I’ll update the post to acknowledge this, thanks!

                                                                                                                                                                                                            I initially implemented the pre-increment operator (++some_var) and that’d be correct because the expression evaluates to the new value of some_var. However I only changed it to be postfix for a stupid reason: it looked better to me.

                                                                                                                                                                                                            I could have gone further and implement the post-increment & post-decrement the proper way but decided to leave it there for now, doing so was a bit tricker as the expression evaluates to something different from the assigned value (as you pointed out).

                                                                                                                                                                                                            My only goal was to mess around with Ruby and challenge myself to make changes in it, there’re tons of experiments you could do for fun. For example enforcing all method calls to have parenthesis so that @ngoldbaum would like Ruby more 😜.

                                                                                                                                                                                                            1. 3

                                                                                                                                                                                                              I fully endorse your JRI fork of the ruby interpreter