1. 5

    What I don’t really understand is how Andrew has a comfortable standard of living in NYC on $600 per/month.

    https://www.patreon.com/andrewrk/overview

    I’m guessing that there must be another source of Zig donations aside from Patreon?

    1. 7

      Savings?

      1. 2

        Oh woops, I misread the first paragraph, I thought it stated that Zig was supporting him entirely, when it’s actually about his programming supporting him.

        1. 3

          Note that this isn’t his first attempt at doing this. But the project he was working on before Genesis didn’t find the same traction as Zig has. BUT, if I recall correctly, he also didn’t live in NYC the last time… Anyway, he’s got experience with living frugally, so I’m sure he knows what he’s doing here.

          1. 2

            he extrapolated the donations growth versus his savings.

        2. 2

          What I don’t understand is if you are not working in NYC anymore, and only working on your own and getting donation, why doesn’t he move to anywhere but NYC to minimise his personal expense?

          I’m sure there are cities in the US with 80% the fun of NYC at lower than 80% of the cost.

          1. 17

            I work remote, and there are places I could move that are < 20% of the cost.

            My friends aren’t going to move with me, and I have enough money to live where I am. Why be wealthy and lonely?

            1. -10

              Didn’t know your city is the only source of friends in the world. That must be good for the economy.

              1. 32

                I know that this is very hard for some people to believe (seems to be harder the more western the society is), but some people don’t consider their friends a replaceable commodity. Not that I don’t want to make new friends, but these are my friends right now and I am more loyal to them than I am to a meaningless job or to money.

                1. 4

                  Maybe because your partner has a job he/she really enjoys in this city? I mean, we’re lucky in our field to have a lot of different possibilities, in remote or not, mostly well paid. Let’s not forget that it’s a chance and not something everybody has.

              2. 2

                The usual reason is the significant other.

                1. 1

                  There’s a shit-ton of them. Even Memphis TN that’s close to me with all its problems is low cost of living with all kinds of fun stuff to do. Just don’t live in or shop around the hood. Solves most of problems if you don’t have kids going to school or college.

                  There’s plenty of cities in the US that similarly have low cost of living with plenty going on. One can also live in areas 30-40 min from cities to substantially reduce their rent. The fun stuff still isn’t that far away. The slight inconvenience just knocks quite a bit off the price.

                  1. 4

                    I don’t remember the details, and I can’t find the link, but a few years ago someone did some research here in Berlin where they compared the cost of rent in more-or-less the city proper, and the cost of rent + public transportation tickets when you lived in the outskirts. It ended up being not much of a difference.

                    1. 2

                      Well, if you don’t workin in the city and need to commute then you spend even less. Though OTOH, you get tax returns for commutes in Germany so probably the commute is not that expensive to begin with.

                      1. 2

                        Berlin is currently the city with the highest increase in rent world-wide and a few years ago, it was unusually low.

                        Also, Berlin is hard to compare in many aspects, possibly because of a very unique city history.

                1. 4

                  Their design on this is so good imho

                  1. 6

                    It’s pretty but it hurts my eyes to read

                    1. 1

                      I have slight dyslexia. I am quite sure that headache from reading that site is not worth it.

                    2. 2

                      I bet if you were in the group

                      "browsers": [ ">0.25%", "not ie 11", "not op_mini all" ]

                      it would really look awesome. Time to upgrade! ☺

                    1. 9

                      Working on the typechecker for Nickel, a type-safe, memory-safe, effect-safe intermediate language I’m building for use as a backend for functional compilers. Think Rust with a more expressive type system, or Haskell with precise control over memory management and mutation.

                      It turns out that if you don’t care about ergonomics or readability at all, you can create some very powerful low-level abstractions – perfect for an intermediate language! :)

                      1. 3

                        This seems like it would be a perfect intermediate language for my nascent programming language, Forest.

                        I’m going to watch your progress eagerly. Have you had any interest from other programming language implementers?

                        1. 3

                          I’m glad you’re interested! Nickel is very, very new, and you’re actually the first language developer to mention that you’d be interested in using Nickel for your compiler. When my project is a bit farther along, I’d love to talk with you more about how Forest’s abstractions might map on to Nickel’s execution model and type system. Feedback from an actual language implementer (other than myself) would be extremely helpful for refining Nickel’s design!

                          1. 1

                            Would love to go through that with you, and since Nickel is actually aiming to implement a lot of what I was going to do in the Forest compiler, I could be interested in contributing :)

                            What do you think is the best forum to talk this through? I could open an issue on Nickel and talk about the stuff from the README that seems like it would fit Forest, if you like.

                            1. 1

                              I’ve set up a Gitter for Nickel – come and chat!

                      1. 9

                        I feel like this is pointless and somewhat childish. If you want to commit to an oath, join a professional order and be audited and actually accountable for your actions. The signature could have at least be using cryptographic signature or signed commit.

                        1. 3

                          Childish is the first thought I had when I started reading this. I started reading and wondered “how old is this guy?” The language used definitely doesn’t help. The more serious it wants to be, the less seriously I can take it.

                          I understand there are good intentions here, but it seems goofy to me to have some sort of oath. It’s like a digital pinky swear.

                          1. 3

                            It’s deeply amusing to me that out of all the work I’ve released publicly, this is the first to have the label “childish” applied.

                            For the record, this includes quite a few joke libraries and a game where I made every sound effect with my voice.

                            1. 2

                              Don’t take it personnally. I’m not calling you a child and looking at your work you definitely come off as someone mature. I could explain the childish sense by something that is to be taken seriously, but end up as somewhat naive and rely on low-effort action without actual consequence. It gave me the similar feeling as the “Tag someone you love” image posts on Facebook… I’m sure it has good intentions, but in the end it is still too simple and vague to bring value to what already exists and it doesn’t bring any ideas about ways to enforce it.

                              For the record, this includes quite a few joke libraries and a game where I made every sound effect with my voice.

                              Joke libraries and game with sound effect from your voice are not childish, they are just fun.

                              No strong feeling :) Just trying to describe how I feel about this content.

                              1. 1

                                Yeah, I want to echo this. It’s childish in the naïve “send this to 10 people or you will have bad luck!” sort of way. I think “low-effort action without actual consequence” is the best way to describe it.

                        1. 2

                          Robert C. Martin also has one, which actually me and a friend have signed: http://blog.cleancoder.com/uncle-bob/2015/11/18/TheProgrammersOath.html

                          1. 6

                            I like Uncle Bob’s oath, but I don’t think I could sign it.

                            The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate.

                            Every piece of code I produce will always be my best work? I’m human, I don’t think that’s something I can swear to uphold.

                            I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.

                            A sure proof that every element of the code works as intended, for every change? I don’t think that’s even necessarily possible. Under tight professional constraints, there’s no way I could sell that to my manager.

                            I’m being very careful to consider what should be an aspiration and what is a hard and fast rule I can swear to uphold for the rest of my career. I think those two above points are lovely aspirations, but not realistic to achieve all day every day.

                            What do you think? Do you feel that you rigorously uphold those two points in your work?

                            1. 5

                              pretty sure, by quick, “sure and repeatable proof” Martin means tests. But of course, a test is not a proof.

                              I also think the Oath (that turns out to be a promise) is accidentally ironic

                              I will not make promises without certainty.

                              1. 2

                                On both points I totally see what you’re saying, and on the second point I’m lacking especially.

                                On the first point, personally I don’t see it as easy to break this one. “Best work” is contextual as I see it. “I will never write purposefully shitty code just because” is how I see it. If the professional constraints dictate I can’t write great code, that’s fine, but that’s a constraint the business side has agreed to. Do you see what I mean? And I go back and refactor if at all possible.

                                Second point, I don’t think it’s necessary possible or necessary. Robert wrote it with his viewpoint of “always write unit tests for everything”, TDD as it were. I’m a bit more liberal on that. But how I apply this point is I look for anything that makes me nervous about releasing the code to customers. If I’m not confident that it’ll work on production, I consider that a lack of automated testing and I add more tests .

                                I’m being very careful to consider what should be an aspiration and what is a hard and fast rule I can swear to uphold for the rest of my career. I think those two above points are lovely aspirations, but not realistic to achieve all day every day.

                                What do you think? Do you feel that you rigorously uphold those two points in your work?

                                Commendable. Personally I need a code that is possibly unachievable, as any less I get the impression is very easy to do. The code you wrote I perceive as more from a human perspective, while Robert’s code is more from a “we can’t and shouldn’t fuck up” perspective.

                                The former I would have no problem upholding, I think, though to be humble of course I’m human so I may fuck up.

                                Robert’s code is such a high call to duty, the only way I can think of describing it, that it actively has a bigger effect on my behaviour, I think.

                                So no, I don’t think I’m upholding it 100% all the time. But at any point that I can, I am.

                            1. 18

                              Point zero is arguable. Is it never permissible to write code that hurts others? Well, that’s the same question as whether self-defense is ever justified, or whether the existence of weapons is ever justified, or whether the existence of a military is ever justified. Not being a pacifist, I cannot agree to it as it stands, and being a pragmatist, I suggest you punt the issue as being outside of what this oath should try to make all programmers everywhere agree on.

                              1. 6

                                I suggest you punt the issue as being outside of what this oath should try to make all programmers everywhere agree on.

                                If you want something everybody agree upon, write an ode to motherhood.

                                But being a pragmatist, I wouldn’t suggest to make an oath that “all programmers everywhere agree on”.
                                Such an oath would be meaningless, thus useless and pointless.

                                If we need an oath (and I think that our profession is still too primitive to get one) it must have a meaning.

                                The Hippocratic Oath indeed was not politically neutral.
                                It didn’t contain the primum non nocere rule. It was much more!

                                It imposed to generations of doctors an ethical and political conduct through practical prescriptions.

                                And, as the husband of a doctor, I can assure you that it’s still taken seriously!

                                1. 5

                                  From my understanding of human nature I would say that doctors who put patient before profit would have done so without an oath, and those that put profit before patient do so, naturally, regardless of the oath.

                                  1. 1

                                    Well in Italy a doctor that violates his oath can be punished by the Orders of Doctors, up to the ban which forbid him the practice.
                                    And such ban is legally enforced.

                                    That’s why a oath must have a meaning: to enable an ethical comittee to evaluate and judge when bad things happen!

                                    And note that even the family of the doctor is legally bound by her Oath!

                                    A list of carefully crafted unenforceable intentions and unfalsifiable statements worth nothing.

                                    1. 1

                                      This is true of any service/product. Engineers (typically their employers) have been sued for malpractice [1] as have been contractors (for supplying substandard materials etc) [2] as have been architects [3]. None of whom have sworn oaths. There is nothing special about the hippocratic oath.

                                      1. 4

                                        There is a difference between being sued by a customer and being banned from an association of peers for your ethical misconduct.

                                        In particular if such ban will prevent you to practice your job for the rest of your life!

                                        This put a positive pressure to doctors in Italy to thinks about the ethical conseguence of their act.
                                        It doesn’t prevent bad behaviours from criminals just like the law doesn’t.
                                        But it prevents a careless conformism, and force good people to reason about aspect of their profession they would ignore otherwise.
                                        Also, sometimes it makes generational difference evident: as it happens when my wife and her father discuss of some therapies side effects or about their costs and so on.

                                        However as I said our profession is still too primitive to synthesise an Oath.

                                        The simple fact we are afraid of a meaningful one, is a proof of that.

                                        1. 1

                                          In India a common practice is to order a huge panel of tests for a patient. The tests cost a lot of money and are often done at specified vendors. In the United States this particular practice is slightly less common but there are well documented problems of doctors prescribing therapeutics from particular vendors. It’s possible that in Italy the Hippocratic Oath vastly reduces such misconduct, while in India and the US it doesn’t, but I am skeptical, again from my observations of human nature.

                                          1. 3

                                            Italian doctors are not saints.

                                            They have their issue with the economics of the profession (which actually are not part of their oath afaik).

                                            But just like you judge a programmer upon their skills, you can do that with doctors.

                                            But the fact is that it is common to listen very skilled doctors talking not just about technical aspects of their work, but about ethical concerns of their actions. Actually its more common they spend time about this than about new therapies that are discussed or shared very rapidly.

                                            At least it’s commont if you spend time with several of them outside their work hours.

                                            Its much less common to listen programmers talking about ethics. Actually most of us care more about tha next JS framework to try, then about the final effect of our work!

                                            Talking about hackers ethics, or even just about the difference between free software and open source makes a lot of us feel uncomfortable or even upset.

                                            This lack of social responsibility is due to our naive interpretation of our role in the society.

                                            It let us code addictive dopamine based games and then go home and spend time with our families as if we hadn’t harmed anyone.

                                            Any good person working as a competent architect to build a dangerous bridge would struggle about the people that could die because of him.

                                            We don’t.

                                            We are not bad. We are just ignorant.

                                            Isn’t this a clear sign of the primitiveness of our profession? How can we produce an oath now?

                                            1. 2

                                              I suspect we are at an impasse.

                                              I believe that ethics is something that requires many decades of education and guidance to develop and that this is absorbed from social mores (which we codify as laws and codes of conduct and what not) and that an oath, while nice, is very far from a major mover in making an individual ethical. Self regulation sounds nice, oaths make for nice ceremonies, but it’s all superficial.

                                              Your belief is that oaths are very important and govern individual behavior and are therefore central.

                                              However, I will make one note: Your remark “They have their issue with the economics of the profession (which actually are not part of their oath afaik).” surprises me. In most things, medicine especially, but also the legal and law-enforcement professions, economic incentives are a big part of un-ethical behavior and oaths are directed in large part at this.

                                              The medical oath is supposed to guide doctors so that they look not to the profits of drug and testing companies (which give them kickbacks) or to hospital ordained surgical and diagnostic quotas (which also reflect economic incentives back to them) but to the safety and wellbeing of their patients who can be hurt when unnecessary treatment is inflicted on them.

                                              In fact, your different interpretation of the oath reminds me that an oath, like anything else that is ceremonial and traditional, is so open to interpretation that it is basically useless.

                                              1. 2

                                                Perhaps the real significance of a professional oath is its ceremonial and public aspect. I think that what @Shamar has been saying is that someone under such an oath – sworn before an organized body of peers with some jurisdiction over them – feels bound by their peers appraisal of their ethical conduct, more than just their own. In other words, codified social mores.

                                                1. 1

                                                  Yes, in part it is.

                                                  Like ethics and morality in general, like any other normative behaviour, a ritual is designed to benefit the community and thus is enforced by peers. It was true in Neanderthal tribes and it is true now.

                                                  A neutral and business friendly oath would be useless.

                                                  If it can be enforced by managers, the reproach from peers is pointless.

                                                2. 2

                                                  Your belief is that oaths are very important and govern individual behavior and are therefore central.

                                                  No.

                                                  Let’s explain this in another way you might understand.

                                                  Let’s measure the ratio between ethical topics and technical topics in the dialogues that the members of a community engage in their free time. I can observe this in two well defined communities, the community of programmers and the community of doctors.

                                                  Put the frequency of these ratios in a graph. You will get something like a gaussian.

                                                  Then compare the two graphs.
                                                  The community with an Oath will have an higher average and higher deviation.

                                                  Doctors are more conscious of the ethical implication of their work than Programmers.

                                                  Obviously, you can cluster both Doctors and Programers according to some feature (their specializations for example) and you will see different graphs with different deviations.

                                                  For example, according to my observations, the Free Software hackers discuss more about ethics than Open Source communities. Both are deeply concerned with technical aspects, but Open Source communities feel unconfortable with ethical considerations even when they have practical and legal effects.

                                                  The same happens with different groups of doctors.

                                                  And both communities may expose different graph at different age groups.

                                                  Still the difference exists.

                                                  1. 1

                                                    Your remark “They have their issue with the economics of the profession (which actually are not part of their oath afaik).” surprises me.

                                                    @kghose let’s make an example, just to explain the difference in practice, with the sort of economical issues I’m talking about.

                                                    Two weeks ago my family and I were with my father-in-law for launch.

                                                    The father of my wife got a phone call from a patient with flu, that was asking the permission to go back to work despite being still sick. After some questions and answer about the course of the desease, the my father-in-law accepted.

                                                    Knowing the patient, after the call, my wife objected.

                                                    Her father stated that the patient need to work and his company need him back for a day (I do not know why… that was what the patient said). As a doctor, he cared about the patient life wholefully, not just the flu.

                                                    My wife (which is a family doctor just like her father) stated that no matter how bad the company wanted him back, the patient had to stay at home. Not just to recover from the flu. To avoid spreading the flu to collegues!

                                                    The dialogue became a bit harsh, actually, but always respectful. It took half of the launch. It stopped thanks to our daughters, that were a bit scared and confused (and bored).

                                                    To me, instead, it was extremely interesting.
                                                    Both of them implicitly referred to their Oath (it was not even needed to name Hippocrate, it was evident in their dialogue).

                                                    Their Oath is not neutral. It is a serious thing to them. It has practical effects.
                                                    It has Political effects.

                                                    Indeed because of it, they have issues with the economics of their behaviour.

                                              2. 1

                                                It’s very common in the Mid-South. Im actually visiting someone right now who is getting a bunch.

                                    2. 5

                                      “First, do no harm” has quite the backstory as an opening gambit in a professional oath.

                                      1. 11

                                        The question is precisely whether weapons do more harm than not having weapons, and I’m saying that question is too big for this oath to tackle. Doctors can lead with “First, do no harm” because, first, they’re usually focused on treating a single patient more than building a tool with broad utility, and, second, biological warfare is universally banned and reviled, so doctors can’t participate in the offensive aspect of warfare.

                                        1. 3

                                          I suspect all questions are too big to be tackled by oaths and all.ambiguity will be resolved by doing what I think makes sense (which is also how I resolve things without oaths).

                                          I don’t think they’re bad points or principles but I don’t care for oaths.

                                        2. 2

                                          You have a link to that?

                                        3. 4

                                          This is a good point that I hadn’t considered. What about something like this:

                                          I will only undertake honest and moral work. I will stand firm against any requirement that causes unnecessary harm.

                                          Obviously the necessity of the harm is in the eye of the beholder, but that’s a pretty deep philosophical rabbit hole.

                                          1. 3

                                            Is it never permissible to write code that hurts others?

                                            I belive that you’ve phrased it inadequatly. It should rather be something along the lines of “those who take this oath, promise (which in the end really isn’t that much) not to work on software that causes harm” – after all there’s no coercion to take this oath, it’s just something, certain people want to do, because they belive in the values and ideals it’s written by. Personally, I’d even find it wierd if an oath were not to include this, if only for symbolic reasons, even if everyone who signed it were to cause “harm” on a daily basis. Most people aren’t naive Christians, in the nietzschian sense, and know when to promise and lie, after all, regardless of what the categorical imperative, utilitarian analysis or anything elese says.

                                            That being said, there is still a certain naïve hopefulness, I belive in those who (quite literally) commit themselves to these theses. How is one to really quantify harm. Is writing an open source library that ends up being used by the NSA good or bad? Is discovering a security hole in some particularly widespread software, and (maybe a bit stupidly) telling the developers about it in a public mailing list, whereby hackers and other malicious agents get the opportunity to about it, while it remains unpatched, good or bad? What about inventing TCP/IP? Certainly the basis for creation one of humanities greates network of resources and information, doesn’t seem bad or harmful, in itself, but what about the other side of the coin it’s also the basis of one of the greatest surveillance projects ever (one that the Gestapo or the KGB could have only have dreamed about – and all of that under the guise of “freedom” and/or practical necessity). Or what about Facebook and other social networks, which by influencing what who gets to see, become some of the greatest factors in the modern political process, while also creating addictions by carefully studying human psychological profiles? I take this, for reasons I’ve sketched here not to be an absolute life-or-death commitment, but a practical ideals one lives by in their immediate life, to try and stop what one can stop, where real harm is obvious, since the literal interpretation just seems to be to stupid or void of meaning to be taken seriously. And when one looks at it this way, I belive that it is understandable why it should be included. One must never forget that words (and their absence no less) always say more that just what each word by itself would tell us.

                                            1. 1

                                              Personally, I’d even find it wierd if an oath were not to include this, if only for symbolic reasons, even if everyone who signed it were to cause “harm” on a daily basis.

                                              It’s weird to me only if taken by people working for monopolistic incumbents, those built on surveillance with history of unethical behavior, stuff supporting police states, maybe games designed mostly to be addictive, and so on. Such workers would be contributing to many forms of damage. Such contributions contradict their stated oaths, pledges and so on.

                                            2. 2

                                              I agree. I’d argue that weapons are a necessary evil. I personally hope to finish my career never having put my hand to the creation of such things, but I recognize the necessity of their existence, and for those who feel that they can morally sanction their own work, I don’t feel qualified to tell them different.

                                              1. 1

                                                If we alienate the people who write code for weapons, we can’t work with them to improve our skills, or (arguably more importantly) theirs.

                                              1. 10

                                                This is a nice summary for someone who might have written JS a decade ago. It hits the main points in the field of ‘weird things you have to do to write JavaScript these days’. But there’s one major omission - package managers. I still have a hard time explaining to myself why we have bower, npm, and yarn all solving the same problem with varying degrees of success.

                                                1. 11

                                                  Bower is officially deprecated. Yarn was created to solve problems that existed in npm < 5 [1]. With the release of npm 5+, you can ignore package managers other than npm at this point.

                                                  [1] Exactly reproducible dependency trees & performance being the main ones.

                                                  1. 1

                                                    [1] Exactly reproducible dependency trees

                                                    Did they remove the ability to re-publish a given version of a package? Hopefully - if not, this feature is just a cake-lie.

                                                      1. 1

                                                        Great! Do you have more info on the “reproducible” stuff? I am not finding mention of it.

                                                        1. 1

                                                          From the npm 5 release announcement:

                                                          npm will --save by default now. Additionally, package-lock.json will be automatically created unless an npm-shrinkwrap.json exists. (#15666)

                                                          This package-lock.json is what provides reproducible dependency trees. It’s the equivalent of Yarn’s yarn.lock.

                                                          1. 3

                                                            Well. I guess I have a different meaning of reproducible.. Previous versions of NPM would have variance in things like Makefiles that gyp puked out.. this meant that something that was “npm shrinkwrap’d” and then tar’d up, would be different every time. This is the reproducability I was hoping for.. guessing the lock file doesn’t give me that.. But I will play around and see.

                                                            1. 2

                                                              Not sure if it’s possible to enforce that. You would need to ensure that any postinstall hooks are deterministic, so no calls to Math.random() or new Date().

                                                              You also would have to forbid making network requests, accessing the filesystem and really anything that leaves pure javascript land.

                                                              1. 1

                                                                Yeah. No idea about that aspect. :-/

                                                      2. 1

                                                        It still seems like yarn is faster, according to a few blog posts. The margin is much closer, however.

                                                        1. 1

                                                          If nothing else, it’s much more consistent. At my company I’ve been migrating our apps from using bower and npm packages to exclusively npm packages, and setting our build servers to use yarn instead of npm. It solved our issue with npm intermittently crashing our builds.

                                                        2. 1

                                                          I use yarn because it’s way faster than npm, doesn’t even compare. I develop under WSL though so maybe the difference is more noticeable there.

                                                          1. 2

                                                            I use yarn because it’s way faster than npm

                                                            This has not been my personal experience. npm 5 has been consistently as fast or faster than yarn in my testing on Windows 10. YMMV.

                                                            1. 1

                                                              I’ve just tried deleting the node_modules directory in my current project with 780 packages and ran npm install- it took 53s. Then I’ve done this again and ran yarn install and it finished in 27s. It’s possible it’s something specific to my project or to the fact that I’m running under WSL (maybe npm hits some under-optimised part of it), but anyway in my particular case it’s indeed faster with yarn.

                                                      1. 5

                                                        OpenBSD does not support Bluetooth.

                                                        This surprised me. Is there any plan to support Bluetooth in future? Not sure I could adopt an OS that doesn’t support Bluetooth.

                                                        1. 1

                                                          What exactly do you use bluetooth for? I’ve not needed bluetooth on a laptop… ever really.

                                                          1. 3

                                                            Mouse, occasionally I connect a bluetooth speaker.

                                                            1. 3

                                                              There used to be some degree of unfinished bluetooth support. But eventually @tedu noticed it and armed his lightsaber…

                                                            2. 3

                                                              Wireless headphones? They are glorious.

                                                              1. 1

                                                                I’ve never had a huge success with them personally. Only use wired generally but point taken.

                                                          1. 4

                                                            Tickets are completely fungible—you can buy fractional tickets.

                                                            I don’t think that’s what fungible means. Fungible means exchangeable with another item of the same type. So grain is fungible because you don’t care which ton of grain you get but a house is not.

                                                            There’s no explanation on what T_ohshit is.

                                                            1. 2

                                                              There’s no explanation on what T_ohshit is.

                                                              I’d mentioned that in the “A worldwide casino” section, though it wasn’t called out super well:

                                                              At some time T_ohshit, P_ticket will begin plummeting.

                                                              I’m sorry if that wasn’t well highlighted though!

                                                              Fungible means exchangeable with another item of the same type.

                                                              In my readings this is true, but the additional implication is that, say, ten tenth-ton parcels of grain are as valuable as one ton of grain.

                                                              If there is a better term for the property of money where it is subdividable, I’d be grateful to hear it!

                                                              1. 1

                                                                Infinitely divisible?

                                                                1. 1

                                                                  Continuous? Rather than discrete.

                                                                  1. 1

                                                                    but the additional implication is that, say, ten tenth-ton parcels of grain are as valuable as one ton of grain.

                                                                    well something is fungible but not divisible.

                                                                    a new iphone for example. You don’t really care which one you get but definitely do not want 2 halves.

                                                                1. 28
                                                                  Mozilla may have won, but all of us have lost.

                                                                  WebAssembly (for brevity, WASM) is a terrible idea being carried through with excellent vision and engineering effort. It has the following fundamental issues that nobody seems to care about:

                                                                  It further erodes the transparency to end-users. A process that began with minification and concatenation will finish running once WebAssembly is in place. Without a full debugger and decompiler, end-users will lose the ability to easily look at what their browsers are loading and executing. The user browser moves further and further from being a document viewer into a beachhead of control on the user’s machine.

                                                                  It further erodes the freedom of end-users. It will be no surprise in the next few years when DRM (enabled via code signing and other supporting technologies) is rolled out even further into the browsers. This will prevent users from running their own modified scripts on pages, from tweaking via proxy other scripts, and from being able to selectively replace things in their software stack that don’t work. It’s hard now, but it’s only going to get worse, because of “security concerns” (read: copyright enforcement).

                                                                  It massively fragments the development ecosystem. At a time when anybody with half a brain realizes that the churn and balkanization of the Javsacript world is a pox, we are embracing the idea that somehow everything will be better once browser software can be written in Python, Clojure, Ruby, C, C++, D, Rust, Common Lisp, Elixir, Erlang, Forth, FORTRAN, COBOL, and who knows what else. Man-centuries of effort will be wasted bringing the tooling in each of those communities up to something resembling the current state of the frontend, all so people can avoid spending a couple of weeks learning the vulgar lingua franca of Javascript. This is not progress.

                                                                  It reduces the transferability of front-end skill sets. For better or worse, most front-end skills transfer between gigs. A blob of jQuery and React and Angular looks roughly similar across jobs: arrays and strings work the same, functions and closures work the same, and so forth. WASM will remove this convenience. Ever had to relearn a codebase written in CoffeeScript instead of boring ES5? Or even learn the quirks of ES6 instead of ES5. Now, imagine you have to learn an entire new programming language just to do the same goddamn thing you were doing ten years ago. This makes switching jobs and even hiring devs harder if the stack doesn’t use boring JS.

                                                                  It decreases the pressure to fix JS and DOM APIs. Every problem in CS is solvable with another layer of abstraction–the “benefit” of WASM in providing the “if you don’t like this API, use this other language to hack around it!” escape hatch. Except, that usually leads to stagnation in the base layer. JS’s own standard library is a poverty-ridden ball of shit precisely because TC39 and others have focused on interesting language features and support for compiler wankery at the expense of the needs of the working developer.

                                                                  It solves problems that we don’t have. The majority of web traffic is boring CRUD operations, despite what the snake-oil salesmen at conferences and vendors want to tell you. The stuff that WASM would truly benefit? “low-level” coding like for games and whatnot? All of that is handled better in native code already. If performance is the important thing you pull on your big kid pants and write C/C++/D/Rust and if you’re unlucky some assembly or you busy out some CUDA or OpenCL. If performance isn’t important, you just write in JS. This magical market segment of “Man, I really want to run heavily compilers and numerical codes in the browser” doesn’t really exist.

                                                                  It creates bad vendor incentives. Remember up above when I complained about transparency for users? So, imagine a future job where a contractor delivers a pile of WebAssembly to make a site work. Said vendor dies, or stops working on the project, and now the client needs to do maintenance on it. How’s that going to work again? What about when the vendor bakes in a killswitch to disable the software if they aren’t kept on a “maintenance” contract? Again, opaque binary, what do?

                                                                  It is fundamentally incompatible with the licensing and learning norms of the Web. At some level in our gut, we all knew that people could see how our code worked, and that we could benefit from learning how their code worked. This sort of informality allowed us all to speak more freely and frankly about our code and our practices, and for two decades the web flourished. So, all the webshits have played fast and loose (BSD/Apache/etc.) with open source licensing because at the end of the day, it was trivial to look at the client code and see how it worked. It was also easy to spot when somebody was using code we’d written, or using a particular library–the “moral rights” of authorship were not so threatened. WASM kills this freedom.

                                                                  ~

                                                                  Of course, none of this matters, since FB and GOOG are going to use WASM to stream ads to people faster and watch them more closely, and every webshit will lap it up as progress and folks giving conference talks will sell more tickets on their new framework for language XYZ for doing web shit.

                                                                  Seriously, fuck this myopic industry.

                                                                  1. 28

                                                                    Can’t agree with most of your points.

                                                                    Have you tried decompiling Java classes? The code produced by the decompilers is very clear, and easy to read. Sometimes more clear than trying to beautify minified code. Unless the bytecode is obfuscated, but JS code can be obfuscated as well.

                                                                    DRM is only dangerous if you want to participate in it. You can always reject DRM content.

                                                                    It might fragment the ecosystem, but sticking to one solution is hardly progress as well. Also there are lots of people for which JavaScript is the biggest reason they stay away from web development.

                                                                    About reducing transferability – the same can be told about normal, ‘desktop’ world, and people manage to cope with it. Some classes of applications require one set of languages (java, scala), others require different languages (c, c++). I don’t really see many problems with this, languages are different tools for different jobs, one language for everything doesn’t exist (can’t exist).

                                                                    WASM fixes JS by replacing it. That’s the best way of fixing JS from my point of view! ;)

                                                                    And what do you mean we don’t have problems – there are lots of them. Downloading a minified javascript source that was transpiled from typescript and running it seems like a big hack. The speed of more complicated web applications is slow like hell on a new i7 CPU (google docs, google maps). We have so many problems it’s a disaster.

                                                                    Have you tried reading the source code of Google Docs? I bet you know that there are lots of scripts nowadays that start with “var fpa=function(){var a=_.ft.T”, finishing with the same set of trash. Compilation to bytecode alone isn’t denying the access to source, because bytecode still can be decompiled.

                                                                    1. 2

                                                                      The code produced by the decompilers is very clear, and easy to read.

                                                                      How many man-decades of work were put into that tooling, one wonders? Also, “easy to read” != “easy to maintain and modify”.

                                                                      DRM is only dangerous if you want to participate in it. You can always reject DRM content.

                                                                      Yeah, like the W3C did with–oh wait, no, they rolled over on their fucking belly. Well, at least Intel and Apple and Nvidia–wait, shit, they did too. And Elvis didn’t do no drugs!

                                                                      sticking to one solution is hardly progress as well

                                                                      Vanilla JS has worked decently for 20 years. SQL for over 40. Sometimes a working solution is enough.

                                                                      This constant neophilia is killing us, and observations like yours are predicated on the idea that somehow we must keep resolving solved problems or we aren’t making “progress”. Shovels haven’t changed significantly in two thousand years–does that mean progress with civil engineering stopped?

                                                                      the same can be told about normal, ‘desktop’ world, and people manage to cope with it.

                                                                      They coped with it by killing native apps and moving onto the Web. And are trying to move the Web back to the desktop/mobile/server with “cross-platform” JS debacles like Electron and NW.JS.

                                                                      The speed of more complicated web applications is slow like hell on a new i7 CPU (google docs, google maps).

                                                                      Works on my machine, sorry I guess? Most users don’t even know what slow is, compared to ten years ago (or God forbid 20!).

                                                                      And those big companies are going to write even more slow and bloated shit once they have WASM, because they can bring over their crufty codebases wholesale.

                                                                      1. 11

                                                                        This constant neophilia is killing us, and observations like yours are predicated on the idea that somehow we must keep resolving solved problems or we aren’t making “progress”.

                                                                        If you disregard the actual improvements a new technology makes, you can easily dismiss it as “change for the sake of change”, or as you say, “neophilia”. I see this comment every day on the Internet, like this fellow who claimed that someone used Rust for a project just to be “buzzword compilant”.

                                                                        People don’t agree that these problems are “solved” and I welcome their attempts to fix the status quo.

                                                                        1. 0

                                                                          Well, first, that fellow wasn’t necessarily wrong in pointing out that wrapping a perfectly functioning C/C++ glob in Rust didn’t immediately make sense.

                                                                          People don’t agree that these problems are “solved” and I welcome their attempts to fix the status quo.

                                                                          Do you do web shit? Do you do frontend web shit? Do you do application programming in an ecosystem that changes rapidly?

                                                                          If you answered “no” to any of the above questions then it is no surprise that you would have that (misguided and incorrect) opinion. In the abstract, sure, we can all talk about the magic pixie dust of progress and finding better tools, but in the concrete here and now it’s yakshaving on a grand scale.

                                                                          1. [Comment removed by author]

                                                                            1. 1

                                                                              The more I read @angersock replies, the more I have the feeling that his opinion resonates with mine.

                                                                              I have seen few arguments that improvements in the, what angersock calls “webshit”, platform or its “standard” libraries, are actually improvements. This is what I think is the “buzz”.

                                                                              I applaude that you are a committer to Node.js, but tell me, as a PL researcher, what does Node have to offer more than a wrapper around libev using the V8-macro system (called Javascript) above some clever trick in a language that inherits more cruft than craft?

                                                                              My opinion is that WebAssembly, if it is a real assembly language, is only great in the sense that we, as a community, provide for more work for ourselves than there is people available to do. Who is actually going to clean all this shit up, instead of beliebing in pseudo-improvements and magification?

                                                                              1. 8

                                                                                I applaude that you are a committer to Node.js, but tell me, as a PL researcher, what does Node has to offer more than a wrapper around libev using the V8-macro system (called Javascript) above some clever trick in a language that inherits more cruft than craft?

                                                                                I’m not a fan of Node or of languages without strong static typing. I am interested in WASM for its potential to exorcise them from the ecosystem (or at least from the parts I have to personally use).

                                                                                My opinion is that WebAssembly, if it is a real assembly language, is only great in the sense that we, as a community, provide for more work for ourselves than there is people available to do. Who is actually going to clean all this shit up, instead of beliebing in pseudo-improvements and magification?

                                                                                Sorry, I am not 100% sure what you’re trying to say here. Restate please?

                                                                                1. 1

                                                                                  Basically, what I mean to say is that a lot of code will be written, people will find tricks and clever hacks and eventually WebAssembly also lags behind, just to maintain some sort of compatibility.

                                                                                  From my own experimence, I work with clients that run 16-bit Windows applications and even DOS stuff, reverse engineering them and applying bytecode patches just to work out latency or ISA bugs.

                                                                                  That stuff will also happen with WebAssembly, giving us huge amounts of cruft. It already happened with JS: it’s a language that cannot evolve by compatibility constraints, hence a lot of “standard library” solutions are given to “fix” these problems. They all just build up.

                                                                                  I can’t even open some websites on my 7 year old laptop, because of the shit and crap trashing the CPU. But running (possibly more advanced in terms of functionality) old DOS apps still work fine.

                                                                                  Are we going to maintain every script or binary to “keep up” with what you argued against, the neophillists? No. We just start new platforms all the time, so we do not have to deal with the “old shit” anymore. That is my point of our industry/community: we keep adding until we lost control, and we start all over again! It’s what keeps us in busyness.

                                                                                  If that’s a recipe for disaster, I would rather believe in a “community” that keeps “improving” to hide this fact. Way more comfortable. As if our actual problems magically dissapear with each new layer of crap.

                                                                                2. 0

                                                                                  provide for more work for ourselves than there is people available to do.

                                                                                  I think you hit this right on the mark.

                                                                                  The webdevs are setting themselves up for life.

                                                                                3. 0

                                                                                  Thanks for the background information, that makes your stated opinion have better context.

                                                                                  Argument-by-neophilia is about as abstract as it gets.

                                                                                  If that was your takeaway of my argument, there’s been a miscommunication. The context (without rehashing all the same tired shit everybody’s been saying about churn in JS) is that in the web front-end (meaning Javascript and the DOM), there are too many choices and they are changing too rapidly. If you care to examine any concrete cases like ES6 vs. ES5 (and the incomplete browser support without toolchains of same), or the evolution of Angular 1.x vs 2.x, or React vs. Vue vs. React+redux vs whatever, or Webpack vs. Browserify vs. Grunt vs. Gulp vs. Make, it’s pretty fucking obvious there’s a problem.

                                                                                  If you’re going to argue that we don’t need a particular new tool, then your argument must take into consideration the actual concrete improvements that tool brings to the table.

                                                                                  Who gives a shit about the improvements when seemingly half of the tools are spent cleaning up the deficiencies of other tools, and themselves creating new deficiencies?

                                                                                  Like, there’s some brain cancer among the web dev community that getting one little improvement is somehow worth the cost in retooling, retraining, and rewriting. It’s absurd.

                                                                                  Arthur C. Clarke wrote about this already.

                                                                                  1. 4

                                                                                    The context is that in the web front-end (meaning Javascript and the DOM)

                                                                                    The person you were replying to was replying to you saying that WASM “massively fragments the development ecosystem” and that you don’t like browser software being written in other languages. As someone interested in advancing the state-of-the-art in PL, I am naturally against saying JavaScript (or SQL, which you also mentioned) is good enough.

                                                                                    I am happy to re-focus on web front-end though. I love the constant buzz, personally. If I have a problem with my tool to the point where I am willing to rewrite code, or am writing new software, there is the chance that I can find a better solution. If I’m happy with what I have, then I ignore it. Where’s the downside?

                                                                                    For example, I used to use jQuery. After many years I was fed up enough with its limitations that I evaluated all of the new front-end libraries and settled on React for a new project. I still use React years later. I still use jQuery years later too! Vue appears to be popular now, but I have no particular reason to look into it, and don’t consider its existence a problem.

                                                                                    The inclusion of ES6 on your list is particularly baffling to me because it is backwards compatible with ES5 and comes with some sorely needed improvements like arrow functions. And ES7 asynchronous functions are useful enough that I’ve been using them with Babel since before they were standardized (node callbacks suck). It’s one thing to be angry about breaking backwards compatibility, but this?

                                                                                    Who gives a shit about the improvements when seemingly half of the tools are spent cleaning up the deficiencies of other tools, and themselves creating new deficiencies?

                                                                                    It’s not a given that a tool creates new deficiencies. Tech criticism is important so we as a community can decide which tools are worth taking the plunge for and which aren’t. I don’t want to look into every new GitHub project either! But an over general position that we shouldn’t try to improve on the status quo for fear that we might make a mistake isn’t the solution either.

                                                                                    Since you mentioned Make, I’ll throw out that I learned about tup 5 years ago and haven’t looked back. Builds faster, automatically discovers dependencies, detects build inconsistencies, built-in watch capabilities, simpler configuration, scriptable in Lua if you need the power. Well worth the time I’ve invested, and I’m glad the author didn’t decide that Make was final form of build systems.

                                                                                    1. 1

                                                                                      The inclusion of ES6 on your list is particularly baffling to me because it is backwards compatible with ES5 and comes with some sorely needed improvements like arrow functions.

                                                                                      C++ is “backwards compatible” (mostly kinda sorta) with previous versions of itself, and even with C if you squint a bit–that doesn’t mean that there isn’t a whole bunch of legacy code that also has to be loaded into the mental model of the developer when debugging or expanding.

                                                                                      As for arrow functions, they look really spiffy on a slide at a conference, but most of the time their absence doesn’t hurt. In fact, their presence hurts, because it screws up function naming in the callstack. They have different rules for this. They don’t have an arguments variable.

                                                                                      We’ve doubled the cognitive load of making functions in JS, just because it looked like a cute idea at the time. If we deprecated the function keyword, sure, but that isn’t what they did.

                                                                                      Javascript classes are a similar misfeature, fixing a problem that didn’t really exist.

                                                                                      But an over general position that we shouldn’t try to improve on the status quo for fear that we might make a mistake isn’t the solution either.

                                                                                      Again, that’s not the optics to view the problem under. We can and should try to improve the status quo–Promises, for example, were a good addition to Javascript that fit neatly in the existing language framework and solved a real problem (callback hell).

                                                                                      It’s not that I’m saying “we’re worried we’ll make a mistake”. I’m saying “we’re going to bury ourselves under a mountain of incompatible solutions and make extra work for ourselves”.

                                                                                      How would you propose to allay my concern?

                                                                                      And remember, my concern is not allayed by saying “Well, any individual tool…” because in the value system I’m representing I don’t care about how perfect any individual tool is. I care about having to know and maintain proficiency in lots of different tools for only negligible cost.

                                                                                      There is nothing in the recent history of web front-ends or PL circles to suggest conservatism of the sort I’m advocating. There is nothing to suggest a modicum of restraint or taste. There is nothing to suggest that there is anything other than bloated innovation fueled by burning VC money and hopes of getting a conference talk.

                                                                                      This…this must be how suckless.org and OpenBSD people feel. :(

                                                                                      1. 7

                                                                                        Having different rules for this is a big part of the reason arrow functions are useful. And you can’t deprecate the function keyword because the old this behavior is necessary for object methods. If you think that suggests a fundamental problem with the design of JS, then welcome to the club: it’s why I’m excited for WASM.

                                                                                        Sorry you feel so pessimistic about the future of software. I don’t think there is anything I can say to allay your concerns.

                                                                                        1. 2

                                                                                          There is nothing in the recent history of web front-ends or PL circles to suggest conservatism of the sort I’m advocating. There is nothing to suggest a modicum of restraint or taste. There is nothing to suggest that there is anything other than bloated innovation fueled by burning VC money and hopes of getting a conference talk.

                                                                                          How about Go? Its design seems to be full of restraint and tasteful minimalism, and it’s quite successful. It’s not a great hit in the academic PL circles, possibly exactly for these reasons.

                                                                                          1. 1

                                                                                            There is nothing in the recent history of web front-ends or PL circles to suggest conservatism of the sort I’m advocating. There is nothing to suggest a modicum of restraint or taste.

                                                                                            I had great hopes that Scala was going into the right direction, but it has become exceedingly clear that the faction that cared about quality, minimalism, orthogonality and user experience lost completely against those who want to add more and more features.

                                                                                4. 4

                                                                                  How many man-decades of work were put into that tooling, one wonders? Also, “easy to read” != “easy to maintain and modify”.

                                                                                  I don’t think this issue should be thought in such category: “imagine how good JS would be if everyone would just focus on JS, instead of trying to invent different things”. We would be still in the stone age with very sharp rocks if that would be the case! ;) This is the same argument against GNU/Linux and its world with lots of distributions. Well, imagine how a GNU/Linux distro would be awesome if everyone would just focus on one distribution instead of forking new ones? It doesn’t work this way, everyone has different needs. One requires the distribution to be fully automatic, another one requires it to be mostly manual. Same with development ecosystem.

                                                                                  Vanilla JS has worked decently for 20 years. SQL for over 40. Sometimes a working solution is enough.

                                                                                  Should we switch back to Fortran? It worked well. Also I would argue about JS working decently in first years if its existence. Before jQuery and similar, writing a multibrowser JS code sometimes required to simply write multiple copies of the same code for different JS dialects in different browsers.

                                                                                  They coped with it by killing native apps and moving onto the Web. And are trying to move the Web back to the desktop/mobile/server with “cross-platform” JS debacles like Electron and NW.JS.

                                                                                  What apps are you talking about? My file manager? My virtualization platform? My terminal emulator? My Office suite? My music player? My video editor? My games? The browser itself is a native app as well. There are web alternatives for some apps, but they feel like demo versions of the “real deal”.

                                                                                  Also, “native guys” aren’t trying to bring web apps to the desktop. The “web guys” are trying to push it; people who got into web development now want to create standalone desktop apps, so they’re bringing their environment with them. I don’t think this is a bad thing. The more people are in the development world, the better. Now Electron is a trend, but this trend will eventually finish and evolve, we’ll see how. Maybe the trend would be to rewrite Electron apps into native versions, who knows. The thing is that popularity of Electron isn’t something that ends some kind of an era. It’s a tool that helps web guys to reach over the desktop world.

                                                                                  Works on my machine, sorry I guess? Most users don’t even know what slow is, compared to ten years ago (or God forbid 20!).

                                                                                  Well it doesn’t work properly on my machines. I’m not satisfied and I think it should be better. Also I don’t really care if someone doesn’t realize web apps are slow. I realize this, and this is what matters to me.

                                                                                  And those big companies are going to write even more slow and bloated shit once they have WASM, because they can bring over their crufty codebases wholesale.

                                                                                  Agree, this will happen. But it’s already happening with JS, so I don’t really see any changes here.

                                                                                  1. 1

                                                                                    “imagine how good JS would be if everyone would just focus on JS, instead of trying to invent different things”

                                                                                    See, that’s incorrect. You’ve overlooked the entire category of things you build with JS–the things we build with the tools. The tools should not be the primary, or even secondary, objective. A better statement would be “imagine how much more cool applications and stuff we could build if we didn’t keep retooling”.

                                                                                    Should we switch back to Fortran? It worked well.

                                                                                    For serious numerical work, that’s still the tool used very frequently. Because it works. BLAS/LAPACK are proof of the value of not fucking around greatly with tooling once you have something that works well enough.

                                                                                    What apps are you talking about? My file manager? My virtualization platform? My terminal emulator? My Office suite? My music player? My video editor? My games?

                                                                                    Google apps and Dropbox would be the obvious counterexample to you here.

                                                                              2. 12

                                                                                This magical market segment of “Man, I really want to run heavily compilers and numerical codes in the browser” doesn’t really exist.

                                                                                I want to make games and run them in the web, so that people don’t need to download them and they run on all devices.

                                                                                I also want to use the browser for genetic programming.

                                                                                For both of these endeavors I am bottlenecked by the JS memory model, so I would prefer to use something like Rust.

                                                                                Do I not exist?

                                                                                1. -1

                                                                                  For both of these endeavors I am bottlenecked by the JS memory model, so I would prefer to use something like Rust.

                                                                                  How? How exactly are you bottlenecked?

                                                                                  1. 5

                                                                                    If you want to make games that run at 60fps, uncontrollable stop the world garbage collection is far from ideal and introduces hiccups.

                                                                                    Even if you avoid all allocation at runtime I would still like more control over how my memory is managed.

                                                                                    As for genetic programming, the more cycles you can squeeze out of your code, the better the result you can produce. You can only optimize your JavaScript so far. I want more cycles.

                                                                                    1. 0

                                                                                      It is entirely possible to write arena allocators in JS, even going so far as to supporting malloc-style tricks using TypedArrays if you really want to go there.

                                                                                      In the GP case, you probably should be using real iron once you’ve settled on a proof-of-concept.

                                                                                      1. 9

                                                                                        […] if you really want to go there.

                                                                                        Who wants to actually go there? After some point, you should stop adding hacks to a system, and just create a new system. I see WebAssembly as a response to the overwhelming amount of things being forced onto/into JavaScript.

                                                                                        1. 4

                                                                                          In the GP case, you probably should be using real iron once you’ve settled on a proof-of-concept.

                                                                                          I’d have said that a while back. These days I wouldn’t because of all the good demos of tech that are usable as a web application without installing anything. A GP demo that took no upfront investment might convince some people to dig deeper into it. It might need to be a web application for a lot of them these days. That means it also needs to be fast given more CPU = better results. Stuff like that might justify a faster web solution.

                                                                                  2. 3

                                                                                    Thanks for that. I have to admit I’d not seen this coming. I thought WASM would simply be a vehicle for other application types we otherwise wouldn’t have seen to come to the browser, not an excuse to throw out the entire web ecosystem and replace it with native compiled everything.

                                                                                    Do you actually think people will throw out the baby with the bathwater like this? I’d bet there’d be some sincere resistance across the board if they tried.

                                                                                    1. 2

                                                                                      Do you actually think people will throw out the baby with the bathwater like this?

                                                                                      Have you met the web developer community?

                                                                                      It’s a constant struggle of wits–the half-wits and the nit-wits and the dim-wits.

                                                                                      And I say this as somebody whose livelihood depends on that ever-increasing fuckery.

                                                                                      1. 3

                                                                                        Sympathies. Sincerely. I couldn’t do professional web dev nowadays, I think I’d go mad.

                                                                                        I was thinking though - mobile. I don’t see WebAssembly taking over the mobile platform - the performance constraints should keep it away for a long time to come.

                                                                                        1. 0

                                                                                          Ah, that’s the insidiousness of it, though!

                                                                                          The big plug will be this:

                                                                                          “Use WASM and you’ll get better performance/battery-life/etc. since our phone/browser has a compiler/interpreter that magically knows how to optimize the bytecode for the platform it’s running on.”

                                                                                          Or worse, you could expect that with code-signing and modular scripts, browser vendors (read: GOOG) would be enabled to offer specific fallbacks for modules matching the signature of jQuery or something. Magically, there is more vendor lock-in.

                                                                                          We fell for AMP, why not this?

                                                                                    2. 2

                                                                                      If performance is the important thing you pull on your big kid pants and write C/C++/D/Rust and if you’re unlucky some assembly or you busy out some CUDA or OpenCL. If performance isn’t important, you just write in JS. This magical market segment of “Man, I really want to run heavily compilers and numerical codes in the browser” doesn’t really exist.

                                                                                      While I agree with you in principle, I like to hold out the hope that in the future we might see AAA games released, not for Windows, or macOS, or Linux…but for “the Web”. And then anyone can play.

                                                                                      1. 3

                                                                                        And then anyone can play.

                                                                                        Sure, and then if the server goes away, they never get to play again. Let’s put our playthings into the state of permanent transience!

                                                                                        I have a copy of Half-Life that’s nearing 20 years old, and it still works. I can still bust it out at LAN parties.

                                                                                        AAA games in the browser only serve to further indenture and impoverish users.

                                                                                        1. 2

                                                                                          This already happened to me with a game where I used my Xbox Live profile to play single player. I temporarily lost Live access. Then, I couldnt use any single player progress: restart with offline account or only use offline accounts to begin with. Ridiculous.

                                                                                          1. 2

                                                                                            Well, that’s not necessarily true. It’s possible to make games that would be written for “the Web”, and would even work at LAN parties or merely locally. Of course, the question is then whether or not people/companies would make games in such a fashion.

                                                                                          2. 2

                                                                                            And then anyone can play.

                                                                                            Anyone who has a browser which implements WASM correctly, completely, and with the needed efficiencies in graphics and processing, input devices, etc. Will that include TempleOS or Haiku? Probably not.

                                                                                            1. 5

                                                                                              True, but I’d say Haiku will get a correct WASM environment long before it can run native Windows binaries. Baby steps. :)

                                                                                        1. 18

                                                                                          I found that neovim is much, much faster than vim, with a comparable setup. I would highly recommend trying it. I have been using neovim for over a year now, it’s very good. A lot of high quality plugins are being written with support for only neovim now.

                                                                                          Additionally, I would highly recommend fzf.vim over CtrlP and others. I have tried all of the major fuzzy finding plugins for vim, and fzf.vim is by far the fastest and works how I would expect.

                                                                                          I stopped using CtrlP because in a large project (several hundred thousand files), searching for a small string “icp” would not find “app/models/icp.rb”, but would instead find longer and more irrelevant results. fzf.vim works as I expect in this case.

                                                                                          You also never need to invalidate the cache, it rebuilds every time you search. It’s fast enough that you can use it to search all files on your computer. You can do locate / | fzf and it’s ready to go in a second or so (you can still search while it’s indexing). In normal projects it’s pretty much instant.

                                                                                          tl;dr: use neovim and fzf.vim. All hail junegunn.

                                                                                          Edit: Oh, and if you want to use ctrl-p to activate it, add this to your vimrc.

                                                                                          noremap <c-p> :FZF<CR>
                                                                                          
                                                                                          1. 3

                                                                                            Seconded, fzf is great. I didn’t yet know about the vim specific wrapper for it though, so thank you for that! This is part of why I love fzf, it’s not specific to vim and so I use it all the time, even when not inside vim.

                                                                                            1. 2

                                                                                              junegunn has made me love vim again. He’s tpope’s successor :-)

                                                                                              1. 2

                                                                                                FWIW, OP was a neovim user.

                                                                                                1. 8

                                                                                                  Don’t forget that there are quite a few git web servers that provide a decent amount of what Github does, between Gitlab, Gogs and Gitweb.

                                                                                                  If you want to self-host, and are willing to learn a different SCM, I can also recommend fossil

                                                                                                  1. 3

                                                                                                    darcs and pijul are already there, they’re just not terribly popular in comparison to git. And many organizations (most companies, at least) lean towards a central pattern, anyway.

                                                                                                    1. 2

                                                                                                      Check out git-ssb, a decentralized Github alternative (so issues as well as repo hosting). It’s built on top of secure scuttlebutt, an up and coming decentralized network protocol.

                                                                                                    1. 19

                                                                                                      You see this in a lot of computing domains that have genuinely hard problems, not just security. Many practitioners in our profession espouse that they “hate all programming languages” or “security is impossible, so why try”. Half of it is that progress in computing is really glacially slow, the fads come and go so quickly these days while very little of the fundamental bedrock of our computing infrastructure improves on an observable scale. Things do improve, it just typically happens on the order of decades.

                                                                                                      Nihilism is easy, putting in years of work to incrementally improve the state of computing is hard.

                                                                                                      1. 6

                                                                                                        One way to feel a bit better is pull out a good book from 20 years ago. It’s neat to see what problems get solved faster than thought and not-neat to see which problems persist (only with newer names, like technical debt)…

                                                                                                        1. 4

                                                                                                          progress in computing is really glacially slow

                                                                                                          Maybe from an individual’s perspective, but I think it’s worth considering that the art of software engineering has only really existed for roughly the length of a human’s lifetime.

                                                                                                          We’re just getting started.

                                                                                                        1. 10

                                                                                                          I’ve noticed that people who used IRC before entering the job market (in university or earlier) are significantly more comfortable with it as a medium, and far more likely to actively participate in it that people who are introduced to it later in life. For whatever reason, IRC doesn’t tend to be a gentle, friendly experience for beginners.

                                                                                                          While the availability of many different clients is an advantage, it’s also something of a disadvantage because it fragments the community - I’m not going to be able to help a person with their irssi config/plugins if I use Colloquy or XChat, and so there’s more of a learning curve there. Also there’s a bit of the paradox of choice going on. And when you really get down to it none of the clients are as straightforward and easy-to-use as Slack.

                                                                                                          Then you have IRC commands to learn. Not a huge deal, but certainly not obvious to a beginner. And then if you take a look at any given network it seems extremely chaotic - rather than the few dozen channels you may see in a slack, you’re looking at hundreds or thousands of channels. How are you supposed to find the right forum?

                                                                                                          I could keep going on about aspects of IRC that are barriers to entry, but I think the point has been made. Sometimes on IRC I conceitedly consider the barrier to entry a feature - though in reality it’s not keeping trolls/assholes out. Slack is just more accessible to the masses, is a polished experience, is consistent across platforms - it has a lot of advantages.

                                                                                                          Having said all that… I agree with the author. Slack’s closed-ness sucks for open source projects, at some point I think a lot of people are going to have the rug pulled out from under them. E.g. Slack has a (unofficial?) user limit which some projects have hit.

                                                                                                          TLDR; I love Slack, and I love IRC - they each have their place. The IRC experience could and should be better.

                                                                                                          1. 5

                                                                                                            And when you really get down to it none of the clients are as straightforward and easy-to-use as Slack.

                                                                                                            http://irccloud.com/ is a strong contender for being exactly that.

                                                                                                            1. 2

                                                                                                              In my experience, one big issue with Slack is the necessity to keep one tab open for each project (issue which is described in the linked article).

                                                                                                              1. 2

                                                                                                                I use the desktop client, so it’s less of an issue. That’s fair, though.

                                                                                                                1. 1

                                                                                                                  As opposed to keeping a tab open per IRC channel? I don’t get this criticism.

                                                                                                                  1. 3

                                                                                                                    With IRC, I can use the same clients for all channels. With Slack, I have to keep one browser tab open for each project. Am I misunderstanding something?

                                                                                                                    1. 1

                                                                                                                      I have a Slack window open connected to two different accounts with multiple channels each. I can swiftly change between them with a few keystrokes.

                                                                                                                      How do IRC clients handle channels across multiple servers? I have spent a tiny amount of time on IRC recently, and the clients didn’t appear any different today than they were 15 years ago.

                                                                                                                      1. 1

                                                                                                                        Maybe you use the Slack desktop client?

                                                                                                                        1. 1

                                                                                                                          I do. Can your IRC client connect to multiple servers in the same window? I thought they at least required multiple windows for that.

                                                                                                                          1. 2

                                                                                                                            I use IRCCloud currently, and that can certainly support many channels and servers all together in one window (browser tab). It has keystroke navigation between channels as well, sounds similar to what you are describing in Slack. Been a while since I’ve looked at the rest of the IRC client space, but surely others support this too…?

                                                                                                                            1. 1

                                                                                                                              IRCCloud isn’t IRC, it’s a cloud platform just like Slack that happens to integrate IRC. The article was comparing Slack with standard IRC servers.

                                                                                                                              1. 2

                                                                                                                                IRCCloud is not an IRC server, it’s more like an IRC bouncer (ZNC, etc.) with a web client. IRCCloud still connects to regular IRC networks on your behalf, like any IRC client.

                                                                                                                                It does not require the IRC network to support anything special. It does not require everyone to use IRCCloud. You are still free to connect from any IRC client, since the server is just a regular IRC server (not something maintained by IRCCloud at all).

                                                                                                                                As it says in an update to the article this discussion is about, IRCCloud “is really cool and solves all of the problems”, so it seems worth considering.

                                                                                                              1. 6

                                                                                                                Over the weekend, I wrote and released a time travelling debugger for Cycle.js.

                                                                                                                Here’s a video and here’s a live example.

                                                                                                                You can check out the code/instructions here.

                                                                                                                I’m really excited by this project. I already can’t imagine writing Cycle.js app without it, and I think it has very cool possibilities. I want to add a feature for recording and exporting integration tests, and investigate fixing bugs in the past with hotloading.

                                                                                                                Much of this is inspired by Dan Abramov’s recent talk about similar tools for redux.

                                                                                                                1. 16

                                                                                                                  Oracle’s arrogance is unlimited. Being able to reverse-engineer software you are running on your own computer is a basic human right. Many big companies already realized that, for instance Microsoft in regard to Skype. Instead of keeping the old, complex, “unbreakable” protocol, they ditched it in favor of a newer version of the MSN-protocol, which is currently being reverse-engineered in this very moment.

                                                                                                                  I don’t know which part of the human psyche this blogpost is trying to address, but it definitely won’t make me stay away from investigating proprietary software running on my computer. It’s maybe a bit too harsh, but when companies spit out articles like these, there’s no doubt in my mind they are either hiding horrible software quality behind their blobs or outrightly included NSA-backdoors in their products.

                                                                                                                  1. 20

                                                                                                                    The writer also completely missed the point of bug bounties.

                                                                                                                    They’re not a replacement for a security team, they’re there so when that one guy gets the 0day, he might want to submit it for money rather than selling it on the black market or making it available for free.

                                                                                                                    Working at a company that has to deal with Oracle (mandatory and paid) support, this article stinks for me much more than it probably does for you. They’re quite bad and.. actually do some of the things that article says they don’t do (we have received one-off patches that haven’t been yet included in any official patch in 10+ years)

                                                                                                                    1. 7

                                                                                                                      My condolences for having to deal with this crappy company on a daily basis. As a software developer for suckless, we have to deal with problems introduced in Ubuntu which breaks our software for some people. Finding the issues, mostly unsolvable, is a pig pain. I may not have the big overview of Oracle, but when it comes to Ubuntu, and how it literally destroys a healthy ecosystem, I got a lot of stories to tell…

                                                                                                                      1. 3

                                                                                                                        I’ve been looking at suckless a bit, and used some of your software (ii). Wanna elaborate a bit in what Ubuntu does to destroy the ecosystem? I’ve been using Ubuntu quite a bit due to hardware support (GPU drivers, out of the box WiFi, etc), so I think I understand in general what you mean, but it would be interesting to hear some stories.

                                                                                                                        1. 2

                                                                                                                          In many aspects, Ubuntu is tailored for a single path. Just the simple fact that they “steal” the Debian package base, apply a set of patches and call it Ubuntu is a steal for me, because they don’t really bring anything back to the Debian community. And try explaining to a novice why he can’t use Debian .debs for Ubuntu and vice versa. It’s just broken, and in many cases, it even breaks software that works fine on most other distros. But Ubuntu is not the only distro to blame. RedHat is another example. It depends on personal taste in any case, however, if people have trouble using suckless software and it’s the distribution’s fault, it’s arrogant of them to expect us to fix it. In any case, there are more points that can be discussed here (Ubuntu Software Center, Kernel hiccup, …). Feel free to join us on IRC.

                                                                                                                          1. 2

                                                                                                                            Can you provide some detail about the changes they make that cause problems?

                                                                                                                      2. 3

                                                                                                                        Most bug bounties don’t appear to pay nearly as much as the vuln is worth to exploiters. Well, some pay more, but generally for bugs with no market value. I’m not certain oracle would pay more than anyone else even with such a program.

                                                                                                                        1. 2

                                                                                                                          I love the whole ‘only 3% of our bugs come from security researchers bit’. Maybe that’s because since they have no incentive to report bugs to you, so they turn to the black market.

                                                                                                                        2. 12

                                                                                                                          Basic human right? You’re sure you’re not stretching a bit?

                                                                                                                          1. 17

                                                                                                                            I’m not talking about reverse engineering specifically, but being allowed to experiment with and take a closer look at things you own. Now, ownership is a difficult concept when it comes to software, but I think that running software on your computer makes you eligible for investigations of this nature. If I sell you a washing machine, you may not be the design or trademark holder, but I can’t stop you from taking the machine apart, fix it, tune it, whatever. Every attempt by companies to change that is just insane.

                                                                                                                            1. 7

                                                                                                                              Reverse engineering is a basic human right, yes. It’s an aspect of freedom of thought.

                                                                                                                              1. 1

                                                                                                                                Is it thinking or experimenting? Is there a difference?

                                                                                                                          1. 2

                                                                                                                            Continuing to work on Helix Pi, my tool for creating games with no coding involved.

                                                                                                                            Notably, in the last week I shipped a landing page, so visitors aren’t dumped straight into the editor.

                                                                                                                            I also created a website to benchmark both the quality of the programs Helix Pi creates and various aspects of performance. You can check that out here. It automatically runs the benchmarks and updates the graph when I push code, which is nifty.

                                                                                                                            In the process of the above I realized the benchmarks need to be a separate module so I can run them while developing (previously I was contorting unit tests for my purposes). I’ll probably tackle that at some point soon. It feels weird choosing to work over tools instead of Helix Pi itself, but I think it will ultimately be a net increase in development speed.

                                                                                                                            I’ve now crept up to 3 repos for helix-pi, so I’ve created a Github organization to put them all in one place.

                                                                                                                            1. 8

                                                                                                                              I’ve been continuing to work on Helix Pi, my game development tool for making games without coding.

                                                                                                                              As a user, you describe with animations how your game behaves, and then Helix Pi uses genetic programming to create the code for your game for you.

                                                                                                                              I’ve been working on it for 3 months or so now and I’m getting close to being able to create Pong. Recently I’ve been working on helping programs learn multiple behaviours. That works by lending more credence to programs that aren’t very good on average, but excel at something the rest of the population is bad at. This improves diversity, and the branch was cheekily named affirmative-action.

                                                                                                                              In the process of implementing that feature, I regressed the fitness of my baseline test significantly. Simply put, Helix Pi is now more stupid. That’s a bit annoying, and it’s not fixed by simply disabling the feature. That was a valuable lesson, because if I had committed in smaller chunks and avoided breaking my core test, I could have bisected back and found the regression. Now I’ll have to hunt it down.

                                                                                                                              Next up on my feature list is a roulette wheel breeding system. I’m currently using truncation breeding, effectively taking the top half of the population. This is pretty awful from a diversity standpoint, so I think I can make large improvements in this area.

                                                                                                                              If you want to try Helix Pi out, you can play with it in your browser here. I think it’s broken in Chrome right now, sorry about that.

                                                                                                                              1. 2

                                                                                                                                This sounds a little bit like Scratch. Just a bit. What do you think of Scratch? It’s a programming language, but particularly well-suited for kids and simple games.

                                                                                                                                1. 4

                                                                                                                                  I gave a talk about Helix Pi recently and I cover that really well in the first couple of minutes.

                                                                                                                                  For those who don’t want to watch a video, the line I draw is that visual languages like Scratch require a lot of the same skills as programming. In order to use Scratch to make games, you still have to be able to break down the behaviors of your game into exact logic, that you then implement yourself. If you don’t arrange your blocks perfectly, your game won’t work.

                                                                                                                                  With Helix Pi, you create animations that describe behaviors of the game, and the code is evolved to perform those behaviors. You don’t need to understand the logic of how your game works at a computer level, you just need to understand what you want to happen in response to input and time.

                                                                                                                                  One of the things I’m consider is allowing users to directly modify the generated Helix Pi code in a Scratch style interface. This would mean you could evolve the bulk of your code, modify it and have those modifications carry on in the evolutionary process.

                                                                                                                                  So I actually view Helix Pi as a higher level language than Scratch (probably one of the highest level languages so far).

                                                                                                                                  1. 2

                                                                                                                                    I’ve played a lot with Scratch - but don’t like the new dependency on Flash - so have been playing with Snap! which is a web version of scratch that grew out of Berkeley’s Build Your Own Blocks project for Scratch.

                                                                                                                                    1. 3

                                                                                                                                      The flash thing is sad. Is it really impossible to finish the HTML5 implementation of Scratch?

                                                                                                                                1. 4

                                                                                                                                  I’ve been continuing to work on Helix Pi, my tool for making games with no coding knowledge required.

                                                                                                                                  In short, that works by allowing the user to create animations describing game behavior, and then using genetic programming to write the code for the user. I’m working towards making Pong, and today I reached a milestone of having an individual learn how to do two different things (move up or down in response to keyboard input).

                                                                                                                                  I also gave a talk at work last week that goes more in detail as to what I want to achieve, why and how.

                                                                                                                                  https://github.com/Widdershin/helix-pi

                                                                                                                                  http://www.helix-pi.net/

                                                                                                                                  1. 5

                                                                                                                                    Finished reading Neuromancer a couple of days ago, it was an experience to read but I’m not sure exactly how I feel about the events of the book.

                                                                                                                                    Stared reading Cryptonomicon by William Gibson yesterday and I’m loving it so far.

                                                                                                                                    1. 1

                                                                                                                                      I’ve read Cryptonomicon like 5 years ago or so – such a great book. Thanks for reminding, I think it’s time to read it again.

                                                                                                                                      1. 1

                                                                                                                                        Cryptonomicon is Neal Stephenson. Very good imho.

                                                                                                                                        By coincidence, I’ve been rereading some of the cyberpunk stuff lately, a lot of it seems silly in retrospect but some of it we’re living in ?

                                                                                                                                        Also check out Charles Stross’s Accelerando …