1. 1

    There’s a bug on the page where long lines in the code block escape the code block on mobile (ones that include whitespace don’t seem to be affected). Interesting read none the less.

    1. 1

      Judging from the first 16 pages of their tutorial, VeriFast is quite promising in that the contracts seem to be quite easy to create. I can see myself using it if I’d be able to integrate it with my current dev environment without much hassle.

      1. 4

        -WliterallyAll would be very appreciated.

        1. 2

          The historical reason why -Wall doesn’t enable all warnings is that warnings have been gradually added to the compiler over time. Adding new warnings to existing options could cause builds to fail after upgrading gcc.

          Moreover, some pairs of warnings are incompatible (in the sense that any code accepted by one would be rejected by the other). An example of this is -Wstrict-prototypes and -Wtraditional.

          1. 5

            The historical reason why -Wall doesn’t enable all warnings is that warnings have been gradually added to the compiler over time. Adding new warnings to existing options could cause builds to fail after upgrading gcc.

            I’m aware of that, though I still find it wrong that -Wall doesn’t actually include the new warnings, a build breaking on upgrade with -Wall is in my opinion the more logical outcome. I would rather have flags like -Wall4.9 that would remain constant on upgrades so no one who’s just using that subset of the warnings breaks their build. -Wall can then remain true to its meaning. Seeing that the ship has sailed on that a long time ago, I still would like to have a -WliterallyAll (can be called something else) that would include -Wall -Wextra and others like -Wstrict-overflow.

            Moreover, some pairs of warnings are incompatible (in the sense that any code accepted by one would be rejected by the other). An example of this is -Wstrict-prototypes and -Wtraditional.

            These ones can’t be and don’t have to be included.

            1. 5

              I really like the idea of -Wall-from=$VERSION, and you could even support -Wall-from=latest for people who truly are okay with their builds breaking whenever they upgrade their compiler.

              1. 2

                clang supports -Weverything which I’ve tried, and it happily spews out contradictory warnings (“Padding bytes added to this structure”, “No padding bytes have been added to this packed structure!”) along with (in my opinion) useless warnings (“converting char to int without cast”).

                1. 1

                  Yep, -Weverything can be amusing, but it really does throw everything at the code.

                2. 1

                  These ones can’t be and don’t have to be included.

                  So your -WliterallyAll would not enable literally all warnings either? I’m not sure how that solves the problem.

                  I would rather have flags like -Wall4.9 that would remain constant on upgrades so no one who’s just using that subset of the warnings breaks their build. -Wall can then remain true to its meaning.

                  Now this is a neat idea that I can get behind.

                3. 1

                  Correction: I have been informed that new warnings actually have been added to -Wall on multiple occasions.

                  The better explanation for why -Wall leaves many warnings disabled is that many of them are just not useful most of the time. The manual states:

                  Note that some warning flags are not implied by -Wall. Some of them warn about constructions that users generally do not consider questionable, but which occasionally you might wish to check for; others warn about constructions that are necessary or hard to avoid in some cases, and there is no simple way to modify the code to suppress the warning.

                  In other words, it might be better to think of -Wall not as “all warnings”, but as “all generally useful warnings”.

                4. 1

                  Except the -Weffc++ warnings, those are really annoying and are not really about actual problems in your code.

                1. 8

                  Rockstar FizzBuzz just took over FizzBuzzEnterpriseEdition as my favorite FizzBuzz implementation.

                  1. 3

                    This is not a review of contemporary C/C++ static code analyzers, this is a review of the wikipedia list of static analyzers.. I was expecting a bit more than sorting a wikipedia list and adding a two line description to each tool.

                    1. 14

                      Politics, preferences, and arguments aside, Guido’s work on Python is really appreciated and I hope he’s not leaving with a foul taste in his mouth.

                      1. 2

                        I’ll second this. Guido’s done fantastic things for Python and if he wants to back off and do something else now, then good for him! I wish him the best of luck in future and hope we’ll still see him around in the community.

                      1. 2

                        The message posted about how the sign-up page contains a bug was the reason I also tried to sign up. After three times and being warped back to the homepage, I gave up. How ironic.

                        1. 4

                          If you were in the “I’m afraid that being nicer would hurt Linux” group, do you think that this email is worse? Is there any risk of a reader not understanding that the author disapproves of their reasoning and thinks that it’s dangerous?

                          I think this email is “friendlier”, but more in a service worker to customer sense. I think the swearing is definitely not needed, and should be avoided, but things like emphasis and repetition of points shouldn’t have been edited out. Being friendly doesn’t have to exclude having a personal style.

                          1. 2

                            Regarding Part 3 the only time I ever look at the print on my keyboards is when some fucking piece of software decides to help me out by changing my layout. Please don’t do that. I have 3 keyboards I use often with 3 different prints on them, yet my mind layout is always the same.

                            1. 4

                              That’s a nice bit of code you’ve got there (sorry I couldn’t resist).

                              1. 7

                                I always laugh when people come up with convoluted defenses for C and the effort that goes into that (even writing papers). Their attachment to this language has caused billions if not trillions worth of damages to society.

                                All of the defenses that I’ve seen, including this one, boil down to nonsense. Like others, the author calls for “improved C implementations”. Well, we have those already, and they’re called Rust, Swift, and, for the things C is not needed for, yes, even JavaScript is better than C (if you’re not doing systems-programming).

                                1. 31

                                  Their attachment to this language has caused billions if not trillions worth of damages to society.

                                  Their attachment to a language with known but manageable defects has created trillions if not more in value for society. Don’t be absurd.

                                  1. 4

                                    [citation needed] on the defects of memory unsafety being manageable. To a first approximation every large C/C++ codebase overfloweth with exploitable vulnerabilities, even after decades of attempting to resolve them (Windows, Linux, Firefox, Chrome, Edge, to take a few examples.)

                                    1. 2

                                      Compared to the widely used large codebase in which language for which application that accepts and parses external data and yet has no exploitable vulnerabilities? BTW: http://cr.yp.to/qmail/guarantee.html

                                      1. 6

                                        Your counter example is a smaller, low-featured, mail server written by a math and coding genius. I could cite Dean Karnazes doing ultramarathons on how far people can run. That doesn’t change that almost all runners would drop before 50 miles, esp before 300. Likewise with C code, citing the best of the secure coders doesn’t change what most will do or have done. I took author’s statement “to first approximation every” to mean “almost all” but not “every one.” It’s still true.

                                        Whereas, Ada and Rust code have done a lot better on memory-safety even when non-experts are using them. Might be something to that.

                                        1. 2

                                          I’m still asking for the non C widely used large scale system with significant parsing that has no errors.

                                          1. 3

                                            That’s cheating saying “non-c” and “widely used.” Most of the no-error parsing systems I’ve seen use a formal grammar with autogeneration. They usually extract to Ocaml. Some also generate C just to plug into the ecosystem since it’s a C/C++-based ecosystem. It’s incidental in those cases: could be any language since the real programming is in the grammar and generator. An example of that is the parser in Mongrel server which was doing a solid job when I was following it. I’m not sure if they found vulnerabilities in it later.

                                        2. 5

                                          At the bottom of the page you linked:

                                          I’ve mostly given up on the standard C library. Many of its facilities, particularly stdio, seem designed to encourage bugs.

                                          Not great support for your claim.

                                          1. 2

                                            There was an integer overflow reported in qmail in 2005. Bernstein does not consider this a vulnerability.

                                        3. 3

                                          That’s not what I meant by attachment. Their interest in C certainly created much value.

                                        4. 9

                                          Their attachment to this language has caused billions if not trillions worth of damages to society.

                                          Inflammatory much? I’m highly skeptical that the damages have reached trillions, especially when you consider what wouldn’t have been built without C.

                                          1. 12

                                            Tony Hoare, null’s creator, regrets its invention and says that just inserting the one idea has cost billions. He mentions it in talks. It’s interesting to think that language creators even think of the mistakes they’ve made have caused billions in damages.

                                            “I call it my billion-dollar mistake. It was the invention of the null reference in 1965. At that time, I was designing the first comprehensive type system for references in an object oriented language (ALGOL W). My goal was to ensure that all use of references should be absolutely safe, with checking performed automatically by the compiler. But I couldn’t resist the temptation to put in a null reference, simply because it was so easy to implement. This has led to innumerable errors, vulnerabilities, and system crashes, which have probably caused a billion dollars of pain and damage in the last forty years.

                                            If the billion dollar mistake was the null pointer, the C gets function is a multi-billion dollar mistake that created the opportunity for malware and viruses to thrive.

                                            1. 2

                                              He’s deluded. You want a billion dollar mistake: try CSP/Occam plus Hoare Logic. Null is a necessary byproduct of implementing total functions that approximate partial ones. See, for example, McCarthy in 1958 defining a LISP search function with a null return on failure. http://www.softwarepreservation.org/projects/LISP/MIT/AIM-001.pdf

                                              1. 3

                                                “ try CSP/Occam plus Hoare Logic”

                                                I think you meant formal verification, which is arguable. They could’ve wasted a hundred million easily on the useless stuff. Two out of three are bad examples, though.

                                                Spin has had a ton of industrial success easily knocking out problems in protocols and hardware that are hard to find via other methods. With hardware, the defects could’ve caused recalls like the Pentium bug. Likewise, Hoare-style logic has been doing its job in Design-by-Contract which knocks time off debugging and maintenance phases. The most expensive. If anything, not using tech like this can add up to a billion dollar mistake over time.

                                                Occam looks like it was a large waste of money, esp in the Transputer.

                                                1. 1

                                                  No. I meant what I wrote. I like spin.

                                              2. 1

                                                Note what he does not claim is that the net result of C’s continued existence is negative. Something can have massive defects and still be an improvement over the alternatives.

                                              3. 7

                                                “especially when you consider what wouldn’t have been built without C.”

                                                I just countered that. The language didn’t have to be built the way it was or persist that way. We could be building new stuff in a C-compatible language with many benefits of HLL’s like Smalltalk, LISP, Ada, or Rust with the legacy C getting gradually rewritten over time. If that started in the 90’s, we could have equivalent of a LISP machine for C code, OS, and browser by now.

                                                1. 1

                                                  It didn’t have to, but it was, and it was then used to create tremendous value. Although I concur with the numerous shortcomings of C, and it’s past time to move on, I also prefer the concrete over the hypothetical.

                                                  The world is a messy place, and what actually happens is more interesting (and more realistic, obviously) than what people think could have happened. There are plenty of examples of this inside and outside of engineering.

                                                  1. 3

                                                    The major problem I see with this “concrete” winners-take-all mindset is that it encourages whig history which can’t distinguish the merely victorious from the inevitable. In order to learn from the past, we need to understand what alternatives were present before we can hope to discern what may have caused some to succeed and others to fail.

                                                    1. 2

                                                      Imagine if someone created Car2 which crashed 10% of the time that Car did, but Car just happened to win. Sure, Car created tremendous value. Do you really think people you’re arguing with think that most systems software, which is written in C, is not extremely valuable?

                                                      It would be valuable even if C was twice as bad. Because no one is arguing about absolute value, that’s a silly thing to impute. This is about opportunity cost.

                                                      Now we can debate whether this opportunity cost is an issue. Whether C is really comparatively bad. But that’s a different discussion, one where it doesn’t matter that C created value absolutely.

                                                2. 8

                                                  C is still much more widely used than those safer alternatives, I don’t see how laughing off a fact is better than researching its causes.

                                                  1. 10

                                                    Billions of lines of COBOL run mission-critical services of the top 500 companies in America. Better to research the causes of this than laughing it off. Are you ready to give up C for COBOL on mainframes or you think both of them’s popularity were caused by historical events/contexts with inertia taking over? Im in latter camp.

                                                    1. 7

                                                      Are you ready to give up C for COBOL on mainframes or you think both of them’s popularity were caused by historical events/contexts with inertia taking over? Im in latter camp.

                                                      Researching the causes of something doesn’t imply taking a stance on it, if anything, taking a stance on something should hopefully imply you’ve researched it. Even with your comment I still don’t see how laughing off a fact is better than researching its causes.

                                                      You might be interested in laughing about all the cobol still in use, or in research that looks into the causes of that. I’m in the latter camp.

                                                      1. 5

                                                        I think you might be confused at what I’m laughing at. If someone wrote up a paper about how we should continue to use COBOL for reasons X, Y, Z, I would laugh at that too.

                                                        1. 3

                                                          Cobol has some interesting features(!) that make it very “safe”. Referring to the 85 standard:

                                                          X. No runtime stack, no stack overflow vulnerabilities
                                                          Y. No dynamic memory allocation, impossible to consume heap
                                                          Z. All memory statically allocated (see Y); no buffer overflows
                                                          
                                                          1. 3

                                                            We should use COBOL with contracts for transactions on the blockchains. The reasons are:

                                                            X. It’s already got compilers big businesses are willing to bet their future on.

                                                            Y. It supports decimal math instead of floating point. No real-world to fake, computer-math conversions needed.

                                                            Z. It’s been used in transaction-processing systems that have run for decades with no major downtime or financial losses disclosed to investors.

                                                            λ. It can be mathematically verified by some people who understand the letter on the left.

                                                            You can laugh. You’d still be missing out on a potentially $25+ million opportunity for IBM. Your call.

                                                            1. 1

                                                              Your call.

                                                              I believe you just made it your call, Nick. $25+ million opportunity, according to you. What are you waiting for?

                                                              1. 4

                                                                You’re right! I’ll pitch IBM’s senior executives on it the first chance I get. I’ll even put on a $600 suit so they know I have more business acumen than most coin pitchers. I’ll use phrases like vertical integration of the coin stack. Haha.

                                                          2. 4

                                                            That makes sense. I did do the C research. Ill be posting about that in a reply later tonight.

                                                            1. 10

                                                              Ill be posting about that in a reply later tonight.

                                                              Good god man, get a blog already.

                                                              Like, seriously, do we need to pass a hat around or something? :P

                                                              1. 5

                                                                Haha. Someone actually built me a prototype a while back. Makes me feel guilty that I dont have one instead of the usual lazy or overloaded.

                                                                  1. 2

                                                                    That’s cool. Setting one up isn’t the hard part. The hard part is doing a presentable design, organizing the complex activities I do, moving my write-ups into it adding metadata, and so on. I’m still not sure how much I should worry about the design. One’s site can be considered a marketing tool for people that might offer jobs and such. I’d go into more detail but you’d tell me “that might be a better fit for Barnacles.” :P

                                                                    1. 3

                                                                      Skip the presentable design. Dan Luu’s blog does pretty well it’s not working hard to be easy on the eyes. The rest of that stuff you can add as you go - remember, perfect is the enemy of good.

                                                                      1. 0

                                                                        This.

                                                                        Hell, Charles Bloom’s blog is basically an append-only textfile.

                                                                      2. 1

                                                                        ugh okay next Christmas I’ll add all the metadata, how does that sound

                                                                        1. 1

                                                                          Making me feel guilty again. Nah, I’ll build it myself likely on a VPS.

                                                                          And damn time has been flying. Doesnt feel like several months have passed on my end.

                                                                1. 1

                                                                  looking forward to read it:)

                                                          3. 4

                                                            Well, we have those already, and they’re called Rust, Swift, ….

                                                            And D maybe too. D’s “better-c” is pretty interesting, in my mind.

                                                            1. 3

                                                              Last i checked, D’s “better-c” was a prototype.

                                                            2. 5

                                                              If you had actually made a serious effort at understanding the article, you might have come away with an understanding of what Rust, Swift, etc. are lacking to be a better C. By laughing at it, you learned nothing.

                                                              1. 2

                                                                the author calls for “improved C implementations”. Well, we have those already, and they’re called Rust, Swift

                                                                Those (and Ada, and others) don’t translate to assembly well. And they’re harder to implement than, say, C90.

                                                                1. 3

                                                                  Is there a reason why you believe that other languages don’t translate to assembly well?

                                                                  It’s true those other languages are harder to implement, but it seems to be a moot point to me when compilers for them already exist.

                                                                  1. 1

                                                                    Some users of C need an assembly-level understanding of what their code does. With most other languages that isn’t really achievable. It is also increasingly less possible with modern C compilers, and said users aren’t very happy about it (see various rants by Torvalds about braindamaged compilers etc.)

                                                                    1. 4

                                                                      “Some users of C need an assembly-level understanding of what their code does.”

                                                                      Which C doesnt give them due to compiler differences and effects of optimization. Aside from spotting errors, it’s why folks in safety- critical are required to check the assembly against the code. The C language is certainly closer to assembly behavior but doesnt by itself gives assembly-level understanding.

                                                                2. 2

                                                                  So true. Every time I use the internet, the solid engineering of the Java/Jscript components just blows me away.

                                                                  1. 1

                                                                    Everyone prefers the smell of their own … software stack. I can only judge by what I can use now based on the merits I can measure. I don’t write new services in C, but the best operating systems are still written in it.

                                                                    1. 5

                                                                      “but the best operating systems are still written in it.”

                                                                      That’s an incidental part of history, though. People who are writing, say, a new x86 OS with a language balancing safety, maintenance, performance, and so on might not choose C. At least three chose Rust, one Ada, one SPARK, several Java, several C#, one LISP, one Haskell, one Go, and many C++. Plenty of choices being explored including languages C coders might say arent good for OS’s.

                                                                      Additionally, many choosing C or C++ say it’s for existing tooling, tutorials, talent, or libraries. Those are also incidental to its history rather than advantages of its language design. Definitely worthwhile reasons to choose a language for a project but they shift the language argument itself implying they had better things in mind that werent usable yet for that project.

                                                                      1. 4

                                                                        I think you misinterpreted what I meant. I don’t think the best operating systems are written in C because of C. I am just stating that the best current operating system I can run a website from is written in C, I’ll switch as soon as it is practical and beneficial to switch.

                                                                        1. 2

                                                                          Oh OK. My bad. That’s a reasonable position.

                                                                          1. 3

                                                                            I worded it poorly, I won’t edit though for context.

                                                                  1. 27

                                                                    Agreed wholeheartedly with everything on this list (esp. Docker and Nix) except for the Code of Conduct line. Sadly, we’re living in a time where assholes need to be explicitly uninvited.

                                                                    1. 15

                                                                      I don’t share the concept of gender with the FreeBSD CoC. When growing up, i observed the world with my own eyes, and found that its an rather arbitrary abstraction not providing value. Should others be allowed to force me to use that concept against my conscience? I’m not rude or disrespectful towards peers (inc. actual transgender persons) because of that.

                                                                      Does that make me an asshole that needs to be explicitly uninvited?

                                                                      1. 20

                                                                        If you do the things that the FreeBSD CoC says you shouldn’t do (calling people by names they’ve explicitly said shouldn’t be used especially) then yes. Otherwise I don’t really see how it affects you?

                                                                        1. 10

                                                                          Having control over the abstractions people use also limits what those people can express. Achilles and the Tortoise is a good illustration of that.

                                                                          Forcing these abstractions over people is what violates their autonomy, which is why the FreeBSD CoC was so controversial in the first place. Its that the proponents argue that you have nothing to fear if you are “a good person”, equating lawfulness with being a good person. Which is fundamentally wrong. Yes, Edward Snowden violated laws, but i doubt he is a bad person because of that.

                                                                          1. 11

                                                                            Can you be more practical, less philosophical, and provide an example of something you’d say, that the CoC would consider wrong? (No bad intentions or hidden agenda in this question, just generally wondering how a real life example of the issue looks like for you).

                                                                            1. 12

                                                                              “/me hugs nullp0tr

                                                                              “You shouldn’t beat your children tho”

                                                                              “I dislike that you program killer robots for the CIA”

                                                                              1. 6

                                                                                Thanks for the examples. I understand your frustration with it a bit more now. How would you deal with someone who’s constantly hugging or backrubbing someone else after being asked to stop? and how does your view on gender affect your empathy towards people with a different view and who get offended by someone who’s constantly using the wrong pronoun?

                                                                                1. 11

                                                                                  Constantly harassing another user will get you warned, kicked or even banned with our without a CoC. Worst case (if the channel moderation doesn’t care) is that you need to block/set them on your ignore list.

                                                                                  I don’t have an generic attitude on that, and i didn’t have IRL conflicts on pronouns yet. The transgender persons i interacted with were respectable persons and individually got me to use their preferred pronoun without force.

                                                                                  Conflict is a component of daily life. Persons who handle conflict by getting offended and expecting others to change their mind are akin to the kid in the mall throwing a tantrum because mom wont buy the gummy bears. That’s just shitty diplomacy and wont get you anywhere. Embodying such an attitude into an community law will make your community a toxic place.

                                                                                  1. 6

                                                                                    I don’t have an generic attitude on that, and i didn’t have IRL conflicts on pronouns yet. The transgender persons i interacted with were respectable persons and individually got me to use their preferred pronoun without force.

                                                                                    So is it okay in your opinion to intentionally use the wrong pronoun if the persons in question were not respectable?

                                                                                    Constantly harassing another user will get you warned, kicked or even banned with our without a CoC. Worst case (if the channel moderation doesn’t care) is that you need to block/set them on your ignore list.

                                                                                    What’s the difference between having a written rule about what would get you banned and not having one?

                                                                                    Conflict is a component of daily life. Persons who handle conflict by getting offended and expecting others to change their mind are akin to the kid in the mall throwing a tantrum because mom wont buy the gummy bears. That’s just shitty diplomacy and wont get you anywhere. Embodying such an attitude into an community law will make your community a toxic place.

                                                                                    How would you handle conflicts created by racism, sexism, etc in a non toxic way?

                                                                                    1. 9

                                                                                      So is it okay in your opinion to intentionally use the wrong pronoun if the persons in question were not respectable?

                                                                                      If people start interacting with me by insulting me, then i definitely wont let them tell me how to call them.

                                                                                      What’s the difference between having a written rule about what would get you banned and not having one?

                                                                                      Power. Rulemakers wield extraordinary power because they are the ones who interpret a situation as lawful or unlawful. Not getting in trouble with the law is, to an extent, doing good diplomacy with the rulemakers.

                                                                                      How would you handle conflicts created by racism, sexism, etc in a non toxic way? Ideally:

                                                                                      • Tell that i did not find it appropriate, explain why
                                                                                      • Optional discussion, quite often its just an misunderstanding
                                                                                      • Avoid being antagonistic, not calling them sexist or insults (burns bridges instantly)

                                                                                      Best case is that i can base my standpoint upon their values. Using authoritative power to deploy sanctions should always be the last resort.

                                                                                      1. 3

                                                                                        If people start interacting with me by insulting me

                                                                                        What are the ways you get insulted? What if someone does it by accident?

                                                                                        If people start interacting with me by insulting me, then i definitely wont let them tell me how to call them.

                                                                                        Didn’t you just say being diplomatic is key?

                                                                                        Persons who handle conflict by getting offended…

                                                                                        I’m confused why you would revert to being a kid in the mall by not calling someone by their preferred pronoun if they insulted you. I agree with your overall idea of being diplomatic.

                                                                                        1. 2

                                                                                          Thanks for taking the time to clarify your stand.

                                                                                          It seems you’d rather have an environment of mutual respect and no single/few figures that can decide on what constitutes as wrong doing selectively, and you’d rather solve the issues the FreeBSD CoC tries to address through diplomacy and listening to all parties?

                                                                                          How would you go about implementing your ideal conflict resolution approach in real communities? (alternatively, do you have an example of a community that already does that or something similar?)

                                                                                          1. 4

                                                                                            My preference aren’t as exotic at it seems on the first view.

                                                                                            I dont need to implement it on my own, its already live in such an community, an local instance of the Chaos Computer Club in germany. Hacker culture tends to be decentral and skeptical of authorities in general, probably because hackers tend to be persons that value personal autonomy high. Socially adjacent communities (alot of artists here!) and companies share alot of the mindset.

                                                                                            Edit: These communities are also the ones where most positive feedback about my CoC-critical stuff comes from. I think i hit a nerve there that already bothered quite some people

                                                                                2. 7

                                                                                  “I think that the memo that James Damore wrote about gender diversity efforts at Google was by and large correct and that Google was wrong to fire him. He should be considered welcome to contribute in good standing to this open-source software project if he so chooses.”

                                                                                  Any code of conduct that allowed me to say that sentence is (probably) fine; any code of conduct that treated me saying that sentence as a violation is not fine.

                                                                                  1. 5

                                                                                    That is a surprisingly good litmus test. Regardless of your actual view on the Damore memo or subsequent furore, a CoC that can penalize you for expressing your view about a person or situation like that is probably overstepping the mark.

                                                                                    It’s not whether someone would agree with you that he should be welcome to contribute to a project, it’s whether you are allowed to say it. In that regard I really like it as an overreach test.

                                                                                    1. 4

                                                                                      I’ve read the whole memo. I think he gets some things wrong and disagree with him here and there, but I’m glad I read it. Overall he does have a lot of good points, and it does show a big problem with the “leftness” of silicon valley tech culture.

                                                                                      Instead of trying to get more women in STEM/tech, how about we make it more socially acceptable for everyone, both men and women, to go after things they actually like to do. How many people do you know in tech, both men and women, hate their cubeville life. So many people I know, no matter how enthusiastic they might seem at times, deep down, do not like their jobs. We’ve got Dilbert, Office Space, We the Robots and so many other things in entertainment that show how awful these jobs can be. People want to escape.

                                                                                      I feel like there is a lot of pressure on men (and I guess now more on women) to earn enough to provide for a family. We mock people with English or Philosophy degrees with their steamy piles of debt; debt the previous generation would not have had because they could pay for school by working at a grocery store. The cost of education is too high and it’s being turned into a pipeline to the industry that is in demand. The debt locks people in.

                                                                                      Want to solve income inequality? Make everyone’s income public. Every employee knows what every other employee makes and that should be a Federal mandate. Why the fuck is there a taboo over income anyway. If you know what people are worth, you know what you should be wroth. I have a hypothesis that if you could somehow measure confidence, people’s incomes would directly correlate with their confidence level and not their genders.

                                                                                      I think people are locked into a certain political ideology and the false left/right paradigm that they fail to see the real issues are not the issues they’re addressing. Those are symptoms of a much deeper cause.

                                                                                      1. 4

                                                                                        I honestly haven’t read the memo. Is it something specific in the memo that you wanna be able to express your agreement with? or do you want to be able to express any opinion regardless of what it entails?

                                                                                        1. 1

                                                                                          I’m still overall confused by James Damore’s memo. It was mostly an incoherent mess when I read it. What part was he right about in regards to Google’s gender diversity efforts?

                                                                                      2. 3

                                                                                        Ok. What do you do that violates the CoC that isn’t bad? So far all I’ve heard is weird analogies that don’t really make sense. Can you articulate your concrete concerns?

                                                                                        1. 9

                                                                                          Not fighting for moral autonomy because you agree with it is analogous to not fighting for free speech because you agree with what the state says.

                                                                                          I do enjoy my moral autonomy, i exercise it, and i expect other people to let me do it. And the FreeBSD CoC says, “not here”. So i avoid FreeBSD.

                                                                                          Like free speech, moral autonomy is an essential part of democratic society (Lawrence Kohlberg: “Moral Development”), even if not everyone needs it.

                                                                                          1. 7

                                                                                            Not fighting for moral autonomy because you agree with it is analogous to not fighting for free speech because you agree with what the state says.

                                                                                            This is entirely disingenuous. FreeBSD is not the state, and requiring that contributors to an open source project not express violent prejudice against other contributors in order to be allowed to contribute is not at all similar to state censorship.

                                                                                            I do enjoy my moral autonomy, i exercise it, and i expect other people to let me do it.

                                                                                            Thanks for clarifying. You should realize that this is literally the purpose of CoCs like this one. You value your ability to do whatever you like over the productivity and comfort of others, and that’s not the attitude FreeBSD, Rust etc want in their community, because it tends to decrease productivity and cause burnout, not to mention just being a pain in the ass to work with.

                                                                                            So, yes, I agree with the others in this thread. Please continue to avoid FreeBSD, and if possible, me as well.

                                                                                            1. 3

                                                                                              FreeBSD is not the state, and requiring that contributors to an open source project not express violent prejudice against other contributors in order to be allowed to contribute is not at all similar to state censorship.

                                                                                              Would you not avoid a project that required you to limit your freedom of speech simply on principle? Or, if you would not, do you at least understand why someone else might on principle?

                                                                                              The only difference in this example is that you at least have a reasonable choice of simply not using/contributing to FreeBSD if you disagree.

                                                                                              1. 5

                                                                                                Would you not avoid a project that required you to limit your freedom of speech simply on principle?

                                                                                                Assuming you don’t mean “freedom of speech” (as in, freedom from state censorship) and actually mean “freedom to say whatever you want, whenever you want, in whatever forum you want”, this question is so broad as to be meaningless. If you DO mean “freedom of speech”, then it is so narrow as to be irrelevant, since the policies of open source projects don’t affect your legal freedom of speech. In either case, you miss the point.

                                                                                                Community standards exist in order to prevent, in specific spaces, behavior that will adversely affect the community that creates them. All communities have standards. Codes of Conduct formalize and write down those standards, and allow people to examine them. If a community with standards by which one did not wish to abide existed and was otherwise appealing, one might join it and be unpleasantly surprised. On the other hand, a CoC allows one to see, up front, the norms and standards of a community. This is good.

                                                                                                Therefore, it seems like @liwakura doesn’t disagree so much with the existence of a CoC as with the community standards many of them encode - in particular, those of the Node.js and FreeBSD communities. Now comes the critical point:

                                                                                                Rather than engage with specific problems in the CoC (e.g., “[specific rule] is open to serious abuse and provides little protection for the accused”, et cetera), liwakura focused on the “restriction of autonomy”. Yes, community standards restrict autonomy. That is the point. They prevent behavior such as the purposeful, spiteful misgendering liwakura described as a likely outcome with a negative interaction with a trans person, or purposeful ignorance (as in, the noun form of “to ignore”, not as in lack of knowledge) of social structure of gender- and sex-based oppression. By preventing those behaviors from being displayed by liwakura in FreeBSD spaces, the CoC has succeeded.

                                                                                                In other words, the CoC says “If you’re going to be a jerk, such as in these specific ways, stay out”, and liwakura’s response was “How dare you tell me that you don’t want me to be a jerk in these specific ways! I’m going to do what you say and not participate in your community, but also whine about it on the Internet.”

                                                                                                1. 2

                                                                                                  Community standards exist in order to prevent, in specific spaces, behavior that will adversely affect the community that creates them.

                                                                                                  From what I’ve seen, the CoC being enforced in these specific spaces does not usually happen - they are enforced outside of those spaces as well. If I say some homophobic stuff on IRC, and it gets screencapped and posted on Twitter, do I get kicked out as a member of Project XYZ that uses a CoC which specifically prohibits that sort of language? Obviously I’ve said it, and there is public record of it - but I wasn’t saying it in context of the project, or to any member of the project, and in a (relatively) private setting. If I’m punished for something like that, then I’ve lost moral autonomy outside of the project.

                                                                                                  1. 1

                                                                                                    I would consider that to be a very arguable case. Is it possible that one’s external behavior will negatively impact the project and its community? Yes. Is your objection about moral autonomy outside the project valid? Also yes.

                                                                                        2. 0

                                                                                          Ok. What do you do that violates the CoC that isn’t bad? So far all I’ve heard is weird analogies that don’t really make sense. Can you articulate your concrete concerns?

                                                                                    2. 2

                                                                                      To be fair, I fall between the OP and the parent. Aside from one pre-COC level FreeNAS, I don’t use FreeBSD (which is the example) because of the shitty CoC. I’m not opposed to a well-structured one, but FreeBSD doesn’t appear to have one. Using a product means you condone the producer’s practices. I don’t use Facebook. I’m slowly degoogling my life, and I’m getting rid of Linux. Amazon Prime will be a hard plaster to pull off, but I’m working up to that. I see FreeBSD the same way - I don’t support their CoC implementation, ergo I won’t support the product by using it.

                                                                                      The very fact that any online discussion quickly devolves into poisonous ad-hominem is reason enough for me to be put off by the presence of one, but they can serve a purpose when well implemented (if GNU had a well-designed CoC then the recent Glibc abort() debacle could’ve been handled through it for example). When they’re poorly implemented like with FreeBSD, it’s not properly serving it’s existing community.

                                                                                      1. 2

                                                                                        Why are you getting rid of linux?

                                                                                        1. 5

                                                                                          It’s a combination of factors, some of which are due to shitshows like systemd, issues with breaking compatibility (e.g. ifconfig) and the realisation after moving to docker that for the most part, I have absolutely no idea what code is running on these systems.

                                                                                          I wrote about this in another comment here: https://lobste.rs/s/yxswhm/what_are_you_self_hosting#c_8reclz

                                                                                          To be fair, a lot of this is a result of my own poor personal choices, but I now feel like I’m fighting Linux to make it do what I want predictably, and not do things I didn’t tell it to do. It’s very reminiscent of MacOS’s shift a few years back.

                                                                                          I’m going to spend some time with Alpine simply because that’s what a lot of my docker containers for public systems run on, but I’m not building new systems to run docker, no longer buying raspberry pis (thanks, binary blobs) and instead of migrating to Linux, I’m migrating a lot of systems to Open and NetBSD. I would’ve chosen FreeBSD, but the CoC debacles mean I’m less comfortable supporting it. My next NAS build may well run Illumos instead.

                                                                                    1. 1

                                                                                      Find a live stream from a tropical region where it’s not raining at the time of receiving the message, take modulo 20 of the time elapsed until the next rain shower. Keep video proof as evidence.

                                                                                      1. 2

                                                                                        This is actually quite a cool side effect if you’re into obfuscation, and easily automated one as well:D

                                                                                        1. 24

                                                                                          The title is a little misleading. The author is not against adblocking in the abstract, but is against Adblock Plus, a specific adblocker.

                                                                                          1. 2

                                                                                            I think that was done on purpose, because the title wouldn’t have made sense otherwise. For me personally it is click-baity but definitely more tolerable and enjoyable than the standard clickbait titles one sees on the internet.

                                                                                            1. -2

                                                                                              The title capitalizes Adblock, which makes it pretty clear that it’s talking about a specific product.

                                                                                              1. 21

                                                                                                It wasn’t clear to me. All the other words in the title are capitalized, and “adblock” without qualification usually refers to all extensions which block ads.

                                                                                                1. 13

                                                                                                  The title capitalizes all of the words. It’s in title case.

                                                                                                  1. 10

                                                                                                    That’s The Most Annoying Thing When Reading American Websites Online

                                                                                                    1. 0

                                                                                                      Americans are the only people on the planet who don’t adhere to your capitalization rules?

                                                                                                      1. 0

                                                                                                        As far as I know, yes. British, French, Spanish and Portuguese-language sites don’t capitalize everything and it’s such smooth sailing.

                                                                                              1. 2

                                                                                                What happens when you release a plugin/middleware under a license like the one the author mentioned (as just an example)? how can you figure out how much of the profit is attributed to that plugin/middleware. As a human I’m interested in licenses that force good-doing, as a software developer I’m scared shitless of adding more license complexity.

                                                                                                1. 3

                                                                                                  tl;dr: memory leaks, space leaks, and fragmentation

                                                                                                  1. 4

                                                                                                    The third type from the article is memory fragmentation between a VM and an OS due to lazy freeing of unused memory by the VM. This is quite different from the common meaning of fragmentation which describes having free memory fragments across non-continuous blocks of physical memory.

                                                                                                  1. 6

                                                                                                    TLDR: The laptop was not tampered with.

                                                                                                    Still a good read though :-)

                                                                                                    1. 16

                                                                                                      That he knows of.

                                                                                                      1. 5

                                                                                                        It’s impossible to prove… :)

                                                                                                        1. 5

                                                                                                          For sure haha. One can do better than he did, though.

                                                                                                          For one, he can block evil maid style attacks very cheaply. I’ve done plenty of tamper-evident schemes for that stuff. You can at least know if they opened the case. From there, one can use analog/RF profiling of the devices to detect chip substitutions. It requires specialist, time-consuming skills or occasional help of a specialist to give you black box method plus steps to follow for device they already profiled.

                                                                                                          The typical recommendation I gave, though, was to buy a new laptop in-country and clear/sell it before you leave. This avoids risks at border crossings where they can legally search or might sabotage devices. Your actual data is retrievable over a VPN after you put Linux/BSD on that sucker. Alternatively, you use it as a thin client for a real system but latencies could be too much for that.

                                                                                                          So, there’s a few ideas for folks looking into solving this problem.

                                                                                                          1. 3

                                                                                                            This (and the original article) are a techno solutions to a techno problem that doesn’t really exist.

                                                                                                            If you’re a journo doing this, they will look at your visa and say, you claim to be a journalist, but you have no laptop, we don’t believe you, entry denied.

                                                                                                            I’m pretty sure even a very open country like NZ will do this to you. (If you claim not to be a journalist and start behaving as one, again, violating your visa conditions (ie working not visiting, out you go).

                                                                                                            As to spying on what you have on an encrypted drive….. rubber hose code breaking sorts that out pretty quick.

                                                                                                            I grew up in the Very Bad Old days and tend to have a very dim view of the technical abilities, patience and human kindness of the average spook.

                                                                                                            1. 2

                                                                                                              I got the idea from people doing it. They werent journalists, though. The other thing people did which might address that problem is take boring laptops with them. They have either nothing interesting or some misinformation. Nothing secret happens on it during trip. Might even use it for non-critical stuff like youtube just so its different when they scan it on return.

                                                                                                      2. 5

                                                                                                        TLDR: The laptop was not tampered with in a way he’s foreseen.

                                                                                                        To just say the laptop was not tampered with is missing his point completely.

                                                                                                      1. 6

                                                                                                        We are not bound to one or the other. But the programming languages which we use bind us to one, arguing that the other is ugly.

                                                                                                        I wonder if the author here is being willfully oblivious to the existence of multi-paradigm languages. Picking Haskell to argue that a functional language creates ugly code when one needs a more OOP approach seems to me like pure laziness. I think he should’ve at least used another language which isn’t purely functional, but also not historically OO.

                                                                                                        1. 6

                                                                                                          I like how concise and unopinionated this article is (or rather that the opinions are clearly marked and a good attempt made to separate the information from it).

                                                                                                          I’m pretty bad with tests, essentially doing only acceptance, diff and a lot of manual tests (for what could be automanual). I have yet to find tests that aren’t end-to-end and can survive major refactors (that are complete rewrites or close to it) or even language changes. I’d also like them to not discourage me from changing a bad API (that’s likely to invalidate a lot of unit tests).

                                                                                                          And while I’m wishing, something that can go from manual (done from a REPL or debugger) to automanual more naturally would be nice too. Even creating a second file in a project meant to be small feels cumbersome.

                                                                                                          Before reading this, I used to think property tests meant fuzzing and now learned that fuzz tests don’t actually check the output!

                                                                                                          1. 6

                                                                                                            And while I’m wishing, something that can go from manual (done from a REPL or debugger) to automanual more naturally would be nice too. Even creating a second file in a project meant to be small feels cumbersome.

                                                                                                            Ooh this is totally a thing- obscure, but a thing. I’ll find some references and add a section on it when I get a chance.

                                                                                                            1. 5

                                                                                                              “and now learned that fuzz tests don’t actually check the output!”

                                                                                                              It’s one of those terms that don’t have a precise definition. Depends on which researchers or tool developers you’re talking to. What they have in common is throwing random data at something watching for an effect. That used to not involve a check because the problems they looked for often caused crashes. If the problems don’t, you might need checks to spot them. So, fuzzing != no checks but it’s common to not have them if target is C language or something.

                                                                                                              Lots of random input is the defining trait.

                                                                                                              1. 6

                                                                                                                There’s definitely a point where if you’re using a fuzzer, but adding lots of assertions about the output being reasonable, it starts to feel more like property-based testing.

                                                                                                                I did an internal tech talk about property-based testing at work couple months ago, and made the case that PBT tooling belongs in one’s toolbox because it can be applied to a range of test styles: along with typical PBT “tactics” (to use hwayne’s term), the test library can also run properties that are closer to fuzzing or model-checking. New tactics and a variety of approaches can plug into existing PBT tooling.

                                                                                                                The core interface* is arguably specifying how to generate input for a property (reproducibly), and how to classify that input as interesting or not (by running some test code and checking for failures/errors). This framing is pretty general, and mainly ensures the PBT library has the info it needs to shrink interesting input. Plugging different testing tactics can lead to tests with very different trade-offs:

                                                                                                                • “random input” + “it doesn’t crash”: Classic fuzzing.
                                                                                                                • “structured input” + “these two implementations agree”: Comparing the code under test against a reference implementation, a naive/inefficient version, or the same codebase without an experimental optimization. Taking something easier to verify, and using it as a foothold to check something more complex.
                                                                                                                • “structured input” + “resource limits are sufficient”: Searching for input that uses disproportionately large amounts of memory, CPU time, or whatever.
                                                                                                                • “structured input” + “roundtrip a conversion”: encode some data, decode it (say, pack and unpack data for serialization to disk), and check if anything got lost in translation. A classic tactic.
                                                                                                                • “a sequence of operations against an API” + “call API and check results, update in-memory model”: This works more like a model checker, and an in-memory dictionary can be an easy stand-in for a database, filesystem, or other model of the state of the outside world when testing complex logic in a vacuum. While it isn’t exhaustive, the way (say) TLA+ can be, and it’s difficult to apply to problems that are inherently nondeterministic due to concurrency, it’s a great way to cheaply stress-test logic and discover surprising interactions. There are lots of APIs where the individual operations make sense, but have subtle misalignments between them that can compound and spiral out of control when combined in certain ways. As a bonus, shrunken failing input for these properties tends to have a narrative: “when you do this, then this, then this, then this, it fails in this way”.

                                                                                                                Controlling the input generation also means that it can be steered towards particular areas of the state space, in a way that feels more direct than (say) temporarily using asserts to convince afl-fuzz that those branches are boring.

                                                                                                                * I have the most experience using theft on C (I’m the author), but it seems like this applies to most other PBT libraries.

                                                                                                                1. 1

                                                                                                                  I see. Thanks for the clarification!

                                                                                                                2. 4

                                                                                                                  And while I’m wishing, something that can go from manual (done from a REPL or debugger) to automanual more naturally would be nice too.

                                                                                                                  I might have misunderstood you, but something like python’s doctests could be what you’re looking for. You can basically use the REPL to manually test your code and how to use it, you paste that in the docstrings, and doctests runs it again and makes sure it behaves like it should.

                                                                                                                  1. 1

                                                                                                                    something like python’s doctests could be what you’re looking for

                                                                                                                    Good suggestions. I quite like the idea of doctests but here are some things that dissuaded from adopting them, at least right away.

                                                                                                                    • I usually don’t want to see my tests when editing code. I guess I want tests either in a separate file (which also goes against my wish to have fewer files) or maybe grouped together at the end (or beginning) of the file.
                                                                                                                    • Only the very first few (manual) tests tend to focus on a single function.
                                                                                                                    • In a REPL or debugger, I usually have a lot of state set up. In the debugger (say when post-mortem debugging), I don’t have the steps to recreate this state! Of course, I could spend time to cook up an example but that takes more thinking than just a copy-paste (and I’m trying to find something that lets me progressively more effort for more certainty).

                                                                                                                    Right now, I know that a lot of my REPL commands are just lost to the history file and could probably be made automatic instead.