1. 17

    There’s no reason you have to choose one of them up front. Why not learn both to an elementary level and then choose one to focus on based on that experience?

    And FWIW, Lisp-1/Lisp-2 and macros aren’t worth worrying about as a beginner (IMO). They don’t make much practical difference as long as you know which one you’re using, and each has trade offs.

    I personally use Common Lisp, and think it’s great. It’s very fast, there are a lot of libraries available (and easily installable with Quicklisp), and I like the development environment (Slime and Emacs).

    Another thing I like is that with Quicklisp and Slime it’s very easy to jump to library code, make changes, and reload, and I’ve ended up contributing several small changes to different projects after initially experimenting with bug fixes this way.

    1.  

      Why not learn both to an elementary level and then choose one to focus on based on that experience?

      Do people really have that sort of extra time in their hands? I’m envious.

      1. 8

        I would say everyone who hangs on the net forums does, it’s a matter of priorities.

        1.  

          Depends on their pattern of access. If, as a completely made-up example, someone checks on lobste.rs while on conference calls, it’s probably using a lower cognitive load than learning new programming languages.

        2.  

          In my experience (raising two young kids and working), you can do it if you are mentally and physically well and choose to focus on it.

          1.  

            Yes, I should probably work on those latter items you mentioned :)

          2.  

            If you plan to invest in learning a piece of technology, you’re better of spending 4-8 hours each with different options you’re considering, and picking one that suits you best afterwards, rather than investing hundreds or thousands of hours in a single one to come to the conclusion that you chose poorly.

            I guess it depends on what you plan to do with the language.

          3.  

            I’d imagine because to become productive in a new language, you have to spend some time exclusively with it. One of the worst things you can do from a productivity standpoint is learn two similar languages at once. (Also goes for natural languages – my semester of simultaneous Italian and Spanish was a set-up for failure.)

            1.  

              Yes. Focus it’s important. First one, later another. Context-switching has a high cost for learning; even better if happens too often.

          1. 4

            Some interesting facts about how many people used the language in the last 12 month:

            • Swift == 2 * Objective-C
            • Go > 3 * Rust
            • Perl == Assembly
            • Assembly == 3 * F#
            • Python == 16 * Perl

            I think the poll may be biased toward languages JetBrains has IDEs for.

            1. 2

              I suspect selection bias, yeah. To their credit, so do they:

              Despite these measures, some bias is likely present as JetBrains users may have been more willing on average to complete the survey.

              That’s buried at the bottom of the demographics & methodology page. I’d have preferred it more prominent, but I get it.

            1. 8

              It seems clear from the number of people talking about pay-for browsers that this effort is poorly named.

              1. 21

                Back in the 80s Apple liked to advertise the computer as a bicycle for the mind. Now I think it considers computers as Barcaloungers for the mind: consumption devices, to be used for watching movies, listening to music & playing games; owned only legally by their users but managed by Apple (to the point that only Apple-approved software is permitted on them).

                From that mindset, what sense does it make to ship tools which can be used to create? Creation is an activity best performed in California, in LA by Disney, or in San Francisco by a partner firm or at the Cupertino mothership; Billy in Kansas should just sit and enjoy his curated experience.

                It makes me really sad — I was a huge Mac fan back in the days of System 7 & System 8. I’m really glad that I got into Linux 20 years ago. Often it feels that I escaped, like one of those refugees who managed to cross the Iron Curtain to the free world. Yeah, life can be messy and complex here in GNU, but I can control my destiny.

                Well, except for systemd😉

                1. 5

                  Yeah, it’s a shame. I recently taught a classroom full of high school students a bit of Python, and I was quite thankful that Python came standard with all macOS installations. It would have been much more difficult to get Python onto their laptops otherwise. In all honestly, I probably would have resorted to teaching them Javascript through the browser instead.

                  1. 1

                    There is asdf 1 which makes that really easy to install most of the interpreters.

                    1. 16

                      I think you’re underestimating the difficulty of installing software on laptops owned and operated by a high school. There is a world of difference in the friction between “yeah give me any macOS laptop and I can roll with it,” and, “oh actually can you install this asdf thing. Please have your high school students with zero programming experience follow the instructions on this github readme to install it.”

                      1. 1

                        I understand it very well, but it is not that hard with prepared shell script. Additionally I think that most of these languages will be present in Xcode command line tools, these languages just will not be supported OOtB so the installers should not rely on them.

                        1. 3

                          I don’t think the laptops the students were using had Xcode installed? At least, I’m not sure.

                          But yeah, for these students, we spent a long time just making sure everyone could type in a single curl command. Having them install software too would be nuts. I could have perhaps gotten the IT staff to do it, but even that’s unreliable.

                          Anyway, all I’m trying to say is that having Python right there and ready to use was really useful. I imagine it would be similarly useful in other environments that are locked down. I mean, my wife works for a company where she needs to have IT come and install Python for her on her workstation. Nuts.

                      2. 4

                        Okay, I was very confused by that suggestion. Naming things is hard.

                      3. 1

                        Could you not direct them to use Python in the browser, with something like Skulpt? (It was the top hit when searching for “python in the browser”).

                        1. 8

                          Yes, I did quite a bit of research on doing it that way, and I might have done that instead of Javascript if I couldn’t get Python to work on their machines. I had eventually settled on using repl.it as my backup, and even had the IT folks at the school test it to make sure it would work in whatever laptops the kids would use.

                          However, I’m just not a fan of that approach. It’ll work if there are no other options, but I really wanted the kids to get a taste for how programmers actually work. Most or all programmers I know don’t write Python code in the browser as part of their normal day-to-day work. So I set the kids up with the closest thing to the real world I could get: two side-by-side terminals, with one in nano editing source code and the other in a shell for running the program. If Python wasn’t installed, this would have been more difficult to pull off. Moreover, falling back to the browser is hard to do on the spot, because the lesson plan I devised is necessarily (because these are complete beginners) coupled to their environment.

                          If you’re curious, this is what I handed to the students at the beginning of class, and then I handed them the answers at the end.

                          I think my original point stands. It’s nice to have something there by default for cases like these. There are a million work-arounds, but nothing as nice as something that Just Works. Running the code on their computer also has little victories that are hard to get if you send the code off to some server somewhere. For example, one student accidentally wrote an infinite loop that locked up their entire machine. I had to force reboot his laptop to get him back up and running. The students loved that kind of crap, because it gave them something real and tangible to experience: Wait, the code I just wrote made my machine lock up? Wow.

                          1. 2

                            That’s a thoughtful answer and approach. I understand what you mean by wanting things to feel more “real” and closer to the metal, to make a greater impression on the kids. If it’s on a webpage, then what makes it different from all the other webpages? But if it can crash the machine or spin up fullscreen graphics , then that’s different, and more interesting.

                            I have two kids and I want to teach them to type commands at the command line as one of the fundamental ways to make fun things happen on the computer, like starting a game or showing some ASCII graphics (aliases for ponysay has been a hit). I’m not sure if it’s mainly nostalgia from my own childhood or a good way to create an interest in typing words that makes computers do interesting things, but I’m hoping for the latter.

                      4. 3

                        The essential notion of the modern computing device is a consumption oriented one. Those of us who walk towards freedom might be called vegans, according to a recent widely linked essay. Which gives one a notion of the slide towards consumption.

                        Having a decent general purpose programming system readily available is a chainbreaking thing.

                        For some of us, this is all antithetical to freedom; the difficulties of GNU/Linux are the price of freedom.

                        1. -1

                          I remember when they stopped shipping Hypercard with MacOS. It’s about when they stopped really mattering.

                        1. 1

                          Site unavailable?

                          1. 1

                            Nothing to optimize if no queries can be run! :D

                            1. 1

                              Strange. I never saw any downtime.

                          1. 2

                            We collaborate inside proprietary environments, such as Slack and Google Hangouts

                            FLOSS development has, historically, not existed within a completely FLOSS ecosystem. Even linux, the article’s cornerstone of FLOSS, was hosted on the proprietary BitKeeper scm for much of its early development.

                            Don’t get me wrong – it’s important to have open source competitors or equivalents for our tools – but purity is a sometimes counterproductive thing to strive for. “The use of nonfree tools sends an unacceptable message” would have prevented FLOSS from happening in the first place.

                            1. 2

                              Even linux, the article’s cornerstone of FLOSS, was hosted on the proprietary BitKeeper scm for much of its early development.

                              Nitpicking the timeline a bit: Linux has existed since 1991, and the bitkeeper phase was 2002-2005. Seems like a relatively short time.

                              1. 2

                                True, but prior to that there was no source control system – it was tarballs and patch files. That became untenable, and there weren’t any good candidates for FLOSS scms for their use cases, so BitKeeper ended up being the first scm used by the project.

                                At least, that’s my recollection, please correct me if I’m misremembering.

                            1. 3

                              Thanks for sharing your learnings! This couldn’t have come at a better time, since I’m considering learning Rust by implementing a TUI as well. Don’t ask me for what, I’m embarassed to say, but maybe I’ll share it as well once it reaches a satisfactory state.

                              1. 4

                                This morning it crossed my mind that I would like a gmail TUI client.

                                1. 4

                                  Lynx used to work before they killed noscript support. :(

                                  But some other terminal browser may work. browsh comes to mind, although I personally think it’s pretty heavyweight.

                                  1. 1

                                    It appears you can still browse gmail without js. I have to use gmail at work, and after disabling js, I can load a 2005-era gmail webpage.

                                    “You are currently viewing [Company] Mail in basic HTML. Switch to standard view | Set basic HTML as default view”

                                    1. 3

                                      Per blog post, they disabled javascript free logins. So you’d have to login with one browser and somehow copy the cookies into lynx and hope it works.

                                      https://security.googleblog.com/2018/10/announcing-some-security-treats-to.html

                                      1. 1

                                        Hmm…It’s still been working for me. I’ve been using the HTML GMail interface through www/links+ (links2 to the linux folk) for a long time. And I can log in with 2FA just fine.

                                  2. 2

                                    Oh I fully agree. I can’t be bothered to configure mutt and the other 5 tools you need. Also likely I’d be happy with just the basics but in TUI form.

                                    (My project is not about that)

                                    1. 1

                                      Well, depending on your editor preference, there’s a vim plugin, or you can use emacs’ included email client.

                                      Alternately, there was a project several years back called sup that aimed to put a gmail-like interface in the terminal, for any mail server. Sup is written in ruby.

                                      1. 5

                                        I’m writing a TUI MUA in rust, I haven’t released it yet because it seems my free time is not that much. I have some earlier screenshots in its mockup site: https://meli.delivery

                                        1. 2

                                          That does look really promising!

                                        2. 1

                                          sup is indeed really good. I can’t remember why exactly I stopped using it.

                                          EDIT: now I remember: sup is no longer supported (for instance https://github.com/sup-heliotrope/sup/issues/546). There are instructions around to get it to work on an older ruby version (https://wiki.archlinux.org/index.php/sup#Configuration) but sup-config still crashes. Plus it needs offlineimap + mailfilter + msmtpd … that’s a bit too much for my taste

                                          1. 1

                                            it’s a turnoff, I want to edit a config with credentials and be done with it.

                                            1. 1

                                              Absolutely. If you find that or write that, let me know, I want to try it out.

                                          2. 1

                                            interesting.

                                      1. 2

                                        I am not ashamed to say that I program in C, and that I enjoy it. This puts me at odds with much of programming language discourse, among both researchers and influential practitioners, which holds that C is evil and must be destroyed.

                                        ….

                                        Look, I get it, you like to program in C. Please continue to do so.

                                        If someone says “it would be great if we had a safer C”, why are you taking it as a personal attack? They’re just saying they want a safer C, not that you need to stop using it. It’s not like C will go away.

                                        Sure, the C community may change and shrink. But if the language is the important thing to you, then keep using the language.

                                        If, on the other hand, you’re worried about losing the widespread support and community of a first-class language, well, then you’ll have to make a call (not yet, mind you, but maybe in 5-10 years). And the decision will be: use the language you love for most things, and use different languages for most things. The former is still very viable – look at the Common Lisp community, for example – and the latter still allows you to use your preferred language for your own stuff (I still code in SML, myself, sometimes).

                                        But I’ll admit I’m tired of people seeing “C has flaws, and we could do better” and interpreting it as an existential threat. Calm down, figure out your priorities, and use whatever language you want to use.

                                        1. 2

                                          “If someone says “it would be great if we had a safer C”, why are you taking it as a personal attack? They’re just saying they want a safer C, not that you need to stop using it. It’s not like C will go away.”

                                          That’s not what they were saying in the quote. It was people who said C is evil, must be destroyed, and with implication everyone should avoid it. If it’s business-, safety-, or life-critical code, there is even some justification to that if safer alternatives are available and usable.

                                          Regardless, I agree with your point that they shouldn’t worry what folks think. Use it if you want to. Don’t if you’re against it. That’s how most things work in life. :)

                                          1. 2

                                            Responding mostly to clarify, since I think we’re largely in agreement.

                                            It was people who said C is evil, must be destroyed,

                                            I guess that’s part of my problem with these reactions: I’ve seen people say things like that, but generally out of frustration, not as a policy position. Even Perl programmers say things like that about Perl, but that doesn’t imply an actual plan to migrate, kill Perl, etc.

                                            and with implication everyone should avoid it.

                                            I’ve definitely seen more of that attitude. That said, I think it falls into the “change happens, so change or don’t” bucket that I was describing above.

                                          2. 2

                                            If someone says “it would be great if we had a safer C”, why are you taking it as a personal attack?

                                            They aren’t. The article itself says that it would be great if we had a safer C and goes on to explain how that might be done.

                                          1. 5

                                            I’m all for ‘don’t attribute to malice what can be explained by incompetence’ but I don’t believe Google is that incompetent.

                                            You’d be surprised. The right answer is often the simplest. It is easier to build something for one browser than it is for more than one. Google builds against Chrome. They develop features using what Chrome supports. Is that the fastest way to build features? Yes. Is this the right thing to do? Debatable. Is this malicious? No.

                                            1. 10

                                              Intentions are irrelevant; impact is all that matters.

                                              1. 12

                                                If intentions are irrelevant, then there’s no need to use that word in the first sentence of the article.

                                                intentionally and systematically sabotaging Firefox

                                                1. 9

                                                  Better call their editor then. But more broadly, the problem is the aggregate effect of Google’s actions at scale, and it doesn’t matter what lies within the hearts of their engineers.

                                              2. 13

                                                Full disclaimer: I work at Google.

                                                I think this is a case of product managers across the company deprioritizing non-Chrome support once Chrome had a large market-share. They try to launch first and iterate. So they prioritize the larger platforms first, which would include Chrome. There’s no malicious Google-wide directive that we kill Firefox by not supporting it for our web products. That said, there’s no company-wide pillar to uphold the open web by supporting Firefox just as well as Chrome either. (We have similar pillars for privacy/diversity initiatives.) Note that Google’s iOS apps are well-maintained. That’s because there’s a lot of money and customers in that ecosystem.

                                                A company can both have a coherent vision and a thousand people making individual decisions.

                                                1. 8

                                                  I’m not sure what your comment is really meant to say, but if your product has a simple bug when viewed in a competing browser, that’s literally a one-liner, and which can be fixed before lunch, it clearly must be an intentional undertaking to instead ship it as-is, and then use your two-week release cycle to fix the issue that only takes a few man-hours to fix.

                                                  Of course, this is simplifying, but I don’t really see how the first-iteration argument could be applied here:

                                                  • How long does it take to develop a product?
                                                  • How much effort is involved to ensure compatibility?
                                                  • How much is gained by the competition looking bad in the first two weeks after launch?

                                                  These are the questions at stake here.

                                                  Speaking of which, as a Mozilla user, it’s hardly a coincidence that all the while that Google video-conferencing products don’t work in my browser, much of the competition, like CoderPad.io, works just fine. (Yet we still get surprised when it does work, because Google’s the one that’s setting the standard, even though video-conferencing has been available at Mozilla since like 5 years ago (2014?) if a quick search is to be believed.)

                                                  1. 10

                                                    What I’m saying is that in the absence of institutional pressure to uphold certain standards, those standards wont be met. Each product launch needs to meet privacy, security, i18n, and a11y standards. They’re enforced by external committees and manual testers. After launch, there are periodic reviews and every new feature launch needs to get the same approvals. There isn’t a similar checkmark for multibrowser compatibility and performance, so devs/PMs don’t care about it as much.

                                                    Plus, it’s always possible the devs or manual testers didn’t find that small issue in Firefox. Every product launches with bugs.

                                                    I’m trying to say it’s not institutional malevolence, just that it’s an institutional non-goal. Perhaps if there’s enough pressure (say from lawmakers), great multi-browser support would be one of those launch checkmarks. As it stands, the customers and the money don’t make it a priority.

                                                    1. 15

                                                      Traditionally this is precisely why antitrust laws exist. Google now has an effective monopoly on the browser market, and there are no checks and balances to prevent Google from eradicating all the competition. Whether Google does it with intentional malice or not is really beside the point.

                                                      1. 3

                                                        The problem with traditional anti-trust legislation in the US in relation to this issue is that it’s not at all clear who is harmed by this monopoly.

                                                        A traditional monopoly will naturally raise prices, as there is no competition to force it not to, and this will harm consumers of the product it produces. A lawyer would argue: how is getting a high-quality browser for free harming consumers?

                                                        You might argue that Google has a monopoly on online advertisements, but that’s not the case. Facebook is also a huge advertisement broker.

                                                        1. 3

                                                          A traditional monopoly will naturally raise prices, as there is no competition to force it not to,

                                                          When has that ever happened? And how much did the period of higher prices offset the preceding period of aggressively low prices?

                                                          1. 5

                                                            I was paraphrasing from faulty memory the perceived arguments for enacting antitrust legislation in the US in the late 19th century:

                                                            https://en.wikipedia.org/wiki/United_States_antitrust_law#History

                                                            I don’t find my statement controversial though. Why would an enterprise, unhindered by competition or regulation, not raise prices to the absolute maximum the market can bear? It would be its fiduciary duty to do so, to benefit its owners.

                                                            1. 2

                                                              Prescription drug costs in the US literally right now?

                                                              1. 1

                                                                The context was “anti-trust legislation”. The monopoly nature of pharmaceutical companies is a direct result of “pro-trust legistation”: patents.

                                                                1. 4

                                                                  No it’s not. Loads of medicines like insulin are totally unencumbered, yet their price is rising dramatically.

                                                                  Also what are you talking about? You asked when monopolies and trusts have ever raised prices, implying that has never happened. It has. I gave an example. And there are plenty of other examples throughout history, it just so happens that was the answer I thought of literally instantly.

                                                                  1. 1

                                                                    Loads of medicines like insulin are totally unencumbered, yet their price is rising dramatically.

                                                                    You’re saying that some company has a monopoly on a patent-free product?

                                                                    You asked when monopolies and trusts have ever raised prices, implying that has never happened.

                                                                    The context was “anti-trust legislation”. It makes no sense to suggest anti-trust legislation to solve a problem begat by pro-trust legislation; just eliminate the pro-trust legislation.

                                                                    1. 2

                                                                      You’re saying that some company has a monopoly on a patent-free product?

                                                                      No. A group of companies. Sometimes known as a trust, see also the term “antitrust law.” In the case of insulin, a group of three companies.

                                                                      Or perhaps the cost of insulin has risen dramatically due to its production cost rising dramatically? And every other developed country in the world has developed technology to offset those costs except the US?

                                                                      I’m open to other hypotheses.

                                                                      1. 1

                                                                        And every other developed country in the world has developed technology to offset those costs except the US?

                                                                        Can’t those countries can’t sell insulin to the US? If not, is it because of another law preventing them from doing so?

                                                                        1. 4

                                                                          Great question! No, they can’t sell in the US. It’s a hot topic in the Democratic presidential primary. Also, check out this article about policy to reduce prescription drug prices from 2017, which mentions allowing import from Canada and Mexico as possible solutions, to force US providers to set accurate prices or lose business.

                                                              2. 2

                                                                Regardless of historical examples, that’s literally Uber’s planned business model. The fares they charge for rideshare simply don’t cover costs. They’ve been operating at billion-dollar losses each year to support this.

                                                                So why set fares unsustainably low? To gain marketshare. To put cab companies out of business. Once they have market dominance, they can bring their fares up to sustainability, then profitability, then gouge-level profitability.

                                                                1. 1

                                                                  Regardless of historical examples, that’s literally Uber’s planned business model

                                                                  Rather an automatically-accepted just-so truism, much like the original one that I questioned.

                                                                  This reminds me of when people thought Google had no business reason to create a web browser. Now it’s “obvious”. But since you can’t see any other business model then clearly there’s only one option.

                                                                  1. 1

                                                                    Google wasn’t posting yearly losses in the billions and asking for additional funding. Regardless of Uber’s actual business plan, there are many rich people convinced that the plan is monopoly.

                                                                    1. 2

                                                                      Meanwhile, consumers have had 10 years of good service and VC-subsidized prices. And any raised prices once Uber achieves “monopoly” will be under threat if they are high enough to present a profitable (competitor) opportunity.

                                                                      This is basic economics. The imagined “problem” of a perpetual, abusive monopoly never seems to manifest. Except of course in cases where the monopoly is enforced by law.

                                                            2. 2

                                                              I agree that policy is the only lever that can change a big player. Even the threat of regulation may be enough.

                                                              I think it does matter if one characterizes this issue as intentional or not. If it’s intentional, it’s certainly malicious and may point to the people being bad actors. Whereas, if it’s the outcome of an anarchic process, it’s bad, too, but perhaps its just an oversight. The punishment and fixes will have to be different. Also it’s hard to convince someone to change their views if it looks like you’re arguing in bad faith so it’s important to characterize the problem correctly.

                                                              1. 2

                                                                It’s perfectly possible for the organization as a whole to be malicious while everybody within the organization just follows the process. The problem here is with Google as a company as opposed to intents of any single individual. As others pointed out conscious decisions had to be made to stop testing with Firefox, to introduce features outside W3C spec, and so on. I think that the individuals who choose to work for a particular organization share moral responsibility for the actions of that organization.

                                                                1. 3

                                                                  I’m in agreement with you here. My main point is that being precise with describing the issue is important.

                                                            3. 10

                                                              Notably, this to me seems to at the very least confirm a discrepancy between the words (the official “We’re on the same side. We want the same things”; unspoken, which makes it unclear, but I can only assume this to mean at least “conforming to Web Standards”) and the actions (not prioritizing tests with Another Standards Conforming Browser, i.e. Firefox). In harsher words, such behavior tends to be called hypocrisy.

                                                              That’s the first thing. The second thing is, presumably, someone at some level of management had to make an explicit decision to drop Firefox testing, at some point in time - assuming it was there before Chrome was released. Then, someone else at the company had to vet this decision. This makes it at least two people. As others said, hard to imagine such levels of pure, bliss, unscrutinized incompetence, at Google of all places. And even assuming charitably those were the real reasons, such incompetence would have been noticed later and corrected. But then, also from your comments, we clearly see it was not.

                                                              1. 2

                                                                It’s possible for the Chrome team to be for the open web and for teams across the company to launch products with bugs in non-Chrome browsers. Both are possible at the same time. I don’t think bugs at the margins invalidate whatever the Chrome team is doing.

                                                                I’m not saying that anyone decided to drop Firefox testing. That’s not true. There is no management directive to drop Firefox support. I’m presenting a distributed, anarchic model of decision-making. I’m saying that when you have dozens of teams working on dozens of web-products (ranging from small teams working on quick experiments to large teams supporting billion-user products), it’s possible for bugs to slip through that make it seem like the company doesn’t care. The fact that perfect multi-browser is not required to ship a product doesn’t mean that devs/PMs don’t care about it. Perfection on any axis is not required to ship a product.

                                                                The recent GMail web product launched even though it loaded slower than the previous version. That’s because users liked the new version better. The tradeoff was to launch and improve performance after.

                                                                1. 3

                                                                  There is no management directive to drop Firefox support.

                                                                  It’s enough if there’s no directive to keep it.

                                                                  If someone pumps a balloon, and then at some point stops pumping it, that’s not an action per se, but still conscious decision of inaction. Saying: “wow, I’m soo surprised the balloon deflated! I do still care about the balloons being inflated! I just now pump a different balloon!” in that situation doesn’t appear completely honest.

                                                                  1. 2

                                                                    Yes, I agree. I’m mostly concerned about the framing of the issue here, and we’ve come to agreement.

                                                          2. 13

                                                            This reads almost like a joke. No offence, but I really cannot believe that any development teams at a company whose core competence is web applications would not test their web applications on the leading N% web browsers.

                                                            N might vary from 95% for a small shop to 99% which was the case at my former employer: a 20-person small business writing web applications. We supported all major browsers on the three major desktops, Apple and Samsung phones and tablets default browsers, and a few other mobile browsers.

                                                            How could a company the size of Google test their web applications only on a single web browser?

                                                            1. 4

                                                              I really cannot believe that any development teams at a company whose core competence is web applications would not test their web applications on the leading N% web browsers

                                                              Believe it. If you’re testing a small application it’s not too hard. But when you’re testing huge applications for not only bugs, but performance issues, it’s a lot harder. And Google engineers have buff workstations and top of the line laptops where lots of performance issues simply don’t show up.

                                                              There are other more traditional business reasons this stuff happens that Google isn’t immune to. Once big projects get enough momentum they tend to roll out even if there are obvious problems—the sunk cost fallacy. I don’t know anything specific about the polymer redesign mentioned, but I wouldn’t be shocked if someone told me that’s what happened.

                                                              1. 1

                                                                Well, each web-site at Google probably has on the scale of 10-50 engineers on it. The apps are complex, the tech stack is custom, and there are competing priorities, like at any company. If bugs slip through the cracks, it’s for the same reason as any other company.

                                                                The primary and secondary features of all major Google apps work fine across all current browsers. Is that not true?

                                                                1. 2

                                                                  The primary and secondary features of all major Google apps work fine across all current browsers. Is that not true?

                                                                  I don’t know, other than Gmail and Search I do not use many Google products.

                                                                  And it does not matter how many engineers (or devs) are on an app, what matters is the the testing procedures in the build processes. Whether they need to sit a “Firefox-testing” intern next to the “Chrome-testing” intern, or if they need to run test-in-firefox.sh as well as test-in-chrome.sh is immaterial. What is material is that Firefox (and IE, and a few other browsers) exist and need to be tested for.

                                                                  “My team is too large” is not an excuse, especially as these things scale better for larger teams.

                                                              2. 4

                                                                Note that Google’s iOS apps are well-maintained. That’s because there’s a lot of money and customers in that ecosystem.

                                                                Like it took a year for apps to support iPhone X or most apps still don’t have iPad keyboard support?

                                                                1. 1

                                                                  I’m not an iOS expert and don’t work on iOS apps at the company, but I really don’t think it took a year for major apps to support iPhone X. It’s up to the individual PMs to prioritize features; I can’t speak to why iPad support isn’t wide-spread. You can imagine there are many competing goals for each product.

                                                            1. 10

                                                              That’s understandable. There aren’t many ways to make sustainable money from open source, and having an open core with proprietary add-ons seems like a reasonable compromise between sharing the code and having a defensible business.

                                                              1. 3

                                                                I was also very optimistic about the open core model, but the recent events have shown how vulnerable open core startups are against the cloud giants who have the resources and the incentives to replicate the proprietary shell once the core is popular enough..

                                                                1. 1

                                                                  That’s exactly the motivation behind Redis’ and MongDB’s license changes, isn’t it?

                                                                2. 4

                                                                  The sad thing is that the actual goals of Free Software & Open Source would be served by the AGPL: any company using AGPLed server software must make it available to end users to read, modify & redistribute, which means that the original authors would also have access to it.

                                                                  1. 2

                                                                    I agree, but that’s predicated on two things:

                                                                    1. The company complying with the license (which we’ve seen not all do)
                                                                    2. The company using the (A)GPL’ed software in the first place

                                                                    Some companies won’t (or try not to) use GPL software because of what the license entails. So saying the software in question would be in the exact same predicament had the liberal license been a GPL variant isn’t a given. The software may not have taken off like it did.

                                                                    1. 3

                                                                      Which leads to this weird scenario:

                                                                      – Here’s a permissive license, so that companies can use it!
                                                                      < Companies take it and make a proprietary product from it >
                                                                      – Wait, not like that!

                                                                      We end up having unwritten rules about what permissive licenses permit. We expect the code to remain open. We expect companies to give back. But the license doesn’t actually require any of this.

                                                                      1. 1

                                                                        At the end of the day, companies will do what makes economic sense. There was a time when they refused to use GPLed software out of superstition, and then once a few showed that they could make a profit by opening up development and charging for services others followed suit.

                                                                        Likewise, would Amazon really care if it had to, for example, give back its updates to Redis or PostgreSQL? AWS is still loads easier to manage than running those things manually, and (most) competitors won’t have the name recognition or integration that AWS has. There’s really no reason other than superstition for Amazon not to deliver (some) services using AGPLed software.

                                                                        Regarding the first point, all it takes is a few pointed judgements and folks tend to fall in line.

                                                                  1. 4

                                                                    Sorry to go off on a tangent, but it’s unfortunate that they chose to implement their own Lisp-like language rather than write in Lisp in the first place. Writing it from scratch misses the point of Lisp as a DSL.

                                                                    Judging by their example code, they could’ve written a few Common Lisp macros and had nearly identical state machine code. Then they could’ve focused entirely on the domain specific parts of the language and piggybacked on CL for the “boring” parts like arithmetic, looping, etc.

                                                                    Granted Lisp isn’t very popular, but it’s more so than Radicle and there are many books and tutorials and pre-existing libraries (of varying quality, of course). But now their team will have to support a whole language ecosystem just to support the distributed state machine work they’re actually interested in.

                                                                    1. 3

                                                                      We needed, for this entire architecture to work, a language that is deterministic. If there’s some compiler extension that restricts CL to only the deterministic parts, that could have worked. But (and I have to admit I’m relatively ignorant about CL here) I’d be surprised if that were easy, and didn’t imply most tutorials and libraries wouldn’t work anyhow.

                                                                      1. 2

                                                                        I’m not sure I understand the use of “deterministic” here. Which parts of CL are non-deterministic?

                                                                        In any case, I used CL as the example because it’s what I use, but a simpler Lisp with macros, like Scheme, should also work.

                                                                        1. 4

                                                                          By “deterministic” I mean that the language should be such that, for any program written in it P, and for any inputs to that program I, the result of running P with I, P(I), should always be the same between runs, for everyone. So no IO, no platform-specific behavior, no concurrency, no randomness, no weak refs that allow observing garbage collection results, etc.

                                                                          1. 2

                                                                            The state machines defined using Radicle need to be deterministic, but that doesn’t require the language defining the state machines to be deterministic.

                                                                            1. 9

                                                                              That’s true, but then that would require a separate proof for each machine (or the risk of a mistake). The idea behind Radicle is a special purpose programming language in which all programs are automatically deterministic state machines.

                                                                            2. 1

                                                                              Why not just use a pure language?

                                                                        2. 2

                                                                          chose to implement their own Lisp-like language rather than write in Lisp in the first place.

                                                                          I’m not sure it’s from scratch…. “Lisp dialect in the flavor of Black.” combined with the fact Black’s flavour is…

                                                                          Black is an extension of Scheme with a reflective construct exec-at-metalevel. It executes its argument at the metalevel where the interpreter that executes user programs is running. There, one can observe, access, and even modify the metalevel interpreter in any way. Because the metalevel interpreter determines the operational semantics of the language, Black effectively allows us to observe, access, and modify the language semantics from within the same language framework.

                                                                          ie. I’m curious to know to what extent it’s “implement their own Lisp-like language” vs a “scheme minus mutability” with a Black program that mutates Black.

                                                                          After all Scheme isn’t exactly a massive language.

                                                                          1. 1

                                                                            After all Scheme isn’t exactly a massive language.

                                                                            It’s … a fair bit bigger than that. That doesn’t even implement all of r4rs. The most recent standard, r6rs (from 2007), expanded the language so significantly than many (real, non-toy) schemes still haven’t implemented everything.

                                                                            I agree with your overall point, just that your example is misleading.

                                                                            1. 1

                                                                              The most recent standard is r7rs and as I understand it, it makes the language smaller than r6rs.

                                                                              1. 1

                                                                                I forgot about r7rs. IIRC, that added so many things to the language that they split it into two specs: the big one and the small one (the latter which is closer to r5rs (again, iirc)).

                                                                            2. 1

                                                                              What I was getting at is the language isn’t written in Lisp or Scheme, but is a Lisp-like language written in Haskell. The power of Lisp as a DSL is that macros allow the language to be seamlessly extended using the language itself. Instead of writing an entire compiler, they could have written a few macros.

                                                                              The nondeterminism argument that jkarni and jameshh brought up kind of makes sense, but seems like it would be easy to circumvent by generating Radicle code at runtime.

                                                                              1. 1

                                                                                Well, the meta-level stuff is interesting and does more than a macro could do…. and not available in the Lispy things I have used…

                                                                                I wonder if and what they use it for…

                                                                          1. 2

                                                                            Location: Portland, OR/Remote

                                                                            Type of work: Data architecture, tech management, tech middle management

                                                                            Hours: Full time

                                                                            Contact: PM me here

                                                                            Description: Over 20 years experience, including dev (focused on data, particularly RDBMS), DBA, and management. Currently managing an org (entirely remote) of between 15-20 people (still waiting on q1 hiring budget …), handling operations and administration of hadoop, greenplum, postgresql, ms-sql, anything else that people have installed without telling us, etc.

                                                                            1. 4

                                                                              Any good open source alternative to Plex? I don’t care about mobile streaming or “news”. I like being able to steam to a Chromecast from a desktop and control it with my phone. I like the tvdb integration.

                                                                              1. 2

                                                                                Emby is the only one that I’ve found that seems close in features. There’s still commercial code required (and requiring a subscription to) for some stuff like offline sync, etc, but the core server is GPLv2.

                                                                                1. 8

                                                                                  Emby has a FOSS fork called Jellyfin.

                                                                                  https://github.com/jellyfin/jellyfin

                                                                                  1. 3

                                                                                    Oh, interesting. Very young (just a few months), but apparently in response to Emby (the company) taking Emby (the software) closed-source, which is news I hadn’t heard. I’m using FreeNAS, so will probably stick to Emby until Jellyfin supports that platform, but I’ll be watching closely – thanks.

                                                                                    They list a bunch of clients, also forked from existing code – do you happen to know if the official Emby clients will still work with a Jellyfin server?

                                                                                    1. 3

                                                                                      Yup, the emby clients still work with the Jellyfin server. They’re expecting support to be blocked eventually (for obvious reasons), but until then…

                                                                              1. 8

                                                                                293,000 lines of code and 50 third-party dependencies for a closed-source proprietary fork of a GPL-licensed project?

                                                                                1. 0

                                                                                  The fork of XBMC is far behind. If we are to trust what Elan said here and there on the forums (we don’t have to but he doesn’t have any reason to lie either), they have rewritten enough of the server and client code that there’s not much left from the original codebase. Plus, AFAIK, the mobile/TV/misc clients were written from scratch. Plex and Kodi are now two completely different things who cater to completely different audiences anyway.

                                                                                  1. 1

                                                                                    Does XBMC/Kodi have a server component? I thought it was basically client-only.

                                                                                    1. 1

                                                                                      It is indeed client only. But Plex basically started by splitting that codebase in 2, separating the database part from the client side, so you could have multiple clients connect to it. Plex was OS X only at that time. Then they branched out to all kinds of other clients Kodi didn’t run on, added a whole bunch of stuff to the server (automatic offline sync is what sold me on it… always get new episodes of TV shows on your tablet to watch during your morning commute!), etc.

                                                                                1. 8

                                                                                  I think a lot of this goes back to “Worse Is Better.”

                                                                                  One question I imagine is “Would it be better if Emacs depended on Rust rather than C?” and I basically think the answer is “no.” The C compiler always works and it’s always there, and it’s usually really fast too.

                                                                                  The framing of “Worse Is Better” is clever because it avoids claiming that C is actually good in some Platonic sense, indeed it was written by a kind of C opponent. C doesn’t win because it’s of such high quality—it wins because it’s a cockroach.

                                                                                  1. 8

                                                                                    FWIW, there is a rewrite emacs in rust project. It’s taking an incrementalist approach: replacing C code piece-by-piece with equivalent Rust, using libraries where available, and being buildable (and usable) at all stages. The author is also committing fixes upstream when he finds errors in the C code (he keeps finding bugs).

                                                                                    That doesn’t answer your question, of course, but I’ll say: I use an emacs that requires Rust.

                                                                                    1. 5

                                                                                      he keeps finding bugs

                                                                                      As much as I’m rooting for Rust (Zig and Jai don’t offer a strict UB-free subset, so they’re not interesting to me), that’s not really an argument in favor of Rust. Any close reading of the source code will result in people finding such bugs, even if it was rewriting a Rust app into C, or, like in the case of Microsoft reverse-engineering Netscape, doing a black-box rewrite of a C++ app into another C++ app.

                                                                                      1. 3

                                                                                        I’d say that’s true unless we’re talking errors from the type system or borrow checker. Finding those would be a Rust benefit. I don’t know anything about that case study, though.

                                                                                        1. 2

                                                                                          Ah, sorry, I didn’t communicate that well. I was responding largely to the OP’s assertion:

                                                                                          rewriting an entire program from scratch is always going to introduce more bugs than maintaining the C program ever would

                                                                                          The process of maintaining emacs didn’t find those bugs. The process of rewriting has done so. Yes, I agree, that’s because the rewrite demands close audit of the code.

                                                                                      2. 5

                                                                                        One question I imagine is “Would it be better if Emacs depended on Rust rather than C?” and I basically think the answer is “no.” The C compiler always works and it’s always there, and it’s usually really fast too.

                                                                                        If Emacs was rewritten to truly use Rust rather than C, the Rust compiler would become ubiquitous very rapidly.

                                                                                        1. 2

                                                                                          I somehow think people would rather go back to the C Emacs!

                                                                                          1. 5

                                                                                            This is kind of a silly hypothetical anyway, but to play it out: if the Emacs project re-wrote the whole thing in Rust, you’re saying that people would rather fork the project than include rustc and cargo in their operating system distributions?

                                                                                            That seems… really far-fetched, to be honest. I mean, there’s already Rust packages in Debian…

                                                                                            1. 1

                                                                                              I really don’t know and I guess I don’t want to be the pessimist…

                                                                                              1. 1

                                                                                                That seems… really far-fetched, to be honest.

                                                                                                Not really. People made a hell of a lot of noise and forked distros just to prevent systemd.

                                                                                                1. 4

                                                                                                  And yet calling systemd anything other than widespread would be foolish.

                                                                                        1. 5

                                                                                          Some small things that came to my mind for now:

                                                                                          • Lua’s coroutines
                                                                                          • Go’s (and Nim’s) “explicit this”, which has regular name like the rest of the arguments
                                                                                          • OCaml’s, Elm’s, F#’s “pipe operator” (also available in Nim in a surprising way)
                                                                                          • Rust’s or Nim’s macros (though see also Rebol/Red’s “dialects”)
                                                                                          1. 5

                                                                                            I am really, REALLY enjoying Lua. It’s like it hits a sweet spot for programming languages. Delightfully small and light. You can pick up the syntax in no time, but there’s some decent power there under the hood.

                                                                                            (Also it powers PICO-8 which I’m infatuated with of late :)

                                                                                            1. 7

                                                                                              Unfortunately Lua’s greatest strength (unrelenting simplicity) cannot be added to other existing languages. It can only serve as an inspiration for new ones.

                                                                                              1. 2

                                                                                                Janet for the win.

                                                                                                1. 1

                                                                                                  Sounds like it follows the Wirth tradition then. ;)

                                                                                                2. 3

                                                                                                  Wow, TIL about PICO-8. This looks like it might be a great way for me to learn Lua.

                                                                                                  Edit: Dang, it uses/requires DRM. Pass.

                                                                                                  1. 4

                                                                                                    You might like TIC-80, which is similar but open source.

                                                                                                    1. 3

                                                                                                      It’s proprietary, but the webpage says “DRM-free”, if that’s what you’re worried about.

                                                                                                      If “proprietary” is your real concern, you might be interested in Löve 2D, which is an open-source 2D game engine that bundles together a bunch of useful libraries - SDL for graphics, FreeType for text rendering, Box2D for physics, and Lua for scripting to bind it all together. It’s also easy to make a single self-contained executable with the runtime and all the game resources, so you can show off your game to your friends.

                                                                                                      1. 2

                                                                                                        It says “DRM-free” here but I assumed it was just for a specific set of folks (whatever ‘Lexaloffle’ is..): https://www.lexaloffle.com/games.php?page=updates

                                                                                                        But yes, proprietary is also a (major) concern for me. Löve 2D sounds pretty cool, I’ll take a look. Thanks!

                                                                                                        1. 4

                                                                                                          Love2D is very, very good, but also very different from Pico-8. It’s much more general purpose and not really centered around creative constraints, plus it doesn’t integrate tools for sprites/maps/music. For that I would strongly recommend TIC-80: https://tic.computer which is free software and has a very welcoming maintainer. (I’ve had a great experience submitting patches.)

                                                                                                          Both of these work great with Lua or Fennel if you prefer lisps: https://fennel-lang.org

                                                                                                          1. 2

                                                                                                            You need to buy it but it has no DRM.

                                                                                                        2. 1

                                                                                                          Wait, What? What do you mean in that it requires DRM? It’s a restricted LUA subset? (Genuinely curious here. I bought Pico-8 because it runs great on my Clockwork Pi Gameshell and fell in love with it.

                                                                                                          1. 1

                                                                                                            I could have been mistaken, the wording on their download page implied (to me) that if you weren’t part of some group then you didn’t get the DRM-free version.

                                                                                                            1. 1

                                                                                                              Nope. Not DRM. However it’s also not open source. It’s $15 and worth every cent and more.

                                                                                                              You get an activation key when you pay.

                                                                                                              If you want fully open source, tic-80 might make you happier :)

                                                                                                              (However if you want a taste of the awesome things folks are doing woth PICO-8 take a gander at the PICO-8 hash tag on Twitter.

                                                                                                      2. 3

                                                                                                        When I realized that in lisp you can make a pipe operator yourself that is natural and easy to use, I realized it is the highest level language we have.

                                                                                                        1. 1

                                                                                                          you can do it yourself in ocaml/elm/f# too (in fact the definition in ocaml is simply let ( |> ) x f = f x). it needs first-class functions and user-defined operators, but a lot of languages have that now.

                                                                                                          1. 1

                                                                                                            My experience is that operator precedence makes these sort of extensions feel second class, maybe It’s different in those languages though.

                                                                                                            1. 1

                                                                                                              Can’t speak for elm, but you’re right in the case of ocaml – you can’t set the precedence of user-created infix operators.

                                                                                                              In the closely-related SML, though, it’s straightforward to do:

                                                                                                              fun op|> x f = (f x);
                                                                                                              infix y |>;
                                                                                                              
                                                                                                              (* Where y is an Int, usually from 0 to 7, higher binds more tightly.
                                                                                                                 The provided operators all have 0 to 7 precedence. *)
                                                                                                              

                                                                                                              In F#, precedence is set by the first character of the custom operator. That’s not as flexible as SML, but it’s at least well-defined in the spec.

                                                                                                              1. 1

                                                                                                                ocaml does roughly the same thing as F#:

                                                                                                                The precedences and associativities of infix symbols in expressions are determined by their first character(s): symbols beginning with ** have highest precedence (exponentiation), followed by symbols beginning with *, / or % (multiplication), then + and - (addition), then @ and ^ (concatenation), then all others symbols (comparisons).

                                                                                                                1. 1

                                                                                                                  Oh, interesting, thanks! I hadn’t found that before. Where is it documented?

                                                                                                                  1. 1

                                                                                                                    i found that bit in the caml-light manual; you’re right that it doesn’t seem to be explicitly documented anywhere for ocaml so maybe it’s not reliable any more!

                                                                                                                    see this blog post though.

                                                                                                        2. 2

                                                                                                          The pipe operator is also part of Elixir.

                                                                                                        1. 6

                                                                                                          The first question is “how long have you had a lobste.rs account” with the first answer “>6 months”.

                                                                                                          That should be “<6 months”.

                                                                                                          1. 4

                                                                                                            I’ve discovered that it’s surprisingly common to get that flipped around. I remember getting it drilled into me which way the sign opened when I was in elementary school, but adults still seem to have a lot of trouble with it.

                                                                                                            1. 3

                                                                                                              Did they tell you too that the sign is a little crocodile is opening its jaws to eat the biggest number?

                                                                                                              1. 2

                                                                                                                I think that’s what everyone learns. Although back in my day, Pac-Man was also a popular mnemonic.

                                                                                                                1. 1

                                                                                                                  FWIW, I just remember that one end has 2 line ends/points, and the other has 1. 2>1 so the bigger number goes on the side with 2. I think that’s what they taught us in school? But maybe I just made it up.

                                                                                                            2. 3

                                                                                                              Same question should also have a “>5 years” option, fwiw.

                                                                                                              1. 2

                                                                                                                It made me do a double take for sure.

                                                                                                              1. 4

                                                                                                                Teeth have improved since the last such thing I saw. Still has trouble with hair, clothes, and sometimes ears and wrinkles.

                                                                                                                I’d personally find it handy to have a way to link to individual photos, to show features and flaws. Still, nice work.

                                                                                                                1. 3

                                                                                                                  This is the first I heard about Pijul, has anyone used it for production/hobby? What are your thoughts?

                                                                                                                  1. 18

                                                                                                                    I’ve used Pijul casually a few times over the past year or so. My impressions are:

                                                                                                                    • it is pretty dang cool
                                                                                                                    • the part where merge conflicts and the resolution (not just the resolution) are kept as part of the history is really incredible, and avoids scenarios where you’re 10 patches deep in a rebase and realized you messed it up somewhere.
                                                                                                                    • the whole ecosystem (pijul + nest) is a bit rough, and it is a bit hard to use. I’m not surprised: they’ve taken on a LOT of work for a small project and new team.
                                                                                                                    • diffs not necessarily being line-based is a very cool concept, with incredible possibilities: imagine using a LSP language server’s guidance in creating a semantic diff.

                                                                                                                    I’d love to experiment with importing big Git repositories (Nixpkgs, Linux) and torture it until it breaks. I wouldn’t hold it against them, it is a young project. I don’t think that it is reasonable to expect it to handle such monstrosities already.


                                                                                                                    By the way, if you’re a Nix user, get Pijul from nixpkgs unstable:

                                                                                                                    $ nix-shell -p pijul -I nixpkgs=channel:nixpkgs-unstable
                                                                                                                    
                                                                                                                    [nix-shell:~]$ pijul --version
                                                                                                                    pijul 0.11.0
                                                                                                                    
                                                                                                                    1. 6

                                                                                                                      the whole ecosystem (pijul + nest) is a bit rough, and it is a bit hard to use

                                                                                                                      I feel like nest could only be improved by opening the source, honestly.

                                                                                                                      1. 2

                                                                                                                        This has been brought up to pmeunier very often. He has his reasons, which I don’t fully agree with, but at least understand. It may be released, in time, in the future. I certainly hope so.

                                                                                                                        1. 1

                                                                                                                          Yeah, and I get it, but it does seem to be a blocker for a great many things. Do you know if pmeunier would support a different project intended for pijul hosting? It shouldn’t be too complicated to fork darcsweb, for example, and go from there.

                                                                                                                          Basically, how attached is pmeunier to Nest as a flagship pijul project?

                                                                                                                          1. 3

                                                                                                                            He was pretty happy when I started to write pi-hoole (see here) so I think he would be very happy to see contribution to the project in that form!

                                                                                                                            (btw, I do not work on pi-hoole right now, and will probably wait for the next version before updating it)

                                                                                                                      2. 3

                                                                                                                        Okay, kind of a funny thing, but I was experimenting with https://nest.pijul.com/pijul_org/git-pijul and then https://nest.pijul.com/rohan/git-pijul which got me to cloning https://nest.pijul.com/rohan/pijul. Directly after cloning this fork of pijul, I get merge errors:

                                                                                                                        $ pijul clone grahamc@nest.pijul.com:rohan/pijul
                                                                                                                        [...]
                                                                                                                        $ pijul status
                                                                                                                        On branch master
                                                                                                                        
                                                                                                                        Unresolved conflicts:
                                                                                                                          (fix conflicts and record the resolution with "pijul record ...")
                                                                                                                        
                                                                                                                                Cargo.lock
                                                                                                                                libpijul/Cargo.toml
                                                                                                                                libpijul/src/fs_representation.rs
                                                                                                                                libpijul/src/graph.rs
                                                                                                                                pijul/src/commands/fs_operation.rs
                                                                                                                                pijul/src/commands/record.rs
                                                                                                                                pijul/src/commands/status.rs
                                                                                                                        

                                                                                                                        Presumably merge conflicts are a valid state to be in, and can be pushed to a remote? If true (and not a bug), that is a pretty funny side effect of tracked merges!

                                                                                                                        1. 4

                                                                                                                          Presumably merge conflicts are a valid state to be in, and can be pushed to a remote?

                                                                                                                          That’s exactly correct. The repo is just a collection of patches; two can conflict and both be in the repo. The resolutions are also explicit objects, so you’d normally avoid pushing conflicting patches without a resolution patch, but there’s no reason you have to do that. (And there are times you don’t want to—for example, if you need help on a merge. And you can do that in Git and Hg, too, but it explicitly adds an extra head.)

                                                                                                                        2. 1

                                                                                                                          diffs not necessarily being line-based is a very cool concept

                                                                                                                          Can’t you also do it with git? I know Unity recommends configuring git to use a custom tool for diffing and merging its .asset files.

                                                                                                                        3. 12

                                                                                                                          I used darcs and am actually the person who’s responsible for pijul being implemented in Rust :).

                                                                                                                          I use it on and off. Here’s a couple of experiences, good and bad:

                                                                                                                          • The interface models the interface of darcs, but doesn’t quite have its elegance. Which isn’t a bad thing, it’s just not quite there yet.
                                                                                                                          • Still, it is a substantial improvement over darcs theory of patches, which had several issues.
                                                                                                                          • Sometimes, it has quality issues, there were phases where you couldn’t download and build pijul.
                                                                                                                          • Nest, while nice, suffers from not enough hands. I actually am privy to the nest code and would love to see some of that out in the open.
                                                                                                                          • The model clicks for me better than the model of git. Always has and I love having an alternative around.
                                                                                                                          • Certain operations that are hard to do in git are much easier in pijul: figuring out whether a codebase contains a a certain patch (as pijul operations don’t change the identity of the patch) and keeping signed patchs intact (same, patches don’t change identity). This is the core of why I like the model more: pijul has clearer semantics of what the bundles are that it is handling, while git is very focused on having minutia and that building a model on top of it.

                                                                                                                          The problem that every of those alternative systems though is that you just can’t live without some way to interact with the current state of the world and it’s been a frequent issue to have good interactions with DAG-based systems the way git-svn/p4 enabled people to start using git with an upstream SVN/P4.

                                                                                                                        1. 5

                                                                                                                          The problem appears to be a cycle I’ve created: Sprint through a small project, sloth it up until I recover and move on to the next project to start the cycle again. Now how do I fix it?

                                                                                                                          Seems like an obvious question, but: Do you actually want/need to fix it?

                                                                                                                          It sounds like sprinting on exciting new side projects is filling a need for you. Will “finishing” a side project fill a need? Or is it something that sounds like the “right thing to do”, so you should do it regardless of enjoyment?

                                                                                                                          Basically, if shipping isn’t enjoyable, and you’re working on side projects because it’s fun, you don’t need to ship. Don’t make a fun thing painful and stressful!

                                                                                                                          If you’re trying to bulk a portfolio or resume, of course, it’s a different story.

                                                                                                                          1. 3

                                                                                                                            I don’t try to finish every project, but if I’m not finishing ANY project, then that’s a problem. By “finish” I mean “ship” something minimal – get it into the state that at least one other person can use it. Otherwise you’re depriving yourself of a very large learning opportunity – the feedback of others. That’s typically how a side project goes on to be something more rewarding.

                                                                                                                            1. 3

                                                                                                                              If that’s a problem for you, then I’m all for it. If you’re framing it as a problem in some objective sense, though, that’s when I say don’t ruin your fun with burdensome expectations.

                                                                                                                            2. 2

                                                                                                                              In support of that:

                                                                                                                              Getting software actually used has a lot of the same traits as running a software business: it needs to have a ‘market’, much of the work is not programming, there’s a slog of maintenance, you’ll be rewarded if you program in a disciplined way (minimize clever, remove cruft, have tests, etc.). That can feel totally reasonable if your goal is about providing something to some users, and not about the code or coding itself.

                                                                                                                              But to go play with Rust or error correcting codes or such, I don’t think I would want to have all that in mind.

                                                                                                                              The tension between the interest in playing with computing and the realities of shipping (even for free) has certainly caused me some stress, and it sounds like it causes it to some folks whose open-source projects end up popular as well.

                                                                                                                              1. 1

                                                                                                                                If I could upvote this again, I would. Great comment!