This is such a generic question that it’s pretty hard to answer. The devil is always in the details. Sure, all of those bullet points that you’ve mentioned are indeed true. But if you’re a front-end engineer, it’s best to use the tools that you’re familiar with in order to express your ideas, because you’re not wrestling with the concepts of a new language or framework in order to prototype your idea into reality. When I’m prototyping an idea, I typically use my favorite language (Ruby) even if it’s not going to be the language that I actually implement the idea in. This is usually a means to an end, I want to show people what something like this could look like. If I get buy-in from my team and/or stakeholders, I’ll develop it using a language or platform better suited for the task. I can imagine that if JS was my favorite language, I’d do the same. But any professional engineer can’t argue with the fact that incorporating that idea into an existing monolith is demonstrably easier to work with.

    When faced with a front-end engineer who wants to build a component in Node, perhaps next time you can tell them to make a prototype of their ideas. When that prototype is built and functional, you can then incorporate its ideas into your monolith, which I’m sure is not using JS. That way, your front-end engineers get to work with an API of their own design, and you aren’t up every night debugging performance issues with an unfamiliar platform.

    1. 3

      You should check out Go! :)

      1. 1

        why? :)

        1. 1

          no inheritance

          1. 4

            Ah right. :-) I’m using Clojure though. This post was prompted by finding that Turbolinks had been rewritten in heavily-OOP TypeScript and it was just impossible to find what I was looking for. On the contrary, in their old codebase, called now turbolinks-classic, I found that code in a few minutes.

            1. 1

              true, but at the same time…turbolinks works a lot more often (for me, anyway) these days than it used to.

            2. 3

              Not just “no inheritance”, “no” a lot of other things too.

              1. -2

                Well that’s because it has no object system to speak of.

                1. 3

                  It does have objects but uses composition instead of inheritance for code reuse.

            1. 7

              I think the author of this post is correct in surmising that the proliferation of feature-rich, graphical editors such as Visual Studio Code, Atom, and Sublime Text have a direct correlation to the downturn of Emacs usage in recent years. This might seem a little simplistic, but I think the primary reason for most people not even considering Emacs as their editor comes from the fact that the aforementioned programs are customizable using a language that they are already familiar with, either JS or Python. Choosing between the top two interpreted languages for your editor’s scripting system is going to attract more people than choosing a dialect of Lisp. The fact that Emacs Lisp is one of the most widely-used Lisp dialects tells you something about how popular Lisp is for normal day-to-day programming. It’s not something that most are familiar with, so the learning curve to configuring Emacs is high. Meanwhile, VS Code and Atom let you configure the program with JSON and JavaScript, which is something I believe most developers in the world are familiar with at least on a surface level. If you can get the same features from an editor that is written in a familiar language, why would you choose an editor that requires you to learn something entirely different?

              I use Emacs, but only for Org-Mode, and I can tell you with experience that editing the configs takes a bit of getting used to. I mostly use Vim and haven’t really compared it to Emacs here because I don’t feel like the two are easily comparable. Although Vim’s esoteric “VimL” scripting language suffers from the same problems as Emacs, the fact that it can be started up and used with relatively minimal configuration means that a lot of users won’t ever have to write a line of VimL in their lives.

              1. 13

                I might be mistaken, but I don’t think that most “feature-rich, graphical editors”-users don’t customize their editor using “JS or Python”, or at least not in the same way as one would customize Emacs. Emacs is changed by being programmed, your init.el or .emacs is an elisp program that initializes the system (setting the customize-system aside). From what I’ve seen of Atom, VS Code and the like is that you have JSON and perhaps a prettier interface. An Emacs user should be encouraged to write their own commands, that’s why the *scratch* buffer is created. It might just be the audience, but I don’t hear of VS Code users writing their own javascript commands to program their environment.

                It’s unusual from outside, I guess. And it’s a confusion that’s reflected in the choice of words. People say “Emacs has a lot of plugins”, as that’s what they are used to from other editors. Eclipse, Atom, etc. offer an interface to extend the “core”. The difference is reflected in the sharp divide between users and (plugin) developers. Compare that to Emacs where you “customize” by extending the environment. For that reason the difference “users” and “developers” is more of a gradient, or that’s at least how I see it. And ultimately, Lisp plays a big part in this.

                It was through Emacs that I learned to value Free Software, not as in “someone can inspect the code” or “developers can fork it”, but as in “I can control my user environment”, even with it’s warts. Maybe it’s not too popular, or maybe there are just more easy alternatives nowadays, but I know that I won’t compromise on this. That’s also probably why we’re dying :/

                1. 12

                  Good defaults helps. People like to tweak, but they don’t want to tweak to even get started. There’s also how daunting it can appear. I know with Vim I can get started on any system, and my preferred set of tweaks is less than five lines of simple config statements (Well, Vim is terse and baroque, but it’s basically just setting variables, not anything fancy.). Emacs, there’s a lot to deal with, and a lot has to be done by basically monkey-patching - not very friendly to start with when all you want is say, “keep dired from opening multiple buffers”.

                  Also, elisp isn’t even a very good Lisp, so even amongst the people who’d be more in-tune with it could be turned off.

                  1. 3

                    Also, elisp isn’t even a very good Lisp, so even amongst the people who’d be more in-tune with it could be turned off.

                    I agree on the defaults (not that I find vanilla Emacs unusable, either), but I don’t really agree with this. It seem to be a common meme that Elisp is a “bad lisp”, which I guess is not wrong when compared to some Scheme and CL implementations (insofar one understands “bad” as “not as good as”). But it’s still a very enjoyable language, and perhaps it’s just me, but I have a lot more fun working with Elisp that with Python, Haskell or whatever. For all it’s deficiencies it has the strong point of being extremely well integrated into Emacs – because the entire thing is built on top of it.

                    1. 1

                      I also have a lot more fun working with Elisp than most other languages, but I think in a lot of regards it really does fail. Startup being significantly slower than I feel that it could or should be is my personal biggest gripe. These days, people like to talk about Lisp as a functional language, and I know that rms doesn’t subscribe to that but the fact that by default I’m blocked from writing recursive functions is quite frustrating.

                  2. 3

                    It’s true, emacs offers a lot more power, but it requires a time investment in order to really make use of it. Compare that with an editor or IDE where you can get a comfortable environment with just a few clicks. Judging by the popularity of macOS vs Linux for desktop/workstation use, I would imagine the same can be said for editors. Most people want something that “just works” because they’re busy with other problems during the course of their day. These same people probably aren’t all that interested in learning a the Emacs philosophy and getting to work within a Lisp Machine, but there are definitely a good amount of people who are. I don’t think Emacs is going anywhere, but it’s certainly not the best choice for most people anymore.

                    1. 7

                      I can’t find it now, but someone notes something along those lines in the thread, saying that Emacs doesn’t offer “instant gratifications”, but requires effort to get into. And at some point it’s just a philosophical discussion on what is better. I, who has invested the time and effort, certainly think it is worth it, and believe that it’s the case for many others too.

                      1. 7

                        Most people want something that “just works” because they’re busy with other problems during the course of their day.

                        This has been my experience. I learned to use Vim when I was in school and had lots of free time to goof around with stuff. I could just as easily have ended up using Emacs, I chose Vim more or less at random.

                        But these days I don’t even use Vim for programming (I still use Vimwiki for notes) because I simply don’t have time to mess around with my editor or remember what keyboard shortcuts the Python plugin uses versus the Rust plugin, or whatever. I use JetBrains IDEs with the Vim key bindings plugin, and that’s pretty much all the customization I do. Plus JB syncs my plugins and settings across different IDEs and even different machines, with no effort on my part.

                        So, in some sense, I “sold out” and I certainly sacrificed some freedom. But it was a calculated and conscious trade-off because I have work to do and (very) finite time in which to do it.

                        1. 3

                          IDEs are actually quite complicated and come with their own sets of quirks that people have to learn. I was very comfortable with VS Code because I’ve been using various Microsoft IDE’s through the years, and the UI concepts have been quite consistent among them. But a new user still needs to internalize the project view, the editing view, the properties view, and the runtime view, just as I as a new user of Emacs had to internalize its mechanisms almost 30 years ago.

                          It’s “easier” now because of the proliferation of guides and tutorials, and also that GUI interfaces are probably inheritably more explorable than console ones. That said, don’t underestimate the power of M-x apropos when trying to find some functionality in Emacs…

                        2. 2

                          Although I tend to use Vim, I actually have configured Atom with custom JS and CSS when I’ve used it (it’s not just JSON; you can easily write your own JS that runs in the same process space as the rest of the editor, similar to Elisp and Emacs). I don’t think the divide is as sharp as you might think; I think that Emacs users are more likely to want to configure their editors heavily than Atom or VSCode users (because, after all, Elisp configuration is really the main draw of Emacs — without Elisp, Emacs would just be an arcane, needlessly difficult to use text editor); since Atom and VSCode are also just plain old easy-to-use text editors out of the box, with easy built-in package management, many Atom/VSCode users don’t find the need to write much code, especially at first.

                          It’s quite easy to extend Atom and VSCode with JS/CSS, really. That was one of the selling points of Atom when it first launched: a modern hackable text editor. VSCode is similar, but appears to have become more popular by being more performant.

                          1. 2

                            Yeah, use plugins in every editor, text or GUI. I’ve never written a plugin in my life, nor will I. I’m trying to achieve a goal, not yak-shave a plugin alone the way.

                            1. 3

                              I’m trying to achieve a goal, not yak-shave a plugin alone the way.

                              That’s my point. Emacs offers the possibility that extending the environment isn’t a detour but a method to achieve your goals.

                              1. 4

                                Writing a new major mode (or, hell, even a new minor mode) is absolutely a detour. I used emacs for the better part of a decade and did each several times.

                                I eventually got tired of it, and just went to what had the better syntax support for my primary language (rust) at the time (vim). I already used evil so the switch was easy enough.

                                I use VSCode with the neovim backend these days because the language server support is better (mostly: viewing docstrings from RLS is nicer than from a panel in neovim), and getting set up for a new language is easier than vim/emacs.

                                1. 1

                                  It’s not too surprising for me that between automating a task by writing a command and starting an entire new project that the line of a detour can be drawn. But even still, I think it’s not that clear. One might start by writing a few commands, and then bundle them together in a minor mode. That’s little more than creating a map and writing a bare minimal define-minor-mode.

                                  In general, it’s just like any automation, imo. It can help you in the long term, but it can get out of hand.

                          2. 6

                            but I think the primary reason for most people not even considering Emacs as their editor comes from the fact that the aforementioned programs are customizable using a language that they are already familiar with, either JS or Python

                            I disagree.

                            I think most people care that a healthy extension ecosystem that just works and is easy to tap in to is there - they basically never really want to have to create a plugin. To achieve that, you need to attract people to create plugins, which is where your point comes in.

                            As a thought experiment, if I’m a developer who’s been using VS Code or some such for the longest time, where it’s trivial to add support for new languages through an almost one-click extension system, what’s the push that has me looking for new editors and new pastures?

                            I can see a few angles myself - emacs or vim are definitely snappier, for instance.

                            EDIT: I just spotted Hashicorp are officially contributing to the Terraform VS Code extension. At this point I wonder if VS Code’s extension library essentially has critical mass.

                            1. 3

                              Right: VS Code and Sublime Text aren’t nearly as featureful as Emacs, and they change UIs without warning, making muscle memory a liability instead of an asset. They win on marketing and visual flash for their popularity, which Emacs currently doesn’t have, but Emacs is what you make of it, and rewards experience.

                            1. 11

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

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

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

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

                              1. 10

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

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

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

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

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

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

                                1. 3

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

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

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

                                  C has a very fast compile time.

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

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

                                  1. 3

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

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

                                    1. 2

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

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

                                      1. 6

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

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

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

                                        1. 4

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

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

                                          1. 1

                                            Thanks, never thought about this!

                                    2. 1

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

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

                                      C has a very fast compile time.

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

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

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

                                  1. 2

                                    Yes, I have mouse mode on for tmux, vim, and weechat when I use it. It’s very useful for scrolling large text files, selecting text, or maybe clicking a tab in tmux/vim when things are really getting crazy up in your tab bar. I use the same hotkeys with both vim and tmux so it’s the same keystrokes to remember everywhere.

                                    1. 2

                                      I’ve also been using the nginx rtmp module to handle multi-location video streaming as well. My band as well as electronic duo are planning to live stream a full show very soon. Just need to run some stress tests on the RTMP server. We’re using OBS to transition between the video feeds, and for the audio, we’re going to all be on a private NINJAM server. Since we can adjust the audio delay in OBS to match up with everyone’s video, we believe it will provide the closest thing to a live performance that you can get in quarantine.

                                      1. 1

                                        NINJAM is really cool. I’ve thought about trying to do something similar but always decided it wasn’t really worth the trouble because of the latency involved. I’m going to have to look into it some more and might actually use it with a few friends; thanks for mentioning it!

                                        1. 1

                                          It’s not exactly easy to start up a NINJAM server, you have to compile from source and it’s not very well supported. But once it’s running, it’s pretty stable, and I haven’t noticed any latency when jamming with others on my public server, but considering the results of our latest RTMP server tests, I’m predicting that I’ll have to adjust the audio source latency in OBS to compensate for the video latency. Just listening to the audio alone, however, shows that everyone in the server is definitely playing along together and reacting to each other just as they would in a real-life jam.

                                      1. 15

                                        This is how most fraud protection services work…I’m not sure what the issue is. When it comes to credit card fraud, you don’t want your site to be used as a means for testing stolen card numbers. Too many bad authorizations and you start having to pay a lot more per transaction. CAPTCHA on checkout (apparently) causes conversions to plummet, so what do you do? Piss off a few nerds for the sake of your company and making fraudsters have to turn to another site to do their dirty work? Sounds like a good trade-off to me.

                                        I definitely understand the privacy implications here, and that is an unfortunate side effect, but without advanced monitoring like this, I’m really not sure how you would defend against sophisticated credit card bots.

                                        1. 23

                                          I recently encountered Firefox’ megabar, and was shocked, as it seem like such a bad idea. And I usually hesitate to say think like these regarding UIs, as most of the time it’s just a matter of getting used to. What surprised me more, was that my father, who was sitting behind me didn’t understand what I was even talking about. He has been developing and using various environments (passively) for almost 30 years, and I notice that most modern UIs just confuse him. For example, while using Ubuntu and wanting to check a calendar, he didn’t bother trying to find where Unity hides it, but opened a terminal and ran cal. When he needs to open a text file he uses nedit. But what I realized is that because he has been dragged through so many different UIs and UXs, that he has lost “sight” for such by comparison small changes as a “megabar” or a few more/less hamburger menus – why worry about it if the next fad is just around the corner?

                                          1. 4

                                            this is most of the reason why i tend to stay in the terminal for most work-related things. generally, if i can do something in the shell and i’m not trading off a bunch of functionality for doing so, i’ll try to do it in the shell. UIs change, command-line tools can’t because they’re open APIs.

                                            1. 4

                                              People are reinventing term tools every day. There are a lot of “alternatives” for things like top, ls, cat, (…), generally written in a safer language, and adding blinken lights. Of course you’re not forced to use those.

                                              The same thing happened to Windows or Gnome, except it’s much more visible since it is what most people see everyday with no alternative (at least for Windows).

                                              1. 5

                                                I think you’re right that the difference is that a tool like ripgrep can be written by one person, and is not to the exclusion of the original.

                                                A web browser is necessarily so complicated in 2020 that immense resources are required to make one happen. There is an extent to which users are held hostage to the whims and capricious changes in those UIs because it’s difficult or impossible to do anything else.

                                            2. 2

                                              when i first read this comment i thought you were referring to firefox’s default configuration with no search bar, and blank space on either side of the address bar.

                                              then i saw the megabar. oh my goodness.

                                              1. 1

                                                Lucky it’s easy to disable via about:config, but seeing that there is no “user friendly” way to do the same, it’s obvious that Mozilla wants this to be used.

                                                1. 1

                                                  Only for two months. Firefox 77 will remove the pref, at which point you will need a user style instead.

                                                  1. 1

                                                    you serious?

                                                    1. 1

                                                      That’s what’s been posted to bugzilla.

                                            1. 15

                                              I expected a bitter rant, but it touches on cultural problems in open source. Open source projects often begin by scratching an itch of its initial creator. That is the nature of open source. As the project grows, others with an itch to scratch join. And that is where it becomes difficult because project management enters the picture. When it is no longer an individual project, it is no longer feasible to address only the problems known to the originator, but to other users as well. It is obvious that Elm hasn’t managed to cross over from the originator’s perspective to a more holistic one, as evidenced by the privileges given to core contributors encoded in the software itself. Maths and i18n are obvious examples: since they’re not interesting enough for the Elm core team, they are externalised as non-interesting, nice-to-haves, whereas the personal priorities of the core contributors can bypass those rules.

                                              1. 5

                                                It’s all about empathy for your fellow developers. I maintain the redis-store gems for Ruby, typically used in most Rails apps for cache/session storage. For the most part I’m not affected by the changes made by other contributors, nor are most of the users. Many of them are relatively specific to a problem one is trying to solve, or they’re trying to make things a bit more convenient for a specific workflow. Regardless, I feel that it’s my duty to be empathetic to their problems, and not just reject everything that doesn’t have to do with the majority use case.

                                                I’ve wondered for a long time why Elm doesn’t get more attention. Surely, this project (which was very ambitious many years ago) must have reached some sort of maturity by now? Why aren’t more people using Elm? This post has somewhat answered my questions. It turns out that Elm is preventing people from using Elm. Who would have thought? :)

                                                I don’t really understand the reasoning behind their decisions, at all. I get wanting to maintain control over your own project, but news flash: once it’s open source, you don’t get that luxury anymore. Once others are able to criticize and even change your code to suit their own interests, you’re no longer in control. That’s just how open-source, freely developed projects work. Additionally, their resistance toward allowing JavaScript in Elm code just seems obstructive for the sake of it. If most of the reusable front-end code in the world is being developed in JavaScript, and published to NPM, why wouldn’t you want access to that ecosystem?

                                                Elm should take a cue from the Rails team. They don’t discuss their plans for future additions to the framework in the open until they have stitched together a solid design and announce it formally. Most of the time, some kind of gem is made available for users to test it on their own apps. These users come back with bugs and feature requests, and over time become contributors to the project themselves. This is probably the best way of maintaining some level of control over your project’s roadmap, while still allowing users to have the freedom that they’re used to from projects.

                                                The idea that Elm is trying to control the narrative here is just hilarious to me. It’s like they’ve learned nothing from Barbra Streisand

                                                1. 1

                                                  Elm should take a cue from the Rails team. They don’t discuss their plans for future additions to the framework in the open until they have stitched together a solid design and announce it formally.

                                                  Could you clarify this part? Does the rails team discuss the roadmap in an internal mailing list that is not open to the public? If so, I’d be surprised by it - because open source projects normally have public discussions forums, which includes the public issue tracker.

                                                  1. 2

                                                    I believe the core team uses Basecamp to communicate future roadmap proposals, but uses a mailing list and of course GitHub issues to communicate that to the public. But, for example, it’s not like the Rails community had any direct input on the initial (prototype) development of stuff like ActiveStorage or ActiveJob prior to them getting released as gems and the core team saying “here’s what we got. how can we make it better?”

                                                    Obviously this stuff comes from a ton of indirect feedback over the years, as well as the core team keeping a close eye on the kinds of apps people are building with their framework, and when they need to turn elsewhere to solve their problems.

                                              1. 3

                                                RuboCop started out being a pretty fair representation of a “style guide” for Ruby, and I can’t thank you enough for your work. It’s saved me a lot of time and trouble, and helped newer developers get started writing great looking Ruby! But over the years I feel like a lot of superfluous rules began getting added to this supposed community style guide that I don’t remember anyone really having a discussion over. It seems like for any syntactical decision that can be made, there’s a RuboCop rule telling you which choice to make, even though it doesn’t have any context over why you made that choice.

                                                Here’s a great example. I don’t think and / or continuance should be used in this context:

                                                if something? and something_else?
                                                  # do stuff

                                                But I use it all the time in this one:

                                                redirect_to some_path and return if something?

                                                But RuboCop will make me rewrite that latter one into:

                                                if something?
                                                  redirect_to some_path
                                                  return nil

                                                IMO this looks a lot worse.

                                                It’s stuff like that…RuboCop IMO needs a huge cleanout, most of the cops need to be disabled by default, with the ability to add ones in places that you feel are appropriate. Additionally, I think RuboCop’s existing cops should be modified to understand the context in which they are running, and possibly have that context altered by RuboCop plugins (for example, rubocop-rails might be able to tell RuboCop that you’re running in a Rails app, so some of the cops make sense in some places)

                                                1. 3

                                                  Aesthetically, I agree, but fwiw I think the RC recommendation here is absolutely superior for a codebase being worked in any kind of team setting.

                                                  The problem with the first is that it forces the reader to understand the fine points around the difference between and and && – and the writer to get those correct. Safer to avoid it entirely. I see it as a case of safety and simplicity trumping aesthetics.

                                                  1. 3

                                                    I feel like the standardrb gem is a response to this. Have you tried it instead? I use it for the sidekiq codebase.


                                                    1. 2

                                                      For a long time I had it on my todo to check what exactly is changed in the default configuration there. I appreciate the goal of the project, but experience has thought me that finding complete consensus on style in our community is never going to happen. Or at least quite unlikely to ever happen. :-)

                                                      1. 1

                                                        Well, standard is there for people who do want to use an opinionated tool. Rails vs Sinatra, right?

                                                        1. 2

                                                          Fair point, although I guess you can say RuboCop is opinionated as well - it has some defaults for everything. :-)

                                                      2. 1

                                                        I haven’t, but I’ve heard good things. Will check it out.

                                                      3. 2

                                                        Funny enough the example you gave was recently fixed (see https://github.com/rubocop-hq/rubocop/issues/7795). :-)

                                                        But I understand your point. Perhaps we went overboard here and there and RuboCop became too heavy-handed in certain cases. When those things happen gradually over the course of many years from time to time it’s hard to notice them. Doing sweeping changes is always alluring, but for everyone who wants those there’s also someone objecting, so we have to approach changes carefully. Hopefully at some point we’ll get to implementing some context-specific functionality.

                                                      1. 9

                                                        47 Percent Of Consumers Are Blocking Ads wow! Pretty good stuff!

                                                        PS: https://docs.plausible.io/ has google analytics running - WTF?!!

                                                        1. 7

                                                          We’re using Gitbook for docs and it looks like they include the GA script even when you don’t have it configured. That’s terrible, thanks for pointing it out.

                                                          I guess it shows how pervasive GA really is.

                                                          I’ve considered self-hosting our docs previously. This is a good reason to stop using Gitbook and make the move. Cheers.

                                                          1. 4

                                                            If I made one domain remove GA, it is a happy day for me – cheers!

                                                            PS: I’m happy to see that your analytics is not blocked in uBlock Origin.

                                                            1. 2

                                                              Hosting your docs on GitHub Pages is pretty easy. Just need to learn your way around Jekyll.

                                                            2. 1

                                                              47 Percent Of Consumers Are Blocking Ads

                                                              Wow, that’s great news!

                                                              To celebrate, here’s a list of uBlock Origin-compatible filters to block all the annoyances on Forbes:

                                                            1. 1

                                                              I have a couple issues with this article. Most notably, the way the author portrayed the way time.Parse works.

                                                              In real life, this would actually look something more like:

                                                              currentTime, err := time.Parse("2006-01-02 15:04:05", timestamp)
                                                              // or, if dealing with some form of standardized timestamp
                                                              currentTime, err := time.Parse(time.RFC3339, timestamp)

                                                              I can understand the weird order of arguments, but it’s not quite as confusing if your vars are named correctly. In my opinion, this makes dates and times much easier to parse and deal with rather than looking up whether I should be using %H or %h in man strptime

                                                              The compiler is another story. While I do agree that whining about what seem to be just “tidiness” issues in the code is annoying in the development process, I think the reasoning behind throwing an error when you have a dangling import or unused variable boils down to compile-time optimization. If the compiler doesn’t need to import something that you’re not using, you can save time and speed up the compilation process. I’m sure it’s not a big change with one import, but what about 50? That could seriously change things. All that being said, I still think this is an improvement that can be made within the toolchain of the language, but I believe it’s the job of gofmt or gopls to handle manipulation of your code before it gets to the compiler to avoid these errors. Something where it would automatically comment out an import when you comment out code that uses it, and removing the import if you delete the code that uses it. I would love to see something like this in Go, it would definitely improve the development experience.

                                                              The rest of the article is opinions, and the author is certainly entitled to them, so those aren’t what I have an issue with.

                                                              1. 2

                                                                Of course you wouldn’t parse a string constant in real code, except maybe in a unit test for the time.Parse() function itself. ;) All I did is choose a humorous way of showing that the format string looks similar to the timestamps it is supposed to parse. I don’t think the order of arguments is a concern.

                                                                Ad compiler: I believe for development a quick debug cycle between writing code and running the binary to try it is quite important, that’s why I find those errors annoying. I still think being notified about unused code in an automated way is great by itself. When writing Python code I regularly run pyflakes to find issues like that, but on my schedule, when I deem it useful (usually before committing a diff). That’s what I meant with the tool working for the programmer, not the other way around.

                                                                Hope this clears things up.

                                                              1. 2

                                                                These folks were plaguing the Ruby tag for a while, just the same 3 or 4 people writing either inaccurate or useless information just to get upvotes.

                                                                1. 3

                                                                  A “search engine” is kind-of a broad term. Are you talking about the thing that generates search results when you type in a query, or the thing that crawls webpages to get the data for those search results? Those are typically two separate entities, and work asynchronously from one another. The search engine itself, the place you actually type in queries and view results, needs to be highly available, fast, and accurate. The crawler, on the other hand, just needs to be able to crawl as many pages as possible in the shortest amount of time. If you have those components written in something super fast and performant (like Go or Rust), your next bottleneck is going to be the database. PostgreSQL is great and I love it for both personal and professional projects, but I’m not sure you’d be using it to its full potential if it’s just reading and writing to one big table all the time. You’re not working with a bunch of structured, inter-dependent data here, so I’m not sure you’d really be using all the great features that SQL databases provide. You might want to take a look at the various document-oriented databases out there, since they’re a bit easier to scale if you’re not trying to use any of the relational features that you come to expect from SQL.

                                                                  (disclaimer: I don’t have really any specific insight, nor do I work for any search engine companies, this is just what I would do if I wanted to implement a search engine from scratch)

                                                                  1. 2

                                                                    I suppose I mean the entire thing, so both. I’ve heard of document-oriented databases but never looked into them. I’ll check those out.

                                                                    EDIT: Oh, that’s just something like Mongo or Rethink. I’m currently using RethinkDB for my personal projects and like it a lot.

                                                                    1. 2

                                                                      Yeah, or Elasticsearch, which essentially combines a document-oriented data store with the Lucene library for full-text search, communicating over a REST API. Just to add more fuel to the “language doesn’t matter all that much” fire, Elastic is written in Java mostly because it can depend on Lucene, which is also written in Java. The one downside to writing your own search engine in Rust or Go or something else is that you won’t get to use Lucene, which has a lot of the text parsing and query syntax stuff already figured out for you…

                                                                      1. 2

                                                                        There’s lots of Lucene-inspired things in many languages. tantivy is good. sonic though doesn’t depend on it while being an Elastic-like thing.

                                                                  1. 2

                                                                    I’d like to see endfunc and enddef and all the other end* keywords just be replaced with end. Why does a block of code need to be so explicit?

                                                                    1. 5

                                                                      It was mentioned on the mailing list thread:

                                                                      Please don’t change endfunction/endif/endwhile… it makes it hard for plugins like match-up to make % work. Also complicates things for very little benefit, at best saving a tiny amount of typing, at worst makes it easy to lose track of scopes.


                                                                      It would be even more readable if we use “}”:

                                                                          if cond
                                                                            do something
                                                                          for i in list
                                                                            do something
                                                                            let local = 0

                                                                      “endfunction” should probably be kept, otherwise a missing “}” or “end” is hard to locate.

                                                                      Personally I don’t think it matters much, so not an endorsement of these views. Just posting the arguments that people made.

                                                                      1. 2

                                                                        I’m not saying get rid of anything, just give people the option…but holy crap the end } must make it almost impossible to write tooling around vimscript…

                                                                        1. 2

                                                                          I don’t really see why. Just match closing braces with the first preceding pattern in (if, for, {, while, …).

                                                                          There’s a similar thing in Julia (and Pascal) where a single closing symbol (end) is used for many different structures (function, begin, do, for, while, …) and the tooling is fine.

                                                                    1. 1

                                                                      I do the same thing, and even wrote a tool to help out with some stuff. Notably, it will merge your Git repository with $HOME by performing this command:

                                                                      $ homer init https://github.com/your/dotfiles.git

                                                                      In my own dotfiles repo (private), I have a bootstrap script that installs Homebrew and Homer, then runs this command and installs any packages I have set up in Brewfile.

                                                                      There are also some commands for adding files, updating files from the remote, and using ZSH plugins from Antigen, as well as some sane conventions like an edit command for running your $EDITOR and a view command for viewing files with the $PAGER. It also establishes a directory named ~/etc/profile.d that can be used to store configuration executed when a new shell is launched, keeping your ~/.zshenv and ~/.zshrc clean.

                                                                      1. 1

                                                                        Con: Inconsistent user experience

                                                                        This is pretty much a deal breaker for applications that aren’t made by your government…Try getting a sales or marketing team to agree to sacrifice the user experience because it will make your backend more efficient.

                                                                        1. 52

                                                                          Piling up reasons to leave Facebook won’t make people leave Facebook. Most people cannot leave Facebook for the simple reason they need it and they have not enough time/energy/stability to invest time in exploring a new social network and rebuild their connections there.

                                                                          Facebook is social infrastructure now and asking people to renounce using infrastructure is not just about the act itself, it comes with a big cost. You cannot ask people living in the countryside to renounce cars and ride bikes if the next town is 20kms away and the public transporation is basically absent. Yes, you can live in the countryside without a car and take the bus that comes twice a day but the rearragement required in your life is deep and complex. The same is true for Facebook. On top of this, expecting everybody to be able to rearrange their life like this is deeply classist and the like many “hackerist” issues, the condition of working people is not considered, limiting this action to a bourgie privilege equal to eating organic local food to fight global warming. This give the few activists a sense of moral entitlement and the others a sense of guilt (or directly a feeling of hatred for the cause and the activists, because they feel unable to join them), but contributes nothing to the ultimate cause.

                                                                          The solution must be systemic: lobby to limit or ban facebook in your country, promote local, indipendent, politically-aware projects of social infrastructure re-development to replace Facebook, grow existing global solutions and do it on Facebook, because you want to reach the people on Facebook, not the others. And please, stop asking people to leave Facebook.

                                                                          1. 28

                                                                            I was mostly with you until you claimed it’s ‘classist’ to tell people to stop using Facebook. What ‘bourgie privilege’ is involved in not using a toxic, harmful social media website? Step back and take a look at the big picture, seriously. There’s no need to be so dramatic. Using Facebook is not some ingrained human notion, it’s been popular for less than 10 years. Nobody has to ‘rearrange their life’ to stop using Facebook. There are alternatives for nearly every way in which people use it that require the same amount of effort or less to use.

                                                                            Most peoples’ use of Facebook is in a few categories. They use it to show off, for messenger, for marketplace, for local groups, for family groups, or as a news website.

                                                                            A lot of people use Facebook to show off. They post pictures of their kids, places they’ve been, pictures of themselves having fun. There’s a better version of Facebook for this called Instagram. Use that instead. Probably a lot of the same privacy issues, yeah, but at least it’s not literal Facebook.

                                                                            Messenger isn’t even a good messaging platform, and there are lots of other ways of keeping in contact with people. A lot of people tell me they stay on Facebook for messenger, then when I ask them who they talk to on messenger that they can’t message otherwise they can’t answer. People want to ‘stay in contact’ with old school friends, but people managed to do that before Facebook fine, and personally I used that excuse until I realised that I hadn’t done so for years and I wasn’t going to. Let’s be realistic: people don’t keep in contact with old school friends because they don’t have anything in common other than having gone to the same school. They have no reason to keep in contact with or without Facebook. If there’s someone that really matters to you, you’ll find a way to contact them outside of Facebook (“hey can I have your email/phone number/whatever? I’m getting rid of my Facebook account”). And the rest that you never talk to anyway? You won’t actually miss anything by not being able to contact people you were never going to contact anyway.

                                                                            Facebook marketplace is useful to people, but eBay and its many equivalents in different countries still exist and work, the classified section of the local paper still works. There are lots of other ways to buy and sell stuff other than Facebook. In my experience, selling stuff on Facebook means you get the most entitled people in history asking you questions and demanding things of you. The number of times I’ve sold something specifically with a fixed price and ‘pick up only’, the person has said they’ll buy it, and then they’ve turned around and gone ‘hey can you mail it to me I live in [other city]’. It says pick up only what is wrong with you. Or the dozen people that will ask you numerous in-depth questions trying to judge the quality of stuff you’re selling for $5. They can’t seem to tell that the effort I want to put into selling something when all I’m getting is $5 is going to be much less than when I’m selling something for $500.

                                                                            Local area groups are probably the only subject where Facebook is still useful. If you’re a member of the local Facebook group for your suburb or whatever, then go ahead, stick with Facebook. I personally don’t know how people can stand them, they’re full of the kind of people I think Americans refer to as ‘soccer moms’: entitled, bougie, opinionated middle aged women (and it mostly is women) that think vaccines and fluoride are killing their kids and who can’t handle someone going on holiday for six weeks and not mowing their lawn from 10000km away. But some people find value in these groups and I can’t think of any particularly good alternative at the moment.

                                                                            Family groups/group chats/whatever have loads of alternatives. And Facebook is an awful news website. Getting people just to stop using it as a news website, even if they still use it for everything else? That would be a blessing.

                                                                            1. 14

                                                                              There’s a better version of Facebook for this called Instagram. Use that instead.

                                                                              Instagram is owned by Facebook; don’t the same objections to Facebook apply to Instagram, as well? (genuine question, not a challenge)

                                                                              Personally, I find Instagram to be kind of toxic in a way because now everyone is focused on creating the “Instagram picture”. I’m not sure if we can really blame the Instagram platform for that, but I don’t like it. It’s also toxic in the same way as Facebook: you only see the good parts of people’s lives, which is often just a façade.

                                                                              1. 4

                                                                                Instagram is bad for many of the same reasons that Facebook is bad, but it’s not got the same kind of nightmarish qualities that push Facebook from bad to should-be-illegal IMO. I’ve never seen ‘Fake News’ on Instagram, just incredibly facile crap mostly.

                                                                                1. 3

                                                                                  Fake news does seem to be a think on Instagram too: https://duckduckgo.com/?q=fake+news+instagram

                                                                                  1. 2

                                                                                    That facile crap subsidizes facebook.

                                                                                    1. 1

                                                                                      And yet if the choice is between Instagram or Facebook I’d rather they were not on Facebook.

                                                                              2. 19

                                                                                People don’t need Facebook. People need water, amino-acids, vitamins and air. “But I have my entire social life in Facebook?”. I thought so too, then I quit Facebook and Instagram and found that I have exactly the same social life now.

                                                                                In fact. Leaving those platform didn’t change my life one bit. Everything stayed exactly the same. That’s quite telling of the content on there.

                                                                                1. 26

                                                                                  In fact. Leaving those platform didn’t change my life one bit. Everything stayed exactly the same. That’s quite telling of the content on there.

                                                                                  I’m happy for you! Unfortunately that’s not the case for everybody. Maybe you should not assume that it is?

                                                                                  1. 2

                                                                                    How do you know that is not the case for everybody? I am actually curious. Have there been any studies made? I actually believe it is like that for most people. I also believe that they wouldn’t know unless they actually quit.

                                                                                    1. 7

                                                                                      I stopped using it instead of deleting it. The problem is that most people I know, friends and family, put their concerns, plans, important developments, etc on there. I missed all that past what people texted me. They generally won’t go through the trouble to do extra stuff for people just not on the platform. Missing out on stuff created both distance and sometimes resentment by those on the platform.

                                                                                      So, I”ll probably rejoin Facebook plus get on one or more of the others in the future just to prevent that. I’m delaying it because it’s going to be a big change with a pile of incoming posts and messages. I got too much going on to respond to them right now.

                                                                                      1. 3

                                                                                        To combat this, I use FB in a “read-only” way. Although I don’t find a big issue with catching up with people when you actually see them in person. In fact, not paying as much attention to FB almost guarantees that they will have something surprising and interesting to tell me.

                                                                                      2. 6

                                                                                        I’ve never used Facebook and have no intentions to start, but it is not rare that I find I have missed events because they were posted only there. I am also at a point in my career where I don’t have to care that most local jobs are promoted on Facebook and sometimes only there.

                                                                                        1. 5

                                                                                          Well, I can help you with proving that. When I left Facebook a few years ago, I left about a dozen friends behind, whom I now miss.

                                                                                          1. 4

                                                                                            It is definitely not the case for me. Or anyone from Lithuania really. Here Facebook has become so dominant, that other platforms are made basically irrelevant. Twitter? Maybe a thousand users. Mastodon? Three that I know of. Other chat programs? I’ve only seen Discord used which is even worse than Facebook in my opinion. Facebook has over 50% market penetration here, with most of it being in 13-45 range(which by my quick calculations, has ~80% market penetration). This has effects with how people use Facebook. It is the dominant platform of political discourse here. It is basically impossible to leave Facebook without social changes.

                                                                                            1. 4

                                                                                              Have there been any studies made?

                                                                                              A thing is knowable without needing a study.

                                                                                              1. 2

                                                                                                That’d be an interesting study or survey - surprised it hasn’t happened yet. Personally I do most of my chatting on Instagram - friends, acquaintances, group chats, new people I meet. People of my age and socioeconomic group are more likely to exchange IG than phone numbers upon meeting. That’s what’s difficult about these arguments - everyone’s life is different.

                                                                                                Also like @vegai, I once deleted Facebook (~2013) and my social life was greatly hindered. Of course, I am still alive, but looking back I did miss out on a lot of events and people. At least back then Facebook was mostly for events and to easily be able to chat with people you may not be close with yet.

                                                                                            2. 11

                                                                                              Leaving those platform didn’t change my life one bit. Everything stayed exactly the same. That’s quite telling of the content on there.

                                                                                              Because you’re unaware of other ways of use facebook.

                                                                                            3. 7

                                                                                              I understand a little bit where you’re coming from… just making a website telling people to leave Facebook doesn’t necessarily make a huge dent in the “stop Facebook” campaign. However, I respectfully disagree with your comment, and I think following the advice in your comment would be dangerous. Having sites like this are better than not having them.

                                                                                              Specific to this site, I really appreciate that they clearly stated the intent of the site, gave direct reasons backing up their “thesis”, and also provided source links to further back those claims. I hear a lot about the “stop Facebook” campaign, but I think having a site that provides a myriad of reasons why someone should stop using Facebook is helpful. There may be a reason on that site that helps push someone over the edge.

                                                                                              The site at the bottom also provides “how” links so that people can attempt to keep the functionality they would lose by leaving Facebook. Sure, nothing at this point has the exact same scale and features that Facebook does, but this gives people direct reasons why they should leave Facebook and gives them something to go to.

                                                                                              Also… your points contradict each other. Two examples:

                                                                                              • How is someone supposed to “And please, stop asking people to leave Facebook.” while doing “lobby to limit or ban facebook in your country” at the same time?
                                                                                              • “Facebook is social infrastructure now and asking people to renounce using infrastructure is not just about the act itself, it comes with a big cost.” many people are aware of this cost. I know at least one person who has significantly changed their life, their work… and more so that they can help people get off of these dangerous platforms because they see the risk of keeping them as worse. They are prepared to give up temporary satisfaction so that those in the future can have something greater. Calling people “deeply classist” is not respectful to the people who have given a lot to leave Facebook or similar sites; you assume everyone making a stance against Facebook already has some form of privilege.

                                                                                              I don’t share this to be “rude” or argue. I share this because I think what this site is doing is important.

                                                                                              1. 4

                                                                                                Having sites like this are better than not having them.

                                                                                                I agree, but is it the best way to spend your effort? I mean, any tech person is already aware of why Facebook is bad for you, including people working in Facebook. Same is true for people in tech critique. Yes, there are still areas of the intellectual world that haven’t been conquered by these ideas, but it’s not a list of facts that will change that.

                                                                                                How is someone supposed to “And please, stop asking people to leave Facebook.” while doing “lobby to limit or ban facebook in your country” at the same time?

                                                                                                This is not contradictory: I’m on Facebook, I want Facebook to die. In the same way I’m a programmer with a high salary and I believe the system is broken for paying programmers so much. Or that I live in a society that I think it’s broken: it’s literally a meme.

                                                                                                The difference between individual action and systemic action is the key: here the solution must be systemic, not individual. Your stance on a political, systemic action doesn’t have to be somehow in accord with your individual consumption, because changing your consumption would be irrelevant. After the change you will lose Facebook and need to adapt your life? Yes, but so will everybody else and the transition will be easier because you will just follow the flow instead of going against it now.

                                                                                                They are prepared to give up temporary satisfaction so that those in the future can have something greater. Calling people “deeply classist” is not respectful to the people who have given a lot to leave Facebook or similar sites; you assume everyone making a stance against Facebook already has some form of privilege.

                                                                                                If you have time to care about political issues you’re already privileged. I say it as a person that spends half of his time on this and I feel deeply privileged, because I know that if I had to work 12 hours a day on stressful jobs, I wouldn’t be able to do all this stuff. I see the impact of a particularly stressful week at work on my projects and activities: if that was the norm as it is for the general population, I know I wouldn’t be able to achieve anything.

                                                                                              2. 4

                                                                                                lobby to limit or ban facebook in your country, promote local, independent […]

                                                                                                My thinking lately circles around a legislation requiring social services to federate using an open protocol, so that people could freely choose between apps and services without losing their connections. This would recognize the fact that Facebook didn’t create your social graph — you did. And you should own it.

                                                                                                1. 3

                                                                                                  I’d be more in favour of just banning Facebook. People don’t need Facebook or websites like it. Everyone I know that uses it does so under a feeling of duress: everyone else uses it, so I have to use it.

                                                                                                  1. 3

                                                                                                    What would a law banning it look like? Just outlaw social networks entirely?

                                                                                                    1. 3

                                                                                                      It’s enough to say that they cannot be privately owned, centralized or for-profit. Implementing it in law is much much harder but we don’t want to throw the baby out with the bathwater

                                                                                                  2. 2

                                                                                                    Such protocol would have to allow for end-to-end encryption, otherwise not much would change. The real problem isn’t who owns the data, but who can access them. Is strong encryption something society would consider desirable? Hint: Law enforcement.

                                                                                                    Using a single protocol also means that there’s little to no space for inovation. Facebook did come up with things such as reactions to messages, which are not easily translatable to more oldschool IM protocols. As far as I know, it’s been also the first platform that came up with a confirmation that message have been read. I may not like these inovations, but that’s not the point.

                                                                                                    The point is that you either force everyone to use a single protocol and make it difficult to push for any change, or allow for multiple protocols, which is basically what we have right now. Yes, it’s not open, but having documentation doesn’t necessarily mean it’d be possible to keep up; especially when it’s against Facebook’s interest. They would undergo some extra effort to abide the law while making sure no one can actually threaten them by developing a good FOSS client.

                                                                                                    “These scandals just bother everyone. I’d ban all those computers and internets.” – Věra Pohlová, 72 years, pensioner. Newspaper “Metro”, 09/17/1999. Source.

                                                                                                  3. 3

                                                                                                    Most people cannot leave Facebook for the simple reason they need it and they have not enough time/energy/stability to invest time in exploring a new social network

                                                                                                    Most people can’t leave. But many people can.

                                                                                                    The people that stay might think twice before making their next event facebook-exclusive once they realize why other people have left.

                                                                                                    Yes, we need laws to protect us, but until those laws arrive we should do what we can to limit the harm.

                                                                                                    1. 3

                                                                                                      The people that stay might think twice before making their next event facebook-exclusive once they realize why other people have left.

                                                                                                      Until they realize how attached to Facebook they are and come to the conclusion that “oh well, it’s their loss for leaving it.”.

                                                                                                    2. 2

                                                                                                      Piling up reasons to leave Facebook won’t make people leave Facebook.

                                                                                                      The only way to make people leave Facebook is to make them believe that it is unsafe to continue using it. That’s why people flocked to Facebook when MySpace was still around: MySpace let anyone message anyone, but with Facebook you could only talk to someone if you knew them and were their friend. This gave people the perception that Facebook was safer to communicate on, and thus the big migration occurred.

                                                                                                      However, Facebook is well aware of this, and Mark Zuckerberg isn’t quite as short-sighted as Rupert Murdoch. This is why they pour so much money and time into “security” and “privacy” initiatives, so the average Facebook user feels safe on their platform.

                                                                                                      lobby to limit or ban facebook in your country

                                                                                                      Yeah because banning things works… What a joke.

                                                                                                      Facebook isn’t going anywhere unless it does something really spectacularly dumb.

                                                                                                    1. 5

                                                                                                      Why advocate using rufo over RuboCop? I’ve never heard of rufo before this blog post, but RuboCop is almost a standard in Ruby lint tools at this point. In the same vein, Growl has long since been abandoned in favor of terminal-notifier, which uses macOS Notifications and doesn’t require a huge confusing paragraph telling you “NOT TO BUY GROWL (but here is the app store link anyway)”.

                                                                                                      Additionally, I’m a huge advocate for using your package manager the way it was supposed to be used, and to that point, disagree with pinning dependencies unless it’s a fix for a package author not knowing how to distribute with SemVer. If you’re going to pin dependencies, why not just make a script instead of using those “big and bulky” tools like Yarn and Bundler? Loop over every gem and run gem install, loop over every NPM package and run npm add. There’s literally no point to using Yarn or Bundler if you’re just going to pin every dependency anyway. That’s the whole point of package managers, taking some of that work away from you so you don’t have to constantly think about patch version upgrades during your development process.

                                                                                                      1. 2

                                                                                                        I just switched to terminal-notifier and updated the article with it, removing the Growl part. I added a note to rubocop and plan to switching to it at some point when I feel the need. As for pinning dependencies, I added a note also that it can be a touchy subject and found a good article summarizing pro/cons of different strategy as for specifying versions: https://thoughtbot.com/blog/a-healthy-bundle.

                                                                                                        Your comment is linked at some point in the article, thanks again.

                                                                                                        1. 1

                                                                                                          Hey, thanks for reading and for your comments here. While I appreciate you taking the time to do so, the way you wrote the comment (tone, content) is not something I am used to. It’s not welcoming enough for me to be willing to engage in a conversation on the various items and feedback you gave.

                                                                                                          1. 2

                                                                                                            Hey, welcome to the site!

                                                                                                            While it’s often hard (given the low-bandwidth nature of textboxes-on-the-screen vs. in-person communication), please try to engage in conversation with an assumption of good faith. I’ve seen more than once that when both participants make the effort, the tone of the discussion turns pleasant despite an initial roughness and disagreement.

                                                                                                            Congrats on your first post! Keep them coming!

                                                                                                            *edit: typo

                                                                                                        1. 2

                                                                                                          This is nice. But it’s still more setup than needed. Instead I just .gitignore everything and force-add the things I want to add.

                                                                                                          Starting from zero:

                                                                                                          cd ~/
                                                                                                          git init .
                                                                                                          echo '*' > .gitignore

                                                                                                          To add a file, use the “force” option:

                                                                                                          git add -f

                                                                                                          To setup a new computer:

                                                                                                          cd ~/
                                                                                                          git clone <git-repo-url> foo
                                                                                                          mv foo/.git .
                                                                                                          git reset --hard @

                                                                                                          That’s it. No idea why people insist on symlinks, install scripts, “gnu stow” and various other over-engineered things. Well, actually I have an idea of why people insist on over-engineered things ;)

                                                                                                          1. 4

                                                                                                            I did that for a while, but I find it really easy to accidentally mess stuff up badly by thinking you’re in a directory with a git repo but then you’re accidentally running against your ~/.git. That’s not an issue if everything is pushed to a server (unless what you accidentally ran included git push -f), but if there”s been a while since you pushed (or, god forbid, a while since you committed), it’s possible to lose quite a bit of work that way.

                                                                                                            Maybe one solution would be to use something like ~/.dotfiles-git instead of ~/.git and alias dotgit to git --git-dir=~/.dotfiles-git --work-tree=~ ? We’d have the same simplicity benefits, but just running regular git commands in the wrong dir wouldn’t have any effect (and IDEs and text editors which try to scan the git dir to be useful wouldn’t be as sad).

                                                                                                            1. 1

                                                                                                              I do pretty much the same, but with Mercurial. No need to run setup to shuffle symlinks, or have the repo outside ~ itself when I’m making changes, and where one might git clone to pull in other projects in a setup script, I do have a script can add them, but my config degrades gracefully without them. I can pull stuff in if I want to, and function fine without. I don’t think I’ve run into any trouble or surprises doing this, so I’m not sure what the advantages of other schemes might be.

                                                                                                              1. 0

                                                                                                                if you do this manually right now, check out https://github.com/tubbo/homer :)

                                                                                                                1. 1

                                                                                                                  Are you joking? That’s an example of the very thing I want to avoid. The “manual” steps I describe above are not more complicated than the steps needed to install and use a “shell plugin” or other third-party tool.

                                                                                                                  1. 0

                                                                                                                    no, not joking…just trying to help. i did the above for years and got annoyed trying to remember the right commands to run. Homer does a few more things than just the home directory repo thing but that’s one of its big features.

                                                                                                                    1. 4

                                                                                                                      That makes sense if dotfiles is the only thing you use git for, or you’re in a situation where the only git commands you really need are git clone/add/commit/push. However, as I’ve gotten used to how git actually works through years of contributing to open source and working professionally with other people, what /u/jmk is suggesting doesn’t look like commands I would have to remember any more than how you have to remember that cd <directory> goes to a directory or tar czf foo.tgz foo makes a compressed tarball of foo.