1. 1

    Looks like it’s decidedly not open https://github.com/ganelson

    1. 3

      I believe the “opening” is to be understood as present progressive form.

      1. 1

        It’s being staged to be open sourced this fall, I believe.

      1. 1

        git, in particular, is decidedly unfriendly. What I want to do is commit my changes. What I have to do is stage my changes, then commit my staged changes.

        I disliked the Git commit system for many years.

        As you said, for a newcomer staging can be a confusing and seemingly redundant part of the commit process. So for a long time I just dealt with it. I would make my changes, then add/commit at once. Earlier this year I finally realized the point. Previously when I would make even a small change, I would add/commit/push. This gets silly when you are talking about changes less than 10 lines, unless it is an important change.

        So I created a script that checks the index, and if enough lines have been changed then it prints that a commit can be made. It also checks when the last commit was done and allows smaller commits if enough time has passed.

        This is also helpful as sometimes when I am making a new change, I might quickly tweak it or revert it soon after. Now this doesnt end up as 2 commit but just the single commit as the first change never made it past the index.

        https://github.com/cup/suede/blob/master/git/git-board.py

        1. 1

          Looks cool, but just out of curiosity - what’s the performance of this versus a shell implementation?

          1. 8

            i dont have a concrete benchmark, but pista would definitely be faster, its a compiled binary. a shell implementation would have to have atleast 2 external git calls, 1 dir call, and maybe some sed calls to parse output; to produce a similar prompt.

            pista directly uses libgit2 to fetch git statuses, so the amount of parsing, string building etc. is reduced.

            edit: a quick bench with time shows that pista takes 0.011s to render the prompt whereas a similar prompt written in shell takes 0.032s.

            the time difference is negligible even though pista runs 3 times as fast. note that the shell implementation does not have customization, zsh compatibility, vitrual env support etc.

            1. 1

              Nice! Thats always been a sticking point for me with a Git prompt, to the point that I removed it. This looks worth trying a Git prompt again!

            1. 3

              I can’t cover every tool in a post, but I did give it a try. Cygwin is an awesome project, but I didn’t succeed in properly rendering the tool I’m using, and it isn’t a WSL replacement for me because:

              Cygwin is not: a way to run native Linux apps on Windows. You must rebuild your application from source if you want it to run on Windows.

              1. 5

                I try really hard to make blanket statements like this, but:

                in the world of WSL, I can think of absolutely zero reasons to use Cygwin, and a lot of reasons not to. So I don’t think you’re missing anything.

                1. 2

                  Agreed. This was a valliant effort and did a Yoeman’s job for many a year, but its time has past.

              2. 3

                Cygwin is a worse distro than any normal linux and way way slower than WSL

                1. 2

                  way way slower than WSL

                  I am not saying youre wrong, but do you have any data to back this up?

                  I am pretty skeptical of this statement. Also some other issues:

                  1. 2

                    No I never measured, but I remember it being immediately apparent that WSL was faster when I switched over

              1. 1

                are they offering HTTPS yet - i would like to move away from GitHub if possible

                1. 10

                  …SourceHut has had HTTPS for all services since day one.

                  1. 2

                    push and pull?

                    1. 7

                      Oh, no. We support git pull over https, but not push, because SSH is the more secure of the two options. This is a deliberate design decision, not an oversight.

                      1. 1

                        are you willing to lose users by not having HTTPS support? cause thats what is happening in my case

                        HTTPS might be less secure, but it does does offer some security.

                        do you have some underlying reason for being obstinate about this? is it cost?

                        1. 9

                          @SirCmpwn is famously stubborn about these things. See also discussions about styling and why if your monitor is the wrong size (e.g., normal) everything is awkwardly left-justified.

                          For what it’s worth, that stubbornness is likely also going to result in a refusal to compromise on the more important technical issues that could hurt security or performance.

                          Edit: also, to somewhat voice support for the SSH point of view–being able to revoke authentication on a per-host basis (or possibly to improve automation) is really quite handy. The alternative for scripting with https upstreams is putting the credentials in the URL (which is gross and stored in plaintext), or other hashing that eventually makes you just wish you’d used ssh in the first place.

                          If it helps, I can send you the private key and passphrase part of this one (generated with ssh-keygen -b 4096 -t rsa -C noname -f throwaway):

                          ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDMR82IOcor4hdiyeBIDQC/x0ubPVrVFw3zuPLvtXBQQsqD7znRHSsJAlNLD9iPtUdxjj2HjyLLfHrNAa0/iXPQStL5ErtK5+UqVq4seQCoyuakZoWGhmDKb3UAphiwLBuNQYdr/cJ7gLHNxN06thpEbx9pRG4jex1vb8DUfjgDdD5IEb859/pSoY5CTjni4Z+ZKllaCfrQgHNy/tYowxzjNa1HjJnR1SwqDNPrGgF4tJK+zXE4zbQcL3winIrNnvuBzGQmt36x6B6mQSEH32k/L8BAKAegP3CK8DZn9G0pi53Gj9arGYdY23jAT6fUeuAN87iggNo6NT0+jILMFt2rdPMiZj3KnVGcMdQEEqlX9sCw1jTe6v+n8d9wf2VFz45mU3ThrSmzSkyUNvhRV7RwJ6vRVgJ7LuOLZu1PByFMnVG5t5Hc8enS7MrD3bJNHn0q7lX5MBYFBSGbdozu7kY/Pyj/mxd3RNxEoXNmQ7JcolZiDxqGkRaanLDGEBzyLCitJAat30VkBnI/VKSN9jrmygNkg0LTKHY8rxtKZVHmUlDQF6Xuj4O9X7kJ2Xc/ov+dGl0ad38jH0bRtEtoKsGhY53Nw7d43bpOkh7Nhv40KaJVB4XUP23aGgkUDrdoVHyyxu3tqk+8dr1+YdrtwG3gUN8iliu6kSEzwlvhNMN89w== noname
                          
                          1. 13

                            It’s not about cost. It’s about choosing the right tools for the job. HTTP Basic auth is the wrong tool for this job. I don’t want you transmitting your password over the wire, git.sr.ht doesn’t even know your password (or its hash). Why is SSH such a showstopper for you?

                            1. 4

                              Why is SSH such a showstopper for you?

                              Not the OP, but my company doesn’t allow SSH out of the enterprise (I work in government where the company is several thousand employees). Thus anything that doesn’t offer HTTPS push is a no-go. I know of several other companies off the top of my head with similar restrictions.

                              1. 1

                                I remember how much I hated SSH when I first started by using GitHub 8 years ago. It’s an unnecessary complication. If users want the extra security SSH is available, but it shouldn’t be the only option.

                                1. 26

                                  Sorry, SourceHut is probably not for you.

                                  1. 20

                                    A couple of thoughts from me in my capacity as the founder and (very much former) lead dev on Kiln, another Git/Mercurial SCM from around the same time GitHub launched.

                                    First, I’m really with @SirCmpwn on this. Kiln supported pushing and pulling over HTTPS, but only because we targeted Windows users—and even then, only because Windows SSH clients were really rough at the time. If I were writing Kiln today, I really doubt I’d add HTTP push support. I might’ve added support for it eventually anyway in that parallel universe, who knows, but I definitely wouldn’t have kicked off with HTTPS push at launch.

                                    Which brings me to:

                                    I remember how much I hated SSH when I first started by using GitHub 8 years ago.

                                    I really appreciate that SSH can be tricky, but I’m disappointed you’d let an impression you had in 2011 unilaterally cause you to reject the tool in 2019, regardless of what platform you’re on. TortoiseHg, Tower, Git for Windows, SourceTree, and tons of other tools have made handling SSH straightforward. It may still be too complicated for your comfort, but I’d be really hesitant to judge any technology on how it was eight years ago.

                                    I’m also genuinely a bit surprised that you’d be willing to move your entire workflow from GitHub/GitLab/etc. to Sourcehut, but the idea of configuring SSH would be your dealbreaker. Moving CIs, reconfiguring users, porting bugs, moving mailing lists, etc., is all more time consuming and more error-prone than configuring SSH.

                                    1. -2

                                      I’m also genuinely a bit surprised that you’d be willing to move your entire workflow from GitHub/GitLab/etc. to Sourcehut, but the idea of configuring SSH would be your dealbreaker.

                                      Good point, but my workflow is currently “low impact”, so it would be an easy move:

                                      Moving CIs,

                                      dont use them currently

                                      reconfiguring users,

                                      just me currently

                                      porting bugs,

                                      yeah that would be annoying - but my top 4 repos have a total of 17 issues, so nothing earth shattering.

                                      moving mailing lists, etc.,

                                      dont use those, for smaller projects its just redundant to github issues.

                                      is all more time consuming and more error-prone than configuring SSH.

                                      so you can see in my case if i could just find a decent site without the github feature bloat i would be happy to move. but currently sourcehut it not that option. yes SSH is more secure. but you know what? i dont care. maybe HTTPS will bite me someday and i will get hacked. but in 8 years it hasnt happened so i am happy to continue playing the odds. i am not happy with a site owner that refuses HTTPS not because of money, but because of some righteous insistence that SSH is the one and only way that is acceptable.

                                      1. 4

                                        yes SSH is more secure. but you know what? i dont care.

                                        So, fine, this is your life… but also you should be aware that your practice isn’t common practice, and it’s worse than the common practice of using ssh keys in almost every way. You should expect to encounter more resistance to your approach over time.

                                        Like, you can write your Windows 10 GUI software with php-gtk, but you’d be part of a rapidly diminishing minority. You’re right that you can’t use it to add things to the task tray, but if that’s what you want to do you’ll be far better served using a different, more popular toolset.

                                    2. 1

                                      I really don’t understand what there is to hate about it. As a user experience, it’s not much different one way or the other, aside from the initial setup.

                                  2. 1

                                    are you willing to lose users by not having HTTPS support? cause thats what is happening in my case

                                    I don’t understand. What do you need that for?

                                  3. -1

                                    Something like randomly generated repository specific https passwords may be interesting. Though even that is probably also just be a less secure complication.

                            1. 1

                              Looks like no Windows builds

                              https://gitlab.com/inko-lang/inko/issues/173

                              1. 1

                                Windows has a whole Linux now, though. I haven’t used the recent versions of Windows or WSL, though. Is that helpful in these situations?

                                1. 1

                                  Looks like only Linux and Mac builds currently:

                                  https://releases.inko-lang.org/inko/manifest.txt

                                1. 1

                                  And MacOS, at least for the moment. (We are in trouble when 32 bit binaries are booted off the platform)

                                1. 8

                                  Don’t trust anyone: Firefox > uBlock Origin > uMatrix > anti-fingerprinting addons > disconnect from the internet forever > burn any electronic device > move into a cave

                                  I’m at the 4th stage right now.

                                  1. 4

                                    Here’s some advice: Don’t try too hard. I burned myself out trying to “protect” myself from tracking and now can’t bring myself to care past using adblock.

                                    1. 2

                                      I go on and off on blocking Javascript. It’s a privacy and security apocalypse and you can’t responsibly run it, but blocking it breaks too much of the web, and even trying to do harm-reduction leaves stuff I really need to work broken. (I was trying to book hotel rooms in Europe and the standard payment form setup involved cross-origin iframes in such a way that having uMatrix installed caused it to silently fail. Toggling all the enforcement off wasn’t enough to make it work, but disabling it at the browser level did.)

                                      What I want—which I don’t think exists—is not to block loading from certain origins, but to block features globally. No timing more accurate than a second. No timeouts. No keyboard, mousemove, or scroll events. Throttle to 1% of available CPU capacity after the first second. Basically prevent it from fucking things up while still allowing it to run so it can load and render page content. Browsers used to provide configuration for some of that (I remember going into Opera’s settings and unchecking all the “allow scripts to” options), which mostly seems to have gone away, and I haven’t seen any extensions offer anything similar (and I’m not sure they even could technically).

                                      1. 1

                                        I use Safari with tons of stuff disabled as my browser, and Chromium in private mode for e.g. logging into Amazon or visiting sites I’m not familiar with. It’s a pain, but honestly, making the shitshow that is the modern web harder to use has benefits. It’s a harm reduction strategy because I’m too chicken to pull the plug entirely.

                                        1. -1

                                          uBlock Origin can block JavaScript, no need for uMatrix. here are my rules if it helps

                                          https://github.com/cup/hearth/blob/master/firefox/rules.cfg

                                        2. 1

                                          Well, I’m not that easy to give up.

                                          uMatrix is already in my workflow for visiting pages and if websites really don’t want to cooperate with Firefox (more than you’d imagine), I just use Chrome on a similar setup.

                                          But if I’m avoiding the bad stuff in my day to day routine and “allow” less protection in some rare circumstances, I’m kind of ok with it.

                                          1. 1

                                            I haven’t used Chrome in over a year. Where do you go that doesn’t support Firefox? I wonder if it’s just an addon making things less functional.

                                            1. 1

                                              As someone who hasn’t invested the time and energy into anonymyzing my browser, I’m curious how much the effort pays off. Would you indulge my curiosity to see what your fingerprinting score / percentages are on AmIUnique? https://amiunique.org/fp

                                              1. 2

                                                I think the purpose of the fingerprinting techniques is to randomise the values, so your fingerprints will still be unique but not traceable?

                                          2. 2

                                            Add a stage of “exclusively use gopher rather than the web” in between anti-fingerprinting addons and disconnect from the internet.

                                            1. 1

                                              I think you only need uMatrix if you are trying to block specific cookies on some sites. If you are just blocking JavaScript uBlock Origin can do that, and Firefox itself can do cookie bans by domain.

                                              1. 2

                                                uMatrix gives you a full picture of how each pages behaves and works, to me that’s invaluable. I can decide if I want the captcha to load, the video to be fetched or anything else.

                                                To me that’s better than a mysterious addon which does everything automatically but I don’t know what’s letting through.

                                                With uMatrix I know page doesn’t do anything bad unless I trust it sufficiently enough to enable its core components, one by one.

                                            1. 2

                                              I submitted this not really because I agree with it but was curious if any lobsters out there have strong feelings. I have been using other languages for a while and not stayed up with recent developments. I generally still like ruby and use it fairly regularly and actually kind of like the constancy of it. I do, however, find myself reaching for other tools more often lately.

                                              However, the claims here that ruby core is working against the general sentiments of the community at large, while examples were provided, seemed slightly exorbitant. So I was curious if others here felt this is the case or not.

                                              1. 10

                                                Ruby’s dead. How’s that for a strong feeling?

                                                I wish I could be more articulate, but it seems an inexorable conclusion of two forces. One, javascript is the language of the browser. Two, people have been making javascript as easy as possible for decades now.

                                                Notice there are a lot of kids on http://repl.it/talk … I wonder how many of them are genuinely trying to learn ruby rather than JS?

                                                Look, I’m no JS zealot. I’m more of a “skate where the puck is going to be” kinda guy. And the ruby players on the rink have been skating toward other places.

                                                Rails was incredible. I remember how magical that first demo was. You could do in ten minutes what took days in PHP.

                                                Nowadays, doing that is sometimes as easy as running now.

                                                Oh boy, there I go again expressing super strong confrontational opinions… For what it’s worth, if I’m wrong, you’ll get the satisfaction of rolling your eyes and watching Ruby eat the world over the next decade. But it just doesn’t feel like that’s the world we’ll end up in. Pull up any visualization of “let’s measure the popularity of programming ecosystems” and it’ll look a lot like JS and Python won. https://www.youtube.com/watch?v=wS00HiToIuc

                                                1. 10

                                                  As a ~10 year experienced engineer with the bulk of that time in Rails currently looking elsewhere, I will say: the job market would seem to indicate that Ruby is very much alive and well. I’m curious about the JS comment, as I feel like Ruby has never been the language of the browser.

                                                  That said, the mid-to-upper tier web companies these days seem to be doing server side development in Go more often than Rails. I’m looking to change only because I want to learn something new. Ruby/Rails if anything has slowed down its formerly frenetic rate of change, performance has increased to a respectable degree and the ecosystem is filled with robust libraries, a good testing culture… Rails is by no means a terrible stack to work in. YMMV of course. Edit: I do agree with the examples in the original article… the pipe operator in particular strikes me as an ugly solution looking in vain for a problem.

                                                  But I find the “Javascript is taking Ruby’s place” remarks very confusing, as Ruby is a server-side language, and Go seems also to have stolen the server-side market share from Nodejs.

                                                  1. 6

                                                    as I feel like Ruby has never been the language of the browser.

                                                    Whoops. My point was, JS is the language of the browser. If you want to do much of anything with “webpage + browser,” you need to know JS.

                                                    That means if you know JS, you can largely get by without knowing anything else. Or rather, you can learn whatever else you need to learn as you go.

                                                    job market

                                                    We’re so lucky that the job market gives us so many options. I totally agree; I didn’t mean to imply that if you’re a ruby dev, you should worry about your career prospects. So much of the world was built on Rails that you’ll probably be able to find work for a long time.

                                                    All I meant was, younger people don’t seem to be interested in learning Ruby. When those younger people become older people, and the older people become less and less people, the world changes.

                                                    If that sounds grim, just be glad you’re not a Lisp guy like me. It’s almost painful to watch everything not use the power of compile-time macros. But at least I get to use it myself.

                                                    Go seems also to have stolen the server-side market share from Nodejs.

                                                    You’re right that Go has had some surprising momentum here. Much of repl.it is apparently built on Go. But the advantage of JS is the ten hundred million libraries that exist to solve all problems ever thought of. (More than a little bit of hyperbole here, but it’s almost not far from the truth.) If you need to do X and you happen to be using JS, you don’t have to read any docs. You can just type “do X in Javascript” into google, and google turns up an npm package for X, for all basic X. Other languages will always be second-place regarding convenience, for this reason.

                                                    Super Serious Projects will tend to be written by people who want absolute type safety and clearly-defined module boundaries and never to see an error. Hell, golang doesn’t even have a REPL. But anyone who’s missed a REPL will tell you that it’s a serious disadvantage not to have a REPL.

                                                    1. 9

                                                      the advantage of JS is the ten hundred million libraries that exist to solve all problems ever thought of

                                                      As someone who has done quite a bit of both Go and JS, this is emphatically not a point where JS wins.

                                                      There’s a bigger number of packages, but bitter experience has not been kind to my trust in ‘this JS package has lots of downloads and github stars and a nice website so it probably works OK’.

                                                      1. 1

                                                        “worse is better, lol.” https://www.jwz.org/doc/worse-is-better.html

                                                        Most people see a package and expect a solution. But each package solves N% of whatever problem you’re facing. (N is usually somewhere between -10 and 97.)

                                                        As much as I love to write code, I love getting things done quickly without introducing major problems. npm i foo tends to work pretty well for that.

                                                        Hey, cool trick. npm install sweetiekit-dom and then do require('sweetiekit-dom')(). Now window, document, etc all exist, just like node is a chrome repl. You can even do window.location.href = 'https://google.com' and it’ll load it! console.log(document);. Unrelated to the convo, but I can’t get over how neat it is.

                                                      2. 3

                                                        So I decided to test “do soundex [1] in Javascript” just to see if it was true. Yup, second entry on the results page. I checked it out, and found an error—“Ashcroft” encodes to A261, not A226. And given the page it’s on is a gist, there’s no way to report an error.

                                                        [1] Why Soundex? Well, I used it years ago in an online Bible to correct Bible book names (such that http://bible.conman.org/kj/estor will redirect properly to http://bible.conman.org/kj/Esther).

                                                        1. 1

                                                          bible.conman.org

                                                          Example URL, or satire?

                                                          1. 1

                                                            Neither. When I originally registered for a domain back in the late 90s, I wanted conner.com but that one was taken. So were conner.net and conner.org. My backup choices, spc.com, spc.net and spc.org were also taken. I had a few friends that called me Conman (a play on my last name of Conner) so that’s what I went with.

                                                            In the 21 years I’ve had the domain, you are the first one to question it. No one else has (Weird! I know! [1]). The link is real, try it.

                                                            [1] It’s also weird how few people connect my name, Sean Conner, to the actor Sean Connery (one letter from stardom!) At least my name isn’t Michael Bolton.

                                                            1. 1

                                                              That’s fine. I just reacted to the domain, and in these contentious times it’s not too hard to imagine a person setting up a Bible site with pointers to the “bad stuff” (depending on your view of what’s bad).

                                                              FWIW I”ve used https://www.biblegateway.com/ a few times (mostly because I’d be interested in how the text is presented in different Swedish editions) but that’s an altogether bigger operation.

                                                      3. 6

                                                        Agreed. I would hypothesize that the Ruby community is largely being cannibalized by: Go, node.js, Elixir/Phoenix, Rust, Python (for special purpose work like tensorflow) – probably in that order (or maybe swap Rust and Elixir? unsure).

                                                        1. 10

                                                          It’s not only due to new tech stacks emerging. Cultural and commercial factors play a massive role.

                                                          For instance: Ruby got very popular in the consulting space (it’s a good way to look good by quickly delivering some value, and it tends to generate a need for lots more consulting hours a year or so down the track).

                                                          Now that the ruby community has more-or-less settled on a few standard approaches, it’s no longer as profitable for consulting companies.

                                                          1. 4

                                                            I don’t agree fully with that reading, Rails was always also very popular in the old-school agency space, as Rails is extremely quick in getting set up. It’s insistence on having a standard stack might lead to problems in the long run, but still makes it the best framework for quickly getting out of the door in a clean fashion.

                                                            It still remains very popular there.

                                                            Also, Rails is often used for internal management applications, I have tons of clients that “don’t do Ruby” until slowly, you figure out there’s tons of small applications running on their servers essentially providing some buttons and graphs.

                                                            The number of companies that “don’t do Ruby” officially, but actually do internally is huge, especially in enterprise.

                                                            1. 1

                                                              That’s a great perspective, thanks for brining it up!

                                                            2. 5

                                                              Speaking from the perspective of someone who is both in the Rust project and on the board of one larger Ruby non-profit, I do not agree with the point that Rust cannibalises Ruby. Indeed, we’re still growing, even if the curve flattens.

                                                              1. 1

                                                                I only have a limited set of data points for folks I know of that have moved (or are moving) from ruby to rust for a couple of projects (blockchain space). Sounds like you have more empirical evidence here for sure.

                                                                1. 3

                                                                  Rust is pretty popular for implementing blockchains, and Ruby isn’t, because you can’t write a competitive PoW function on top of the mainline Ruby implementation. Most Ruby projects don’t need that kind of performance, so your story probably isn’t very typical.

                                                                  1. 1

                                                                    Experienced developers usually extend their toolchain at some point, coming with a shift of interest. There’s an effect where you have more insight into see experienced people picking up new stuff, but tend to ignore newcomers coming up.

                                                                    I am of a certain generation in the Ruby community, which leads to the good effect that a) I meet more and more people that don’t know me, despite having a high profile, b) I tend to only see my circles and have a hard time keeping track of newcomers.

                                                                  2. 1

                                                                    I agree, and I think they complement each other more than compete right now. Ruby is great at building architecturally slick webapps, which Rust is lousy at. Rust is great for building high-performance low-level stuff, which Ruby is lousy at. It seems like a good pattern, supported by several gems/crates, to build a webapp in Ruby/Rails, and refactor any parts that need top performance out into a Gem written in Rust.

                                                                  3. 2

                                                                    I very much doubt Ruby devs are moving to a language as low-level as Rust.

                                                                    Elixir I could very much believe.

                                                                    1. 8

                                                                      I very much doubt Ruby devs are moving to a language as low-level as Rust.

                                                                      Roughly 1/3rd of the Rust programming language community come from dynamic languages, mostly Ruby and Python.

                                                                      1. 1

                                                                        How do they deal with lifetimes? Whenever I use Rust, I tap out at lifetimes because it just gets too confusing for me.

                                                                        1. 4

                                                                          The zen of Rust is using Ownership in most spaces. Lifetime problems usually arrive when you are trying convoluted structures that are better handled through cloning and copying anyways. Use clone() liberally until you are very sure of what you want to do, then refactor to lifetimes.

                                                                          I wrote a glimpse into this here last year: https://asquera.de/blog/2018-01-29/rust-lifetimes-for-the-uninitialised/

                                                                          Also, Edition 2018 made lifetimes a lot easier.

                                                                          1. 2

                                                                            Thanks for the link! :)

                                                                            1. 1

                                                                              You’re welcome!

                                                                        2. 1

                                                                          i’m pretty excited about the mruby/rust integration, especially if i can eventually ship a single executable with embedded ruby code.

                                                                          1. 1

                                                                            Is that being talked about anywhere? I’d love to follow that conversation as well

                                                                            1. 1

                                                                              i know about mrusty but it seems to not be active; i’m just hoping that people are still working on this (i might even join in if i get some free time)

                                                                2. 8

                                                                  I have never used Ruby in anger, but gosh that Immutable Strings bug getting closed out as “not going to do it, don’t care you all want it, just use a magic comment” would make me think that the Ruby you’ve got is the Ruby you’ll ever get.

                                                                  I don’t think that languages have to keep being developed (how many Lisp dialects are there that don’t change?), but if you think Ruby has deficiencies now, I wouldn’t expect them to change and that would make me worried too.

                                                                  1. 7

                                                                    I am maintaining a ruby codebase that’s >10 years old.

                                                                    I don’t want ruby to make backwards-incompatible changes! The language is established now; it’s far too late for that.

                                                                    It sucks that you need a linter to check your files start with a magic comment in order to get sensible behavior, but not nearly as much as not being able to upgrade & benefit from runtime improvements/security patches just because they’ve changed the semantics of strings for the first time in 25 years.

                                                                    1. 6

                                                                      This is an awful sentiment. How would you like being told that for a project you maintain, you can no longer make any big changes, ever? Because some user from 20 years ago doesn’t want to update their scripts, but wants bleeding edge Ruby.

                                                                      The world doesn’t always work that way, and hopefully Ruby doesn’t listen to people like that.

                                                                      1. 8

                                                                        I actually think it’s a pretty reasonable statement. One of my favorite things about Java is that it’s almost 100% backwards compatible. We just dusted of a 20 year old (!) game and it pretty much worked on that latest JDK. That’s awesome.

                                                                        1. 1

                                                                          So is C, and C++ and other natively compiled languages. The advantages of a standardized lower layer!.

                                                                        2. 5

                                                                          If you want to maintain a project where breaking things to make other things better, find one where the things you break don’t affect people. There’s no shortage of them and it’s even easy to start your own!

                                                                          If you want to be the trusted steward of a large community, you have to consider how your choices affect the people who have placed their trust in you. There’s nothing wrong with not wanting that! It’s a lot of work. I don’t want it either. Thankfully, some people do, and that’s why communities have some people at the center and others at the periphery. The ones at the center are the ones doing the hard work of making it possible.

                                                                          1. 2

                                                                            Hopefully they do. It’s great to have new language features and to advance the state of the art, but it’s also great to be able to run my code from a few years ago without having to rewrite it.

                                                                            There are ways to have both, of course, which involve making compromises. For example, in the area of scientific computing I’m currently working in, there are a lot of Python 2 hold-outs who don’t want to migrate to Python 3, even though the changes are few* and Python 2 support is due to end. But many Python programmers are happy with Python 3 and have ditched 2 altogether already.

                                                                            *few, but important in context: changing how division works is a big deal for numerical simulations.

                                                                            1. 1

                                                                              maintainers who don’t want to be told that should not maintain languages

                                                                              1. 1

                                                                                This kind of thinking is how you get things like Python 3 being out for over a decade while some people still do everything in 2. If you intend for your language to be widely used, you have to come to terms with the fact that even minor changes that are highly beneficial will be massively painful, and might even destroy the language entirely, if they break old code.

                                                                              2. 3

                                                                                Python 3 actually introduced breaking changes, which in hindsight were all really good. I had to convert dozens of projects over a couple of years, it was not that bad once I understood how things worked in Python 3. The biggest change was the fact that strings are now Unicode strings instead of ascii, and it was very confusing at first.

                                                                                1. 1

                                                                                  IMO python 3 is a great example of why I’m glad I don’t maintain any python codebases, despite loving the language.

                                                                                  In a maintainer-friendly world, developers would still have to write a bunch of from __future__ import X at the top of every file today, which sucks differently but IMO not nearly as much. If you were somewhat forward about it, files that don’t have those lines could emit deprecation warnings when loaded warning that those defaults will be enabled in a few more years time.

                                                                            2. 1

                                                                              I’m sure that a lot of decisions in Ruby in the past were questionable, I just didn’t know about them before I started learning Ruby. However, now that I keep an eye out for programming languages in general, I feel like it’s made me a bit of a snob. I tend to agree with the author of the blog post that it puts a bad taste in my mouth for the language to be changing like it is (both the language itself as well as the process in which those changes are happening) but I’m not sure these things would have bothered me if I were coming to it as a new programmer like I did with Ruby 1.9.

                                                                              I made a comment somewhere that lamented that Ruby was adding Enumerable#filter because it was ambiguous whether it was equivalent to #select or #reject. The response I got was that it was a good change because that’s the way that every other language did it. Ruby’s just kind of weird sometimes, and I think I have accepted the a lot of the legacy weirdnesses. So in that respect, what’s one more feature I won’t use?

                                                                              In the end, I don’t have much stake in the game - if Ruby’s new path really starts to bothers me, there are plenty of other languages to pick up. But until then, it will be the first language I turn to for quickly translating thought into code, weird language design cruft aside.

                                                                              1. 5

                                                                                Ruby 1.9, in hindsight, was extremely well managed. It was an opt-in to breakage for getting fundamental problems out. They handled that switch in a very good way, making Ruby 1.9 the clearly better version while releasing 1.8.7, which closed the gap in between both versions, making it feasible to write codebases that run on both with relative ease. Sure, there were issues and not every aspect was perfect, but comparing e.g. the Python 2.7/3.0 story, I’m sad that the Python community hasn’t been watching and learning from that.

                                                                                1. 1

                                                                                  Agreed, and I find Python’s rise in popularity comes in spite of the poor developer experience - compatibility and dependency management - so I wish Ruby had made more headway in non-Rails contexts.

                                                                                2. 2

                                                                                  I made a comment somewhere that lamented that Ruby was adding Enumerable#filter because it was ambiguous whether it was equivalent to #select or #reject.

                                                                                  Agreed. select and reject is a naming choice I have decided to steal, I wished filter just stopped existing (or returned (selectedElements, rejectedElements).

                                                                              1. 1

                                                                                I tried getting into Tcl, but it seems REPL doesn’t have built-in history on Linux:

                                                                                https://core.tcl-lang.org/tcl/tktview?name=ed4c610004

                                                                                Do you have a suggestion? Sorry if off topic.

                                                                                1. 2

                                                                                  Most people (and this demo) use tclreadline

                                                                                  1. 1

                                                                                    If you find yourself stuck with any REPL that does not provide history auto-completion and navigation, simply use rlwrap.

                                                                                    E.g $ rlwrap tclsh

                                                                                    1. 1

                                                                                      I think the case is rather that I am not stuck with Tcl. The language has some interesting features, but the lack of built in history is a serious flaw in my opinion. Luckily I have the option of simply not using the language until that is resolved, if ever.

                                                                                      Thank you for the suggestion.

                                                                                      1. 2

                                                                                        As the other lobster mentioned, the language resolves this with tclreadline which is a tcl package, and needs to be installed separately. In ubuntu, install it with apt install tcl-tclreadline, and add the following incantation to your ~/.tclshrc

                                                                                        if {$tcl_interactive} {
                                                                                          package require tclreadline 
                                                                                          ::tclreadline::Loop
                                                                                        }
                                                                                        
                                                                                  1. 20

                                                                                    1000 times yes. If Google wants their own libc that’s their business. But LLVM should not be part of their “manifest destiny”. The corporatization of OSS is a scary prospect, and should be called out loud and clear like this every time it’s attempted.

                                                                                    Otherwise more software infrastructure will go the way of the current near monoculture in web browsers.

                                                                                    1. 9

                                                                                      The corporatization of OSS is a scary prospect

                                                                                      The tool we have to prevent it is copyleft. Notice that Google are talking about making a whole new libc, not enclosing glibc. That’s a feature of copyleft.

                                                                                      Licences with copyleft terms still permit corporate uses and enable business cases: Google, FB, Amazon, and others all use copyleft software; Red Hat, Canonical, MuseScore, and others base their whole business model on it. But they prevent corporate enclosure, in that a business cannot control the software to satisfy their interests and ignore others. NeXT/Apple did not get to “direct” GCC for everyone in a way that made it work for them, and not for others. In fact, they eventually took their ball elsewhere.

                                                                                      1. 1

                                                                                        NeXT/Apple did not get to “direct” GCC for everyone in a way that made it work for them, and not for others. In fact, they eventually took their ball elsewhere.

                                                                                        Praise the Sun. LLVM is much better platform than GCC for compiler development. Much more open and free.

                                                                                      2. 4

                                                                                        The corporatization of OSS is a scary prospect

                                                                                        OSS is a corporatised term, you’ve been got from the get go.

                                                                                        1. 1

                                                                                          Isn’t LLVM already a google project?

                                                                                          1. 3

                                                                                            Apple was the first major corporate sponsor. Chris Lattner and Vikram Adve created its as students and later Lattner joined Apple to create a working group there.

                                                                                            1. 1

                                                                                              I am aware of that, but I was under the impression that Google input already strongly drives optimization decisions and that Google engineers are prominent in LLVM development.

                                                                                              1. 1

                                                                                                Yes. It’d possibly be a fair point, though I still see other companies and organizations involved, I’m not sure to what extent this has an impact on priorities. I’d be curious to hear about recent trade-offs the project has made.

                                                                                        1. 41

                                                                                          Am I the only one shocked by the poverty wages paid in open source? I make more a day than that project makes a month and not by a small margin.

                                                                                          The current open source licenses have failed us completely when middlemen make billions while coders make less than minimum wage.

                                                                                          1. 11

                                                                                            Am I the only one shocked by the poverty wages paid in open source? I make more a day than that project makes a month and not by a small margin.

                                                                                            Probably because giving away something for free and then holding out your hat afterward in expectation of payment is a shitty business model. It barely works for some musicians, it doesn’t work at all as a faceless github account on the Internet.

                                                                                            If you want to make money doing what you love to do, you have to create a workable business model around it. And the thing about businesses is that sometimes they work and sometimes they don’t. Just because you create a thing doesn’t mean you are suddenly entitled to receive a profit from it. The thing you make or do needs to have value to others, you have to prove that value to them, you need a system for delivering that value, and then make it easy for them to pay you for it. There are plenty of companies doing well enough with their own spin on a combination of open source with commercial opportunity. Like any other business, it’s not easy and many fail. But it is possible.

                                                                                            The current open source licenses have failed us completely

                                                                                            Incorrect, they work exactly as they were intended to work. The majority of open source software is given away with no expectation of anything tangible in return. Open source software (generally) gets written because someone had an itch to scratch and wanted to share the results or their work with a community. The authors may have many motivations for giving away their code (altruism, recognition, social interaction) but none of them are to make a bunch of money.

                                                                                            Finally, I have no opinion of the musl project but if they actually want donations, they’re doing a very good job of hiding that fact on their website.

                                                                                            1. 4

                                                                                              Really? He makes only slightly less than half of what I make (and it probably goes a lot further for him), and I consider myself well-compensated by the standards of the amount of work I put in (if not well-compensated by the standards of this industry, where dev wages are hugely inflated).

                                                                                              1. 4

                                                                                                You are not the only one.

                                                                                                1. 3

                                                                                                  The current open source licenses have failed us completely

                                                                                                  Some licenses are way more permissive towards freeloading than others.

                                                                                                  1. 1

                                                                                                    That’s true, but there’s another twist to it, right?

                                                                                                    Giving away the source code freely and then having freeloading (e.g., not pushing changes upstream or sharing source code they link with) services live behind an inscrutable wall (network service, usually) makes catching violations very difficult. At least with a binary you can decompile it and get an idea of what libraries were used–there are no such easy fruit for web applications if even the slightest effort is put into it.

                                                                                                    1. 0

                                                                                                      Yes, SaaS make violations difficult to catch. However, licensing can make such “dark pattern” too risky or too unpractical to be used at a large scale.

                                                                                                      Unfortunately license adoption needs a critical mass is needed for this to work. If 90% of software stays under very permissive licenses freeloading will not stop.

                                                                                                  2. 1

                                                                                                    It depends on purchasing power, right?

                                                                                                    There are countries even in continental Europe where a small Patreon campaign can match a lawyer’s salary.

                                                                                                    Also a reason to not donate to larger projects through Patreon is that it’s impossible for the project management to accomodate everyone. People without that much disposable income, who would prefer to pay for specific features, even if they are on the roadmap but not a priority, may choose to keep their money instead.

                                                                                                    Or buy into a more commercial solution to get what they need without the open-source politics.

                                                                                                    1. -5

                                                                                                      A single lawyer can’t save a company several million in opex a month. I’ve have.

                                                                                                      I don’t quite understand why the go to example of people trying to explain to me why I should be getting paid less are jobs which have no inherent ability to scale, be it lawyer, doctor or building architect and whose only reason for being highly paid is a cartel keeping wages inflated. Here’s hoping we import enough Cuban doctors or Latvian lawyers that their wages reflect the difficulty of their job and the demand for it.

                                                                                                      1. 24

                                                                                                        Please don’t dismiss other people’s work just because you don’t understand what they do. Of course a single lawyer can save a company millions in operating expenses per month, and their profession has been doing it for far longer than we have.

                                                                                                        1. -5

                                                                                                          [[citation needed]]

                                                                                                          I have seen teams lawyers cost the opposing side tens of millions pretty easily, I have never seen them save money inside a company that wasn’t being sued. In short, a zero sum profession, with a high bar to entry and a marvelously developed class consciousness. Good job if you can get it. I only wish developers could develop that sense too, because we add actual value in the trillions.

                                                                                                          1. 13

                                                                                                            I have seen teams lawyers cost the opposing side tens of millions pretty easily, I have never seen them save money inside a company that wasn’t being sued.

                                                                                                            There’s a good reason you might not see it. By having proper policies and procedures in place to comply with the law, lawyers can save a company money by understanding the law and ensuring that they don’t get fined or sued. For example, breaking wage and hour laws in New York can be very expensive. One of the fines listed is $50 per employee per day. There are like 65,000 fast food workers alone in NYC. If all of the companies failed to comply, that would total over $3 mil / day in just fines. That’s before all the lawsuits that would probably also show up.

                                                                                                            Also interesting, if the guys racking up tens of millions lose their case, they might end up paying those tens of millions back to the people they sued because of laws regarding recovery of attorney’s fees, or counter-suits.

                                                                                                            In short, a zero sum profession, with a high bar to entry and a marvelously developed class consciousness. Good job if you can get it. I only wish developers could develop that sense too, because we add actual value in the trillions.

                                                                                                            I’m wary any time someone talks about how great software engineering is or developers are. Were the people who wrote the code to do spoofing and layering adding actual value? How about the engineers and developers behind the Clipper chip?

                                                                                                            1. 4

                                                                                                              It’s not always a zero sum game, there are (unethical) agencies who make multi million euros a year by sending cease and desist letters for allegedly (and often false) copyright violations. Sadly, it took many years until this practice was prevent by the government in Germany, maybe because about half of the politicians are lawyers themselves.

                                                                                                              Update: typo

                                                                                                              1. 3

                                                                                                                You can bet Goodwill consulted a lawyer before implementing this cost-cutting strategy.

                                                                                                            2. 8

                                                                                                              A single lawyer can’t save a company several million in opex a month.

                                                                                                              Not to take away from your point, but they absolutely can: M&A, restructuring, downsizing, RightSizing™. And so on. I personally know a lawyer whose sole job is to fly around BoA offices around the world shitcanning [redundant] people.

                                                                                                              I don’t quite understand why the go to example of people trying to explain to me why I should be getting paid less…

                                                                                                              Because people like free stuff and one obvious way they get free stuff is if you work for free.

                                                                                                              However if zig is successful, Andrew will likely get hired at a big marketing company like Google or Facebook where he’ll lead a charge to zig all the things with a nice fat salary doubled up with lots of RSU. It’s a bold move, and not for everyone, but using a “open source career” to bootstrap an enterprise retirement is easy enough to do that (while the markets are good) people are doing it on accident.

                                                                                                              1. 16

                                                                                                                That’s not my plan. I might consider working at a place like Mozilla but never Google or Facebook. I’m looking into starting my own non-profit company. Do you know how amazing it is to not have a manager?

                                                                                                                1. 7

                                                                                                                  Can I suggest you start a for-profit company instead and make a nice life for yourself? There’s nothing unethical about charging customers money for the tools you build. It’s worked quite nicely for me and I hate to see fellow OSS enthusiasts scrape by and play down their own value to society.

                                                                                                                  1. 6

                                                                                                                    I appreciate that you’re looking out for my interests, but why not start a non-profit company and make a nice life for myself and others? Non-profits are allowed to charge customers money for tools. There’s nothing stopping me from having a nice salary in a non-profit.

                                                                                                                    1. 4

                                                                                                                      What is the benefit of a non-profit vs a privately owned company that can do what it wants? I suppose I can see why a programming language steward company might be a non profit.

                                                                                                                      1. 3

                                                                                                                        While @mperham is one of the best examples I know of for turning a profit and contributing to the community (maybe followed by Richard Hipp/sqlite), may I augment his suggestion with that of a Benefit corporation if that suits your priorities better?

                                                                                                                        It seems to me that the bigger problem for you (vs @mperham) is that almost everybody expects language toolchains to be free at this point (there are some exceptions, but most of those seem like legacy / gigantic enterprise work).

                                                                                                                        But either way, I hope to see you continue the great work!

                                                                                                                    2. 2

                                                                                                                      Reminds me of a quote from one of my favorite movies:

                                                                                                                      Free winds and no tyranny for you? Freddie, sailor of the seas. You pay no rent. Free to go where you please. Then go. Go to that landless latitude, and good luck.

                                                                                                                      For if you figure a way to live without serving a master, any master, then let the rest us know, will you? For you’d be the first person in the history of the world.

                                                                                                                      Lancaster Dodd

                                                                                                                    3. 0

                                                                                                                      Not to take away from your point, but they absolutely can: M&A, restructuring, downsizing, RightSizing™. And so on. I personally know a lawyer whose sole job is to fly around BoA offices around the world shitcanning [redundant] people.

                                                                                                                      I said single, any push like that would require a team of at least a dozen. On average, sure, a team of 50 lawyers can for a small investment of 10 million get you a couple of billion in roi.

                                                                                                                      1. 3

                                                                                                                        I’ve personally seen a single lawyer acting as in-house counsel and compliance officer in a heavily regulated space save the company millions in potential fines, and tens (if not hundreds) of thousands in filing and process fees.

                                                                                                              1. 2

                                                                                                                PyOxidizer is a Rust application and requires Rust 1.33+ to be installed in order to build binaries.

                                                                                                                Hmm, it would have been nicer if PyOxidizer had been meta. i.e. it itself had a version that was self contained single file executable, so that those of us who are not interested in installing yet another language tool chain on our computers could grumble less.

                                                                                                                1. 7

                                                                                                                  I acknowledged this in the post:

                                                                                                                  It is a bit unfortunate that I force users to install Rust before using PyOxidizer, but in my defense the target audience is technically savvy developers, bootstrapping Rust is easy, and PyOxidizer is young, so I think it is acceptble for now.

                                                                                                                  I will almost certainly provide pre-built executables once the project is more mature. Thank you for the feedback.

                                                                                                                    1. 1

                                                                                                                      That’s great! Always on the lookout for good ways to distribute Python code to the end user. I generally deal with CLI programs, but I’ve created PySide based programs and programs using other toolkits. The other tools I’ve used (PyInstaller, cx_Freeze type things) tend to not do well with some frameworks. Hope this will deal with those too!

                                                                                                                      1. 1

                                                                                                                        I applaud you for your strategy and tactics! Wonderfully done. I was thinking of similar for a different language. I will really have to deconstruct what you have done here.

                                                                                                                        What was your inspiration? Are there similar systems? What is your long term goal?

                                                                                                                        What would it take to support PyPy?

                                                                                                                        1. 11

                                                                                                                          Inspiration was a few things.

                                                                                                                          First, I’m a core contributor to Mercurial, which is a massive, system’s level (mostly) Python application. From a packaging and distribution standpoint, my personal belief is that Python hinders Mercurial. We can’t aggressively adopt modern Python versions, there’s a lot of variance in Python execution environments that create a long tail of bugs, etc. On the performance front, Python’s startup overhead is pretty poor. This prevents things like hg status from being perceived as instantaneous. It also slows down the test suite by literally minutes on some machines. And packaging Mercurial for multiple platforms takes a lot of effort because this isn’t a solved problem for the Python ecosystem. While there are a lot of good things about Mercurial being implemented in Python (and I don’t want to be perceived as advocating for porting Mercurial away from Python - because I don’t), it feels like Mercurial is constantly testing the limits of Python on a few fronts. This isn’t good for Mercurial. It isn’t a good sign for the longevity of Python if they can’t “support” large, mature projects like Mercurial.

                                                                                                                          So a big source of inspiration was… frustration, specifically around how it felt that Python was limiting Mercurial’s potential.

                                                                                                                          Another source of inspiration was my general attitude of not accepting the status quo. I’m always thinking about why things have to be the way they are. A large part of PyOxidizer was me questioning “why can’t I have a single file executable that runs Python?” I helped maintain Firefox’s build system for several years and knew enough about the low-level build system bits to understand what the general problems with binary distribution were. I knew enough about CPython’s internals (from developing Python C extensions) that I had confidence to dive really deep to be able to implement PyOxidizer. I felt like I knew enough about some relatively esoteric systems (notably build systems and CPython internals) to realize that others who had ventured into the Python application packaging space were attempting to solve this problem within constraints given to them by how CPython is commonly compiled. I realized I possessed the knowledge to change the underlying system and to coerce it to do what I wanted (namely produce self-contained executables containing Python). In other words, I changed the rules and created a new opportunity for PyOxidizer to do something that nobody had ever done in the public domain (Google has produced self-contained Python executables for years using similar but sufficiently different techniques).

                                                                                                                          If you want to learn more about the technical journey, I suggest reading https://gregoryszorc.com/blog/2018/12/18/distributing-standalone-python-applications/.

                                                                                                                          As for similar systems, other than WASM, I’m not aware of other “interpreted/scripting languages” (like Python) that have solutions that do what PyOxidizer does. I’m sure they exist. But Python is the only language in this language space that I’ve used significantly in the past ~8 years and I’m not sure what other languages have implemented. Obviously you can do these single executable tricks in compiled languages like Go and Rust.

                                                                                                                          My long term goal is to make Python application distribution painless. A secondary goal is to make Python applications developed with PyOxidizer “better” than normal Python applications. This can be done through features like an integrated command server and providing Rust and Python access to each other’s capabilities. I want Python application maintainers to focus on building great applications, not worry about packaging/distribution.

                                                                                                                          PyPy could theoretically be supported if someone produces a Python distribution conforming to the format documented by https://github.com/indygreg/python-build-standalone. In theory, PyOxidizer is agnostic about the flavor of the Python distribution it uses as long as that Python distribution provides object files that can be relinked and implements aspects of Python’s C API for interpreter control. There would likely need to be a few pieces in PyOxidizer, such as how the extension modules C array is defined. There’s probably a way to express this in python-build-standalone’s distribution descriptor JSON document such that it can be abstracted across distributions. I would very much like to support PyPy and I envision I will cross this bridge eventually. I think there are more important features to work on first, such as compiling C extensions and actually making distribution easy.

                                                                                                                          1. 1

                                                                                                                            Thank you for such a detailed response.

                                                                                                                            I love that you have standardized an interface contract for Python runtimes.

                                                                                                                            This looks like it could give organizations confidence in their deployment runtime, while no longer being tied to specific distros and can start using more niche and esoteric libraries that might be difficult to install. This is a form of containerization for Python applications.

                                                                                                                            What I am really interested in, is because you own both sides of the system, is streamlining the bidirectional call boundary. Having control over the shell that runs on the host, the Rust wrapper and the VM there is an opportunity to short circuit some of the expense of calling into C or how data is laid out in memory. In a quick ripgrep through the code, I couldn’t find any reference to cffi. Do you plan on supporting cffi or is it already handled? I am really curious to learn about what your integration plans look like. Great work.

                                                                                                                      2. 1

                                                                                                                        That’s an awful lot of heavy lifting you’re asking from a tool maintainer.

                                                                                                                        And, I mean, ‘brew/apt/yum install rust’ isn’t generally a particularly big ask of you, the end user :)

                                                                                                                        1. 4

                                                                                                                          But, but, this is solving pip install x … don’t you think at least the irony should be acknowledged?

                                                                                                                      1. 20

                                                                                                                        You are right, Musl is criminally underrated. GNU has enough warts both politically and technically that plenty of opportunity is available for competition.

                                                                                                                        Good for you for recognizing Musl. My only issue is that seems like a lot considering you have no job. But if its that important to you, then respect.

                                                                                                                          1. 2

                                                                                                                            I dont know a lot about Nim but it seems to be a fantastic language. 19 MB download [1]. Good standard library, for example has had async HTTP for several years [2].

                                                                                                                            But I have never seen it in the top 100 [3], even though they do track it [4].

                                                                                                                            [1] https://nim-lang.org/install.html

                                                                                                                            [2] http://nim-lang.github.io/Nim/httpclient

                                                                                                                            [3] https://tiobe.com/tiobe-index

                                                                                                                            [4] https://tiobe.com/tiobe-index/programming-languages-definition

                                                                                                                            1. 2

                                                                                                                              Yup, its very underrated

                                                                                                                            1. 3

                                                                                                                              Oof, you have to log in to a Microsoft account to download it from the store? Yikes. I just built a gaming PC and the constant pressure from Windows to use a M$FT account for everything is… unpleasant.

                                                                                                                              1. 2

                                                                                                                                I made some progress getting an archive, but I am busy right now so I havent finished it

                                                                                                                                https://github.com/microsoft/terminal/issues/1386#issuecomment-504675365

                                                                                                                              1. 1

                                                                                                                                FFS, this is what drives me nuts about Rubocop. None of those options looks wrong or hard to understand to me. Python’s directive that there should be one and only one way of doing things should not be applied to Ruby. This sucks the joy out of the language for me.

                                                                                                                                “Well you never have to decide or think about it, isn’t that better?” no? It’s not standing in the way of writing code or understanding. I have never once given code review feedback “Hey, use fdiv” or “Hey, call to_f on both sides” - I really think that there are so many rules in Rubocop now that they’re grasping for “well what else could we lock down”. Benefits be damned. And the end result? You’re writing in a different language than Ruby: Rubocop Ruby.

                                                                                                                                Linting is good. Code formatting is good. Draconian arbitrary rules are not, and that’s where Rubocop lives in my experience.

                                                                                                                                1. 3

                                                                                                                                  Fair point. There’s obviously the option of not enabling this by default at all. :-)

                                                                                                                                  Some people are trying to standardize on everything and I understand them as well. That’s why I want us to hear everyone’s perspective, but generally most people ignore the upstream development until something gets released.

                                                                                                                                  Draconian arbitrary rules are not, and that’s where Rubocop lives in my experience.

                                                                                                                                  I disagree with that assessment, though. If we wanted to be draconian we wouldn’t have spend so much time on making everything configurable. We give people the option to do/check something, what they end up doing is up to them. There’s even a config option to just suppress all the defaults, disable everything and just turn on whatever you like selectively.

                                                                                                                                  1. 1

                                                                                                                                    My expectation from past experience is that any new cop comes enabled by default. I -am- glad its configurable, but it’s not something I want to keep up with. I do appreciate your work on rubocop btw - I look forward to having something standard like this for Ruby (Ruby prettier, standardrb, rufo, something!), but I have felt rubocop is a bit too philosophically aggressive about stuff. You’re moving the needle, though, and that I do appreciate.

                                                                                                                                  2. 1

                                                                                                                                    I agree with you, some flexibility is good but not too much. I was offput at first by Go style requirements with braces. Even now, it’s not quite my style. But it is nice not having to worry about that, the style has been decided for me. Maybe Go has a compiler option to increase the flexibility, I don’t know.

                                                                                                                                    But I do know that its one less thing that I have to decide and maintain. If I do it wrong, it’s a compiler error so I know right away.

                                                                                                                                  1. 1

                                                                                                                                    Generally, there’s a way to ‘work-around’ warnings like that on a case-by-case basis. For instance, [[fallthrough]] (or __attribute__((fallthrough))) for fallthrough in switch; or if ((a=b)) instead of if (a=b). Will there be such a thing for this? If what I actually want is 2^32? I saw proposed in the thread that the warning shouldn’t be present for hex/binary literals, but I don’t consider that a full solution.

                                                                                                                                    1. 2

                                                                                                                                      If what I actually want is 2^32?

                                                                                                                                      2^32 == 2 | 32, so why not just use the latter?

                                                                                                                                      1. 1

                                                                                                                                        10^7 != 10|7, so what do you do there?

                                                                                                                                        1. 2

                                                                                                                                          It’s 13.

                                                                                                                                      2. 2

                                                                                                                                        It is hard for me to imagine a use-case for 2^32, and very easy for me to imagine use cases for 1 << 32; when are you thinking you would use int-constant '^' int-constant? I could see xor-ing bitfield flags or something, but then usually you’re doing something like MASK1 ^ MASK2 using names instead of literals.

                                                                                                                                        1. 1
                                                                                                                                          #include <stdint.h>
                                                                                                                                          #include <stdio.h>
                                                                                                                                          int main() {
                                                                                                                                             printf("%u\n", UINT32_MAX);
                                                                                                                                          }
                                                                                                                                          
                                                                                                                                          1. 1

                                                                                                                                            I don’t think anyone is touting Self as a drop in replacement for $YOUR_FAVOURITE_LANGUAGE :)

                                                                                                                                            There’s nothing in principal which would preclude a Windows port - over time the VM has been on Sparc Solaris, PPC Classic MacOS, PPC OS X, x86 OS X and x86 Linux - but Self is a large project with very few development resources available to it.

                                                                                                                                            1. 1

                                                                                                                                              my favorite language right now is 8 languages:

                                                                                                                                              https://cup.github.io/autumn/file-object/write-line-stdout

                                                                                                                                              but it get your point - I am studying the differences between programming languages, so I am interested when I see one I have not heard of. thanks for the reply