Threads for Leonidas

  1. 5

    Article is from 2013. But if you go to rakuten.co.jp, it’s still quite dense, although somewhat more like contemporary Western design.

    1. 2

      Ah, that explains why the link to Kinokuniya links to a site that looks just as bad as the other websites that are being called out. Seems like the nice style didn’t stick and they came back to the classic look.

      1. 2

        I wonder if its something to do with the hierarchical structure of their organisations where the older managers get to dictate the look that they are comfortable with.

      2. 1

        Here’s an Asahi Shimbun page on the Ukraine invasion: https://www.asahi.com/topics/word/ウクライナ.html It is somewhat more dense than NYTimes but not outlandishly so.

      1. 4

        I wonder if we won’t be seeing more of this. I feel like the whole systemd debacle but perhaps more importantly the philosophical, financial and organizational changes that caused it speak to a real problem in Linux-space where a small number of large-ish companies are determining the future of the platform based on their best interests that may not actually intersect with those of the community.

        Like, systemd actually DOES seem to bring some value to the desktop, but to the server? The value it brings is much less clear, and the harm it causes by violating decades old interface contracts is non trivial.

        1. 16

          Like, systemd actually DOES seem to bring some value to the desktop, but to the server? The value it brings is much less clear, and the harm it causes by violating decades old interface contracts is non trivial.

          The decades old interfaces were a crufty hack put together by grad students. All the commercial unix variants ditched it long ago. Yes, BSD’s user space is stable, but it’s also awful. It was awful in the 1990’s when I started in on Linux and BSD, and it’s awful today.

          I only use Linux on servers these days, and I love systemd. If I never have to write another SysV init script again, I will be a happier person. Add things like eBPF? And finally we’re getting btrfs on root with SuSE and getting some of the nice stuff that Solaris had (snapshot before upgrade for trivial rollback). It’s not traditional BSD, and it’s better.

          1. 5

            systemd is the main thing I’m missing on FreeBSD. BSD rc is an improvement over System V init, but not by much.

            1. 3

              Comparing Linux style SysV init to systemd I get your point, but that’s not how rc.d typically works on a modern BSD.

              Take Consul on OpenBSD for example.

              It mainly contains:

              #!/bin/ksh
              daemon="/usr/bin/consul agent"
              daemon_flags="-config-dir /etc/consul.d"
              daemon_user="_consul"
              
              . /etc/rc.d/rc.subr
              
              rc_bg=YES
              rc_stop_signal=INT
              
              rc_cmd $1
              
              

              Then I can add consul_flags="whatever" in /etc/rc.local which describes all my services, what runs and how it is configured. I can add comments, etc.

              The equivalent in systemd, after removing everything not needed:

              [Unit]
              Requires=network-online.target
              After=network-online.target
              
              [Service]
              ExecStart=/usr/local/sbin/consul agent $OPTIONS -config-dir=/etc/consul.d
              ExecReload=/bin/kill -HUP $MAINPID
              KillSignal=SIGINT
              
              [Install]
              WantedBy=multi-user.target
              

              And harder to just change some flags and get an overview about how the system is configured.

              FreeBSD also has daemon which is a simple tool that takes care of everything you might need for running a daemon. Logging, automatic restarts, managing subproceses, chaining user, forking into background, creating a pid file.

              I don’t disagree that systemd is better than what many distributions had before. It’s actually a reason of why I got interested in the BSDs. Some systems, like Gentoo or Arch Linux in the past did a better job as well. Especially Gentoo’s OpenRC (also used by some others) comes pretty close to a perfect init in my opinion.

              Sorry, I don’t wanna talk about systemd or init systems. There is enough about that elsewhere, but the notion that things on the BSDs are as bad as they were on SysV init based Linux distributions is simply wrong.

              About eBPF. dtrace is there and has great integration from Python to Postgres. And btrfs feels like a never ending story and I think even on Linux it’s largely obsoleted by ZFS which just like dtrace has been used in production in very large setups for many years.

              See, that’s the thing with Linux though. Things tend to be considered obsolete when they finally manage to stabilize. See Pulseaudio and Primusrun. I don’t think that’s necessarily bad. In fact it’s good that bad stuff gets replaced, but often it’s not about the better option but the newer one it seems and RedHat certainly has interest in pushing their products.

              And then you have to hire huge DevOps/SRE-Teams just to keep things compatible with whatever is still supported. Of course that leads to the idea that you need to be able to pull things off Dockerhub and don’t actually manage the system, but outsource things to EKS or GKE.

              And I say that as someone whose main source income is consulting helping companies with DevOps related issues, Docker, Kubernetes, etc. It’s a mess, which is why companies throw large sums of money at people like us blowing out the fires.

              Whatever it is, being the “cool new thing” managers read in their magazines and “Google uses it” will always win. There’s no shortage of work in the industry if you jump on what’s hot. ;)

              1. 2

                And harder to just change some flags and get an overview about how the system is configured.

                “systemctl edit consul” and listing .override files should be the equivalent in systemd world.

                1. 1

                  Which I would is more involved than having a central config file often with additional specific options. Not by much, but having an rc.conf often with not just flags, but actually specifying listen address or in case of network adapter even which device is configured how is certainly nicer than doing the same in systemd. Saying that as someone who does both at a semi-daily basis.

                  It’s because at one point I feel more as a user and on the other more as a the designer. I think it scales very well with how involved the service is compared, to Unit files, where I have to know both how the service works and how Unit Files work.

                  Listing override files to get an overview of a system isn’t exactly a nice workflow in my opinion. I feel spoiled when I have things groups, commented, etc. It’s a bit of that terraform feel where in a well written config you see everything grouped together at first glance, have useful comments where necessary.

                  Anyways, that’s not even what I tried to argue about. I just wanted to support the statement that the BSDs rc.d isn’t Linux SysV init. And while I understand people have different tastes, switching to BSD isn’t going to bring that back nor is using one of the many other options out there bringing that back. I know my way around with systemd (and the slur of related tools and services), since I have to work with it on a daily basis, because it’s currently the dominant init system, yet I still wished something like OpenRC would be adapted more widely. Aside from some small distributions with Alpine and Gentoo there seem to be two more widely used ones, for which it appears to works just fine.

              2. 3

                Glad you’re happy with systemd.

                The issue here is not the change, but an unwillingness to actually COMMUNICATE that change so sysadmins managing production systems in the field have to find out the hard way that their expectations have not been met.

                This is most emphatically NOT the way to develop a very complex software stack.

                1. 6

                  What type of communication, and from whom, would be good enough?

                  Does this count? https://github.com/systemd/systemd/blob/main/NEWS

                  1. 5

                    I’m looking forward to the communication SysV init has. Oh wait, it doesn’t and every distribution was just doing its own thing?

                    1. 1

                      Honestly? No.

                      As a UNIX administrator I expect man pages to document the interfaces necessary to operate the system.

                      1. 3

                        What’s lacking in the systemd man pages?

                        https://man7.org/linux/man-pages/man1/systemd.1.html

                    2. 5

                      Can you provide examples of what you feel was not communicated? I’m not sure I understand the complaint.

                      1. 1

                        When I want to change some detail around DNS resolution, I go to modify /etc/resolv.conf, but that’s not actually the correct mechanism anymore, but I can’t find what the right mechanism IS in the man pages or anywhere else I know to look.

                        1. 3

                          And in which man page do you spot that /etc/resolv.conf was the right place to look, apart from the man page for resolv.conf?

                          Discovering /etc/resolv.conf is not the most intuitive thing in the world either.

                          1. 2

                            There are two important issues in good UI design (okay, more, but two that are relevant here):

                            • Discoverability
                            • Consistency

                            *NIX systems are typically terrible at the first of these. FreeBSD isn’t actually too bad in the first order here because you can add nameservers by running bsdconfig and going to the network settings part. This isn’t great though because it doesn’t tell you what it’s editing and so the only thing that you learn is that you can edit the settings via that UI, not what the underlying service is. RedHat has a similar tool whose name I’ve forgotten. I don’t know what the Debian / Ubuntu equivalent is but I assume there is one.

                            I learned about resolv.conf on Linux around 2000. For consistency, I’d expect to go and edit it today. Trying this on a FreeBSD and Ubuntu system, I learn quite similar things: it’s not the right thing to do anymore. Both then do well on discoverability: On Ubuntu, it tells me that the file was created by systemd-resolved, on FreeBSD is tells me that it was created by resolvconf. In both cases, I can go to the relevant man page and find out what the new thing is. Whether I prefer systemd-resolved or resolvconf is largely a matter of personal preference (I do enjoy the fact that there’s now a file, complete with man page, on FreeBSD called resolvconf.conf, because what problem isn’t made better by adding an extra layer of indirection?).

                            1. 1

                              Can we please stop this back and forth? I realize I was being un-necessarily incendiary by using the word ‘debacle’ and if you contribute to the systemd project and I hurt your feeling I sincerely apologize.

                      2. 3

                        If I never have to write another SysV init script again, I will be a happier person

                        Were you writing these yourself before? Serious question: why?

                        1. 14

                          Because I wrote daemons and they had to have init scripts.

                    1. 6

                      Linux and related distributions now have contributions from many companies, many of which (e.g. Red Hat) push (justifiably) in the direction of what is convenient for them, their products, and their services. Being big contributors to the project they have a big clout so, indeed, their solutions often become de-facto standards. Consider systemd - was there really a need for such a system? While it brought some advantages, it added some complexity to an otherwise extremely simple and functional system.

                      Again the same tired argument:

                      1. Have you considered that Red Hat’s commercial interests could aling with yours? The article speaks of “we” so I assume some commerical enterprise.
                      2. Yes, systemd is absolutely better technically from the (der-distribution different) mess of init scripts or upstart files that it replaced. We even have Upstart as an example of a new system from a commercial actor (Canonical in this case) that actually didn’t get traction because it technically wasn’t very good.
                      3. Distributions mostly come with start-up scripts so if the fact that the way services are started is a large source of work for you then there is something wrong with your workflow.

                      Anyway, isn’t it sorta similar with FreeBSD too? iXsystems supports ZFS on FreeBSD, hence the support is pretty good. Refusing contributions from commercial actors because they’re commercial and have money to throw at the problem of developing a good system is a good thing, in my book.

                      1. 35

                        Why did GitHub remove his account/projects?

                        1. 44

                          That’s the part that bothers me.

                          I understand it wasn’t a nice thing to do, and that people are upset, but it’s his own code in his own repos. He even announced ahead of time he would do something like this, so “buyer” beware.

                          I realize GitHub TOS covers them to remove accounts and repos at their discretion, but it’s a little unsettling that they’ll actually do so arbitrarily without a clear TOS violation. It might be time I move everything to Sourcehut and treat GitHub as a mirror…

                          1. 24

                            It might be time I move everything to Sourcehut…

                            The Sourcehut guy has always seemed a little unstable to me (didn’t he get banned from this site, in fact?) So, why would I trust him any more than I trust GitHub?

                            1. 33

                              I banned him and I would not call him unstable. Not just because that kind of insult is inappropriate here, but because it obviously doesn’t apply. He writes inflammatory hyperbole that’s not a good fit for this site, but he’s a skilled, accomplished professional who looks like he’s seeing a lot of success in his life.

                              1. 11

                                I didn’t mean to insult him. Maybe “erratic” would have been a better word without any mental health connotations (which I absolutely didn’t intend)? Poor word choice on my part, I’m sorry for that.

                                …but he’s a skilled, accomplished professional who looks like he’s seeing a lot of success in his life.

                                Sure, same goes for the GitHub guys. A person who can’t tone it down enough to keep a Lobsters account just isn’t someone I feel I can trust to host my code, particularly given that he’s in charge of the whole operation. Obviously everyone is free to decide who to trust and for what reasons.

                                1. 9

                                  A person who can’t tone it down enough to keep a Lobsters account just isn’t someone I feel I can trust to host my code

                                  Bear in mind, Linus Torvalds would also probably have been banned from here multiple times in the past.

                                  I’d be perfectly happy to trust someone that volatile a lot (and I guess I do, running Linux since 1996 :) ). But I would be careful which groups and forums I invited them to :)

                                  1. 2

                                    …I guess I do, running Linux since 1996

                                    Very different, at least to me. If Linux was a service, control would have been taken away from Linus a long time ago (I mean, as it is they made him step back for awhile to work on his issues). But it’s not, it’s just code that other people then build into something, often applying patches in the process. If Linus had a meltdown there is already sufficient infrastructure in place that the vast majority of us wouldn’t even notice.

                                    I wouldn’t trust a code hosting service Linus ran by himself either.

                                    1. 1

                                      Nobody made Linus step back. He recognized that he had issues and took a sabbatical to deal with them himself. Are you saying you wouldn’t trust a service by a guy who has been diligently working on the same project for 30 years? Not to mention the guy who invented the base of all of the services discussed in this thread.

                                      Why do people assume that “Bigger is better” when it comes to web services? The two most reliable services I use are Pinboard, run by an insanely opinionated and outspoken developer, and NewsBlur, who was, and may still be, a one man shop that just quietly does his own thing. In the same time as those services have been faithfully up and running, Google has shut down more services than I can count, because “It didn’t fit with their corporate vision”

                                      It’s misguided, and harmful.

                                      1. 1

                                        Nobody made Linus step back.

                                        We’ll probably never know for sure, but the subtext (well, and the text) of his announcement email sure makes it sound like his hand was forced, at least to me.

                                        Are you saying you wouldn’t trust a service by a guy who has been diligently working on the same project for 30 years?

                                        No, I’m saying I wouldn’t trust a service run by a guy who randomly goes off on people in totally inappropriate ways (his admission). Or, as is the case here, a guy who can’t even behave himself well enough to keep a Lobsters account.

                                        Not to mention the guy who invented the base of all of the services discussed in this thread.

                                        That has literally nothing to do with anything. A person can be productive or brilliant and also have other, undesirable, qualities.

                                        Why do people assume that “Bigger is better” when it comes to web services?

                                        I don’t, so I can’t answer that.

                                        Google has shut down more services than I can count…

                                        Agree with you there! I don’t trust Google for anything but search (I don’t even use Gmail), because that’s the one thing I don’t think they’ll ever kill (or break). I don’t think GitHub is going anywhere either, the worst case scenario is that Microsoft sells it.

                                        It’s misguided, and harmful.

                                        If there was a person who had the views you seem to ascribe to me, then I might agree!

                              2. 30

                                That’s unfair to Drew. He’s passionate, and rude, and opinionated, and submissions here from his site generally stirred up giant flamewars. But I do believe he’s got what it takes to keep sourcehut running.

                                1. 18

                                  GitHub will keep running, too. I’m not sure we’ve answered the question of

                                  why would I trust him any more than I trust GitHub?

                                  1. 8

                                    Not only is the sourcehut software available under the AGPL, the issue trackers and such give you export and import functions to pull your data into another instance easily. The software itself is not trivial to host, but it’s not prohibitively hard either. If I needed to eject because Drew became untrustworthy, I am very comfortable that I could do that.

                                    Even though that’s a non-zero amount of work, GitHub gives me no comparable ability. That’s a good reason to trust him more than I trust GitHub, in my opinion.

                                    1. 3

                                      GitHub gives me no comparable ability.

                                      The GitHub command line client provides this functionality, as does the API. Obviously, the data formats are specific to the way GH works, but there are ways to extract most if not all of the relevant data (I use this heavily with my team to script up our findings workflow, for example).

                                      1. 5

                                        Interesting. Unless I’m missing something, you can’t stand up your own self-hosted instance of github, and import that, can you? The ability to stand up my own instance of the forge and import my data, to use on a self-hosted site, is what I meant by “comparable”. (That’s the angle I was coming from… if Drew won’t let me use his hosted service, I can just set up my own copy on any host I want since upstream is AGPL, then import my data from the sr.ht export since sr.ht exposes those functions.)

                                        1. 2

                                          GitLab supports importing to a self-hosted instance from GitHub [1], although I’m sure it’s not perfect, so it may or may not be useful. It also isn’t clear to me based on a 15 second review whether you can import from some kind of local data dump or raw GitHub API responses or if your GitHub account needs to be currently active.

                                          [1] https://docs.gitlab.com/ee/user/project/import/github.html

                                          1. 2

                                            That looks much better than I thought, particularly if it turns out to work off saved data/responses. And it’s nice that Gitlab enable that for all their tiers.

                                          2. 1

                                            Unless I’m missing something, you can’t stand up your own self-hosted instance of github, and import that, can you?

                                            GitHub Enterprise can be bought as a GitHub-hosted or self-hosted thing. These support (most of) the same APIs as the public GitHub, so you can run your own instance if you are willing to pay.

                                            1. 2

                                              It would be an interesting experiment to see whether they would sell an enterprise installation to someone whose account they forcibly closed. I was sort of assuming that if they won’t let you be a customer of their public service, they won’t sell you the private one, but that is uninformed speculation.

                                      2. 3

                                        Because sourcehut is open source so nothing is lost when I leave. More than that chances are if sourcehut goes a bad route there would likely be others jumping in.

                                      3. 2

                                        Not that you exactly claim otherwise, but Drew also makes some nice things and has created a business structure that enables at least one other developer to make some nice things.

                                        Quite apart from that, though, and similarly quite apart from whether he has what it takes to keep sourcehut running, he’s given me an out so that I don’t, strictly speaking, need him to. He’s released the software that runs the forge under the AGPL, here. And it exposes ways for me to export the hosted stuff and import it into a self-hosted instance.

                                        So regardless of whether I trust Drew personally, he’s made it so I don’t need to for this purpose.

                                        If Drew got angry and decided I couldn’t be his customer anymore, I could stand up my own instance or pay someone to do that for me and import my data. My repos wouldn’t be down at all, my tickets, docs, etc. would be down for a day or so, and my mailing lists might see a bit more disruption than that. If github decided that I shouldn’t be their customer anymore, I’d have my repos. For the rest, I’d kind of be out of luck. (I think this last paragraph is more responsive to @glesica ‘s comment than the one I’m replying to, and I’m too lazy to split it to another reply.)

                                      4. 17

                                        Because “more than I trust Microsoft” is a damn low bar.

                                        1. 7

                                          It’s like a little devil hovering over my right shoulder, and a slightly less predictable devil hovering over the other.

                                      5. 6

                                        From other options there’s also fediverse approach with Gitea, and p2p approach will be available soon with Radicle.

                                        1. 11

                                          It might be time I move everything to Sourcehut and treat GitHub as a mirror…

                                          That time was years ago, but hey, better late than never.

                                          1. 5

                                            Consider hosting your own, instead. I published a blog post with a list of defunct code hosting sites which I update occasionally. Maybe that list is a good reminder. Remember, it’s not just code that goes away with such sites, it’s also issue queues and in some cases, wikis and mailing lists too.

                                            1. 4

                                              Are you also start hosting a list of defunct private websites that used to host Git repos that are gone forever and where the disappearence came completely unexpected? I would trust Github more with staying online since that’s their job than a developer running a Gitweb on some VPS with some domain name that requires regular payment to stay online.

                                              Kinda like I registered callcc.org after it lapsed to make sure the links to the CHICKEN website don’t break and it doesn’t get domain-squatted and I’m redirecting to the official website these days.

                                              1. 1

                                                Are you also start hosting a list of defunct private websites that used to host Git repos that are gone forever and where the disappearence came completely unexpected?

                                                I can’t think of anything offhand where I’ve taken a dependency that’s done that. But when I do take a dependency on something, I generally mirror the SCM repo if there is one. And I am very reluctant to take dependencies on things I can’t have the source to. Since the things I depend on generally haven’t gone away, I haven’t bothered to publish my mirrors, but I would if the license permits it.

                                                1. 3

                                                  But when I do take a dependency on something, I generally mirror the SCM repo if there is one.

                                                  I learned that the hard way when Rubyforge went down, a few employers ago. We weren’t that active in the Ruby community anymore, so we missed the notice. When the site went away and I had to do some small maintenance tasks on a legacy project, all the third party svn subtrees from Rubyforge were no longer working (and, more painfully, another project of ours was completely gone too). Note that Rubyforge was huge in the Ruby community back in the day.

                                                2. 1

                                                  I would trust Github more with staying online since that’s their job than a developer running a Gitweb on some VPS with some domain name that requires regular payment to stay online.

                                                  Like I said, history has shown these hosting sites are not as trustworthy as people like to believe they are. The GitHub company can get sold to an untrustworthy partner (har har, like that’d ever happen… oh wait) or go out of business (what if MS decides to sell the company to, I dunno, Oracle or something because it’s not making a profit?), or there might be some other new VCS that comes out that completely blows git out of the water. I’m sure nobody saw coming what happened to Bitbucket - it started out as a Mercurial hosting site, then started offering git and finally dropped Mercurial after Atlassian took over. Its founders probably never would have let that happen if it were still in their power.

                                                  From my own perspective, I’ve personally ran into at least five hosting sites who were hosting projects I started or heavily contributed to that are no longer available now (Rubyforge, Dutch govt OSOSS’ uitwisselplatform, Berlios, Bitbucket and Google Code). And then there’s Sourceforge which at least still hosts some of my defunct projects, but had for a while been injecting malware into downloads. If I or my employers (as the case may be) had hosted our own projects from the start, this pain would’ve been completely avoided. These are projects in which I had a stake, and it was in my interest to not let them die.

                                                  Now, having said that, I agree that from a third party perspective (someone who is using the hosted code) that’s different. I understand your point saying you don’t want to rely on some random developer’s VPS being up, and neither would I. But then, people change repositories on code hosting sites all the time, too. They move to other hosting sites, or rename repositories etc. Links rot and die, which is unfortunate and something we all have to live with.

                                                  Case in point:

                                                  Kinda like I registered callcc.org after it lapsed to make sure the links to the CHICKEN website don’t break and it doesn’t get domain-squatted and I’m redirecting to the official website these days.

                                                  Thanks for doing that. AFAIK this domain was never communicated as being official, but I might be wrong.

                                            2. 8

                                              I don’t know what the GitHub rationale was, but the ‘limitation of liability’ bit in most open source licenses only goes so far. If I intentionally introduce malicious behaviour into one of my open source projects, knowing that it would damage downstream consumers, then I’d probably be liable under the Computer Misuse Act in the UK and similar legislation elsewhere. GitHub’s T&C’s don’t explicitly prohibit using their service for criminal purposes but that’s normally implicit: if GitHub didn’t act then they might end up being liable as an accessory (at least as an accessory after the fact). Their distribution channel (NPM) is being used by a malicious actor to attack other users.

                                              It’s normally difficult to prove malicious intent in this kind of thing (incompetence and malice look similar) but it seems pretty clear here from the author’s own statements.

                                              1. 12

                                                I don’t know what the GitHub rationale was, but the ‘limitation of liability’ bit in most open source licenses only goes so far.

                                                This is disturbing. Software is provided as is, with no liability whatsoever, but the author should still be liable for what happens when other people use it, because it broke things? What if the author decided to completely change the library’s API, or recycle it to just print squares of color, because they liked the name?

                                                If find what the author did pretty stupid, but frankly, suggesting it falls into criminal behavior call for some stepping back and put things in perspective.

                                                1. 8

                                                  There is a difference, and it’s not subtle at all, between making a possibly unwanted change in software that is provided without any warranty, and deliberately making a crippling change with the express intent of breaking other people’s applications.

                                                  To put it another way: if you accidentally commit an integer overflow bug that causes batteries to blow up, that is, presumably, just bad engineering. But if you deliberately commit a clever hack that causes people’s batteries to blow up, with the express intent of getting people injured, or at least destroying their phones, I think it makes a little sense to not put it under “well, it did say no warranty of any kind on the box, didn’t it?”.

                                                  Obviously, this didn’t kill anyone, so I’m obviously not thinking it ought to be treated as murder. But “no warranty” is not a license to do anything.

                                                  It’s not like software is being given special treatment here, it’s how warranties work everywhere. If you sell boats with two years’ servicing warranty and they break down after three years, that’s one thing, but if you fit them with bombs that go off after two years and one day, with the express intent of killing anyone on them, that still falls under “murder”, not “what happens after two years isn’t our problem, it says so on the purchase contract”.

                                                  (Edit: obviously IANAL and this is not legal advice, either, I’m only parroting second-hand, non-lawyer advice about how insurance works for some high-stakes software projects)

                                                  1. 5

                                                    I guess that makes sense, when you put it that way :)

                                                  2. 3

                                                    I am not a lawyer, this is not legal advice:

                                                    My understanding is that it comes down to intent. If I upload a buggy piece of crap to GitHub with an open source license, and you use it, then it sucks to be you. If I upload something to GitHub, wait for you to deploy it and then intentionally introduce a vulnerability or other malicious behaviour in it then legally dubious. Normally it’s very difficult to prove intent. If I submit a patch to the Linux kernel that introduces a vulnerability, if you wanted to prosecute me then you’d have to prove that I did so knowing that the bug was there and with the intent to cause harm. That’s very difficult to do in the general case (the NSA null-pointer dereference bugs are a great case in point here: people suspect that the NSA knew about that vulnerability class and introduced it deliberately, but no one can prove it and there’s enough reasonable doubt that it would never stick in court unless there was some corroborating evidence - it could easily have been accidental). If, before I submit the patch, I post publicly about how I am going to intentionally break things for the people using my code and then I push a new version out to public repositories then it’s likely to be easy to prove malicious intent. The author of these packages did exactly that: posted saying that he was going to break things for people if they didn’t pay him and then, when they didn’t pay him, broke things. That may (again, not a lawyer) count as blackmail, as well as computer misuse.

                                                    1. 3
                                                      1. Code license != Github TOS.
                                                      2. Liability could only be disclaimed to the extent permitted by law. You cannot put a sign “free food, no liability whatsoever” and then put poison inside and expect that disclaimer to save you from prison. E.g., GPL states “THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.”
                                                  3. 7

                                                    I think until they make a statement about it, nobody knows but them. But my assumption is that this happened on a weekend, and whoever was on call figured that the easiest thing to do to minimize disruption till Monday was to suspend the account and hard revert the content until more people could be brought in. I’m also assuming suspending the account just automatically says that you violated the ToS.

                                                    1. 3

                                                      I could imagine that somebody identified this as a possible account hack and thus locked it.

                                                      1. 2

                                                        They didn’t, they suspended his account so he can’t log in. You are still free to troll him on GitHub without any recourse whatsoever.

                                                      1. 7

                                                        A better syntax (debatable) isn’t worth losing static typing.

                                                        1. 1

                                                          My experience is that immutability plays a far bigger role than types in addressing this problem. Immutability as the default makes it natural to structure applications using independent components. This indirectly helps with the problem of tracking types in large applications as well. You don’t need to track types across your entire application, and you’re able to do local reasoning within the scope of each component. Meanwhile, you make bigger components by composing smaller ones together, and you only need to know the types at the level of composition which is the public API for the components.

                                                          1. 2

                                                            You don’t need to track types across your entire application, and you’re able to do local reasoning within the scope of each component.

                                                            This is the complete opposite of my experience. How is one supposed to locally reason about a function if you don’t know the types it operates on?

                                                            1. 1

                                                              You only need to know what the shape of the data a particular function expects. Generally, people document the shape of the data a component expects at the API level, and it’s often done using spec or malli contract systems. The advantage of using contracts is that unlike static typing they actually capture semantics of what the code is doing.

                                                              Out of curiosity, how much experience do you have working with large Clojure projects?

                                                              1. 2

                                                                I implemented a ~10k LOC service (specialized in memory cache) in Clojure back before spec was a thing (11 years ago I think?). Prior to that, I only had hobby experience with CL. It was fun to write but hard to maintain.

                                                                1. 1

                                                                  11 years ago there really wasn’t much to help out with tracking types. The first library I can think of that allowed describing the shape of the data would be schema, and that came out in 2013. I also find that code style plays a big role in maintainability.

                                                                  I’ve seen beginners write fairly impenetrable Clojure before, so if you were new to the language and working on a sizeable project I can see how things got messy. I’ve written some code I’ve regretted myself as well. My approach was to pay attention to the parts that I had trouble maintaining, and to adjust my style to make my code easier to follow.

                                                                  I do agree that it’s easier to make a mess using a dynamic language and you have to be more conscious about breaking things up. On the other hand, I find that statically typed code can get differently impenetrable. I’ve worked with Java for around a decade before I started using Clojure and I’ve seen some incredibly gnarly code. I’ve also never managed to contribute to a single open source project. Any time I’d open one up and try to add a conceptually simple fix, I’d be overwhelmed by all the classes and indirection. On the other hand, I’ve contributed to numerous Clojure projects and many people have contributed to projects I maintain.

                                                                  1. 1

                                                                    I don’t think the overabuse of massive class hierarchies is an issue with static typing (given many statically typed languages aren’t even using objects), this is more a problem with Java where a class/object is/was essentially the only abstraction mechanism so everything has to be forced through this. Any language (like Clojure) with first-class functions can avoid a lot of the headache.

                                                                    1. 1

                                                                      Types encourage coupling by virtue of types being global constructs and I suspet that’s why projects tend to be developed in monolithic style in statically typed languages.

                                                        1. 14

                                                          People complain all the time about how verbose the Java type system is. I mean, what about this kind of code:

                                                          List customers = new ArrayList();
                                                          

                                                          Do I really have to say it twice?

                                                          That’s a disingenuous example. Java gained support for the var keyword in March 2018 with the release of Java 10:

                                                          var customers = new ArrayList();
                                                          

                                                          What’s more, one might meaningfully choose to write List over var to communicate that the rest of the code should not rely on the unique behavior (performance characteristics or unique methods) of the ArrayList as compared to other List implementations.

                                                          A lot of people (myself included) argue that the Java type system gets in the way more than it helps. […] You give up the small amount of safety for a huge amount of flexibility.

                                                          Given that I just refuted the only example the article gave of a problem with Java’s type system, I think this argument needs expansion. I recognize that Java’s type system has limitations, such its single-dispatch that necessitates the cumbersome Visitor pattern, but I’m not convinced that a large codebase would be better off sacrificing Java’s compile-time type safety to use Clojure. (Of course, other statically typed JVM languages might be even better than Java.)

                                                          1. 11

                                                            Another feature that Clojurists like to claim as a feature is Clojure’s nil handling and I have to strongly disagree.

                                                            Yes, you avoid a NullPointerException where you try to use a nil value, but instead nil quietly continues propagating through your program, being part of maps, transforms of maps and at some point something falls over because the value that you expected is nil but that’s not a valid value, so you have to trace the entire program back to where the nil actually originated and see why that was wrong and fix it in that place.

                                                            This combined with the fact that it is way too easy to get a nil in regular Clojure code (because getting a non-existing value out of a map will give you that unless you insist on a sentinel) makes it basically the Clojure equivalent of the infamous “undefined is not a function” error. You can be extremely defensive and to Go style “if error” checks (which due to Clojure’s macro system would be more bearable than in Go), but I really don’t think this “on error resume next” strategy is a strong point of the language.

                                                            1. 4

                                                              I really like Clojure and I think its reliance on nil punning is absolutely one of the most boneheaded “features” of the language. It feels like it was designed exclusively to look good in a show floor demo, but spending just a little time with it makes you realize that it’s error-prone in the ways that you mention and it isn’t semantically illuminating either. I chafe every time I see or type the idiomatic (if (seq collection) true-case false-case) to test whether collection is empty, because I get the feeling that someone thought it was a cleverly elegant way of expressing that condition. It’s not. It’s really, really not.

                                                              1. 4

                                                                I really like Clojure and I think its reliance on nil punning is absolutely one of the most boneheaded “features” of the language.

                                                                +1 to that; the nil punning is definitely one of my pet annoyances with Clojure. However, it seems that many people feel differently. It inherited the nil punning from Common Lisp, where it’s also pretty (har har) common to nil-pun (for instance, (car nil) returns nil). But another problem is that Clojure doesn’t go all the way. There are several builtins that simply forward to a native call and those will raise a NullPointerException. There’s not really any rhyme or reason to it, you basically have to know which ones will pass through the nil (most will) and which will not (some surprising ones will not, for example most of the string functions, even though strings can be seen as collections).

                                                                (if (seq collection) true-case false-case)

                                                                I never got why that was considered idiomatic either. How is (if-not (empty? collection) true-case false-case) any less readable?

                                                              2. 2

                                                                I’ve been working with Clojure for around a decade now and nil punning has never been a real problem in practice in my experience. What actually happens is that you just let the nils flow through the code and you do validation at the edges. Nowadays, you’d also use Malli or Spec to define the schema at the API level. If you’re nil as an error then you’re not really writing idiomatic Clojure.

                                                                1. 1

                                                                  This is the canonical answer that many issues with Clojure get: “you should’ve done it differently”, which while obviously true, I should just not have created bugs, but practically not helpful.

                                                                  I would rather see these things being acknowledged and tackled rather than played down. To me this is the canonical “I can run with scissors, as long as I am careful not to fall with scissors (or have prepared cushions that if I fall I don’t hurt myself)”. Not specific to Clojure itself, but I have found the Clojure community to be extremely insisting that that is the right way (imagine Python users all saying that having a GIL is Good Actually™).

                                                                  Yes sure there’s ways to deal with specific issue, like use a library that will only be invented in the future like Malli (2019) or Spec (1.9, 2017, still called “alpha”) which both came pretty late to the Clojure (2009) world and Schema which came earlier (2013) but is dead now but if the solution to this is validation of all intermediate maps then Clojure is missing a convenient language element that guarantees that keys are actually set. On the other hand, if the validation is only at the edges, you only get to know about it when it the validation fails and then you still have to trace back where that nil originally came from.

                                                                  And sometimes you just have a codebase that’s written this way or other and it generally works so you can either trace up where you accidentally created the nil and fix it or spend many hours of rewriting and adding validation everywhere (bonus points if this is a library that is not written by you, but rather FOSS code where contributing large patches is always a somewhat painful exercise, even if the maintainer is very active).

                                                                  1. 2

                                                                    Every language in existence has its own patterns and best practices. So the argument that Clojure practices are different from what you’re used to isn’t terribly convincing.

                                                                    Different languages make different design choices that have their own trade offs. This is of course the case with nil punning in Clojure as well. However, as I’ve already noted, I haven’t seen this choice manifest itself as an actual problem. If you’re claiming that it is then please show me examples that it is in fact a source of errors. For example, we could look at Github issues for popular Clojure libraries and see how many of these issues trace to nil punning.

                                                                    What you’re doing here is making an utterly unsubstantiated assertion that nil punning leads to errors. Then you take this assertiion and treat is as a fact without providing a shred of proof to support the notion.

                                                                    1. 3

                                                                      What you’re doing here is making an utterly unsubstantiated assertion that nil punning leads to errors.

                                                                      I would say it doesn’t lead to errors, it just makes debugging much more difficult by carrying on with an unexpected value until it crashes at some later point, where you may have no idea where the nil came from.

                                                                      1. 1

                                                                        Clojure development is typically done interactively by connecting the editor to a REPL. My workflow is to continuously run code as I write it and I always know exactly what it’s doing. For example, let’s say I need to get some data from the db, massage it in some way, and send it to a client. I’d write a function to pull the data, run it, look at the data I’m seeing. Next, I’ll pass it to the function to transform it, and look at the result there, and so on. At each step I only need to worry about the current transformation I’m making and the state of the data in the last step.

                                                                        As I’ve mentioned in another comment, thinking of nil is a wrong value is not the right mindset here. A better way to look at it is that you’re querying into the data structure and you may or may not get a result.

                                                                        1. 1

                                                                          In my experience, you tend to be a lot more “rough” about what you try out in the REPL. Typically those are couple of variations of the happy path. This means you won’t be testing what happens when some part of the input you’re expecting to mostly be there will be missing (thus yielding nil).

                                                                          Besides, the point was that it’s difficult to debug, which you’ll usually be doing after a report of something happening on production. Or very complex code in development where certain inputs yield nil somewhere along the way.

                                                                          1. 2

                                                                            Any real world application is going to have some sort of regression testing which will catch these kinds of problems. Meanwhile, I’ve been maintaining large apps in production for many years now and your assertions simply doesn’t ring true to me. It’s generally very easy to tell where the problem is based on the stack trace. Vast majority of the time when you see a production issue, the problem will be within a few lines of where the trace leads you.

                                                                            As I’ve already explained, nil should be treated as an expected result, and it’s handled sanely by standard library functions. Meanwhile, your complex functions are just combinations of these functions from the standard library. So, what actually happens is that nils just flow through the execution chain, and then you decide how you want to present them at the edges. This is also where you’d typically use things like spec to do validation and coercion of data.

                                                                      2. 1

                                                                        Have you ever had any problems with Clojure?

                                                                        1. 2

                                                                          Sure, I don’t think there’s a language in existence that won’t give you problems. A few pet peeves I have would be how cons and conj work, the fact that some core functions fail to handle NPE when wrapping Java calls, hot loading of libraries being flaky (although this is more of a JVM problem), and poor REPL experience compared to CL. However, nil punning is simply not an actual problem that has any real negative impact on development or code quality.

                                                                        2. 1

                                                                          Every language in existence has its own patterns and best practices. So the argument that Clojure practices are different from what you’re used to isn’t terribly convincing.

                                                                          The other language I can think of where it is somewhat common to give unexpected answers to wrong input data instead of failing is JavaScript, where it is not considered a good part of the language.

                                                                          You’re making the assertion that is it not a problem by stating that it hasn’t been a problem for you personally in a decade (I’ve also been using Clojure on and off since before 1.0 and it being my favourite language for some time, but so what?), but even people in this thread have mentioned issues with it.

                                                                          I can’t point at specific examples because the examples where I spend a lot of time debugging were in proprietary code bases where you often get to correlated multiple domain “objects” together to form new domain objects. I’d say this is less of a problem in popular Clojure libraries since they’re often wrappers around Java libraries, with a lot less complex data being shuffled around in maps.

                                                                          1. 2

                                                                            The other language I can think of where it is somewhat common to give unexpected answers to wrong input data instead of failing is JavaScript, where it is not considered a good part of the language.

                                                                            Except that Clojure gives expected answers. As I’ve already pointed out, the only issue here is that your expectations don’t match how the language works. The way to think about it is that you’re making a query into the data structure, and the query either returns a value when present or nil when there isn’t one. This isn’t an expected answer.

                                                                            You’re making the assertion that is it not a problem by stating that it hasn’t been a problem for you personally in a decade (I’ve also been using Clojure on and off since before 1.0 and it being my favourite language for some time, but so what?), but even people in this thread have mentioned issues with it.

                                                                            I’m saying that it hasn’t been a problem for me personally, it hasn’t been a problem for other people I know working with the language, and I haven’t seen it be a problem in many libraries I use and have contributed to over the years.

                                                                            I’d say this is less of a problem in popular Clojure libraries since they’re often wrappers around Java libraries, with a lot less complex data being shuffled around in maps.

                                                                            There are plenty of Clojure libraries that do lots of complex data manipulation. I work in medical domain and I have to work with lots of complex data such as FHIR all the time.

                                                                1. 11

                                                                  If I’m reading this article correctly, glibc is compliant by default when compiling for 64 bit architectures, it is only when building for 32 bit platforms that it does not use the new flag. The article makes it sound like most GNU/Linux systems are going to explode, but given that many distros (including my stomping grounds of Arch) aren’t even building for 32 bit platforms any more this might not turn out to be that big a deal.

                                                                  1. 16

                                                                    A better title would’ve been “glibc in 32 bit user space is still not Y2038 compliant by default” as suggested by someone on HN, which would be less clickbait.

                                                                    1. 4

                                                                      Based on previous posts submitted here, the author of the blog seems mainly interested in making posts that highlight specific deficiencies in glibc vs musl and using that to imply that you should never use glibc for any reason ever.

                                                                      1. 2

                                                                        I have made the same observation, with Alpine the obviously superior distributions, why aren’t all people using Alpine?

                                                                      2. 4

                                                                        A more accurate headline would be ‘being Y2038 compliant on 32-bit platforms is an ABI break and glibc requires you to opt into ABI-breaking changes’. Any distro that wants to do an ABI break is free to toggle the default (though doing so within a release series is probably a bad idea). Given that none of the LTS Linux distros has a support window that will last until 2038, it isn’t yet urgent for anyone.

                                                                        1. 3

                                                                          “glibc in embedded/I(di)oT will bite you in 2038”

                                                                        2. 7

                                                                          Some embedded boards on x86 / 32bit ARM deployed right now will still be working into 2038. This is about them.

                                                                          1. 12

                                                                            Sure. But that brings up two things the article should have addressed:

                                                                            1. State the scope of the problem rather than generalizing to all GNU/Linux except Alpine.

                                                                            2. Note that fixing the compiler may or may not fix boards that are already deployed anyway, the stuff that is likely to still be running in 17 years is also the stuff that never ever gets firmware updates. The real issue here is “what has been deployed before compilers started fixing this” and/or “what is currently being deployed to a never-updated long term deployment without proper compiler options turned on”.

                                                                            1. 3

                                                                              Fortunately the share of embedded Linux systems still using glibc is tiny.

                                                                              1. 4

                                                                                Quite so! And of those that do, the number of them that are 32 bit and don’t get upgraded ever is also tiny. Maybe a single system in a non critical role, like a greenhouse watering system watchdog, actually falls under this criteria.

                                                                              2. 2

                                                                                Fortunately there’s more awareness about things like that in embedded development. It’s not perfect of course, but you tend to deal with custom glibc and similar issues more often, so a lot of people deploying things that depend on real dates today will know to compile the right way.

                                                                            1. 1

                                                                              The video game Startopia had a very cute feature in its UI. There are time sensitive notifications in that game, which you either react during a short period where they’re relevant, or you miss out on whatever they’re telling you about. e.g. “We’re passing through a solar, would you like me to reconfigure the photovoltaics to get us some free energy?”

                                                                              The way this gets treated in the UI is that there’s a queue of icons on the left side of the screen, one for each notification. If you click on one you’ll get a little popup providing info or asking for a decision. New icons drop in from the top. When you deal with an icon or it expires by itself it fades out and slides away, then any icons above it drop down. Each icon has a picture (that represents what kind of thing it is) and possibly a colour code (I can’t remember if they used colour coding to indicate severity of an event).

                                                                              1. 1

                                                                                That’s kinda how notifications work on Android. I use Signal and if I see a notification on the destop client the notification on the phone is cancelled and disappears as being irrelevant.

                                                                                1. 1

                                                                                  Oh cool! I haven’t seen that in action but I suspect it may just be that none of the apps I use ever bothered to explicitly support it.

                                                                              1. 4

                                                                                I’ve had my sights on Yocaml for a while but this kind of thinking makes me want to try it even more. I’m thoroughly enjoying everything I am reading here so much.

                                                                                1. 38

                                                                                  A company “bought” Audacity and added spyware. The same company also did it to MuseScore.

                                                                                  You know, it really was and still is a stretch to describe basic, opt-in telemetry as spyware just because they made the unfortunate decision to use Google Analytics as a backend.

                                                                                  1. 19

                                                                                    Also, from what I heard they are doing decent work, actually paying maintainers to work on the software. You know, the exact thing that OP is complaining about not happening.

                                                                                    1. 5

                                                                                      please explain how Google Analytics isn’t spyware? it is software that monitors user behavior and reports it to a 3rd party, all typically without user consent.

                                                                                      1. 20

                                                                                        Audacity/GA would be spyware if it was monitoring usage of other things the user was doing on their computer. Using the term to describe the app recording usage of itself is hyperbole.

                                                                                        1. 5

                                                                                          If my business was audio engineering, having a tool that started reported on my usage of it would be problematic. I would immediately start looking for alternatives. Why should I have to look through the code to find out exactly what it’s logging? File names? My use of licensed plugins? The inference that the lead singer needs pitch correction on every single track, or that we brought in a pro “backup” singer who is actually 85% of the lead on the final mix?

                                                                                          When I am editing my family’s amateur instrumental work, I think I can reasonably feel equally peeved at having my sound editor report back to base.

                                                                                          Calling it spyware is not necessarily hyperbole.

                                                                                          1. 5

                                                                                            Fortunately the scenario you described doesn’t exist since the telemetry is opt-in.

                                                                                        2. 19

                                                                                          all typically without user consent

                                                                                          Except here it is opt-in, as pekkavaa said.

                                                                                          1. 2

                                                                                            thanks, i missed that.

                                                                                            I was curious what kind of consent was involved, and honestly it’s better than I expected. Based on the issue linked in the OP it seems Audacity now displays a dialog asking users to help “improve audacity” by allowing them to collect “anonymous” usage data. They don’t seem to mention that it also reports this to Google.

                                                                                          2. 8

                                                                                            Counting how many people clicked the big red button and bought products, or how many users have a 4K monitor, or how fast the page loads technically involves monitoring.. but it’s not really the same as what you would typically imagine when you hear the word “spying” is it?

                                                                                            It’s rather silly to equate performance metrics, usability studies and marketing analytics to a secret agent carefully reading all your messages.

                                                                                        1. 1

                                                                                          I’m glad for the people this project helps, but personally, I really don’t like touchpads? To the point that I don’t really understand what people who like one touchpad better than another like about them.

                                                                                          1. 2

                                                                                            It could be also that you have never used a good touchpad? Comparing the sad excuse of a touchpad in my 2021 T14s with the 2015 MBP is like day and night. I am wondering how comes that all other hardware manufacturers have completely dropped the ball on building good hardware and just left the field to Apple.

                                                                                            It’d be even ok if they didn’t innovate, just copy what Apple did well but no, the touchpad on the T14s is essentially the same as the one in the X220 from 10 years ago.

                                                                                            1. 1

                                                                                              It could be also that you have never used a good touchpad?

                                                                                              Probably? But I’m also not sure what, if anything, I’d do with it if I had one.

                                                                                              Could you tell me what you like about the MacBook touchpad?

                                                                                              1. 4

                                                                                                The MacBook trackpad feels as precise as a mouse and is really big so you don’t run out of room. I think it’s that simple. Other trackpads usually feel imprecise (eg when you go to press the trackpad to click something, the cursor moves a few pixels causing you to click slightly off where you intended OR it initiates drag&drop).

                                                                                                I prefer mice but I like these things about trackpads:

                                                                                                • gestures, eg two/three/four finger swipe. Makes things like virtual desktops a little nicer.
                                                                                                • it’s closer to the keyboard, so slightly lower context switching costs
                                                                                                • it works in mobile contexts where a mouse won’t (which is obviously why laptops have them)
                                                                                                • can help people who have rsi related to their mouse use. A friend fixed his shoulder by switching to a trackpad. I’m not saying trackpads are more ergonomic or less prone to causing rsi, just that they use different motion and therefore might help.
                                                                                                1. 1

                                                                                                  it’s closer to the keyboard, so slightly lower context switching costs

                                                                                                  I use the pointer so infrequently that I noticed I started moving just my thumb from the space bar down to the touchpad a lot of the time. I’d love the Lenovo nipple instead, but this is a close second in terms of switching speed.

                                                                                                2. 1

                                                                                                  There’s a few plusses for the macbook/apple trackpad hardware:

                                                                                                  • Feel - the textured glass they’ve used has generally felt better since the unibody macbook of ~2010.

                                                                                                  • Gestures for desktop management as altano said - it has a better spatial mapping when switching virtual desktops. I tried using a mouse for a week recently and noticed my productivity drop substantially.

                                                                                                  • Feel on magic trackpad 2 and 2016- macbooks - these don’t use a mechanical button and instead pair sensing finger pressure with haptic feedback. This means you can click/move around using just the upper area of the trackpad.

                                                                                                  Other vendors may be catching up, but it took nearly a decade. A rough timeline:

                                                                                                  • 2005: fingerworks acquisition by apple https://en.wikipedia.org/wiki/FingerWorks
                                                                                                  • 2007: iphone
                                                                                                  • 2009ish: macbook unibody with buttonless trackpad
                                                                                                  • 2017: windows ‘precision touchpad’ requirements start to get introduced.
                                                                                            1. 16

                                                                                              Second paragraph and I’m already mad.

                                                                                              Rule 8: Flags represent nations, not languages – so don’t use flags.

                                                                                              Some obviously controversial flags: United Kingdom, Spain, France, Portugal. These examples have more speakers outside the origin country than within and is a very Euro-centric, colonial viewpoint of language to use any flag whatsoever. Not to mention, many countries have more than one language which further propagates stereotypes or belittlement of minority groups inside those countries.

                                                                                              Luckily the Steady site doesn’t break this rule, just the blog entry.

                                                                                              1. 12

                                                                                                The reason flags are used is that if a website is in a language you do not understand you may not otherwise know where to click to change the language, or recognise the name of your language. The word for “English” in Russian is “английский”. Are you going to know to click on that unless there is a American or British flag next to it?

                                                                                                Everyone knows that people get het up about flags. Flags are used despite this for usability reasons.

                                                                                                1. 22

                                                                                                  That’s why the dropdown for language selection should list the name of each language in that language. Deutsch, English, Espanol, etc.

                                                                                                  1. 12

                                                                                                    My favorite “bug” I saw lately around this was a county drop-down that was translated to German but the sort order was still in English. So Germany (“Deutschland”) was not under “D”, but under “G” right after Gabun, where it is in the English sorting. Very confusing.

                                                                                                    1. 6

                                                                                                      This can also be fun for country names. Sending something to someone in France, I had to find the UK in a French-language drop-down. At school, I learned a few variations on how the country name is translated into French, this web site introduced me to a new one.

                                                                                                      1. 6

                                                                                                        Le Royaume Uni I suppose?

                                                                                                        The UK is a hard nut in these forms. I often try a number of options, but I can’t complain when even the Olympic team uses the wrong name (“Team GB” - the UK is not just Great Britain).

                                                                                                        1. 1

                                                                                                          A bit tangential, but UK government forms really threw me for a loop the first time I used one, as it’s the only place I’ve seen the adjective form of nationality used for the Citizenship/Nationality field. When listing my citizenship for visa/etc. purposes, on most countries’ forms it’s just a drop-down of country names. So usually you can find the USA under U somewhere (United States, USA, U.S.A., etc.). But for gov.uk it was under A for American instead (UK was likewise under B, for British). I’m not too knowledgeable about the details, but I assume this has something to do with the complexities of British nationality.

                                                                                                      2. 4

                                                                                                        Sure, you just need to find the “язык” dropdown. Should be easy as the currently selected value will be русскийрусский which is obviously wrong.

                                                                                                        1. 1

                                                                                                          Yes! Languages get closer to nationalities than most other pictograms. I couldn’t know to pick a picture of Spain’s boarders to change language, nor would I know to click on the alphabet (which doesn’t work for languages without alphabets). And flags help. Then, you say what the language actually is in the drop down so you can select it…

                                                                                                          Other rejected pictograms: Official bird View from the capitol Airport code Biggest company based there Slowly moving language names

                                                                                                      3. 8

                                                                                                        As sibling noted, obviously they should be in the native language spelling (or maybe put both). With Spanish being the US’s #2 most spoken language (no official language), should those Spanish speakers not count and find it odd they speak Spanish daily and click the US flag where they live and get English? Should they look for a flag of Spain? Or Mexico? Or their birth country (which is likely missing)? “español” + es is very clear (even if all dialects aren’t yet translated) and doesn’t have the same degree of political baggage as flags and countries do. When people migrate – and they do a lot in the 21st century – their languages come with them because languages belong to the people and flags belong to the nation.

                                                                                                        But do you really think people really know their flags? I don’t think this assertion is true. Which of these is Poland: 🇲🇨 🇵🇱 🇮🇩? Romania 🇦🇩 🇲🇩 🇷🇴? Ireland 🇨🇮 🇮🇪? Bolivia 🇧🇴 🇬🇭? Mali 🇸🇳 🇲🇱?


                                                                                                        But imagine if a user could send their preferred language through the user-agent and the server or browser could choose a ‘good’ default for them … Accept-Language sounds like a good name for this, maybe even navigator.languages. That would be better than what Google does: ignoring my request and mislabeling me based on IP instead.

                                                                                                        1. 3

                                                                                                          If you did user research on American Spanish speakers I wonder how many be confused by the American flag being used to denote English. Have you ever tested this?

                                                                                                          I think using Accept-Language by default would be a big improvement though it’s not a panacea. To some extent it just punts the issue to the browser. Changing your language in most browsers requires you download a language pack which you won’t have permission to do in internet cafes. Maybe that is no longer a problem now people have smart phones?

                                                                                                          1. 4

                                                                                                            Changing your language in most browsers requires you download a language pack

                                                                                                            changing the Accept-Language header does not require any downloads. It is just a string that gets send. The browser UI stay as is.

                                                                                                            1. 1

                                                                                                              your browser will use the language defined by the OS 99% of the time

                                                                                                              1. 4

                                                                                                                Chrome and Firefox have easy to use setting to change the language header that you send to websites. There is nothing you have to install. You do not need admin rights for that. This has worked like this for the last 2 decades at least. That is what I am referring to.

                                                                                                                If websites ignore the header, that is not a problem of the browser, but our industry.

                                                                                                        2. 5

                                                                                                          I live in India. We have at least 13 languages that have 10+ million speakers, and hundreds of minor languages in active use by smaller communities. Indian currency notes have text in 15 languages. From what I understand, there are several other countries with this kind of linguistic diversity (Nigeria, Pakistan, Indonesia, to name a few).

                                                                                                          Using flags to represent languages is a Western European notion. I personally find it both disrespectful and confusing.

                                                                                                          1. 6

                                                                                                            Using flags to represent languages is a Western European notion. I personally find it both disrespectful and confusing.

                                                                                                            It’s worse than that. It’s not just that it’s a Western European notion, the equivalence of language and country is one that has been specifically pushed by majority groups to marginalise minorities. Ask folks whose native language is Gaelic, Welsh, Breton, or Catalan, for example what they think of the equivalence and you’ll get a very different view.

                                                                                                        3. 6

                                                                                                          I think that is because they developed it for the European market, as their title suggests, and to illustrate their text with emoji/icons.

                                                                                                          1. 5

                                                                                                            for the record: the use of flags to signify languages has since been corrected in the article

                                                                                                            1. 2

                                                                                                              You love to see it :)

                                                                                                              1. 8

                                                                                                                nah actually i hated to see it 🙃 but instead of whining here i asked the author to reconsider… and it got fixed

                                                                                                            2. 3

                                                                                                              The screenshot uses a flag for German/“Deutsch” which I’ve never seen before, and German is my first language :)

                                                                                                              1. 4

                                                                                                                To quote the article:

                                                                                                                First and foremost, and this is why this example has been used in this particular post, Revolve has bizarrely ended up with the flag of the United Arab Emirates for German

                                                                                                              2. 2

                                                                                                                What’s controversial about the Union Jack representing English, a language born of and primary to that soverign country?

                                                                                                                1. 20

                                                                                                                  The Union Flag is the flag of several distinct political entities that have different sets of official languages:

                                                                                                                  • England does not have an official language, though practically English is a de-facto standard.
                                                                                                                  • Wales has English and Welsh as official languages. All official communications are required to be bilingual and some (such as tax things from HMRC) are bilingual for the whole of the UK as a result.
                                                                                                                  • Scotland has recognised Scottish Gaelic as an official language since 2005 and has had English as an official language since before then, though this recognition does not require government communication to be delivered in Gaelic and so has little effect. Scots (derived from Northumbrian Old English) is also supported by the Scottish government.
                                                                                                                  • The story of Irish Gaelic is very complicated because the English made an effort to marginalise it for a long time (the history of Ireland is largely omitted in English schools, on the basis that it’s just too embarrassing for the English). It now has similar status in Northern Ireland to Gaelic in Scotland.

                                                                                                                  So the flag points to at least three distinct language families and several overlapping ones. Only Wales (which is covered by the flag, but whose flag is not represented, in spite of being the part of the UK with the best flag) has a notion of an official language that carries any significant legal weight and it places English and Welsh on the same level.

                                                                                                                  You could probably use the George Cross to represent en_GB, although both Cornish (Celtic-family) and Scots (mostly the same ancestry as modern English, i.e. a creole of every language spoken by folks who invaded England over a period of a thousand years or so) originated in the area represented by that flag. Either way, you’re marginalising speakers of minority languages.

                                                                                                                  1. 2

                                                                                                                    I didn’t say anything about official languages or political entities, which is almost exactly my point. Primarily, British English is spoken throughout the United Kingdom, the soverign country in which it developed to the standard of English which was then spread throughout the world. The flag points to multiple regions with different languages, none of them as immediately relevant as the English language - you don’t see the Union Jack and think of Cornish. If the language was Scots, use the Scottish flag. If the language is Gaelic, use the Irish flag (or Ulster Banner, lol). To feign shock and horror at the Union Flag representing the history and origin of the English Language is inane.

                                                                                                                    1. 6

                                                                                                                      If I clicked the Scottish flag, I could be wanting either Scots or Gaelic, as mentioned by david_chisnall. Likewise, if I scanned for the word Gaelic, I’d personally be expecting Gàidhlig, not Irish. When it comes to English, there’s like half a dozen different flags that may have been chosen that I have to scan for (I have seen UK, USA, Canada, England, and Australia, frequently, and probably others less often), and that’s ignoring any personal feelings I have towards any of those. Country flags and $current_language names for other languages just aren’t the best way to display these things for translation pickers, for multiple reasons.

                                                                                                                  2. 6

                                                                                                                    Two issues:

                                                                                                                    1. The UK is by number of speakers, has the sixth most number of speakers. The language may have come from England, but without a standards body, it’s anyone’s language. The other variants of English are still very much valid and a part of the English language. Picking any of the nations is the wrong call.
                                                                                                                    2. In the weeds, historically England is the kingdom speaking English so if you want to go on history, 🏴󠁧󠁢󠁥󠁮󠁧󠁿 is the flag you are looking for which isn’t nearly as recognizable. Is this the Georgian flag? 🇬🇪

                                                                                                                    How do we avoid this issue? Just say “English” or en.

                                                                                                                    1. 4

                                                                                                                      It doesn’t reflect all the other kinds of english spoken by the far majority of the world. We even call it “British English” to distinguish it from other flavours of English like American, where there’s a number of spelling and pronounciation differences (these distinctions even get taught in school in non-english speaking countries).

                                                                                                                      1. 1

                                                                                                                        hunspell lets you choose ‘-ise’ vs ‘-ize’ for British English, en-GB.

                                                                                                                        1. 1

                                                                                                                          There’s also words that differ between American and British English.

                                                                                                                          1. 3

                                                                                                                            That part is obvious but I think people forget how much diversity their is inside borders.

                                                                                                                            1. 1

                                                                                                                              Oh, absolutely. British English is pretty well-known for that since there is a wide variety of English spoken between Scotland and South England.

                                                                                                                              Similarly Danish has different amount of grammatical genders between the islands. It is all the same Denmark with the same flag.

                                                                                                                        2. 1

                                                                                                                          And for American English, a U.S. flag is oft used. Perhaps one should’ve been used in the article, but having not used Steady, I wouldn’t know.

                                                                                                                          1. 10

                                                                                                                            What language would you expect behind a Belgian flag? French or Flemish? Similar goes for Swiss flag. Or Indian flag.

                                                                                                                            1. 3

                                                                                                                              What language would you expect behind a Belgian flag? French or Flemish?

                                                                                                                              German of course! https://en.wikipedia.org/wiki/German_language#German_Sprachraum ;-)

                                                                                                                              BTW, Flemish is a dialect, the official language is Dutch.

                                                                                                                              1. 1

                                                                                                                                The language most spoken in Belgium, obviously.

                                                                                                                                1. 2

                                                                                                                                  It is a 55% vs 39% percent split, which part do you want to alienate by implying their language isn’t Belgian?

                                                                                                                                  1. 2

                                                                                                                                    That’s not the implication at all, it’s not making a comment on the validity of the non-majority language.

                                                                                                                      1. 35

                                                                                                                        Agreed. I’m for software to be fun in general, but the foundational stuff should stay boring. Bridges, airplanes, and stop lights should also stay boring. They can be beautiful if you want, but I don’t want them to surprise me.

                                                                                                                        Related: https://github.com/ansible/ansible/issues/10530

                                                                                                                        1. 30

                                                                                                                          Every once in a while I get a feeling that maybe I should have dropped my childhood dream of becoming a programmer when I had the chance, and that it’s still not too late, I can just go get certified and become an electrician instead. This is one of those moments because I swear to God reading through that thread makes it feel like the software industry is bipolar.

                                                                                                                          On the one hand, yes, cows filling your screen is unprofessional, and it’s one of those things that can unexpectedly fire off during a demo and, to quote one of the commenters, “[make] it look as though the product designers are not taking their role seriously”.

                                                                                                                          On the other hand: this is all being debated on Github, the pinnacle of professional collaboration, whose fsckin logo is a cartoon octopus-cat, and whose homepage features an astronaut, um, cat, I guess? looking at a cartoon animation of Earth, and whose docs page features a cartoon of squirrels chasing someone running while holding a human-sized pencil. I mean there young adult cartoons out there whose homepages look more serious, if I had to guess Github’s target audience… based on the cutesy cat, my first instinct would be 6-9 year-olds. Is Github really that popular in kindergartens and elementary schools that it’s worth designing the whole UI like that?

                                                                                                                          Good thing people aren’t opening Github while giving demos…

                                                                                                                          1. 19

                                                                                                                            I kept wondering what kind of awful companies these people work for that having cows show up on the screen during a demo would be an instant fireable offense! Sounds like a dystopian hellscape to me.

                                                                                                                            1. 10

                                                                                                                              For real. I’m tired of mega-corp-HR-department types getting to decide what’s okay for the entire industry. I understand the point of view of the OP and cURL, and I respect that. But I have nyan cat scroll bars in my editors, sometimes put jokey things in my mockups, and even name my internal work projects funny names (yes, management does know the names, and yes, they actually say them at meetings! XD). None of this is disrespectful or offensive or anything like that. It’s just if I’m asked to write a tool to send alert emails when a phone call goes unanswered, I might name it something stupid like “PhoneNagger” (maybe not that because the phonetics are a little risky, but you get the idea).

                                                                                                                              It’s either me being juvenile or perhaps it’s my background in academia, because I remember going to conferences and seeing math professors walking around in sweat pants while discussing way cooler shit than middle-manager-X at YetAnotherWidgetCompany ever did. Yet, Mr. Manager probably has opinions about the professor’s “professionalism”. That just leaves such a bad taste in my mouth.

                                                                                                                              1. 5

                                                                                                                                Hah, wait until they find out the whole provisioning and deployment cycle is done through a program named after a fictitious device from a sci-fi novel, from a company called Red Hat, whose logo is a red fedora. If that doesn’t inspire bullet-proof, rock-solid confidence and stern, military-like professional discipline, I don’t know what does.

                                                                                                                                1. 2

                                                                                                                                  I am not sure that prussia-style skulls & bones symbolism would make it a more professional discipline. Better engineering practices would though, and they can keep their astronaut cats with red fedoras.

                                                                                                                                    1. 2

                                                                                                                                      Unfortunately they abandoned that really cool logo in favour of, uh, how does the phrase go, a more streamlined design. It’s really just a boring red fedora now.

                                                                                                                                    2. 2

                                                                                                                                      Absolutely, what I’m getting at is that the whole “it’s unprofessional” thing, of which the cowsay debacle is just a symptom, is just a highly pseudo-efficient kind of bikeshedding – it’s efficient as in nobody wants to argue against something being removed because it’s not professional, but it also generally leads to no improvement at all. Arguably, Lockeed Martin’s planes would fly as right with or without the Skunk logo on the buildings, to cite just another example of something that meets every checklist of “unprofessional” but nobody gives a damn about.

                                                                                                                                2. 5

                                                                                                                                  The complaint isn’t that cowsay is childish, it’s that it’s surprising. GitHub’s illustrations are ridiculous, but they’re consistent. The problem would be if their illustrations only became ridiculous in some web browsers or if you had some specific program installed.

                                                                                                                                  1. 4

                                                                                                                                    I’m pretty sure the person who had nightmares about getting fired over it was agonizing over the appearance of cowsay, not their inability to predict whether the ASCII bovine would visit the terminal or not (which, in fact, isn’t hard to determine, either). I imagine there’s not much of a chance of getting fired over things like temporary connection timeouts, mistyping your password at the sudo prompt, or the occasional segfault of early-stage applications, all of which routinely happen during demos and don’t exactly follow a strict timetable, either :-D.

                                                                                                                                  2. 4

                                                                                                                                    The article was not about fun logos. It was about not allowing irrelevant code in a core application, to avoid the overhead of reviewing and maintaining that code.

                                                                                                                                    1. 3

                                                                                                                                      When you’re not logged in it does look kinda weird and could be confused with kerbal space program. But other than that: It’s FaMiLy FrIeNdLy

                                                                                                                                      1. 5

                                                                                                                                        That extremely punchable cat (words I never thought I’d utter, man, I love cats!) is indeed shown only if you’re logged out but the rest of the cartoon characters are everywhere. And it’s not just Github, either, surfing corporate web in 2021 feels like flipping back and forth between Disney Channel and the CNBC business news, it’s cute and nauseating all at the same time!

                                                                                                                                  1. 2

                                                                                                                                    I am a bit out of the loop, does this mean that GDC has finally become part of GCC? If so, congrats to Iain Buclaw who has been working on this since years and years! Glad it has finally paid off.

                                                                                                                                    I was quite impressed with D when I read the D book but I fear that now with Rust it is too late for broad adoption since they seem to serve similar niches.

                                                                                                                                    1. 3

                                                                                                                                      Does this mean that GDC has finally become part of GCC?

                                                                                                                                      Yes, support for the D programming language has been added to GCC, and got released with GCC 9 in 2019.

                                                                                                                                      1. 1

                                                                                                                                        I looked at D almost 20 years ago but the fact that the only reliable compiler was the Digital Mars D compiler and it had limited platform support put me off. Now, D has GCC and LLVM front ends that are actively maintained (is the Digital Mars implementation still going?). Rust still has a single implementation (though others are in progress), so D has some advantages here.

                                                                                                                                        Looking at the Wikipedia page, I think the biggest problem with D is that it is now quite a dated language. It solves problems that I had with C++98 and is very much an object-oriented language. Languages like Rust and modern C++ are very much compromises picking the bits of object orientation, functional programming, and generic metaprogramming that work and letting you adapt them for the problem at hand.

                                                                                                                                        1. 2

                                                                                                                                          very much compromises picking the bits of object orientation, functional programming, and generic metaprogramming that work and letting you adapt them for the problem at hand

                                                                                                                                          Honestly that describes D too. In any case, I wouldn’t say that D is “very much” an OO language. It has OO (Java 5 style) in the language, true, but you don’t have to use it if it doesn’t solve your problem.

                                                                                                                                          I mean, for example D had ranges before they were cool :)

                                                                                                                                          1. 2

                                                                                                                                            There are 2 capabilities that, in my view showed, that D can advance with time:

                                                                                                                                            a ) Sub-setting the language to have narrower capabilities, in exchange for wider cross-language integration/interfacing opportunities:

                                                                                                                                            https://dlang.org/spec/betterc.html

                                                                                                                                            b ) Compile time programming: eg

                                                                                                                                            https://wiki.dlang.org/User:Quickfur/Compile-time_vs._compile-time

                                                                                                                                            Certainly, plugging gaps in C++ as a product-roadmap, hindered language formalisms and its runtime. But having the language now to be part of GCC, while still maintaining separate backends – is a big deal, and perhaps could put D closer to the top of the list for some larger projects.

                                                                                                                                            I also think specifically full-featured compile-time programming, could be a way to integrate a language with a new breed of formal verification tools (although this is just a thought at this point).

                                                                                                                                        1. 7

                                                                                                                                          Tvix and Guix in the same tag?

                                                                                                                                          1. 10

                                                                                                                                            Linux gets tagged unix despite technically not being one, so I guess it is close enough for anyone to care.

                                                                                                                                            1. 8

                                                                                                                                              sure, we can call it “nix-family” or something I guess

                                                                                                                                              1. 13

                                                                                                                                                Maybe too cute: nix-ish

                                                                                                                                                1. 5

                                                                                                                                                  Maybe nix-y?

                                                                                                                                                  1. 3

                                                                                                                                                    ix

                                                                                                                                                    1. 2

                                                                                                                                                      ix is *nix-y but not nix-y. IMO “nix” was a poor choice of name that was bound to cause confusion eventually.

                                                                                                                                                2. 4

                                                                                                                                                  In that case why not make it more general and call it e.g. “package-management”? That would encompass not only nix, but also guix, tvix, dpkg, yum, portage, chocolatey etc.

                                                                                                                                                  It’s a lot more broad than just “nix”, but so are most of the other tags on Lobsters, with the exception being programming language tags. Maybe it could be combined with a new tag “operating-system” for NixOS/GuixSD.

                                                                                                                                                  1. 22

                                                                                                                                                    I think that nix is so different that it should not be lumped together with other package managers

                                                                                                                                                    1. 13

                                                                                                                                                      I agree. While nix is technically a package manager, it has a vastly different approach to it. I’d go ahead and call the tag nix and post nix and nix-related things under it, and only if and when the GUIX people consistently take over that tag, at that point we can consider creating a tag for them too, but not before. because premature optimisation is the root of all evil.

                                                                                                                                                    2. 19

                                                                                                                                                      Every time a nix tag gets suggested, consensus seems to fizzle out as we discuss what the best name for an inclusive tag would be.

                                                                                                                                                      At this point, I’m willing to stick with nix and not let perfect be the enemy of the good. We should have had a nix tag years ago!

                                                                                                                                                  2. 2

                                                                                                                                                    I don’t see many Guix stories so it should be a non-issue.

                                                                                                                                                  1. 2

                                                                                                                                                    The list of companies that make up the foundation founders is quite surprising. For as big as PHP was in PHP4 days now the only “big name” I recognize is Attomatic. There’s some companies with their PHP frameworks and a company with their PHP IDE but it seems quite anticlimatic.

                                                                                                                                                    1. 6

                                                                                                                                                      I was surprised to see Facebook absent from that list (given that they have 10MLoC in PHP / Hack and their own open-source PHP JIT) and it makes me wonder if this is an ‘everyone but Facebook’ industry group to try to counterbalance Facebook in the PHP ecosystem.

                                                                                                                                                      1. 5

                                                                                                                                                        No WikiMedia Foundation either.

                                                                                                                                                    1. 3

                                                                                                                                                      I still use gvim for pasting things in scratch files quite a bit. Is there a recommended GUI for neovim these days? I tried one a few months ago, but it was barely usable

                                                                                                                                                      1. 7

                                                                                                                                                        I don’t know if recommended but I’m enjoying neovide quite a bit, for being basically console nvim with small improvements that don’t try to make it into something else.

                                                                                                                                                        1. 4

                                                                                                                                                          I use vimr for this same scenario. I haven’t had any issues.

                                                                                                                                                          1. 2

                                                                                                                                                            vimr++

                                                                                                                                                            I’ll add that the main developer is very helpful even in the face of very out-of-the-ordinary problems.

                                                                                                                                                            1. 1

                                                                                                                                                              I also use vimr as a daily driver and have been happy with it. I’ve also used neovim-qt in the past and that was very solid.

                                                                                                                                                          1. 1

                                                                                                                                                            I used to use the MX Master 1 at work and liked it so much that I got an MX Master 2 (which is essentially the same product) at home. The USB port is nice because you can charge it easily and continue to use it while doing so (looking at you Apple) but I go months between charging it. So no, the presence of the port does not mean bad battery life.

                                                                                                                                                            1. 1

                                                                                                                                                              Thanks for sharing that, maybe MX Master 3 will be my next mouse then :)

                                                                                                                                                              1. 1

                                                                                                                                                                I loved my MX Master. Slinging the scroll wheel around was quite rewarding. I’ve switched to a Kensington Expert Mouse trackball for now. I was disappointed the logitech vertical and trackball mice had such inferior scroll wheels.

                                                                                                                                                              1. 4

                                                                                                                                                                Really nice to see OCaml’s tooling situation getting a little more… let’s say “modern”! I like a lot of things about OCaml, but I also dislike a couple things quite strongly, and the toolchain used to be one of those things (multiple “standard” libraries is the other).

                                                                                                                                                                1. 5

                                                                                                                                                                  agreed! this thread has a lot of good stuff on the current state of tooling and where it falls short.

                                                                                                                                                                  1. 5

                                                                                                                                                                    There were never multiple standard libraries. Core has a small community of vocal proponents (mostly people associated with Jane Street) and they used the popularity of the Real World OCaml book to promote it. Actual uptake is not nearly as wide as RWO wants you to believe though: https://opam.ocaml.org/packages/core/

                                                                                                                                                                    Batteries, Containers, etc. were never designed as standard library replacements—they are collections of utility functions.

                                                                                                                                                                    The funniest part is that many RWOv1 code samples no longer work with later Core versions. That fact and proprietary license of the RWO content that prevents anyone but the original authors from updating it is the motivation for my ocamlbook.org project, though the writing progress is slow…

                                                                                                                                                                    1. 6

                                                                                                                                                                      OCaml’s standard library has been historically so lacking that there are multiple projects to fix its shortcomings, in different ways:

                                                                                                                                                                      1. A random utils.ml or stdlib.ml file with implementations of classic functional programming functions/data structures that the project in question found useful. For each project you need to know where that file is and what it does.
                                                                                                                                                                      2. Extlib (which calls itself a standard lib), Batteries and Containers extend the standard library in a conservative matter, only extending but never replacing what is in the standard library that was shipped with the compiler. These mostly supplant the home-grown stdlibs but you still have to know the compiler stdlib, and at least one of these libraries and if you change projects they might use Batteries instead of Containers, so you still have something that’s practically a different stdlib. None of them is particularly thriving, most of them are kept alive by a single author (Extlib - ygrek, Batteries - @gasche, Containers - @c-cube).
                                                                                                                                                                      3. There are drop-in libraries for stuff that’s just too handy. Astring, Rresult, Fpath, Ptime, Fmt come to mind.
                                                                                                                                                                      4. There is Base/Core which replaces the standard library with its own conventions. In many ways these would be how OCaml would be written in 2021 but yes, it does break away with compatibility to the OCaml standard library and sometimes with itself.

                                                                                                                                                                      I’d say, yes, there are competing standard libraries in practice. That said, the situation is getting better. In 4.08 OCaml started to have an Option module and a Result module so some of the “code that should be in a standard library” is now moving into the stdlib.

                                                                                                                                                                      proprietary license of the RWO content

                                                                                                                                                                      The book is under CC BY-NC-ND 3.0 US which is probably the most free license you can pick for a book that’s published by a traditional book publisher. I agree it could be better but I’d rather look at it this way: there is an excellent book available for free with the possibility to contribute. And I do think RWO is a lot better than other currently available literature on OCaml, exactly because it is approaching OCaml from a practical and not academic angle.

                                                                                                                                                                      that prevents anyone but the original authors from updating it

                                                                                                                                                                      This is just not true. Writing progress is slow, but thats often the case when there isn’t a dedicated author presumably paid to write. It also currently struggles from the fact that a second edition would most likely be soon obsoleted by changes in OCaml 5.0+.

                                                                                                                                                                      1. 4

                                                                                                                                                                        Here’s the essence of my objection to the approach taken by Yaron and Anil. It shouldn’t be seen as a personal attack on them: I’m not refusing to collaborate with them. I still do think the approach chosen for the RWO book was wrong.

                                                                                                                                                                        1. RWO authors are also one of the key people of the Core/Base project.
                                                                                                                                                                        2. RWOv1 taught people non-standard OCaml by opening Core everywhere and shadowing standard library functions with incompatible versions from Core.
                                                                                                                                                                        3. RWOv1 was made obsolete by changes in Core.
                                                                                                                                                                        4. Due to the license of the RWO text that prohibits modifications, the book ended up confusing beginners with broken examples until v2 was made public on the website and no one but the authors could distribute a modified version with those issues fixed.
                                                                                                                                                                        5. Should they have chosen to at least use Core functions by their fully-qualified names, those readers would be able to understand where those errors were coming from.
                                                                                                                                                                        6. If they chose to stick with the standard library, that wouldn’t be an issue at all.
                                                                                                                                                                        1. 4

                                                                                                                                                                          It sounds very much like most of your concerns are alleviated due to the availability of the in-progress v2 version of RWO online.

                                                                                                                                                                          When I first heard that RWO uses Core I was a bit disappointed as well but from a pedagogical point of view there are some good points in its favor:

                                                                                                                                                                          1. Functions are tail recursive by default, unlike List.
                                                                                                                                                                          2. The “modern” way is the default: exceptionless is the default, unlike _opt in the OCaml stdlib and Exceptionless in Batteries.
                                                                                                                                                                          3. It is comprehensive and quite consistent: Int.Map exists, and so does String.Map etc. No strange omissions.
                                                                                                                                                                          4. Personally I found it designed rather well, with sensible use of data types to make its usage type safe. OTOH, the implementation I find often very hard to read.

                                                                                                                                                                          The could’ve stuck with the standard library but then they would need to explain quite often “this was 90ies design and you should make sure to use the new way”, “sorry this is inconsistent, but you can write code to paste over this” etc. Not a good outlook.

                                                                                                                                                                          1. 1

                                                                                                                                                                            Just one data point, I enjoyed RWO (I guess it was v1 if v2 wasn’t finished years ago?) and it greatly rekindled my interest in OCaml and I did not find the Core thing you mentioned to be distracting by a lot. Yes, I’m a beginner and maybe it hasn’t taught me to be an ocaml programmer but I’ve long lost that aspiration by reading a single book anyway. So your criticism may be valid (I can’t say), I still found it a really good book.

                                                                                                                                                                            1. 2

                                                                                                                                                                              I’m not saying it’s a bad book. It’s a good book, just with some unfortunate decisions.

                                                                                                                                                                              I’ll re-iterate why:

                                                                                                                                                                              • Base/Core making incompatible changes made the online book useless for quite a while until the new edition was ready, even though updating just the examples wouldn’t be a lot of effort.
                                                                                                                                                                              • Base/Core’s redefinitions of standard functions using different argument types and order make it impossible to use examples from any other place with together your Core-using code.
                                                                                                                                                                              • I’ve seen beginners way more than one time who asked for help with code that used Core’s versions of functions without disclosing it—they didn’t think they need to say that upfront because the book never told them their code will be incompatible with the standard library. That caused confusion for everyone involved that different wording in the book could avoid.

                                                                                                                                                                              However, none of these would be problems if they used the standard library.

                                                                                                                                                                              You see, I have nothing against Core users. But whatever I think of its design is irrelevant—the point is that it’s not the standard OCaml library, and not even used by the majority of its ecosystem.

                                                                                                                                                                              And it’s simply wrong to teach beginners to code in a way that will create a barrier to reading and contributing to code in the wild, code that is highly unlikely to use Core.

                                                                                                                                                                              I’m sure RWO authors love Core because Core is also their project. But even if they believe that everyone should start using it and no beginner should start without it, they should have at least warned those beginners what the consequences of using it will be and what’s the real situation with standard libraries is.

                                                                                                                                                                              I’m also sure they didn’t mean to intentionally create any barriers and confusion, but I don’t think it makes their choice and the way they presented it (without proper warnings) less unfortunate.

                                                                                                                                                                          2. 3

                                                                                                                                                                            Note: I’m not actively maintaining Batteries anymore, this task is now handled by François @UnixJunkie Bérenger. (I am still contributing occasionally.)

                                                                                                                                                                            Also: The stdlib has been evolving much more actively than in the past (than when Batteries was started, certainly), mostly by adding “obvious” functions to existing modules, without changing much the small scope of the library. I think this is an excellent development, but it also makes life a bit harder for stdlib-extension libraries like Batteries: when a new stdlib function comes up, it may conflict with another extended-library function with a similar name, or exist with another name, which creates growing pains.

                                                                                                                                                                            Personally I think that libraries should move away from big, monolithic libraries, and go towards small special-purpose libraries instead. I’m not sure why Containers kept the monolithic design of previous stdlib extensions.

                                                                                                                                                                            1. 2

                                                                                                                                                                              I would argue that Containers isn’t as monolithic as Batteries 🙂. It is truly an extension, it doesn’t reimplement whole modules the way BatMap does, for example. In addition each module is reasonably self contained, although this has become a bit less true in recent times. But the footprint of Containers should still be very small and you only pay for what you use (modulo a few shim modules). In addition, it started when opam was still quite young and before dune made it easy to maintain a lot of libraries in one repository.