1. 1

    Spherical harmonics are one of the math topics I learned studying physics that have left a lasting impression on me.

    1. 4

      If you are not willing to do that kind of analysis, asking your boss which other topic should be dropped from your tasks is kind of effective.

      1. 2

        Also, plainly asking this quesiton can really make them think; is it your intention for me/team to work late or weekends to accomplish this? And if push comes to shove; even after they worked late last week to make other deadline Y?

        A lot of people can’t conceptualize priorities unless deliberately prompted.

        1. 1

          A lot of businesses nowadays claim to be work agile, so in most places I worked at there is some implementation of Scrum. What I usually tend to set straight when I start in an org is to emphasize the pull-principle, i.e. prioritized backlog, people pull the items from the top. There is a certain magic to it. Devs get more relaxed and leave the office at 5, team leads – not without struggle – learn that not everything can be highest priority, that friction of pushing work items into people’s schedule is replaced by a certain flow.

          Unfortunately, this usually involves refuting a lot of strange interpretations of agile / scrum that (I think) often stem from the consultants hired by the orgs to introduce agile methodologies or give management trainings on it.

      1. 34

        Good talk.

        I recently used systemd “in anger” for the first time on a raspi device to orchestrate several scripts and services, and I was pleasantly surprised (but also not surprised, because the FUD crowd is becoming more and more fingerprintable to me). systemd gives me lifecycle, logging, error handling, and structure, declaratively. It turns out structure and constraints are really useful, this is also why go has fast dependency resolution.

        It violates unix philosohpy

        That accusation was also made against neovim. The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about.

        1. 22

          The declarative units are definitely a plus. No question.

          I was anti-systemd when it started gaining popularity, because of the approach (basically kitchen-sinking a lot of *NIX stuff into a single project) and the way the project leader(s) respond to criticism.

          I’ve used it since it was default in Debian, and the technical benefits are very measurable.

          That doesnt mean the complaints against it are irrelevant though - it does break the Unix philosophy I think most people are referring to:

          Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new “features”.

          1. 30

            If you believe composability (one program’s output is another program’s input) is an important part of The Unix Philosophy, then ls violates it all day long, always has, likely always will. ls also violates it by providing multiple ways to sort its output, when sort is right there, already doing that job. Arguably, ls formatting its output is a violation of Do One Thing, because awk and printf exist, all ready to turn neat columns into human-friendly text. My point is, The Unix Philosophy isn’t set in stone, and never has been.

            1. 7

              Didn’t ls predate the Unix Philosophy? There’s a lot of crufthistory in unix. dd is another example.

              None of that invalidates the philosophy that arose through an extended design exploration and process.

              1. 4

                nobody said it’s set in stone; it’s a set of principles to be applied based on practicality. like any design principle, it can be applied beyond usefulness. some remarks:

                • i don’t see where ls violates composability. the -l format was specifically designed to be easy to grep.
                • the sorting options are an example of practicality. they don’t require a lot of code, and would be much more clumsy to implement as a script (specifically when you don’t output the fields you’re sorting on)
                • about formatting, i assume you’re referring to columniation, which to my knowledge was not in any version of ls released by Bell Labs. checking whether stdout is a terminal is indeed an ugly violation.
                1. 6

                  i don’t see where ls violates composability. the -l format was specifically designed to be easy to grep.

                  People have written web pages on why parsing the output of ls is a bad idea. Using ls -l doesn’t solve any of these problems.

                  As a matter of fact, the coreutils people have this to say about parsing the output of ls:

                  However ls is really a tool for direct consumption by a human, and in that case further processing is less useful. For futher processing, find(1) is more suited.

                  Moving on…

                  the sorting options are an example of practicality. they don’t require a lot of code, and would be much more clumsy to implement as a script (specifically when you don’t output the fields you’re sorting on)

                  This cuts closer to the point of what we’re saying, but here I also have to defend my half-baked design for a True Unix-y ls Program: It would always output all the data, one line per file, with filenames quoted and otherwise prepared such that they always stick to one column of one line, with things like tab characters replaced by \t and newline characters replaced by \n and so on. Therefore, the formatting and sorting programs always have all the information.

                  But, as I said, always piping the output of my ls into some other script would be clumsier; it would ultimately result in some “human-friendly ls” which has multiple possible pipelines prepared for you, selectable with command-line options, so the end result looks a lot like modern ls.

                  about formatting, i assume you’re referring to columniation, which to my knowledge was not in any version of ls released by Bell Labs. checking whether stdout is a terminal is indeed an ugly violation.

                  I agree that ls shouldn’t check for a tty, but I’m not entirely convinced no program should.

                  1. 4

                    just because some people discourage composing ls with other programs doesn’t mean it’s not the unix way. some people value the unix philosophy and some don’t, and it’s not surprising that those who write GNU software and maintain wikis for GNU software are in the latter camp.

                    your proposal for a decomposed ls sounds more unixy in some ways. but there are still practical reasons not to do it, such as performance and not cluttering the standard command lexicon with ls variants (plan 9 has ls and lc; maybe adding lt, lr, lu, etc. would be too many names just for listing files). it’s a subtle point in unix philosophy to know when departing from one principle is better for the overall simplicity of the system.

              2. 25

                With all due respect[1], did your own comment hit your fingerprint detector? Because it should. It’s extrapolating wildly from one personal anecdote[2], and insulting a broad category of people without showing any actual examples[3]. Calling people “markov chains” is fun in the instant you write it, but contributes to the general sludge of ad hominem dehumanization. All your upvoters should be ashamed.

                [1] SystemD arouses strong passions, and I don’t want this thread to devolve. I’m pointing out that you’re starting it off on the wrong foot. But I’m done here and won’t be responding to any more name-calling.

                [2] Because God knows, there’s tons of badly designed software out there that has given people great experiences in the short term. Design usually matters in the long term. Using something for the first time is unlikely to tell you anything beyond that somebody peephole-optimized the UX. UX is certainly important, rare and useful in its own right. But it’s a distinct activity.

                [3] I’d particularly appreciate a link to NeoVim criticism for being anti-Unix. Were they similarly criticizing Vim?

                1. 9

                  [3] I’d particularly appreciate a link to NeoVim criticism for being anti-Unix. Were they similarly criticizing Vim?

                  Yes, when VIM incorporated a terminal. Which is explicitly against its design goals. From the VIM 7.4 :help design-not

                  VIM IS... NOT                                           *design-not*
                  
                  - Vim is not a shell or an Operating System.  You will not be able to run a
                    shell inside Vim or use it to control a debugger.  This should work the
                    other way around: Use Vim as a component from a shell or in an IDE.
                    A satirical way to say this: "Unlike Emacs, Vim does not attempt to include
                    everything but the kitchen sink, but some people say that you can clean one
                    with it.  ;-)"
                  

                  Neo-VIM appears to acknowledge their departure from VIM’s initial design as their :help design-not has been trimmed and only reads:

                  NVIM IS... NOT                                          design-not
                  
                  Nvim is not an operating system; instead it should be composed with other
                  tools or hosted as a component. Marvim once said: "Unlike Emacs, Nvim does not
                  include the kitchen sink... but it's good for plumbing."
                  

                  Now as a primarily Emacs user I see nothing wrong with not following the UNIX philosophy, but at it is clear that NeoVIM has pushed away from that direction. And because that direction was an against their initial design it is reasonable for users that liked the initial design to criticism NeoVIM because moving further away from the UNIX philosophy.

                  Not that VIM hadn’t already become something more than ‘just edit text’, take quickfix for example. A better example of how an editor can solve the same problem by adhering to the Unix Philosophy of composition through text processing would be Acme. Check out Acme’s alternative to quickfix https://youtu.be/dP1xVpMPn8M?t=551

                  1. 0

                    akkartik, which part of my comment did you identify with? :) FWIW, I’m fond of you personally.

                    I’d particularly appreciate a link to NeoVim criticism for being anti-Unix

                    Every single Hacker News thread about Neovim.

                    Were they similarly criticizing Vim?

                    Not until I reply as such–and the response is hem-and-haw.

                    1. 9

                      To be fair I don’t think the hacker news hive mind is a good judge of anything besides what is currently flavour of the week.

                      Just yesterday I had a comment not just downvoted but flagged and hidden-by-default, because I suggested Electron is a worse option than a web app.

                      HN is basically twitter on Opposite Day: far too happy to remove any idea even vaguely outside what the group considers “acceptable”.

                      1. 4

                        Indeed, I appreciate your comments as well in general. I wasn’t personally insulted, FWIW. But this is precisely the sort of thing I’m talking about, the assumption that someone pushing back must have their identity wrapped up in the subject. Does our community a disservice.

                        1. 0

                          OTOH, I spent way too much of my life taking the FUD seriously. The mantra-parroting drive-by comments that are common in much of the anti-systemd and anti-foo threads should be pushed back. Not given a thoughtful audience.

                          1. 2

                            Totally fair. Can you point at any examples?

                            1. 3

                              https://news.ycombinator.com/item?id=7289935

                              The old Unix ways are dying… … Vim is, in the spirit of Unix, a single purpose tool: it edits text.

                              https://news.ycombinator.com/item?id=10412860

                              thinks that anything that is too old clearly has some damage and its no longer good technology, like the neovim crowd

                              Also just search for “vim unix philosophy” you’ll invariably find tons of imaginary nonsense:

                              https://hn.algolia.com/?query=vim%20unix%20philosophy&sort=byPopularity&prefix&page=0&dateRange=all&type=comment

                              Please don’t make me search /r/vim :D

                              1. 4

                                thinks that anything that is too old clearly has some damage and its no longer good technology, like the neovim crowd

                                That’s not saying that neovim is ‘anti-Unix philosophy’, it’s saying that neovim is an example of a general pattern of people rewriting and redesigning old things that work perfectly well on the basis that there must be something wrong with anything that’s old.

                                Which is indeed a general pattern.

                                1. 1

                                  That’s not saying that neovim is ‘anti-Unix philosophy’

                                  It’s an example of (unfounded) fear, uncertainty, and doubt.

                                  rewriting and redesigning old things that work perfectly well on the basis that there must be something wrong with anything that’s old.

                                  That’s a problem that exists, but attaching it to project X out of habit, without justification, is the pattern I’m complaining about. In Neovim’s case it’s completely unfounded and doesn’t even make sense.

                                  1. 1

                                    It’s not unfounded. It’s pretty obvious that many of the people advocating neovim are doing so precisely because they think ‘new’ and ‘modern’ are things that precisely measure the quality of software. They’re the same people that change which Javascript framework they’re using every 6 weeks. They’re not a stereotype, they’re actual human beings that actually hold these views.

                                    1. 2

                                      Partial rewrite is one of the fastest ways to hand off software maintainership, though. And vim needed broader maintainer / developer community.

                                      1. 0

                                        Vim’s maintainer/developer community is more than sufficient. It’s a highly extensible text editor. Virtually anything can be done with plugins. You don’t need core editor changes very often if at all, especially now that the async stuff is in there.

                                        1. 3

                                          You don’t need core editor changes very often if at all, especially now that the async stuff is in there.

                                          Which required pressure from NeoVim, if I understood the situation correctly. Vim is basically a one-man show.

                                2. 2

                                  Thanks :) My attitude is to skip past crap drive-by comments as beneath notice (or linking). But I interpreted you to be saying FUD (about SystemD) that you ended up taking seriously? Any of those would be interesting to see if you happen to have them handy, but no worries if not.

                                  Glad to have you back in the pro-Neovim (which is not necessarily anti-Vim) camp!

                      2. 20

                        What is FUD is this sort of comment: the classic combination of comparing systemd to the worst possible alternative instead of the best actual alternative with basically claiming everyone that disagrees with you is a ‘slashdot markov chain’ or similar idiotic crap.

                        On the first point, there are lots of alternatives to sysvinit that aren’t systemd. Lots and lots and lots. Some of them are crap, some are great. systemd doesn’t have a right to be compared only to what it replaced, but also all the other things that could have replaced sysvinit.

                        On the second point, it’s just bloody rude. But it also shows you don’t really understand what people are saying. ‘I think [xyz] violates the unix philosophy’ is not meaningless. People aren’t saying it for fun. They’re saying it because they think it’s true, and that it’s a bad thing. If you don’t have a good argument for the Unix philosophy not matter, or you think systemd doesn’t actually violate it, please go ahead and explain that. But I’ve never actually seen either of those arguments. The response to ‘it violates the Unix philosophy’ is always just ‘shut up slashdotter’. Same kind of comment you get when you say anything that goes against the proggit/hn hivemind that has now decided amongst other things that: microsoft is amazing, google is horrible, MIT-style licenses are perfect, GPL-style licenses are the devil-incarnate, statically typed languages are perfect, dynamically typed languages are evil, wayland is wonderful, x11 is terrible, etc.

                        1. 8

                          claiming everyone that disagrees with you is a ‘slashdot markov chain’ or similar idiotic crap

                          My claim is about the thoughtless shoveling of groundless rumors. Also I don’t think my quip was idiotic.

                          there are lots of alternatives to sysvinit that aren’t systemd

                          That’s fine, I never disparaged alternatives. I said: systemd is good and I’m annoyed that the grumblers said it wasn’t.

                          1. 2

                            It’s not good though, for all the reasons that have been said. ‘Better than what you had before’ and ‘good’ aren’t the same thing.

                            1. 1

                              seriously. If you don’t like systemd, use something else and promote its benefits. Tired of all the talking down of systemd. It made my life so much easier.

                              1. 1

                                seriously. If you like systemd, use it and shut up about it. Tired of all the talking up of systemd as if it’s actually any better than its alternatives, when it is objectively worse, and is poorly managed by nasty people.

                                1. 4

                                  Have you watched the video this thread is about? Because you really sound like the kind of dogmatist the presenter is talking about.

                                  If you like systemd, use it and shut up about it

                                  Also, isn’t this a double-standard, since when it comes to complaining about systemd, this attitude doesn’t seem that prevalent.

                                  1. 2

                                    No, because no other tool threatens the ecosystem like systemd does.

                                    Analogy: it wasn’t a double-standard 10 years ago to complain about Windows and say ‘if you like Windows, use it and shut up about it’.

                                    1. 3

                                      I see this kind of vague criticism when it comes to systemd alot. What ecosystem is it really breaking? It’s all still open source, there aren’t any proprietary protocols or corporate patents that prevent people from modifying the software to not have to rely on systemd. This “threat”, thr way I see it, has turned out to be at most a “ minor inconvenience “.

                                      I suppose you’re thinking about examples like GNOME, but on the one hand, GNOME isn’t a unix-dogmatist project, but instead they aim to create a integrated desktop experience, consciously trading this in for ideal modularity – and on the other, projects like OpenBSD have managed to strip out what required systemd and have a working desktop environment. Most other examples, of which I know, have a similar pattern.

                        2. 6

                          I think that the problem is fanboyism, echo chambers and ideologies.

                          I might be wrong, so please don’t consider this an accusation. But you writing this sounds like someone hearing that systemd is bad, therefore never looking at it, yet copying it. Then one tries it and finding out that baseless prejudices were in fact baseless.

                          After that the assumption is that everyone else must have been doing the same and one is enlightened now to see it’s actually really cool.

                          I think that this group behavior and blindly copying opinions is one of the worst things in IT these days, even though of course it’s not limited to this field.

                          A lot of people criticizing systemd actually looked at systemd, really deep, maybe even built stuff on it, or at least worked with it in production as sysadmin/devop/sre/…

                          Yes, I have used systemd, yes I understand why decisions we’re taken, where authors if the software were going, read specs of the various parts (journald for example), etc.

                          I think I have a pretty good understanding compared to at least most people that only saw it from a users perspective (considering writing unit files to be users perspective as well).

                          So I could write about that in my CV and be happy that I can answer a lot of questions regarding systemd, advocate its usage to create more demand and be happy.

                          To sum it up: I still consider systemd to be bad on multiple layers, both implementation and some ideas that I considered great but then through using it seeing that it was a wrong assumption. By the way that’s the thing I would not blame anyone for. It’s good that stuff gets tried, that’s how research works. It’s not the first and not the last project that will come out sounding good, to only find out a lot of things either doesn’t make a difference or make it worse.

                          I am a critic of systemd but I agree that there’s a lot of FUD as well. Especially when there’s people that blame everything, including own incompetence on systemd. Nobody should ever expect a new project to be a magic bullet. That’s just dumb and I would never blame systemd for trying a different approach or for not being perfect. However I think it has problems on many levels. While I think the implementation isn’t really good that’s something that can be fixed. However I think some parts of the concept level are either pretty bad or have turned out to be bad decisions.

                          I was very aware that especially in the beginning the implementation was bad. A lot got better. That’s to be expected. However next to various design decisions I consider bad I think many more were based on ideas that I think to most people in IT sound good and reasonable but in the specific scenarios that systemd is used it at least in my experience do not work out at all or only work well in very basic cases.

                          In other words the cases where other solutions are working maybe not optimal, but that aren’t considered a problem worth fixing because the added complexity isn’t worth it systemd really shines. However when something is more complex I think using systemd frequently turns out to be an even worse solution.

                          While I don’t wanna go into detail because I don’t think this is the right format for an actual analysis I think systemd in this field a lot in common with both configuration management and JavaScript frameworks. They tend to be amazing for use cases that are simple (todo applications for example), but together with various other complexities often make stuff unnecessarily complicated.

                          And just like with JavaScript frameworks and configuration management there’s a lot of FUD, ideologies, echochambers, following the opinion of some thought leaders, and very little building your own solid opinion.

                          Long story short. If you criticize something without knowing what it is about then yes that’s dumb and likely FUD. However assuming that’s the only possible reason for someone criticizing software is similarly dumb and often FUD regarding this opinion.

                          This by the way also works the reverse. I frequently see people liking software and echoing favorable statements for the same reasons. Not understanding what they say, just copying sentences of opinion leaders, etc.

                          It’s the same pattern, just the reversal, positive instead of negative.

                          The problem isn’t someone disliking or liking something, but that opinions and thoughts are repeated without understanding which makes it hard to have discussions and arguments that give both sides any valuable insides or learnings

                          Then things also get personal. People hate on Poetteing and think he is dumb and Poetteing thinks every critic is dumb. Just because that’s a lot of what you see when every statement is blindly echoed.

                          1. 1

                            That’s nice, but the implication of the anti-systemd chorus was that sys v init was good enough. Not all of these other “reasonable objections” that people are breathless to mention.

                            The timbre reminded me of people who say autotools is preferrable to cmake. People making a lot of noise about irrelevant details and ignoring the net gain.

                            But you writing this sounds like someone hearing that systemd is bad, therefore never looking at it, yet copying it.

                            No, I’m reacting to the idea that the systemd controversy took up any space in my mind at all. It’s good software. It doesn’t matter if X or Y is technically better, the popular narrative was that systemd is a negative thing, a net-loss.

                            1. 2

                              In your opinion it’s good software and you summed up the “anti-systemd camp” with “sys v init was good enough” even though people from said “anti-systemd camp” on this very thread disagreed that that was their point.

                              To give you an entirely different point of view, I’m surprised you don’t want to know anything about a key piece of a flagship server operating systems (taking that one distro is technically an OS) affecting the entire eco system and unrelated OS’ (BSDs etc.) that majorly affects administration and development on Linux-based systems. Especially when people have said there are clear technical reasons for disliking the major change and forced compliance with “the new way”.

                              1. 2

                                you summed up the “anti-systemd camp” with “sys v init was good enough” even though people from said “anti-systemd camp” on this very thread disagreed that that was their point.

                                Even in this very thread no one has actually named a preferred alternative. I suspect they don’t want to be dragged into a discussion of details :)

                                affecting the entire eco system and unrelated OS’ (BSDs etc.)

                                BSDs would be a great forum for demonstrating the alternatives to systemd.

                                1. 2

                                  Well, considering how many features that suite of software has picked up, there isn’t currently one so that shortens the conversation :)

                                  launchd is sort of a UNIX alternative too, but it’s currently running only on MacOS and it recently went closed source.

                          2. 3

                            It violates unix philosohpy

                            That accusation was also made against neovim. The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about.

                            i don’t follow your reasoning. why is it relevant that people also think neovim violates the unix philosophy? are you saying that neovim conforms to the unix philosophy, and therefore people who say it doesn’t must not know what they’re talking about?

                            1. 1

                              are you saying that neovim conforms to the unix philosophy, and therefore people who say it doesn’t must not know what they’re talking about?

                              When the implication is that Vim better aligns with the unix philosophy, yes, anyone who avers that doesn’t know what they’re talking about. “Unix philosophy” was never a goal of Vim (”:help design-not” was strongly worded to that effect until last year, but it was never true anyways) and shows a deep lack of familiarity with Vim’s features.

                              Some people likewise speak of a mythical “Vim way” which again means basically nothing. But that’s a different topic.

                              1. 1

                                vim does have fewer features which can be handled by other tools though right? not that vim is particularly unixy, but we’re talking degrees

                            2. 1

                              The people muttering this stuff are slashdot markov chains, they don’t have any idea what they’re talking about

                              I’ll bookmark this comment just for this description.

                              1. 2

                                Yes, we have started using it for financial analysis and it is awesome

                              1. 3

                                I would love to have a feedback post, three years later. I don’t really know the status of Neovim right now

                                1. 12

                                  All of the points made in the post mentioned are still true.

                                  Neovim is still developed actively and the community is stronger than ever. You can see the latest releases with notes here: https://github.com/neovim/neovim/releases

                                  Vim’s BDFL ultimately caved and released his own async feature that is incompatible with Neovim’s design that has been in use by various cross-compatible plugins for years (no actual reason was provided for choosing incompatibility despite much pleading from community members). Some terminal support has also been added to recent Vim. IMO both implementations are inferior to Neovim’s, but that doesn’t matter much for end-users.

                                  There are still many additional features in Neovim that haven’t been begrudgingly ported to Vim.

                                  At this point, I choose to use Neovim not because of the better codebase and modern features and saner defaults, but because of the difference in how the projects are maintained and directed.

                                  1. 20

                                    Vim’s BDFL ultimately caved and released his own async feature

                                    No, he didn’t. He didn’t cave. He was working on async, for a long time, with the goal of producing an async feature that actually fit in with the rest of Vim’s API and the rest of VimL, which he did. Did he probably work on it more and more quickly due to NeoVim? Sure. Did he only work on it because of pressure as you imply? No.

                                    that is incompatible with Neovim’s design that has been in use by various cross-compatible plugins for years (no actual reason was provided for choosing incompatibility despite much pleading from community members).

                                    NeoVim is incompatible with vim, not the other way around.

                                    Some terminal support has also been added to recent Vim. IMO both implementations are inferior to Neovim’s, but that doesn’t matter much for end-users.

                                    Async in vim fits in with the rest of vim much better than NeoVim’s async API would have fit in with vim.

                                    There are still many additional features in Neovim that haven’t been begrudgingly ported to Vim.

                                    The whole point of NeoVim is to remove features that they don’t personally use because they don’t think they’re important. There are a lot of Vim features not in NeoVim.

                                    At this point, I choose to use Neovim not because of the better codebase and modern features and saner defaults, but because of the difference in how the projects are maintained and directed.

                                    Vim is stable, reliable and backwards-compatible. I don’t fear that in the next release, a niche feature I use will be removed because ‘who uses that feature lolz?’, like I would with neovim.

                                    1. 10

                                      No, he didn’t. He didn’t cave. He was working on async, for a long time, with the goal of producing an async feature that actually fit in with the rest of Vim’s API and the rest of VimL, which he did.

                                      Where did you get this narrative from? The original post provides links to the discussions of Thiago’s and Geoff’s respective attempts at this. I don’t see what you described at all.

                                      Can you link to any discussion about Bram working on async for a long time before?

                                      NeoVim is incompatible with vim, not the other way around.

                                      Huh? Vim didn’t have this feature at all, a bunch of plugins adopted Neovim’s design, Vim broke compatibility with those plugins by releasing an incompatible implementation of the same thing, forcing plugin maintainers to build separate compatibility pipelines for Vim. Some examples of this is fatih’s vim-go (some related tweets: https://twitter.com/fatih/status/793414447113048064) and Shougo’s plugins.

                                      I get the whole “Vim was here first!” thing this is about the plugin ecosystem.

                                      Async in vim fits in with the rest of vim much better than NeoVim’s async API would have fit in with vim.

                                      How’s that?

                                      Here is the discussion of the patch to add vim async from Bram, where he is rudely dismissive of Thiago’s plea for a compatible design (no technical reasons given): https://groups.google.com/forum/#!topic/vim_dev/_SbMTGshzVc/discussion

                                      The whole point of NeoVim is to remove features that they don’t personally use because they don’t think they’re important. There are a lot of Vim features not in NeoVim.

                                      What are some examples of important features or features you care about that have been removed from Neovim?

                                      The whole point of Neovim (according to the landing page itself: https://neovim.io/) is to migrate to modern tooling and features. The goal is to remain backwards-compatible with original vim.

                                      Vim is stable, reliable and backwards-compatible. I don’t fear that in the next release, a niche feature I use will be removed because ‘who uses that feature lolz?’, like I would with neovim.

                                      Do you actually believe this or are you being sarcastic to make a point? I honestly can’t relate to this.

                                      1. 3

                                        The vim vs. neovim debate is often framed a bit in the style of Bram vs. Thiago, and the accusation against Thiago is typically that he was too impatient or should not have forked vim in the first place when Bram did not merge Thiago’s patches. I have the feeling that your argumentation falls into similar lines and I don’lt like to view this exclusively as Bram vs. Thiago, because I both value Bram’s and Thiago’s contributions to the open source domain, and I think so far vim has ultimatetively profitted from the forking.

                                        I think there are two essential freedoms in open source,

                                        • the freedom of an open source maintainer not to accept / merge contribution,
                                        • in the very essence of open source, that users have the right to fork, when they feel that the maintainers are not accepting their contributions (preferably they try to make a contribution to the source project first).

                                        Both of this happend when neovim was forked. There is no “offender” in any way. Thus, all questions on API compatibility following the split cannot be lead from the perspective of a renegade fork (nvim) and an authorative true editor (vim).

                                        1. 8

                                          It was absolutely 100% justified of Thiago to fork vim when Bram wouldn’t merge his patches. What’s the point of open source software if you can’t do this?

                                          1. 3

                                            And as a follow up my more subjective view:

                                            I personally use neovim on my development machines, and vim on most of the servers I ssh into. The discrepancy for the casual usage is minimal, on my development machines I feel that neovim is a mature and very usable product that I can trust. For some reason, vim’s time-tested code-base with pre-ANSI style C headers and no unit tests is one I don’t put as much faith in, when it comes to introducing changes.

                                        2. 4

                                          @shazow’s reasoning and this post are what I link people to in https://jacky.wtf/weblog/moving-to-neovim/. Like for a solid release pipeline and actual digestible explanations as to what’s happening with the project, NeoVim trumps Vim every time.

                                      1. 1

                                        There’s always going to be faulty argumentation and statistical reasoning is the new trend. That doesn’t meant there’s something better about deductive reasoning, it’s just easier for most folks to validate. I’m guessing that statistical literacy will increase with time.

                                        1. 1

                                          good point, deductive reasoning is not per-se better. But with statistical literacy, in many everyday situations where empirical arguments are made, the answer will more likely be: We need more experiments. And those are often expensive and time-consuming.

                                        1. 3

                                          I’m not quite I agree with the assembly-line analogy for non-agile development (waterfall). Because when it comes to development, waterfall is so wasteful. Requirements are written, without ever knowing whether they are useful, complex architectures drawn, without ever knowing whether there are actually scaling issues with the simpler approach,complex implementations pursued over months, without just finding out whether a naive implementation that can be done in 3 weeks might do a good-enough job already. Instead, Waterfall development piles up requirements libraries, architecture drawings, to be implemented later.

                                          The situation you describe may describe the situation for developing the n-th generation of an industrial product. You know the product and its users, you have an idea about the requirements and the technical challenges and then you can map out how a process-efficient implementation can happen. Otherwise waterfall leads to working on suspicion a lot of times. Also, your throughput is zero, as long as you cannot show that your product is working.

                                          So, I think we would need to discuss this while looking at a stacey matrix http://www.barryovereem.com/wp-content/uploads/stacey-matrix-agile.png . In the corner of known requirements and known technology waterfall might be more process efficient, with unclear requirements already, I feel that agile will be more efficient, the situation known requirements with challenging technology I don’t see as clearly in favour of agility, yet there most waterfall process have trouble deriving low-level requirements from their known high-level requirements, which again makes agile the more efficient choice.

                                          Maybe process efficiency needs a closer definition and we aren’t talking about the same thing?

                                          1. 9

                                            You either use an existing framework, or you end up re-inventing one… poorly.

                                            1. 6

                                              I’ve yet to see a web framework I truly enjoy using. Most of them don’t even try to tame the incidental complexity of the web, preferring to heap on even more. I think this is because the type of people that make web frameworks often love the web to the point where they’re blind to the incidental complexity.

                                              These frameworks seem to take special delight in taking over every aspect of your application, because ‘convention.’ Apparently, one of the greatest evils of software development is that there is no standard directory for models unless we institute The Right Way. Meanwhile, massive coupling makes testing difficult, causing years of “Fast tests using this one weird trick” presentations continue to be given.

                                              The best libraries are the ones you can lock away somewhere and forget about.

                                              1. 1

                                                Enjoyability seems to me to be a bad criterion to judge a tool on. I may enjoy one hammer more than another, but I still need to use specific ones for specific tasks and the ones I enjoy less are no less functional and suitable.

                                                I don’t think the remainder of your post depends on your remark about ‘enjoying’ a web framework, which I feel is extra evidence for that not mattering.

                                                1. 3

                                                  Enjoyability seems to me to be a bad criterion to judge a tool on.

                                                  Also “Enjoyability” is based on what timeline you measure it on. If you measure it based on day 1 enjoyability, day 100 enjoyability or day 1000 enjoyability. Stuff like unit testing and fuzzing might not be very enjoyable on day 1 – might be far more enjoyable on day 100 and put you a state of absolute bliss with same testing and fuzzing on day 1000.

                                                2. 0

                                                  Of course web frameworks are not optimal. However, I take the leaky abstraction here and there any time over the mess I have seen with non-framework code. I did Python starting with Python 2.3 which was released in the early 2000s. Back then, I didn’t do Python web development much, yet every now and then I wrote something or looked at options how to do things. This was the time of mod_python and still cgi. Nowadays we have Django, Pyramids and if you feel like having a bit more freedom - Flask. I must say I wouldn’t want to go back.

                                                  Potentially, if you have very special requirements, that actively go against the typical patterns, no framework is an option, but other wise it isn’t. at least I wouldn’t like to take over maintenance of such a codebase.

                                                  That’s actually quite a nice indicator: “If someone would use that advice, would I like to take over maintenance of that code base?”.

                                              1. 5

                                                hard to believe any smoking guns would actually have been published given the authors position with Microsoft

                                                1. 2

                                                  If the sources are available, I would have guessed as much from the fact that no one reported something like this yet.

                                                  1. 1

                                                    That sounds similar to the many eyeballs argument. That one was refuted by the bugs found that were over a decade old in widely-used software. Someone would have to look, find evidence, present thin-looking evidence in a way they thought would achieve something, get noticed enough for us to know that, and (important if I did it) be ready to take all the legal muscle Microsoft would throw at you.

                                                    I don’t think an absence of evidence proves anything here given nature of the evidence and chilling effect legal system might create. Also, I have no beliefs about this investigation one way or another: just noting many eyeballs doesn’t work consistently or prove anything. You need talented, time-consuming, trustworthy review instead for stuff like that.

                                                1. 1

                                                  Also very interesting would be the question what the Consequences of gdpr are on techniques like event sourcing.

                                                  1. 8

                                                    I haven’t read the GPDR. According to this post, Article 17 requires a data deletion mechanism.

                                                    Did anybody tell the various blockchains about that?

                                                    1. 8

                                                      The decentralized chains don’t really have a “controller” per se.

                                                      ‘controller’ means the natural or legal person, public authority, agency or other body which, alone or jointly with others, determines the purposes and means of the processing of personal data

                                                      1. 2

                                                        Regarding the nature of the chains, of course.

                                                        Regarding that insight, thank you!

                                                        1. 3

                                                          Wouldnt that just impose these rules on the block chain participants?

                                                    1. 6

                                                      Huh. Why do people think open offices are meant to increase interaction? The only reason for open offices is a lack of floor real estate. I’ve been stuck in them for over six years because I’ve only really taken work in cities.

                                                      Do managers actually believe the lie that it makes people more productive? I use to hate the cube, so much, but open offices are a new layer of hell.

                                                      1. 7

                                                        I think people (including managers) are, on average, pretty poor at empathising with different levels of tolerance for social interaction. If the manager finds the open office level of interaction tolerable or even enjoyable, on balance I expect they will project this onto their staff as what they perceive to be a reasonable expectation.

                                                        Not everybody is this way, but it seems quite common – not just in office layout decisions, but in weighing the cost of additional meetings or even in planning for team social events. In contrast I’ve known people that are themselves comfortable with a lower level of interaction, and their lower level tends to influence their targets for others too.

                                                        1. 8

                                                          I have met in every open office a vocal fraction of colleagues who said they enjoyed it. “here I csn stay informed on what is going on in the department”, a small office would be isolating, et etc.

                                                          So managers will find people who share their opinion.

                                                          Also typically middle management doesnt decide on this stuff but more higher ups who either have their own office or spend their days in meeting rooms.

                                                      1. 4

                                                        Machine Learning can be very useful. The same goes for Deep Learning and other more recent approaches (which have not invalidated the value of the ‘traditional’ machine learning and statistics traditions, merely they extended the range of methods to choose from when optimizing for trade-offs). Of course you can do a lot with SQL and it might be efficient. Really, the computational power isn’t what needs to be discussed here.

                                                        The most important aspect missing in the discussion however seems to be buiness value and value propositions of technology. The usefulness of SQL for the business is pretty obvious already for booking, storing and provisioning data. When it comes to data analytics and predictive models, this is where things get interesting. Because quite often, AI/ML/Deep Learning is promoted without actually talking about how it should be incorporated into business processes and how they can support them.

                                                        Once you start with a business need first, and think about solutions, you’ll pretty soon have a competing simpler heuristic that you can treat as a competitor to a machine learning solution, and if you consider aspects such as robustness, reliability, maintainability, you will often even consider to use these methods over an existing machine-learning solution.

                                                        1. 4

                                                          It feels like we are through the valley of releases that needed to restore Python 2 compatibility. Good to see releases with a few innovations that will make my life easier.

                                                          1. 2

                                                            Some interesting data on Python 2/3 usage and transition (or not):

                                                            1. 4

                                                              I admit I didn’t read through it but only skimmed over the pages, I think they measure open source libraries mostly, and I kind of expect those eto maintain compatibility for a while. Some still do for Python 2.6. So while their data is valid, it doesn’t say much about actual Python applications / serices.

                                                              My subjective take on Python 3 migrations

                                                              • Migration didn’t really happen before Python 3.4. With 3.0 and 3.2 there wasn’t really a “win”, and linux distributions still had Python 2.7 as their default.
                                                              • In the beginning of 2017 I spent a few days getting the CI infrastructure at my then employer (~100 Python devs) into shape. When the docker builds were busy, I spent some time applying python-modernize on a few of the companies shared libraries, then fixing a few remaining issues by hand. It wasn’t much trouble.
                                                              • In 2018 I see more and more Python projects starting off of Python 3.x. When in 2015, developers would have chosen 2.7 if in doubt.

                                                              Oh, and I am still furious about them renaming .iteritems() to .items() instead of at least leaving it as an alias.

                                                          1. 1

                                                            Looks very interesting. Would you be considering a BSD license? (I personally don’t mind but since LGPL contains the substring “GPL”, my employer would hear the alarm bells..

                                                            1. 10

                                                              From the readme:

                                                              You probably noticed the peculiar default line length. Black defaults to 88 characters per line, which happens to be 10% over 80. This number was found to produce significantly shorter files than sticking with 80 (the most popular), or even 79 (used by the standard library). In general, 90-ish seems like the wise choice.

                                                              This is a table stakes deal breaker for me. I know, I know, I’m likely old fashioned. I prefer old school. :-)

                                                              1. 6

                                                                It is a default though, you can pass --line-length to it.

                                                                1. [Comment removed by author]

                                                                  1. 4

                                                                    Honestly though, is your terminal window really 80 columns wide? And should outdated defaults matter?

                                                                    1. 3

                                                                      Yes, my terminal window is really 80 columns wide.

                                                                      I also have a source file where a single line of code is 250 characters (and no, it really can’t be broken up due to semantic constraints).

                                                                      So, what should be the minimum width of a terminal window?

                                                                      1. 1

                                                                        I actually prefer to code with a 80-wide terminal most of the time, because it tends to remind me to simplify my code more than I would otherwise :o

                                                                      2. 1

                                                                        I think 79 is better than 80, because 79 allows for a single-column ruler on the side of the window and stuff

                                                                        1. 1

                                                                          This is about the size of your code “viewport”, not of your terminal.

                                                                          3 columns are already used by my line length indicator in vim, but that number is really arbitrary too.

                                                                        2. 1

                                                                          departing from established standards because you feel like it is a pretty bad sign in general. as are --long-gnu-style-options, but that’s a different issue.

                                                                        3. 2

                                                                          I just counted the length of lines over 266 Lua files [1], calculating the 95th percentile [2] of line length. Only 4% had a 95 percentile of 89 or higher; 11% had a 95th percentile of 80 or higher. And just because, 4% had 95th percentiles of 80 and 81. For maximum line lengths:

                                                                          • 42% with longest line of 79 characters or less
                                                                          • 46% with longest line of 80 characters or less
                                                                          • 56% with longest line of 88 characters or less

                                                                          Longest line found: 204 characters

                                                                          [1] I don’t use Python, so I’m using what I have. And what I have are multiple Lua modules I’ve downloaded.

                                                                          [2] That is, out of all the lines of code, 95% of line lengths are less than this length.

                                                                          1. 1

                                                                            https://en.wikipedia.org/wiki/88_(number)

                                                                            I can’t help it but read it as a fascist code, or at least I start thinking about whether it could be on every occasion I see this number (not totally unfounded, because where I live it is used this way every now and then). I don’t think they meant to use it this way, so I think it’s fine (more than that, good, because it devalues the code by not treating the numebr as taboo).

                                                                            1. 1

                                                                              Personally I don’t like line break at 80 or 90 with python, as the 4-spaces indent quickly uses up a lot of horizontal space. For example, if you write unittest-style unit tests, before you write any assignment or call, you have already lost 8 spaces.

                                                                              class TestMyFunctionality(unittest.TestCase):
                                                                                  def setUp(self):
                                                                                      # ....
                                                                                  def test_foo(self):
                                                                                      x = SomeModule.SomeClass(self.initial_x, get_dummy_data(), self.database_handle)
                                                                              

                                                                              Of course you could start introducing line breaks, but that quickly leads to debates on “hanging indent”, lisp-style-indent, etc. or you end up with a lot of vanity variables for local variables.

                                                                              With lisp-style indent I mean the following snippet, that (if it was the way the autoformatter would do it would convince me to accept a 80 character line length limit)

                                                                              class TestMyFunctionality(unittest.TestCase):
                                                                                  def setUp(self):
                                                                                      # ....
                                                                                  def test_foo(self):
                                                                                      x = SomeModule.SomeClass(self.initial_x,
                                                                                                               get_dummy_data(),
                                                                                                               self.database_handle)
                                                                              

                                                                              Whereas I find the “hanging indent” style makes understanding the structure of the syntax tree so much more difficult.

                                                                              class TestMyFunctionality(unittest.TestCase):
                                                                                  def setUp(self):
                                                                                      # ....
                                                                                  def test_foo(self):
                                                                                      x = SomeModule.SomeClass(
                                                                                              self.initial_x,
                                                                                              get_dummy_data(),
                                                                                              self.database_handle)
                                                                              
                                                                            1. 8

                                                                              In which the Microsoft OneNote team write their own database, and seemingly don’t regret the decision.

                                                                              1. 4

                                                                                OneNote just corrupted my notes locally, so who knows, maybe they should have followed the general advice?..

                                                                                1. 2

                                                                                  Speaking of OneNote’s local notebook format, it seems to be documented (also this one) but it seems quite complex - I’ve never seen an implementation of it other than Microsoft’s own.

                                                                                  It might be interesting to poke around with…

                                                                                1. 4

                                                                                  Thanks for posting this.

                                                                                  A general problem I have with mercurial (I started using it for pet projects I work on at home, never at work), that a lot of material you can google is fairly old and lots of it outdated. Whenever someone refers to a hg extension, one needs to further investigate if this extension is still alive, and still the prefered way of doing things.

                                                                                  1. 1

                                                                                    The feature that this article describes is in core.

                                                                                    1. 9

                                                                                      Just to elaborate, because this is the third or fourth Mercurial discussion coming up in as many days, and I’m getting tired of the same discussion happening ad nauseam:

                                                                                      1. Out-of-the-box, with no configuration done, Mercurial doesn’t allow editing history–but ships with all the functionality required to do that. You just have to turn it on. Turning it on takes up to three lines in a config file and requires no third-party tools whatsoever.
                                                                                      2. Out-of-the-box, Mercurial does come with phases (discussed here) and the associated phase command that allows explicitly altering them. You don’t actually use the phase command that much; phases are actually more for consumption by history editing commands.
                                                                                      3. If you enable any of the history editing extensions–again, which ship with Mercurial–including rebase, which is probably all you need, and histedit, if you do really need the equivalent of git rebase -i, you will find they are phase-aware. In particular, they will allow you to alter changesets that are secret or draft, but not public. Because changesets will become public on push by default, this is by itself awesome, as it can trivially help you avoid accidentally rebasing something someone else might’ve pulled. Having this would’ve eliminated quite a few Git horror stories.

                                                                                      All of the above ships in core. You need to add at most three lines to your .hgrc or equivalent to get all of it. Which is fine, because you also need at least two lines just to set your email and name, much like you’d have to at least do git config --global user.email and git config --global user.name. A couple extra lines isn’t a big deal.

                                                                                      The only thing interesting in this space that doesn’t yet ship in Mercurial, and which I’m really excited about, is something called changeset evolution, which will allow cleanly and easily collaborating on in-progress, frequently-rebased/collapsed/edited branches. But that’s not baked yet, and Git doesn’t have anything equivalent to it yet anyway.

                                                                                      1. 5

                                                                                        The problem is making it clear to new users or users coming from git how to enable those extensions. There’s also the problem that the new tweakdefaults option is trying to solve: that hg’s backward compatibility guarantees mean that new features (e.g. new since hg 1.0) don’t get surfaced in the hg UI unless you’ve customized your setup (or had it customized for you as in a corporate setup).

                                                                                        git’s out-of-the box experience enables a lot of power user features. This certainly isn’t great for safety but it is great for discovery - thus these perennial discussions on forums like lobsters and HN.

                                                                                        I’m hoping with evolve getting upstreamed we might see more projects using mercurial. On the other hand, for open source projects the only real place to host them is either to use hgweb and roll a custom hosting and development workflow (basically what mercurial itself does) or use bitbucket, which is run by people who don’t prioritize or think much about open source fork-based workflows. It would be amazing if there were more competition in this space. Kallithea doesn’t support pull requests. Rhodecode has a questionable past participating in the free software community. I’m not aware of much else in this space.

                                                                                        What would really change things is if one of the big players like github or gitlab decided to add support for other VCS tools although I’m not exactly holding my breath for that to happen.

                                                                                        1. 4

                                                                                          Unfortunately, I agree. I have noodled with basically rewriting Kiln (only not called that because I’m not at Fog Creek) based on changeset evolution and with an explicit fork-based workflow focus, but I’ve been waiting to see if evolution really does get fully into core, and then what the story is with hg absorb, since properly supporting Mercurial and evolution looks really different in an hg absorb-based world than one without it.

                                                                                          In particular, my idea is that anyone can push to a repository, but it’ll automatically go into a new pull request in draft phase. At that point, if hg absorb stays a thing, and a normal user can be expected to just run hg absorb repeatedly as they address issues, then I can rely on obsmarkers. Otherwise, the story empirically gets a lot more interesting; I’ve had trouble on prototypes not requiring the user to know they’ve got a custom branch, basically doing the same kluge as Gerrit, albeit with a different mechanism.

                                                                                          Edit: just to be clear, I’ve prototyped bits of this a few times, but nothing I want to release—doubly so since it’s all in Smalltalk anyway. But it’s been helpful to try to think through what a proper approach to this would work like.

                                                                                          1. 2

                                                                                            AFAIK the only blocker on absorb getting upstreamed is the need to rewrite the linelog interface in C.

                                                                                          2. 2

                                                                                            I’d like to add that RhodeCode is actively supporting usage of Evolve/Phase with changeset evolution. Based on feedback from our users we started to ship evolve extension enabled and within the CE and EE editions.

                                                                                            This works with Pull requests, can be enabled globally or per repository.

                                                                                            You might question the past, but we since almost 2 years provide a open-source free, no limitation version of CE edition of RhodeCode (similar to Gitlab CE/EE). You can use evolve there and it works :) I said it many times, and I’ll said it again. We did mistakes with certain past releases, but currently, our business model is based on a free GPL open-source version. This will be here to stay, we always try to promote Mercurial, and it’s great workflows using mentioned extensions.

                                                                                            I doubt Gitlab/Github will ever support mercurial. They openly said they won’t for many reasons.

                                                                                            We currently work on a simple app for Digitalocean, we hope it’ll make usage of Mercurial hosting much easier for people that don’t want to host it themselves.

                                                                                            1. 1

                                                                                              Kallithea doesn’t support pull requests.

                                                                                              Looks like they now do.

                                                                                              I’m not aware of much else in this space.

                                                                                              Phabricator, Redmine and Trac also support Mercurial as well.

                                                                                              However none of them are as convenient as the hosted and “free for open source” offerings of Bitbucket, GitHub and GitLab.

                                                                                            2. 2

                                                                                              I feel the need to fork hg2k5, which will be mercurial with only the original features. :)

                                                                                              1. 2

                                                                                                You’d have to start with forking Python 2.4 so that you could run it.

                                                                                        1. 7

                                                                                          Another language that’s worth taking a look at for CLI apps is OCaml,this blog series has a good rundown of of porting a Python app.

                                                                                          1. 11

                                                                                            I really want to agree, because I love MLs and love how simple OCaml’s runtime is, but I find OCaml so frustrating in practice. There are, what, three standard libraries, which are incompatible with one another, and then also several incompatible build systems. I’m sure it’s possible to work around this and make them interpolate, but it drove me completely nuts last time I tried that route.

                                                                                            1. 1

                                                                                              Is the Reason flavour any better in those areas?

                                                                                              1. 1

                                                                                                I haven’t tried it for the dual reason that I don’t trust Facebook and it’s more a language that can target OCaml than genuinely OCaml. That may be unfair, and some old co-workers of mine love it, but I just haven’t tried it enough to form an opinion.

                                                                                            2. 2

                                                                                              I really never felt at home in MLs. I like haskell (although I am wary of its laziness, I usually prefer strictness as a default), I like Rust (although I would be happy to just have a GC instead of borrow-checking, but I can see what rust is aiming at, its just not my use case).

                                                                                              OCaml in my experience (1-2 years ago) lacked good tooling and the ecosystem I find in Rust or Haskell. Also I miss typeclasses or traits.

                                                                                              1. 2

                                                                                                The situation is still not perfect in OCaml world, but the new dune (former jbuilder) build system is becoming the de-facto standard and tooling in the last couple of years has been improving a lot. The example of cargo, among other things, has been driving a lot of changes

                                                                                            1. 3

                                                                                              I did a facepalm at the “It turns shadowing from a frequent cause of bugs into something that prevents bugs!”

                                                                                              1. 5

                                                                                                I think it’s really not quite as bad because you have the semantic information through the variable name and a strong type system backing you. There are definitely times where I’m taking the same piece of data but transmuting it over a sequence of types for different reasons like encodings and such and it’s a pain to perform that ceremony of Hungarian notation. If the semantics remain the same and the type encoding is the only difference, maybe shadowing is the right thing, especially with lifetimes.

                                                                                                1. 1

                                                                                                  I think the mentality is, that a variable isnt anIdentifier, but kind of apair (anIdentifier, aType), so repeating the information contained in the type in the identifier is redundant and sometimes even bad, because after a refactoring the type might have changed (from a vector to an iterator for example, etc).

                                                                                                  Of course this shouldn’t be the opportunity to name all local variables x, but it can make sense for a chain of transformations, filtering down a result list for example.