1. 50

    To whomever downvoted this as off-topic:

    • It’s about cryptography, security, and privacy
    • The source code examples are written in JavaScript

    …so which topic is it off-?

    1. 37

      It’s probably an expression of political distaste for overt references to furrydom rather than an authentic opinion that this article’s content is off-topic. I think this is absolutely topical content myself, but I’ve seen plenty of articles posted that I also thought were entirely topical (some of which I posted myself), that had off-topic or other flags because they were triggering to the political sensiblities of other users.

      1. 53

        Just posting in support of this.

        Folks, this is a nice high-effort post about implementing security, with code and references and the whole shebang. It isn’t shilling a service, it isn’t navel-gazing on politics, it isn’t even some borderline case of spamming a blog to get more views without care for the community.

        Anybody who flagged this as off-topic either didn’t read the article or is a tremendous asshole.

        Anyone who flagged this as spam either didn’t read the article or is a tremendous asshole.

        If the reference to furries in the title rustled your jimmies, despite the site policy here being to use the original title as close as possible, and you were unable to evaluate the quality of the article on its own merits, you’re a tremendous asshole.

        1. 26

          I get off topic downvotes for my posts with Mara too. Some of the graybeards here really dislike furries for some reason I can’t comprehend. I hope they can find something better to do that downvote furry adjacent content. Anyways, keep up the good work!

          1. 46

            I’m that kind of a person, though I don’t have a gray beard. To me it’s just cringe (for lack of a better word), just like an unironic “euphoric” atheist, a gun-obssessed anarcho capitalist, a “My Little Pony” Fanboy or a western-anime otaku. I honestly don’t see what the difference is.

            Any blog that tries to mix that kind of usually fringe subculture is fine by itself, people are strange, but I have my doubts how relevant it is to a general-public site like Lobsters.

            That being said, I didn’t flag it, I’ll just be hiding it.

            1. 16

              Setting aside how cringe or not it is, we should evaluate the article on its technical merits.

              1. 14

                In principle, yes, but we often have discissions on the form of sites (don’t post twitter threads, avoid medium, not loading without JS, too low contrast, automatically playing videos), and interspersing a page with furry imagary is just something that some people are used to (apparently this is an american thing), and others are not.

                1. 5

                  It’s not an American thing.

                  I don’t know why you think it is.

                  Eurofurence, Nordic Fuzz Con, and FurDU are just a few of the international furry conventions that attract thousands of attendees every year (COVID notwithstanding).

                  1. 16

                    Honestly that comes of as saying that McDonalds isn’t an american thing, because they have joints all over the world. Have you ever wondered why we are writing in English? I think everyone knows that american culture has a kind of dominance that no other culture has, because of hollywood, TV series and media in general. It’s always the de facto standard, and almost anything that is a thing in the US has following somewhere else. That has only intensified with the internet. But if anywhere in this thread, this is the point where we would be crossing over into off-topic territory, so I’d sugest we agree to disagree.

                    And regarding

                    I don’t know why you think it is.

                    First of all, Wikipedia says

                    The furry fandom has its roots in the underground comix movement of the 1970s, a genre of comic books that depicts explicit content.[5] In 1976, a pair of cartoonists created the amateur press association Vootie, which was dedicated to animal-focused art. Many of its featured works contained adult themes, such as “Omaha” the Cat Dancer, which contained explicit sex.[6] Vootie grew a small following over the next several years, and its contributors began meeting at science fiction and comics conventions.

                    So it literally comes from the US. But setting that aside, even if I didn’t know that, it’s something so inherintly american, that I would have been really suprised that something that at the same time desexualizes bestiality (by removing the inherent link) and sexualizes animals (by giving them human cues of attractivness and anatonomy) could come from anywhere else.

                    Edit: Also I was curious and looked it up, “Nordic Fuzz Con” has 1499 atendees in 2020, but considering how many contries these people came from, it’s approximatly 0.000008% of the population. It’s common that when people are too online, they overestimate how large their bubble really is. “Eurofurence” with almost twice as many atendees isn’t much better of.

                    1. 2

                      That’s super off topic for the discussion, but I’ve recently changed my mind about “american culture”. I now feel that a significant part of it is just universal, liberal culture, and not specifically American (hamburgers, pizzas and sushi being fun gastronomical examples). This post changed the way I think about this.

                    2. 2

                      I don’t know why you think it is [an American thing].

                      Probably due to mako’s comment, which said they “always considered it an American subculture”. I hadn’t heard of it being American before… thanks to your comment I’ll unlearn that.

                2. 12

                  Lobsters is general public? :-)

                  I think you could tack on just about any group and the content would be pretty much the same. “…for punks,” “…for people with a pulse,” or whatever. I’ve no strong opinion on furries. As long as their hobbies are not hurting anybody, I’ll just file it in the “not my thing, but not hurting me” bucket and see if the rest of what they have to say is interesting or not.

                  1. 11

                    Technology doesn’t exist in a vacuum. Practitioners, users, researchers, and creators are people whose experiences of technology will be informed by their lifestyle preferences, race, gender, queerness (or not), positionality in society, past experiences, mental health, hobbies, friends and so on.

                    It’s ridiculous and downright depressing to me that anyone would consider a blog off topic because the writer chose to make their technical narrative their own. It strikes me as the kind of narrow thinking that leads the tech industry to not be a very accessible or diverse place in general.

                    Divorcing technology from the real world leads to isolation and atrophy (to borrow the words of Courant). It reduces diversity, leads to moral atrophy, and systems built without empathy for users.

                    And it leads to gatekeeping. Don’t do that.

                    1. 8

                      The cringe is a reaction of your own, not the content itself. I would avoid downvoting a post just because of my relationship to it, so I’m glad you made the same call.

                      1. 11

                        Lobste.rs caters to a very specific subculture that exists in the IT sector that is in itself part of a broader subculture of technology creators and maintainers. It’s just that you think your subculture is important enough to be let in and others are not.

                        1. 11

                          You’re right that “technology” is a subculture, but my claim is that we are perpendicular/stochastically independent to “furry culture”.

                          It’s just that you think your subculture is important enough to be let in and others are not.

                          I would very kindly ask you not not be this elitist about this, this is explicitly a techonology site, with no further designations. The community has it’s tendencies, this way or another, but that doesn’t change the fact that the average to something as obscure as a “furry” will be recieved with some hesitation. This isn’t anything personal, I can imagine that if I went to some “normal” site like Facebook and started talking about the need Free Software that most people would consider me crazy.

                          1. 8

                            It’s the exact opposite of being elitist, it’s about being inclusive. You call “technological community” a thing that is aligned to your culture and values and it’s just a very small fraction of the people that produce digital technology. You universalize it because you cannot conceive that there might be different ways than yours of producing technology together. You believe your way is THE way and you reject other ways.

                      2. 11

                        I don’t think it’s greybeards, rather non-Americans. I’m in the UK, London, and if there’s a furry subculture here it is so microscopic that I’m not aware of it. I’ve always considered it an American subculture, and possibly mostly silicon valley, but certainly for non-Americans I think it’s very obscure. I didn’t vote either way, and have no idea what the furry thing is about, just glimpse it once in a while.

                        1. 11

                          For what it’s worth, in America you don’t just see people walking around expressing as furries while they shop for groceries. Most of us have never run across the culture in person. I think it’s not that this is an American phenomenon but that online spaces are safer, so that’s where you (and we) see them.

                          1. 3

                            just how microscopic would it have to be for you to not be aware of it? do you keep tabs on all… culture… in London?

                            1. 1

                              It’s honestly not very hard.

                          2. 10

                            I really enjoy most of the aesthetic of your pages, and the technical content! I just don’t like the random stuff being jammed in between it. I don’t need a bunch of reading space occupied by a full color, artistic, glorified selfie 6 times. Or in the case of Mara’s first appearance, 16 times.

                          3. 19

                            I’m not going to flag it, but the „for furrys“ bit certainly is off topic

                            1. 39

                              Furry is my blog’s aesthetic and theme, and a significant chunk of the content, but the focus is 99% encryption. The parts that are furry-relevant are:

                              1. A lot of tech workers are furries (or furry-adjacent).
                              2. I’ve found that furries are generally more comfortable with the abstraction of “identity” from “self” than non-furries. I generally attribute this to the prevalence of roleplay in our culture. (I remarked on this detail in the post.)
                              3. Implied but never stated in this particular article: Since roughly 80% of furries are LGBTQIA+, and queer folks are likely to be discriminated against in many locales, improving furry technology will likely have a net positive impact on queer privacy in oppressive societies.

                              This page isn’t so much for furries than it is from a furry, published on a furry blog, and with a bad furry pun in the title.

                              1. 27

                                You don’t actually need to entertain anti-furry sentiment. And do not worry either, there’s also people who appreciate this. I’d rather see furries than most common traits of the modern web.

                                1. 19

                                  A lot of tech workers are furries

                                  For certain values of “a lot”. I’d guess that this kind of stuff is more popular in the US than in India.

                                  1. 28

                                    The main problem with this kind of title phrasing is the forced communication of a political/sexual/whatever message, which is off-topic for the site, and most people don’t care, and don’t want to care for it.

                                    Anybody visiting the link would see that the page has a furry aesthetic. Then they would have the chance to read the article, or close the page. This way a message is promoted on the main page. I think identity politics are already too emphasized and destructive in discussions, and have a bad effect on communities and society. Consider seeing things like a Heterosexual christian father’s guide to unit testing on the front page. Without judging anybody’s identity, this is not the place and form for that topic and that kind of statements.

                                    1. 15

                                      I wonder why the simple reminder of a group’s existence bothers you so.

                                      1. 17

                                        For some reason you failed to understand my point, and are accusing me with something instead of arguing my points. Most likely this is because of my inability of phrasing my point efficiently.

                                        But in the same spirit: I wonder why do I even need to know anybody’s affiliation at all in context of a technical discussion?

                                        1. 11

                                          One could make the same argument to flag “Beej’s Guide to Network Programming” or any post about how company X solves their problems.

                                          1. 10

                                            And usually they do so, considering it as spam, a form of advertisement… Only not of the political, but of the business kind.

                                            1. 4

                                              I don’t think you are familiar with at least the first example.

                                              1. 7

                                                But at least I can be familiar with the second example…

                                                Your style is not that of a Friendly engineer.

                                                1. 6

                                                  There was a time he went by a different name…:p (angrysock)

                                          2. 6

                                            I wonder why do I even need to know anybody’s affiliation at all in context of a technical discussion?

                                            Because the author decided, that their “affiliation” is relevant to their content, that’s it. You don’t need to follow that thinking, you can opt-out of reading their article, even hide it on sites like lobste.rs.

                                            Any articel tells you something about the authors identity and cultural affiliations. And most of us just fill the blanks with defaults, where details are missing. i.e. an authors gender on technical content is often assumed to be male, if not stated otherwise. Most of us who grew up in societies with Christian majorities just assume that most guides to unit testing are a variation of the “Heterosexual christian father’s guide to unit testing”. That’s bad because it taints our perspective, even on the already factual diversity of tech and the net. So IMHO it’s a good thing, if more of us keep their affiliations explicit and maybe even reflect on how those influence their perspectives.

                                            1. 3

                                              Your points aren’t worth arguing. You assert several things (“most people don’t care,” “have a bad effect on communities”) without any supporting evidence. To the first about whether people care and “don’t want to care” – I don’t find that persuasive even if you can provide evidence that a majority of people don’t want to be confronted with the identities of people who’re considered outside the mainstream. But I also suspect you’re making an assertion you want to be right but have no evidence to back up.

                                              Likewise, what even is a “bad effect on communities and society”?

                                              You also express an opinion (“I think identity politics are already too emphasized”) which I heartily disagree with, but that’s your opinion and I don’t see any point arguing about that. OK, you think that. I think too many craft beers are over-hopped IPAs and not enough are Hefeweizens. The market seems to disagree with me, but you’re not going to convince me otherwise. :-)

                                              1. 7

                                                Your points aren’t worth arguing.

                                                Start with a thought-terminating cliché. Then you start arguing my points. :) No problem.

                                                To the first about whether people care and “don’t want to care” – I don’t find that persuasive even if you can provide evidence that a majority of people don’t want to be confronted with the identities of people who’re considered outside the mainstream.

                                                I understand your points, but you didn’t really grasp what I wanted to phrase. IMHO “mainstream” and other identities should not confront each other here unless being technically relevant ones, about which technical discussion can be carried on. There are other mediums for those kind of discussions.

                                                Lucky someone has managed to phrase my ideas better than I could above:

                                                https://lobste.rs/s/mn1am1/going_bark_furry_s_guide_end_end#c_xndsrl

                                            2. 14

                                              As I understand @kodfodrasz, they were bothered not inherently by the reminder of the group’s existence, but by the broadcasting of that reminder to the Lobsters front page. When an article title on the front page asserts the author’s voluntary membership of a group, that is not only a reminder that the group exists—it’s also implicitly an advocation that the group is a valid, normal, defensible group to join. One can agree with the content of such advocacy while also disliking the side effects of such advocacy.

                                              What side effects would those be? @kodfodrasz said that “identity politics are already too emphasized and destructive in discussions, and have a bad effect on communities and society”. I think they are referring to way advocacy for an identity can encourage an “us vs. them” mindset. Personally, I see the spread of that mindset as a legitimate downside which, when deciding whether to post such advocacy, must be balanced against the legitimate upside that advocacy for a good cause can have.

                                              1. 9

                                                ^ this

                                                My assertion is that currently I see a trend where legitimate topics are not discussed because some participants in the discussion have specific opinions on other topics than the one discussed. Dismissing some on-topic opinions for off-topic opinions is an everyday trend, and if bringing our off-topic identities to the site would gradually become more accepted, then that trend would also creep in from other parts of the society, where it has had done its harm already.

                                                I hold this opinion as a guide for every off-topic identity. I think of it with regards to this forum a bit similarly to the separation of church and state has happened in most of the western world.

                                                1. 6

                                                  by the broadcasting of that reminder to the Lobsters front page

                                                  The submitter (author in this case) has one “vote” in promoting their content on this site. Usually one net upvote keeps stuff in /new and outside the front page. What’s promoted this content to the front page is the site’s users, who have upvoted it enough to appear on it.

                                                  At time of my writing this comment, the current standing is

                                                  50, -7 off-topic, -4 spam
                                                  

                                                  Also note that comments themselves contribute to visibility, so everyone commenting complaining about this being off-topic and “in your face” aren’t helping their cause…

                                                  1. 5

                                                    When an article title on the front page asserts the author’s voluntary membership of a group, that is not only a reminder that the group exists—it’s also implicitly an advocation that the group is a valid, normal, defensible group to join.

                                                    Are you (or @kodfodrasz) implying that identifying as a furry is in some way so dangerous as to be suppressed by society at large?

                                                    1. 2

                                                      One can agree with the content of such advocacy while also disliking the side effects of such advocacy.

                                                  2. 4

                                                    Would you be fine with a BDSM-themed blog post on a tech topic?

                                                    1. 10

                                                      It depends how the theme is explored.

                                                      If it uses BDSM culture to explore the nuances of consent in order to explain a complicated technical point, I’m all for it.

                                                      1. 3

                                                        What if it’s just interlaced with drawings of BSDM activities, like that old GIMP splash screen? I wouldn’t be caught dead scrolling that (nor opening GIMP) at work.

                                                        1. 8

                                                          If you work at a place that cares more about some bullshit policing of imagery than technical merit, that’s a yikes from me.

                                                          1. 5

                                                            There’s an inherent sexual quality to BDSM that isn’t inherent to furry culture.

                                                            You do realize that, correct?

                                                            1. 6

                                                              Strictly speaking that isn’t necessarily true about BDSM.

                                                              1. 3

                                                                Oh? This is news to me.

                                                                1. 16

                                                                  Yep. There are people, for example, for whom submission is not a sexual thing but instead about being safe and there are people for whom having a little (in the subcategory of dd/lg) is about having somebody to support and take care of and encourage in self-improvement.

                                                                  That’s not everyone, the same way that there are in fact furries who are all about getting knotted.

                                                                  My point is just that if you want to go Not All Furries, you should be similarly rigorous about other subcultures.

                                                                  1. 6

                                                                    o/ I’m asexual but still very into BDSM (and also a furry!). I know what something being sexualised feels like — took a while to get here — and while a lot of people do link the two intimately (as many do for furry things), they aren’t dependently linked.

                                                          2. 6

                                                            Actually, I know a real example. There is a Python-related French blog named Sam et Max. The technical articles are generally considered high-quality by the French-speaking Python programmers. But there are also BDSM- and sex-related articles alongside the Python articles. Even within a Python-related article, the author sometimes makes some references about his own fantasies or real past experience.

                                                            1. 4

                                                              As long as there’s no overt pornography, sure. I’d read a good article on crypto that had “by someone currently tied up” on it. What’s the point of writing if you get shamed for putting your personality in it.

                                                              1. 3

                                                                Already mentioned elsewhere but it’s my understanding that being a furry isn’t inherently sexual / about sex, though there can be that aspect. I certainly wouldn’t mind a post that was something like “a lesbian’s guide to…” or “a gay person’s guide to..” because those identities encompass more than sexual practices. (Someone elsewhere says that BDSM isn’t strictly speaking sexual, which … is news to me, but I admit my ignorance here. If there’s a non-sexual aspect to BDSM identity then sure, I’m OK with a BDSM-themed post on tech.)

                                                            2. 5

                                                              Consider seeing things like a Heterosexual christian father’s guide to unit testing on the front page.

                                                              That goes without saying, because that’s the default viewpoint.

                                                              The way the author clarifies and establishes their viewpoint does not make their technical content anymore off topic than someone submitting something titled “A Hacker’s Guide to MFA” or “A SRE’s Guide to Notifications”. The lens that they are using to evaluate a technical topic is an important piece of information that we often-times forget in tech with disastrous outcomes.

                                                              1. 13

                                                                No, it is not necessarily the default. But even if it would be, articulating that off-topic identity on the front-page would be unnecessarily divisive, and I’m pretty convinced, that people of other identities would flock the comment section claiming that the post is racist (sic!), and is not inclusive, hurts their feeling, and I think they’d be right (on this site).

                                                                Hacker or SRE are on-topic tech identities themselves, while sexuality, political stand, religion are not really.

                                                                1. 5

                                                                  Hacker is a political identity. For instance, it’s one that I find really degrading when associated to the whole profession. The nerd identity or the general infatilizing of programmers is degrading as well. These are tolerated because they are the majority’s identity in this specific niche and presented as “neutral” even though they are not.

                                                                  1. 4

                                                                    Well I see some positive vibe about the hacker word in the IT sector, if you remember there was some hacker glider logo thingie around the millennia. I’m not one of them, and agree with you, I also find hacker somewhat negative, and not because of the “evil hacker”, but of the unprofessional meanings of the phrase (eg. quick hack). Still lots of fellow professionals don’t agree on this one with us.

                                                                    Regarding Nerd: I also find the phrase degrading, and I don’t understand those who refer to themselves as nerds in a positive context.

                                                                    1. 7

                                                                      I don’t understand those who refer to themselves as nerds in a positive context.

                                                                      The best way of removing the degrading conotation of a word is to rewrite its meaning. The best way to do that is to unironically use it in a neutral-to-positive context.

                                                                      1. 1

                                                                        yeah but the problem is what you want to appropriate. The word “slut” has been reappropriated to defend the right for men and women to have sex freely without judgement. The word “nigger” has been reappropriated because black people are proud of being black. But the word “nerd”? “nerd” means being obsessed with stuff and have very poor social skill and connections. Reappropriating the word flirts very closely with glorifying social disfunctions, exclusion and individualism.

                                                                        1. 4

                                                                          Reappropriating is done because there are negative connotations that we want to take out of focus; that’s the whole point.

                                                                          1. 1

                                                                            but Nerd is imho all negative. The positive connotations, like being dedicated and consistent on a practice is not exclusive to being a nerd. Being nerd is not even stigmatized anymore: now it’s cool to be nerd and still it’s degrading, like being a circus freak. You reappropriate a word to remove a stigma towards a category, but the stigma is already gone and what is left is a very distorted portrayal of knowledge workers.

                                                                            1. 4

                                                                              That the stigma is gone is precisely because people took the term and ran with it.

                                                                              Besides, I have no problem with assholes (whose opinion of me is no concern of mine) considering me a circus freak: it makes them keep themselves at a distance which means less work for me to get the same desirable result.

                                                                              (Also: I disagree with the term “nerd” glorifying “social dysfunction” - normalizing, maybe, but that’s a very inclusive stance, especially when these “dysfunctions” are called by their proper name: neurodiversity. And what precisely is the problem with individualism again? And another tangent: knowledge workers aren’t necessarily nerds and nerds aren’t necessarily knowledge workers)

                                                                              1. 1

                                                                                I agree with all your values but it doesn’t seem like this is what’s happening in the real world. Inclusion of neurodiversity is happening only in small bubble in USA/NE: if anything, neurodiverse people are just more aware of being different. Good for coping, not that good for social inclusion. Really neurodiverse people are still rejected by the society at large and at best they get tokenized and made into heroes but not really included. Also this appropriation of the word detached the concept of nerd from neurodiversity that if it was ever a thing, it’s not a thing now. Today being nerd is wearing glasses and a checkered shirt. Then if you flirt flawlessly with girls, entertain complex social networks and work as a hair dresser, it’s enough to say your hobby is building radios and boom, you’re a nerd. I don’t see how this process would help neurodiverse people and I don’t see how it is good to have to live up to this stereotype to be included in the IT industry (because in most places, if you are not some flavor of nerd/geek, you’re looked at with suspicion)

                                                            3. 15

                                                              A lot of tech workers are furries (or furry-adjacent).

                                                              I don’t doubt that a lot of furries (or furry-adjacent) might be tech workers, but I’m not sure your statement is accurate, given just how many tech workers there are.

                                                              1. 7

                                                                For most people, “Furries” is “that weird sex thing”. I can see a lot of people wanting to make it clear that sexual references are out of place in order to make tech a more comfortable and welcoming place for everyone. I suspect that famous Rails ‘pr0n star’ talk has (rightly) made people feel uncomfortable with sexual imagery in tech.

                                                                I’ve upvoted because the content is good, but I’m also not really one for keeping things milquetoast. I’d like to see more content like this. The technical parts are worth reading, even though I have no interest whatsoever in furries, and mildly dislike the aesthetic.

                                                                And yes – I’ve discovered today via google that it’s only a sex thing for 30% to 50% of the people in the subculture, but as an outsider, the sexual aspect is the only aspect I had ever heard people mention.

                                                                Going forward, I’d just suggest ignoring the downvotes and moving on – they’ll always be there on anything that’s not boring corporate talk, and the threads like these just suck the air out of interesting conversation.

                                                                1. 3

                                                                  [edit: content moved to different post, this was accidentally off-by-one click]

                                                                2. 12

                                                                  Yiff it bothers you, why not just read it without the images? Firefox reader view works great fur me.

                                                                  1. 9

                                                                    It doesn’t claim to be for furries, it claims to be by one.

                                                                    1. 5

                                                                      Is it, though? If it was written as “a teacher’s guide to end-to-end encryption” would anybody be flagging it or carping about the title just because the intended / primary audience was teachers but the content could be abstracted to anybody who cared about end-to-end encryption?

                                                                      1. 11

                                                                        That’s a good type of question to ask, but your example title “A Teacher’s Guide …” is not equivalent. The author being a teacher could be highly relevant to the content of the article; for example, the article might especially focus on the easy-to-teach parts of encryption. The author being a furry, however, is likely to affect only the theme.

                                                                        Analogous titles would change “furry” to another subculture that is not innately connected to tech and that people choose rather than being born with. Two examples:

                                                                        • “Hide my Waifu: An Otaku’s Guide to End-to-End Encryption”
                                                                        • “Communication is Key: A Polyamorous Person’s Guide to End-to-End Encryption”

                                                                        Would people complain about those titles? I predict that yes, some people would, though fewer than those who are complaining about the furry-related title.

                                                                    2. 5

                                                                      Obviously it’s great that someone wants to give us this information. In return we should give them respect and thanks.

                                                                      Showcasing their identity not only gives personal color to the post, it also donates some of the credit to the community they identify with, rather than to some default security engineer type we might imagine.

                                                                      Thanks to this personal touch, some readers can no longer say furries are unintelligent, or never did anything for them.

                                                                      1. 4

                                                                        Belatedly, but I’m following up on these flags. I missed this story and am reading through it now.

                                                                      1. 0

                                                                        Why do people say hello to docker in the first place? Because unix, Make, compiled code, and shell script glue isn’t powerful enuf? Or to make devops a job title that means something. –Sarcastic and jaded, systemd still sucks

                                                                        1. 3

                                                                          Well for example when you’re not working with compiled code (or you’re working with loads of shared libraries) then the system configuration starts playing a big role in how your program replies.

                                                                          For example, you have a Python webserver. Firstly, do you have the right Python available? And if this server does something like PDF rendering it might call out to another application to do so, so is that installed properly?

                                                                          I think that this stuff is more avoidable with like…. proper compilation artifacts but it can be painful to reproduce your production system locally when you are doing something more novel than just querying a DB and generating text

                                                                          1. 3

                                                                            Well for example when you’re not working with compiled code

                                                                            Have you actually ever worked with a bigger C/C++ application? :) I’ve never seen any ecosystem where it is worse to separate your system’s library version in /usr from custom installed stuff. Everything from Python, Ruby, PHP is so much easier to work with in this regard.

                                                                          2. 2

                                                                            One of the reasons is because “we have an Kubernetes / OpenShift / Frozbinitz Special cluster” that is supported by “the enterprise” and I can do my initial work on my laptop with Docker.

                                                                            I don’t like Docker the company, but Docker the command line tool is fine. Docker Desktop has the potential to be great, but it seems like it would require Docker the company to be purchased by someone less dependent on registered users as a metric for survival.

                                                                            1. 1

                                                                              Here’s one example. At my last job, I first introduced Docker to our environment because, sadly, we had a few Node.js applications written at various points in the company’s history each of which required a particular version of the Node runtime and also particular versions of various modules that weren’t compatible with all the versions of the runtime we were using.

                                                                              It made the production configuration a bit of a nightmare to keep track of. If you wanted to run two of these on the same host, you could no longer just install a Node system package, etc.

                                                                              Packaging the applications in Docker containers eliminated all those headaches in one step.

                                                                              We were not running Kubernetes or any other orchestration system; we just stopped deploying directory trees to our servers. We still used scripts to do our deployment, but they became much simpler scripts than before.

                                                                              1. 1

                                                                                Because their code doesn’t scale. Docker is a hardware solution to a software problem

                                                                                1. 1

                                                                                  Can you elaborate on this? I’ve mostly used Docker to simplify dependency management, nothing whatsoever to do with any kind of scaling concern. How is it a “hardware solution” when it is a piece of software?

                                                                                  1. 1

                                                                                    K8s (which is just fancy docker orchestration) allows you to string containers together. You can find many pre defined config a that allow rapid scaling up and down, allowing an “app” to add additional workers when needed, add those to the load balancer and when they are idle to tear them down. It’s really “neat” but by adding (and subtracting) machines as needed it’s my point of being a hardware solution to a software problem.

                                                                                    Instead of worker threads and processes and LPC you end up with many machines and RPC. The plus side of going with RPC of course is that you do get to scale on multiple physical hosts easily, while a thread aware app now needs to manage LPC and RPC to scale.

                                                                                    It’s “expensive” hardware wise but look at Rancher it’s a quick and easy k8s that deploys painlessly and once you setup shared storage you can take some predefined app setup and hit the plus button from the UI and watch it auto scale, then hit minus and watch it right size.

                                                                                    1. 1

                                                                                      Sure, that makes total sense, but you’re talking about Kubernetes, not Docker, no? How does any of that apply if you’re running a fixed set of standalone Docker containers on a fixed set of hosts, say, or running Docker in development environments to get a consistent build toolchain?

                                                                              1. 15

                                                                                Nice to see the wave of defectors from OSX back to more open platforms continue!

                                                                                I agree I’ve always found XCode frustrating to use and obscenely ponderous to set up as well. It’s not so much that it’s a GUI or that it’s complicated, I think you could say the same for VIsual Studio Code or Pycharm both of which I love, it’s that it gets in the way of what I’m trying to do 100% of the time.

                                                                                And yeah, the MagSafe connector was a thing of beauty. My wife is clinging to her 2012 Macbook Pro for dear life :)

                                                                                You also didn’t mention keyboard, although I realize I’m more sensitive to that than most. I find it interesting that the keyboard on my $200 Pinebook Pro is several orders of magnitude better than the one on my work issued 2018 Macbook Pro which feels like typing on squishy oatmeal.

                                                                                1. 7

                                                                                  Sadly, in my social bubble, I see more people moving from OSX to Windows/WSL than to Linux/BSD.

                                                                                  1. 3

                                                                                    That doesn’t surprise me at all, and I assume that’s the largest migration direction between the “three” platforms. Most average Joe developers are already using Windows for most of their computing needs (games) and probably only used macOS because they “had to” because work involves either a Linux server or an iOS app.

                                                                                  2. 6

                                                                                    I’m not sure where you get the idea that there is a “wave of defectors from OSX”, the post was most likely written to be posted specifically here. I like the community and I don’t want to be that guy but this community is a small, irrelevant echo chamber in terms of world-wide OS adoption.

                                                                                    1. 3

                                                                                      I totally agree. There HAS been a wave of people leaving the OSX platform for various reasons, but as another poster wrote they’re not all migrating to FLOSS environments.

                                                                                      A number of them are choosing Windows instead. I myself dual boot and enjoy the best of both worlds :)

                                                                                      Also, nobody other than Apple actually has hard numbers on this.

                                                                                    2. 5

                                                                                      I just bought the 2020 Macbook Pro and the keyboard is from the different planet than 2018’s, I really like it! The price was painful but there are music softwares I need daily that don’t run in Linux so I don’t really have a choice.

                                                                                      1. 1

                                                                                        Which one? The one with no Esc key? No thanks.

                                                                                        1. 4

                                                                                          They brought back the escape key :)

                                                                                          1. 1

                                                                                            The new one has physical Esc-key.

                                                                                      1. 2

                                                                                        Macs come with a lot out of the box, so I don’t do much. My advice would be to install as few things as possible for the first few days/weeks just to see what the builtin stuff has to offer.

                                                                                        From hour one on any Mac I buy, I remap caps lock to control, turn on all of the touchpad checkboxes and mouse checkboxes, and install homebrew (which gets some Xcode utilities). From there I install games and a few packages. I set up iCloud because I use the the iCloud Drive and iMessage. Other than that, I have about 61 packages installed via homebrew, and most of those are dependencies.

                                                                                        Examples of stuff I brew install or download and install from a 3rd party:

                                                                                        • python3 because it’s easier to pip install to the non-system python
                                                                                        • screen because it handles emojis for homebrew better than the included default version
                                                                                        • pv for viewing progress and throughput on long-running pipes
                                                                                        • rust (via the rustup-init package)
                                                                                        • CKAN for Kerbal Space Program (MECHJEB 2 for life!)
                                                                                        • ncdu for storage usage analysis
                                                                                        • neofetch for nerd cred
                                                                                        • PrusaSlicer because I have a mk3s + mmu2 and mini
                                                                                        • Blender (I don’t know how to use it, but I’m going to learn)
                                                                                        • WireShark because I’m a 1337 h4x0r
                                                                                        • Visual Studio Code (Surprisingly good!)
                                                                                        • IntelliJ (now largely replaced by Visual Studio Code)
                                                                                        • Firefox for playing in another browser

                                                                                        For mainstream applications, I tend to use the Apple version if it exists. Terminal instead of a replacement, Pages/Numbers/Keynote instead of MS Office, Mail instead of Outlook or Thunderbird. Pretty much everything else is game clients.

                                                                                        1. 7

                                                                                          Well, if we also look at what developers prefer to work with, Haskell and Scala are among the most loved programming languages.

                                                                                          Source: https://insights.stackoverflow.com/survey/2020#most-loved-dreaded-and-wanted

                                                                                          Haskell and Scala are #14 and #15 on the “most loved” list, and nowhere to be seen in the “wanted” list.

                                                                                          1. 5

                                                                                            Haskell and Scala are #14 and #15 on the “most loved” list, and nowhere to be seen in the “wanted” list.

                                                                                            They actually are #17 and #18 in the “most wanted” list. Also, I find this a bit shocking, but both of these languages are actually ranking higher up the “most dreaded” languages list: #11 and #12.

                                                                                            1. 2

                                                                                              Meh. They’re over-selling the emotion there. The question was apparently more akin to “I use this language and I am / am not interested in continuing to use it.”

                                                                                              When you said you used a language, If you reported you wanted to keep using it they labelled it “loved” and if not, they labelled it “dreaded.”

                                                                                              I used to use Scala a lot. I was more than happy to keep using it, but that doesn’t mean I loved it. Once I started using Rust, I dropped Scala. That doesn’t mean I dread it.

                                                                                          1. 4

                                                                                            1311 units, 63 prefixes?! My Mac only comes with 586 units, 56 prefixes and millilightseconds isn’t among them. How do I get more?

                                                                                            1. 5

                                                                                              Trey Harris (in response to a similar question at the time) explained: “I used to populate my units.dat file with tons of extra prefixes and units.” In any case, lightseconds (and therefore millilightseconds) is in the standard definitions.units file on Linux these days, so perhaps you could grab a better definitions.units out of https://www.gnu.org/software/units/ if nothing else. (On my machine, the standard units starts up with 2919 units, 109 prefixes, and 88 nonlinear units.)

                                                                                              1. 4

                                                                                                brew install gnu-units && gunit

                                                                                                1. 4

                                                                                                  Yesssssssssssssssss

                                                                                                  3460 units, 109 prefixes, 109 nonlinear units
                                                                                                  

                                                                                                  Thanks Owen!

                                                                                              1. 1

                                                                                                I haven’t dug into it much yet, but wouldn’t something akin to ccache help with dependency compilation times?

                                                                                                1. 5

                                                                                                  It does to a degree; for example, Mozilla’s sccache is a ccache like tool with optional support for sharing build artefacts on cloud storage services which ships with support for the Rust toolchain (it works as a wrapper around rustc, so it should work even if you don’t use Cargo to build Rust code). Linking times can still be slow though, and obviously the cache isn’t useful if you’re running beta or nightly and frequently updating your compiler.

                                                                                                  1. 3

                                                                                                    Or using a build system like bazel or Nix.

                                                                                                  1. 19

                                                                                                    I do really like Linus’ point earlier in the thread too: “checkpatch” throws a warning about 80 characters… while generating 124 character lines.

                                                                                                    1. 2

                                                                                                      This ran perfectly on my GPU on macOS in Safari, and worked great on my iPad. It’s also quite relaxing :)

                                                                                                      1. 10

                                                                                                        «Who’s going to support any Elixir code? What if you get hit by a bus? (which reads: «please stop what you’re doing, you’re harming the team and the company«)

                                                                                                        It’s a little more subtle than that I think. OK, the author is a Star Trek fan, right? Remember when they had a critical mission to get help for a kid on the ship, and then Data goes nuts and takes over the ship, flying it to a different destination? That could be what the author is doing from their team’s perspective.

                                                                                                        I’ve observed two major projects where a single engineer decided on a different language from what the rest of the team was using without getting at least a few other people on board, and the result has been consistent: the project either dies, or gets or rewritten in the language the rest of the group already knows.

                                                                                                        1. 6

                                                                                                          What is in this that is not either out-of-date or hasn’t been rehashed endlessly at this point? As of May 2020 Is there any new insight to be gained in talking about how math-y and hard Haskell is, or framing Haskell vs. Go as The Right Thing vs. worse-is-better? And finally, do we have to take terribly conceived-of diagrams seriously if the author self-identifies as a “Haskell ninja?”

                                                                                                          Plenty of people are writing Haskell and using it in production or for their hobby projects. Stack and cabal and nix taken as a whole have made major inroads into dealing with “cabal hell” (or “DLL hell” as this piece calls it). Go continues to be both decidedly mediocre and inflexible, easy to pick up, and more popular than ever. Haskell remains pretty different from a lot of other languages and has a steep learning curve. News at 11

                                                                                                          1. 5

                                                                                                            Since 2011…? Off the top of my head, as a casual (and no-longer-zealous) Haskell user:

                                                                                                            • Space leaks are still a serious and deep-rooted problem. Better tooling to deal with them now exists, though.
                                                                                                            • There are now two major package management systems, not quite compatible with each other, and a fair amount of lingering ill-will from the split. Three if you count Nix.
                                                                                                            • Hackage is kind of like NPM: tons of low-quality and half-finished libraries with no easy way to find the good ones.
                                                                                                            • The proliferation of language extensions has fragmented the language even further, and many local dialects have emerged. Libraries can be inscrutable. Reminds me of C++.
                                                                                                            • Learning curve steeper than ever. Plenty of beginner books of dubious quality. Plenty of academic papers pushing the state of the art in FP. Not much in the middle.
                                                                                                            • Culture still largely privileges cleverness “elegance” above practicality. Oh, academia.

                                                                                                            So, overall, I think the post isn’t exactly a brilliant epiphany, but presents a fairly even-handed perspective, and has aged pretty well. You might have seen these points rehashed endlessly, but I don’t think everyone on Lobsters has.

                                                                                                            The language itself has many great points, certainly rewards the effort put into learning, and for a few domains it’s by far the best choice despite these drawbacks. I wouldn’t fault anyone for not wanting to use it, though, especially if they’re not in one of those domains. Go or something else might very well be a better choice, especially if you need to hire.

                                                                                                            The community, as such, is kinda bleh in my highly subjective opinion, but hardly the worst. Hard to climb that steep curve without engaging with the community. Might just be my perception, but it seems net language snobbery has increased along with industrial uptake. The established academic users are as magnanimous as ever, but now surrounded by a rising population of younger, more competitive and hungrier users, some of whom are maybe just a little insecure about the secret-weapon superpowers they haven’t quite mastered.

                                                                                                            1. 1

                                                                                                              I was objecting to the context-free drive-by posting of an old, fluffy, somewhat out-of-date article on a topic that is already discussed a lot here, or at least feels that way to me. I don’t necessarily disagree with any of your points but they weren’t raised in the piece and only seem to be relevant because they are criticisms of Haskell, of which there are plenty to go around. It doesn’t seem like you or other posters are responding to my actual comment, and more disappointingly it seems like my comment has become yet another excuse for some to go off on negative rants about Haskell. Damned if I do, damned if I don’t…

                                                                                                              1. 1

                                                                                                                Submitter here. I checked to see if this had been submitted before posting, it had not.

                                                                                                                I found it via the author’s Ninja piece, linked here earlier.

                                                                                                                I was interested to see what the Lobste.rs community had to say about this piece, 9 years later.

                                                                                                              2. 0

                                                                                                                edit: forgot the quote that triggered this… well quasi-rant. I think it’s related to the perception of secret-weapon superpowers that people seem to have about Haskell. I used to think Haskell was Superman: An alien from another world that has all of these incredible powers that other mere earthlings cannot achieve. Now I think it’s more Batman.

                                                                                                                The established academic users are as magnanimous as ever, but now surrounded by a rising population of younger, more competitive and hungrier users, some of whom are maybe just a little insecure about the secret-weapon superpowers they haven’t quite mastered.

                                                                                                                I keep finding myself looking for a nice, cozy functional language to roll around in. Every time I look I hear people speak of the beauty and elegance of type systems, or the lack of side effects, or laziness, and it all sounds just so magical!

                                                                                                                Often I sit down to start with one of these languages and immediately find myself a bit lost in the syntax. It’s not the mathy parts - it’s the quirks of how the language changes the names of common things.

                                                                                                                Let’s use an intro CS example:

                                                                                                                • putStrLn (Haskell)
                                                                                                                • IO.puts (Elixir)
                                                                                                                • text (Elm)

                                                                                                                Yeah, you can probably guess what these things do. Yet how many of them would you guess on day 1 of switching to that language? How many computer science, or even basic programming courses start with a language that uses anything except a variant of “print”? (Before you go “MIT with Scheme!”, they’ve switched to Python.)

                                                                                                                There’s a thing authors do when they’re trying to immerse you in a world that is supposed to feel alien, and that’s changing familiar things to make them feel unfamiliar. That’s fine and all, but not particularly accessible. I’m not looking for some unique, immersive experience, I’m looking to get stuff done. I get it: It’s not a line printer anymore. The save icon is still a floppy disk though, and the idiom of “Print” is well established and has been for like decades now.

                                                                                                                1. 2

                                                                                                                  Uuhh print and putStrLn are two sides of the same coin, normally I’d use print since it has the more flexible signature (Show a => a -> IO () vs String -> IO ()).

                                                                                                                  So in haskell print = putStrLn . show, a dsitinction is drawn, but it’s not missing.

                                                                                                                  1. 1

                                                                                                                    TryHaskell Haskell.org shows putStrLn first, and you have to dig into the I/O functions to find print.

                                                                                                                    In the Haskell wiki, they even call the action of putStrLn printing, then switch to print later on without explaining it. Clear as mud. OK, so let’s play with some output to see if we can figure it out.

                                                                                                                    Prelude> putStrLn 4
                                                                                                                    error: No instance for (Num String) arising from the literal ‘4’ 
                                                                                                                    Prelude> putStrLn "4"
                                                                                                                    4
                                                                                                                    Prelude> putStrLn "四"
                                                                                                                    四
                                                                                                                    

                                                                                                                    Got it. Integers aren’t strings, so that no worky. OK, so print = putStrLn . show.

                                                                                                                    Prelude> print 4
                                                                                                                    4
                                                                                                                    Prelude> print "four"
                                                                                                                    "four"
                                                                                                                    Prelude> print "四"
                                                                                                                    "\22235"
                                                                                                                    

                                                                                                                    Wait, what happened to that last one? Why wasn’t it "四"? Well, it turns out that Show’s signature is show :: a -> String, but the devil’s in the details. The byline is “Conversion of values to readable Strings.” but the detail is that show outputs syntactically correct Haskell expressions, not plain strings. For some reason, this means I get the quotes around the string (even though they’re not part of the string) and a conversion of UTF-8 to a string of the code point rather than the character itself.

                                                                                                                    Everything fed into show keeps its types though, right?

                                                                                                                    Prelude> show [1,2,3]
                                                                                                                    "[1,2,3]"
                                                                                                                    Prelude> show ["a","b","c"]
                                                                                                                    "[\"a\",\"b\",\"c\"]"
                                                                                                                    Prelude> show ['a','b','c']
                                                                                                                    "\"abc\""
                                                                                                                    

                                                                                                                    Wait, what? Ohhhh, strings are just a list of chars in Haskell, and they get auto-converted to a string, losing their “listyness” for basic output.

                                                                                                                    Just for giggles, let’s try something similar in python:

                                                                                                                    >>> print (4, "four", "四")
                                                                                                                    4 four 四
                                                                                                                    
                                                                                                                    >>> print([4, "four" , "四"])
                                                                                                                    [4, 'four', '四']
                                                                                                                    
                                                                                                                    >>> print(['f', 'o', 'u', 'r', '四'])
                                                                                                                    ['f', 'o', 'u', 'r', '四']
                                                                                                                    

                                                                                                                    Yup. Looks like what I asked it to print alright.

                                                                                                                    1. 2

                                                                                                                      Fair point. I suppose if you use Text and OverloadedStrings maybe print would have behaved better but these are indeed not very good defaults.

                                                                                                                      1. 1

                                                                                                                        Most people would probably just shrug at it and keep coding, in all fairness. Haskell is far from the only language with that weirdness too! It just seems so unnecessary, and so prevalent in the popular functional languages.

                                                                                                                        1. 1

                                                                                                                          Yes but it was designed by a comittee decades ago so in my mind it gets a pass on some of these legacy papercuts. In return I get a rock-solid language with lots of mature libraries.

                                                                                                              1. 12

                                                                                                                There’s now an edit indicating that the comparison is wrong anyhow: The Rust code was parsing the string many more times than Go because of the way the code was written.

                                                                                                                1. 2

                                                                                                                  Plus the comparisons were different. Also, the code was a weird mix of looking at bytes and unicode codepoints.

                                                                                                                  This sloppy-approach-to-everything is sadly a thing I have started to expect from Go users, and one of the reasons why I automatically penalize projects using Go in terms of quality and reliability unless proven otherwise.

                                                                                                                1. 11

                                                                                                                  I know you were probably kidding, but that’s not really why writing an app in Go and compiling it down to wasm is a stupid idea. The Go runtime is a lot larger than the Rust runtime, which is practically nonexistent in comparison. As a result, Go includes a lot of features that would otherwise not be present in a “systems” language, such as garbage collection and extremely fast compile times, because it can offload a lot of the heavy work to its runtime. Rust, on the other hand, forces the developer to manage their own memory, and the compiler is very thorough but quite slow. The trade-off there is that the final binary (including the runtime) ends up being very small, which is exactly what is necessary for the wasm compile target, because a WebAssembly program needs to be fully downloaded before it’s able to execute. This makes Rust an ideal candidate for native application development, in my opinion.

                                                                                                                  This is fascinating to me as someone interested in how (and why) programming languages get developed. Go was a language designed to make writing cloud infrastructure easier, while Rust was designed to make cross-platform applications easier to build. Since Go was never designed to run anywhere other than a controlled server (or, more accurately, thousands of them), it didn’t need to worry about the size of its runtime in comparison with the rest of the program. After all, disk space is cheap!

                                                                                                                  Go and Rust are both designed for radically different purposes. Even though they can be compared in many ways, I think the real core of their philosophy stems from this fact. It really comes down to which trade-offs you feel are appropriate. Do you want fast compile times, but don’t care about binary sizes? Or how about slower, extremely thorough compiles, but at the end you get a much smaller binary?

                                                                                                                  Personally, I’m glad we have a choice of “safe” languages these days. You don’t have to risk runtime safety in order to get good performance anymore, and that’s a huge step up from the last decade.

                                                                                                                  1. 10

                                                                                                                    As a result, Go includes a lot of features that would otherwise not be present in a “systems” language, such as garbage collection and extremely fast compile times, because it can offload a lot of the heavy work to its runtime. Rust, on the other hand, forces the developer to manage their own memory, and the compiler is very thorough but quite slow.

                                                                                                                    Rust requires more thought about memory than Go to pass the compiler, but I’m not sure I’d really count that as “managing [my] own memory” in this case. To use the (perhaps always overused) car metaphor:

                                                                                                                    C is a manual transmission that requires you to clutch and manage every shift.

                                                                                                                    Go is an automatic that you can set into PRNDL but that’s about it.

                                                                                                                    Rust has a very high quality flappy-paddle gearbox that requires no manual clutch, and has a decent automatic mode as well.

                                                                                                                    I’ve written code in all three languages, but Rust put a major hook in me and I’ve written more Rust than Go and C combined now.

                                                                                                                    1. 3

                                                                                                                      The Go runtime is a lot larger than the Rust runtime, which is practically nonexistent in comparison.

                                                                                                                      I’m no Rust expert, but I don’t think it has a runtime.

                                                                                                                      Go includes a lot of features that would otherwise not be present in a “systems” language, such as garbage collection and extremely fast compile times, because it can offload a lot of the heavy work to its runtime.

                                                                                                                      C has a very fast compile time.

                                                                                                                      Since Go was never designed to run anywhere other than a controlled server

                                                                                                                      Why do they also have a build target for Android then?

                                                                                                                      1. 3

                                                                                                                        I’m no Rust expert, but I don’t think it has a runtime.

                                                                                                                        Depends somewhat on what you count (eg: unless building with no-std, you have a memory allocator which is arguably a runtime library).

                                                                                                                        1. 2

                                                                                                                          Hummm. Then what’s the difference between rust compiling this memory management and using malloc in C ?

                                                                                                                          I mean, with this reasoning, malloc is a memory allocator as a runtime library then.

                                                                                                                          1. 6

                                                                                                                            Yes, by that reasoning C also ships a runtime library (the ‘standard lib’).

                                                                                                                            You could, of course, avoid the runtime library and its overhead (eg by hardcoding all the memory addresses you plan to use, manually ensuring they do not overlap). That’s what my friend in automotive electronics usually has to do, because dynamic allocations can fail. He literally can’t afford the overhead of the C runtime library.

                                                                                                                            That sort of nonsense is actually easier to achieve in no-std rust than in C, because you can use the same memory for different things at different times and it can statically check that they never collide. Unfortunately even if there were an LLVM target for the chips he uses there’s no way he’d be able to get a rewritten version into production - the existing stuff has already been tested.

                                                                                                                            1. 4

                                                                                                                              C absolutely requires something to provide it malloc, stdio abstractions, atexit cleanups, etc. People tend to forget that it exists, because every OS ships some form of a C “runtime”.

                                                                                                                              It’s especially annoying when people say C makes small executables, because printf("Hello World\n") is X bytes. It’s X bytes that can’t print a thing, and links to a multimegabyte dynamic library (30MB on macOS, for example).

                                                                                                                              1. 1

                                                                                                                                Thanks, never thought about this!

                                                                                                                        2. 1

                                                                                                                          I’m no Rust expert, but I don’t think it has a runtime.

                                                                                                                          It does, definitely more akin to the (very small) C/C++ runtime rather than something like Python or Ruby, whose “runtime” consists of a VM in which it compiles and executes code. Even Java kind-of takes the latter approach (more on that later). Steve Klabnik broke it down pretty succinctly IMO in this talk: https://youtu.be/CMB6AlE1QuI?t=567

                                                                                                                          C has a very fast compile time.

                                                                                                                          Agreed (well, depending on how big the project is…), but it also suffers from many of the problems that Rust and Go attempt to solve. Also, I’ve never worked on a huge C++ project before…but apparently those take a while to compile as well? One of the “origin stories” for Go was that the motivation behind designing any new language at all was frustration over the massively long compile times that Google was dealing with at the time. It might have been Java but I thought it was C++, can’t quite remember off the top of my head.

                                                                                                                          Why do they also have a build target for Android then?

                                                                                                                          I’m not sure that Android target always existed. Just googling around I couldn’t find any evidence that it was introduced along with Go in 2009, but I might be wrong. I don’t develop Android apps so it’s not something I would have been paying attention to at the time. At any rate, most of the talks Rob Pike gives about the origins of Go and why it was designed in such a way seem to suggest that its intended audience were C/C++ programmers who worked on large backend systems (like, for example, the world’s largest search engine), and not higher-level application developers. This is why Go can probably now be seen as the “lingua franca” of cloud infrastructure software, because cloud infrastructure was what its creators were trying to build with it.

                                                                                                                      1. 2

                                                                                                                        For video conferencing, I would say my biggest technological problem appears to be occasional lag spikes, where the person is spotty, and then I get a large burst of very fast talking or something. I’ve primarily seen this on WebEx, and then only when the person is dialing in from their computer.

                                                                                                                        However, this is by far the least annoying part of a video chat. The most annoying part is that, once you get above a handful of people on the call, you always get at least one oblivious person who leaves their mic unmuted all the time and breathes directly into it / eats directly into it / has people talking loudly at them / uses the laptop mic so you hear loud typing noises etc. etc. etc.

                                                                                                                        Unfortunately, they don’t hear any of this cacophony coming from their machine because almost no setups give you an inkling of what your background sounds like. A bite of sandwich on a call might sound utterly silent to them, but to everyone else on the call it sounds like toilet being plunged with a leaf-blower running in the background.

                                                                                                                        Blue mics have an interesting solution to this. If you’re plugged into the headphone port on the mic, you can hear yourself with basically no latency. When you mute yourself, you stop hearing the background. When you unmute, you can hear exactly what people hear on the other end. Why doesn’t every headset do this?!

                                                                                                                        1. 1

                                                                                                                          I think this is built in functionality in every modern OS. You can always route your mic audio also to your headphones. It is not on by default as it would create a nasty feedback loop with speakers.

                                                                                                                          1. 3

                                                                                                                            That typically incurs a significant lag, in my experience. The headphone jack on my microphone is essentially zero lag. Talking when you can hear yourself with lag is incredibly difficult for most people.

                                                                                                                            1. 2

                                                                                                                              My Logitech USB headset does this in hardware as well. There is even a mixer specifically for how loud the folded back audio is in your ear. I believe this is generally known as sidetone in telephony and radio.

                                                                                                                        1. 13

                                                                                                                          I have read it elsewhere (probably in some Plan9 related docs) that it was the takeover of the UNIX system (From the eastern school of design that prioritized simplicity over everything else) by GNU (From the western school of design that did not value simplicity as much) that lead to the mess that is today.

                                                                                                                          Honorable mention must also be made to the UUOC people who wanted to add more options to the programs for performance rather than fork a new program to do it.

                                                                                                                          This isn’t to say there’s no cost to adding options – more options means more maintenance burden, but that’s a cost that maintainers pay to benefit users, which isn’t obviously unreasonable considering the ratio of maintainers to users.

                                                                                                                          I do not agree that the cost is only for the maintainers of the program. The cost is also borne by the readers of the shellscript who has to understand the often very terse options.

                                                                                                                          1. 20

                                                                                                                            I think it’s unfair to blame the plethora of command-line options in GNU utilities solely on some sort of free-wheeling California exuberance, as compared to Yankee parsimony. Most GNU utilities are syntheses of existing commercial Unix utillities. I have no idea of where color options to ls originated, but once they were available, users not unreasonably wanted them, and it made sense for GNU ls to add a command line option to handle them.

                                                                                                                            Similar with stuff like environment variables, which are just command line options set in another way.

                                                                                                                            Edit the above was not related to my point so I have struck it out.

                                                                                                                            As to the burden of maintainance, once an option is added, it can almost never be taken away, because that would break existing scripts.

                                                                                                                            1. 3

                                                                                                                              Environment variables are global, while command line options are lexical.

                                                                                                                              It could be better if all the options are designed and introduced in a uniform fashion, instead of sporadically added for some peculiar niche.

                                                                                                                              1. 4

                                                                                                                                Agree re: envvars, I’ve removed that sentence.

                                                                                                                                It could be better if all the options are designed and introduced in a uniform fashion, instead of sporadically added for some peculiar niche.

                                                                                                                                Unix is old. Stuff accretes organically.

                                                                                                                                1. 1

                                                                                                                                  Indeed, ever wonder why dd for example has weird arguments? It is a port from another os.

                                                                                                                                  In my first Unix(tm) job the old unix heads at the time had a joke:

                                                                                                                                  Want to know how old a command is? If its short with a lot of options its been there forever.

                                                                                                                                  Or put another way, quick name 3 single letter switches that ls doesn’t use. No man pages/-h/docs to help! Its surprising how many letters that thing takes. bsd or gnu for that matter.

                                                                                                                              2. 3

                                                                                                                                I think it’s unfair to blame the plethora of command-line options in GNU utilities solely on some sort of free-wheeling California exuberance, as compared to Yankee parsimony.

                                                                                                                                I think that the western school valued completeness over simplicity, and it is debatable when a program becomes complete (perhaps it expands until it can read your email).

                                                                                                                                Regarding the plethora of options, I grew up on *BSD and later AIX, HP-UX and finally, Solaris, and I remember distinctly that the GNU utilities were not a synthesis of previously existing flags. They actively originated a very large number of flags, and for a long time, only GNU utilities supported most of the arcane flags.

                                                                                                                                1. 3

                                                                                                                                  Regarding the plethora of options, I grew up on *BSD and later AIX, HP-UX and finally, Solaris, and I remember distinctly that the GNU utilities were not a synthesis of previously existing flags.

                                                                                                                                  Ah Solaris, want to opine over /usr/bin, /usr/ucb/bin, /usr/xpg4/bin etc? >.< God was that a pita to manage/explain when people would run things with a different bin in the start of PATH and wonder why their working shell script no longer worked. Good memories of bad times.

                                                                                                                                  1. 1

                                                                                                                                    Thanks for your insight in how other systems were used! I basically got immersed in Unix culture after Linux became a thing and have never used anything but Linux or *BSDs in anger.

                                                                                                                                2. 20

                                                                                                                                  I have read it elsewhere (probably in some Plan9 related docs) that it was the takeover of the UNIX system (From the eastern school of design that prioritized simplicity over everything else) by GNU (From the western school of design that did not value simplicity as much) that lead to the mess that is today.

                                                                                                                                  I believe it was Rob Pike who said “cat came back from Berkeley waving flags.”

                                                                                                                                  And I myself have said several times: “GNU’s Not Unix means exactly that.”

                                                                                                                                  A lot of GNU inherits from ITS and the MIT AI Lab, not necessarily Unix. The info documentation system, Emacs (TECO), GNU’s neutered su, the prevalence of Lisp, etc all came from ITS and/or the AI Lab.

                                                                                                                                  1. 2

                                                                                                                                    I suppose this is a difference in philosophy about the user of the program. It feels like there’s a spectrum of users that want to use one tool for all things (insert gratuitous emacs joke here) vs using one tool for each thing.

                                                                                                                                    I wonder what that heat map would look like, only with “frequency of use” expanded out to show usage in that OS’s actual scripts, various free or open source projects, and - if I had a magic wand across all systems in the universe - in various shell histories.

                                                                                                                                  1. 7

                                                                                                                                    Great write-up.

                                                                                                                                    static linking makes binaries easy to deploy

                                                                                                                                    I always wonder why Go gets the fame for this as if it’s the only language that can do this. You can statically link a C or C++ program. It’s not the default, but you can. There’s definitely something to be said for good defaults and how they encourage behaviour, but I’m still puzzled as to how Go managed to get this particular slice of the marketing pie.

                                                                                                                                    when you make something simple, you move complexity elsewhere

                                                                                                                                    This is a very good point, and one I’ve made before. Whatever logic your program needs to do is still complicated. Making the language simple just makes user code have to do more of the work. There’s a sweet spot, but that lies on different points in the spectrum for different people. Haskell is a step too far for me, and I like Haskell.

                                                                                                                                    1. 13

                                                                                                                                      You can statically link a C or C++ program. It’s not the default, but you can.

                                                                                                                                      Defaults matter, especially in cases where you want to use others’ libraries, because there’s a decent chance that the non-default configuration doesn’t work. For example, glibc doesn’t support static linking at all, and more than a few other libraries only work with glibc.

                                                                                                                                      1. 4

                                                                                                                                        Defaults matter

                                                                                                                                        I agree, which is why I mentioned how good defaults encourage good behaviour.

                                                                                                                                        1. 6

                                                                                                                                          I agree that defaults matter. That’s why I don’t use Go. The fact that print still exists, but prints to stderr is craptastic.

                                                                                                                                          Imagine if you asked for a knife to chop things for a salad, and someone handed over a simple kitchen knife. As you start to slice the tomato, you realize something is terribly wrong. You feel an edge blunter than a butter knife. You turn around to your friend confused, and they smack their forehead and go “ohhhhh, for a tomato! Hold on.” And they wander off to another room and bring back a chef’s block with a nearly identical set of actually sharp knives. “You just have to go get these from the pantry when you want actual sharp knives. We don’t keep them in the kitchen, for obvious reasons.”

                                                                                                                                          As a noob to the language, I was tinkering with some code. At one point, flipping between python and Go, I put a print() statement in Go. I then spent the next couple of minutes confused about why the next program in the pipe couldn’t see the output from my Go.

                                                                                                                                          For those that have never used Go or are just starting out: you need to import “fmt”, and then use fmt.Print. Yes, it’s in all the tutorials. Yes, you will likely still beans it up and use print() by accident, especially if you come from other languages. No, there aren’t any warnings when you do this and then go run or go build. Go just does something different for the concept of “print” and “println” in silence. I don’t need that kind “tee hee, GOTCHA!” in my life.

                                                                                                                                          1. 1

                                                                                                                                            Go just does something different for the concept of “print” and “println” in silence. I don’t need that kind [of] “tee hee, GOTCHA!” in my life.

                                                                                                                                            Maybe Go could use some of Ruby’s POLA philosophy.

                                                                                                                                        2. 11

                                                                                                                                          I always wonder why Go gets the fame for this as if it’s the only language that can do this. You can statically link a C or C++ program. It’s not the default, but you can. There’s definitely something to be said for good defaults and how they encourage behaviour, but I’m still puzzled as to how Go managed to get this particular slice of the marketing pie.

                                                                                                                                          My theory is that it’s because Ruby, Python, and Node lowered the bar so tremendously on this that anything else is seen as a huge leap forward.

                                                                                                                                          1. 5

                                                                                                                                            and the c/c++ toolchains are not exactly easy to handle. i won’t even try to build something static that wasn’t intended to. that’s why many things which are distributed as binary use linker magic and ship their own set of libs.

                                                                                                                                          2. 2

                                                                                                                                            You can statically link C and C++, yes.

                                                                                                                                            But with Go you can also cross-compile that static executable with zero effort to multiple platforms.

                                                                                                                                            1. 2

                                                                                                                                              What does Cross compilation have anything to do with static linking or what I said?

                                                                                                                                          1. 4

                                                                                                                                            From the list of things that don’t work, it seems like desktop hardware support is still like what Linux had in 2005. It’s good to see it does get better though, I do want FreeBSD to be a viable desktop OS.

                                                                                                                                            If nothing else, we the free software nerds already have experience with carefully picking hardware to run free software on…

                                                                                                                                            1. 2

                                                                                                                                              with X11, i3, and xterm FreeBSD is a viable desktop!

                                                                                                                                              1. 2

                                                                                                                                                In the article, there is one thing on the list of things that don’t work. How is that “like what Linux had in 2005”?

                                                                                                                                                1. 3

                                                                                                                                                  Ehhhhh, I can see what dmbaturin is saying.

                                                                                                                                                  Bluetooth: Disabled to prevent a hang on reboot.

                                                                                                                                                  WebCam: Detected, works in a webcam application, but doesn’t work in other applications.

                                                                                                                                                  WiFi: Kind of works, but only at low speeds (802.11ac is not yet supported on FreeBSD IIRC)

                                                                                                                                                  Keyboard: Some function keys work, others (volume is called out) do not.

                                                                                                                                                  That sounds very much like my experience with Linux in the mid-2000s.

                                                                                                                                                  1. 2

                                                                                                                                                    By the mid 2000s, I generally expected better from Linux. I didn’t have bluetooth on anything then, or any kind of webcam, but recall that getting Linux working on my Gateway laptop in 2004 “just worked”.

                                                                                                                                                    1999 - 2000, by contrast, I recall needing to do a custom kernel build and fiddle with it for hours to get suspend/resume working and never getting sound quite right on my Thinkpad, but around the time Red Hat Linux 9 shipped (’02 or ’03?) that stuff was all very easy.

                                                                                                                                                    The biggest problem I recall from early ’00s was that I still needed dial up. And most inexpensive laptops had moved their built-in “modems” to software implementations, most of which never got ported to Linux. There were attempts to use emulation to run that, some of which almost worked, and attempts at native drivers.

                                                                                                                                                    I wound up carrying a USR PCMCIA card with a real UART in my bag once I could afford one.

                                                                                                                                                    That’s way too many words to say that the linked article reports an experience that I find markedly inferior to what I recall from ca. 2005. It made me think of 1999.

                                                                                                                                                    1. 1

                                                                                                                                                      To be fair, I picked 2005 as a random “long ago, but not that long ago” date, and I didn’t mean Thinkpad specifically. I remember my mid-00’s experience with installing GNU/Linux on a random laptop as similarly hit and miss to what the author is having with a Thinkpad.

                                                                                                                                                      I fear if that’s how it runs on a Thinkpad, it’s better not to think what will happen on a random machine that came with Windows Home. Maybe I should enage in my love-hate relationship with FreeBSD again and try it on my own laptop (Asus x200ca, it was sold with Linux).

                                                                                                                                              1. 25

                                                                                                                                                This issue is not specific to Alpine, Wheels just suck with any less-common ABI/platform combination. Try it with Debian on ARM and you will run into the same issue.

                                                                                                                                                1. 12

                                                                                                                                                  Yea, it’s not a fair comparison because the OP is using a package with some base extensions and therefore has to pull in gcc and compile those CPython extensions. A better comparison would be to compare something that had the actual python package available in Alpine.

                                                                                                                                                  Or, use a program you wrote whose dependencies are all pure-python without needing to link to outside C resources.

                                                                                                                                                  1. 15

                                                                                                                                                    It might not be fair, but it is relevant. At least in my view. This article mirrors my experience, and I came to the same conclusion. It’s quite rare that I don’t have any library that uses C in my projects, but for which no wheels are available for a ‘standard’ platform. I never had use for any of the Python packages that were included in Alpine (nor the ones that come with Debian, for that matter. I usually try to pin my dependency versions to the exact ones I use in de velopment).

                                                                                                                                                    I’ve experienced a lot of pain trying to use Alpine with Python, and I don’t think it’s worth it for anything other than small, simple projects. Even for building Python-based containers for functions in OpenFaas (where you’d really like to have small images), I ended up having a (relatively heavy) base image with most of my common requirements included, and used that with all my function containers. Which, in the end is an acceptable solution, since you only have to pull the base image every now and then, when it updates. The base images weights around 350mb, but every image derived from it was only a few kBs or (MBs, in some cases).

                                                                                                                                                    Anyway, if you can fault the article for anything it might be for not making it clearer when it’s conclusions are relevant. But I think most people will understand that, and won’t expect a ‘fair’ comparison for clean-room circumstances. As I said, it might not be fair, but it’s good practical advice nonetheless, in a lot of cases.

                                                                                                                                                    1. 2

                                                                                                                                                      Exactly my feeling. The original post and liwakura’s comment are both fascinating when I don’t have this problem, but I’d wager if someone is searching for “Alpine Docker Python Slow” it’s not going to be for the other edge cases.

                                                                                                                                                  2. 12

                                                                                                                                                    The difference is that no one recommends ARM as a way to make smaller, faster builds. It’s understood you’ll have more work because it’s more obscure. But people do recommend Alpine on amd64 for faster, smaller builds, and that wastes lots and lots of time for people who don’t know any better.

                                                                                                                                                  1. 3

                                                                                                                                                    They are getting a bunch of flack. There’s two things at play here. The first is that wikipedia is public information, not secret.

                                                                                                                                                    But there are two big use cases for requiring strong encryption:

                                                                                                                                                    1. Ensuring that eavesdroppers can’t tell what articles you are reading.
                                                                                                                                                    2. Ensuring that eavesdroppers can’t undetectably alter what you are reading to fit their narrative or to hack you.
                                                                                                                                                    1. 1

                                                                                                                                                      Ensuring that eavesdroppers can’t tell what articles you are reading.

                                                                                                                                                      First of all, TIL. Didn’t realize https could the path and query params at all, but it totally makes sense. Neat!

                                                                                                                                                      Wouldn’t it be possible to gain some idea of what you’re reading based on the amount of data back-and-forth? Now I’m sitting here curious about how many articles have the exact same size for a given size category…. hmmm….

                                                                                                                                                    1. 1

                                                                                                                                                      The Control key moved to the Caps Lock keys usual position. […] I can’t imagine why anyone thought Caps Lock should have had this prominent of placement.

                                                                                                                                                      That’a one of the first things I do on new system installs. Also, most X11/xkb configs allow mapping left + right Shift to act as a Caps Lock (which is IMO more convenient and intuitive than a dedicated key).

                                                                                                                                                      Section "InputClass"
                                                                                                                                                      	Identifier "Keyboards"
                                                                                                                                                      	MatchIsKeyboard "yes"
                                                                                                                                                      	Option "XkbLayout" "us,ru"
                                                                                                                                                      	Option "XkbVariant" "mac,mac"
                                                                                                                                                      	Option "XkbOptions" "grp:rwin_toggle,ctrl:nocaps,shift:both_capslock"
                                                                                                                                                      EndSection
                                                                                                                                                      

                                                                                                                                                      Note: grp:rwin_toggle switches layouts using right meta key.

                                                                                                                                                      1. 3

                                                                                                                                                        I always throw this into my .xprofile:

                                                                                                                                                        setxkbmap -option caps:swapescape
                                                                                                                                                        

                                                                                                                                                        That swaps the esc and caps keys. Very handy for vim.

                                                                                                                                                        1. 3

                                                                                                                                                          I’ve always mapped caps to ctrl, but recently have been forced to use a MacBook (touchbar) at work. As a user of vi bindings everywhere I can, the lack of a tactile escape key was too much to bear so I’m using Karabriner Elements to use caps as ctrl when held and esc when pressed alone.

                                                                                                                                                          I have to say that there’s no going back after this switch—total game changer for me. Of course, I now can no longer use anyone else’s machine.

                                                                                                                                                          The same can be achieved in X.org with setxkbmap as above for your caps/control switch, combined with xcape for the esc tap feature.

                                                                                                                                                        2. 1

                                                                                                                                                          YEEESSSSS! You can also remap caps lock to control on macOS under Preferences -> Keyboards -> Modifier Keys… or on Windows via registry edits.