1. 12

    There are some interesting CSRF security issues that need to be solved before this can be a thing: Currently, forms are exempt from CORS-checks due to being older than CORS: And any request of type POST or GET can always be sent cross-origin with a form. But all other requests will require a positive a CORS pre-flight request before they can be sent.

    So, this assertion needs to hold true for for DELETE and PUT requests (due to CSRF-concerns). In essence, this means someone would have to specify and figure out the processing logic to wire CORS checks (i.e., pre-flight requests) into a form submission. This is tricky because form submissions are different types of requests than those using XMLHttpRequest/fetch. Specifically, because a form submissions is a page navigation.

    1. 3

      CRSF checks are normally handled with a security token that is included as a hidden input in the form. This works for POST and GET requests so why couldn’t it work for DELETE and PUT requests? Sorry if I’m missing your point.

      1. 1

        What you are talking about is in the Webapps. The browser has some CSRF protections too. And that’s CORS.

      1. 9

        All of the differential dataflow papers really suffer from the academic presentation which forces the author to focus on absolute novelty, rather than being allowed to talk about quality engineering. I think https://github.com/frankmcsherry/blog/blob/master/posts/2017-09-05.md motivates the problem much better.

        1. 1

          FWIW I looked over some of the recent blog posts, and they were talking about the SQL interface.

          That is a lot more interesting to me! It looks like I might be able to stream my web logs into a tabular format and then run ANSI SQL over them that is continuously updated? That would be pretty interesting.

          The post made it sound like the main way to use it was via a Rust library. I’m not really interested in writing Rust for analytics. Go replaced Sawzall several years ago and I wasn’t really a fan of that either. Analytics code can be very tedious so you want a high level language.

          Although I do have some “log spam” use cases and I wonder if SQL can handle that …

          1. 2

            It looks like I might be able to stream my web logs into a tabular format and then run ANSI SQL over them that is continuously updated?

            Yep, that’s exactly how it works. The sql interface is a BSL-licensed thing being built on top of DD by a company founded by Frank McSherry and Arjun Narayan about 2 years ago - https://materialize.com/. I think it has a bright future, but I’m also curious about other niches where DD itself seems like it should be useful but currently doesn’t have any uptake.

            I updated the post with the feedback I got, fwiw. Notably people who wanted to just crunch data were more into the kind of all-in-one-product that materialize is offering, but a smaller group wanted to use DD as a backend for more specialized tools but bounced off the api/docs.

        2. 2

          This sounds like incremental computing, also called self-adjusting computing. Which is also a bit more general than the incremental computation over streams idea presented here. And it has applications for UI programming as well.

        1. 23

          It sounds like the iPhone Timer isn’t displaying a fake time. It is just showing the rounded time. And the author tried to replicate this, oddly, by adding 500ms then rounding down. Am I missing something?

          1. 3

            Yeah. I remember this from programming in BASIC on the Apple ][ as a teenager. There was no round-to-nearest function, so instead you did INT(X+0.5).

            Wasn’t expecting to see something this, uh, basic (sic) as the top post here! Slow news day?

            1. 4

              Yes, It’s startling to me that someone who clearly has years of developer experience under his belt could be surprised by this. Back when we started, rounding was trivial. Making user interfaces and network servers was something out of science fiction. I guess it’s the other way around now.

            2. 3

              No, you’re not. It feels like the author is looking at this and assuming it was some carefully vetted design decision, when it was likely just some programmer that, in the spur of the moment, decided to use Math.round instead of Math.floor (although IMO Math.ceil would be better than either).

              1. 14

                It’s probably intentional rounding rather than “adding half a second,” but I believe it’s a deliberate design choice. Here is a nearby clue:

                As the author said, if you pause with “00:00” on the timer, it will show “00:01” because there is some time left, and “00:00” would look like there is no time left. However, in some brief testing, this adjustment-on-pause did not happen at any other time that I paused except “00:00”. And on resume, the remaining duration was the fractional second, so it is specifically the displayed value that’s changed, not the underlying timer. I don’t believe this behavior would result from an accident.

                1. 1

                  This is fair.

                2. 2

                  The Google clock app seems to take the ceiling approach as well.

              1. 4

                academic institutions systemically promote exactly the sort of short-term optimization of which, ironically, the private sector is often accused. Is entrepreneurship a trap? No; right now, it’s one of the only ways to avoid being trapped.

                Short-term optimizations in the private sector typically happens in publicly traded companies, particularly when shareholder activism is involved. Anecdotally I have seen this happen in private companies that use a lot of internal metrics. I guess the author intends his company to be a counterexample. The criticism is probably still true for many companies. Presumably there are some entrepreneurial companies, like the author’s, that this isn’t true for.

                So he claims that entrepreneurship is not a trap, with the evidence that he was able to produce useful things while being an entrepreneur. But most entrepreneurs fail. Perhaps a more accurate statement would have been “entrepreneurship is a trap for most people, but it wasn’t for me.”

                1. 4

                  However, we can affect the future of computing simply by refusing to pay for the instruments of our own imprisonment. Although computer and software companies do have significant control over us, they cannot build computers that we absolutely refuse to buy.

                  Color me skeptical. This structural problem won’t be solved by individual consumer choice. Consumer choice like this just serves an “out of sight, out of mind” function. The fundamental problem is the power imbalance between corporations and governments on the one hand, and everybody else.

                  1. 1

                    Governments (liberal democracies, anyway) are theoretically answerable to “everybody else” via legislatures and courts of law. Corporations are theoretically answerable to “everybody else” via consumer choice, and the courts. Of course there are real power imbalances, but these are very complex problems, and I don’t really think anyone is very seriously advocating for simplistic solutions, although their rhetoric may suggest it.

                    If the author were to omit the word “simply” from the phrase you quoted, and add in something about supporting appropriate legislation, would you be placated?

                  1. 4

                    Does anyone have a good alternative to the kindle store? Its the only big FAANG service that I still rely on, but its often hard to find the books I want elsewhere.

                    Maybe I should at least jailbreak and backup my books just in case.

                    1. 10

                      You don’t need to jailbreak your kindle, you can back them up and strip out DRM/change them to epub with Calibre. You just need to auth with amazon to do it. There are plugins that handle it for you pretty cleanly.

                      1. 7

                        Have you tried your local library? My library is part of some national network for ebooks.

                        1. 6

                          There is always libgen, which has most things. That of course may not align with your eithics. I usually buy a paper copy if I want to support the creator. It’s also very nice to see if I actually want/need to read a book.

                          Second your local library for alternate options.

                          1. 2

                            I get not wanting to send people directly to libgen as a first run. I like books, and money is a way to incentivize that.

                            But I recommended libgen last night to a friend who “bought” an online book, and was greeted with a “oh its really a rental for 180 days for $20”. By the end of the call, he had the PDF. Neither of us had any qualms of guilt. Gotta love predatory academic book “selling” (aka digital rental).

                            1. 1

                              I like libgen as well. Buying a paper copy doesn’t necessarily send much money to the creator though. Generally speaking it’s the publisher, not the creator, that receives most of the money from a book purchase.

                            2. 4

                              I am happy with Kobo. Besides the usual eReader experience, I get a lot of value from overdrive and pocket integration. I’ve setup the Dropbox integration as well but haven’t used it yet.

                              1. 1

                                Can you read your amazon-bought books there?

                                1. 3

                                  you can’t read your amazon books outside of a kindle device or app. Unless you break the DRM with Callibre, which is easy to do and then you can read it anywhere. I’m not advocating doing it because moving away from a Kindle device but remaining inside the Amazon ecosystem would still get money in their pockets and add friction into my life. I moved to Kobo and am using either the Kobo store for fiction books or buying non-DRM books direct from the publishers.

                                  1. 1

                                    I moved from Kindle to a Kobo a while ago. Calibre made stripping the DRM from my amazon purchases and converting them to ePub (and kepub, the enhanced Kobo ePub format) pretty easy.

                                    1. 1

                                      It involves some sort of jailbreaking the kindle, right? Do you have a decent guide on how to do that handy or should I just google it?

                                      1. 2

                                        Not in my experience – it involves downloading (in my case) the Mac Kindle app, which enable the Calibre de-DRM plugin to strip the DRM from the books. I did this with all my previously purchased books when I switched from Kindle to Kobo. I also keep a VM with an ancient(ish) version of OS X on it so I can strip the DRM from books I purchase from the Apple iBook store.

                                        1. 1

                                          No need to jailbreak your Kindle. It just required a couple of Calibre plugins and having the kindle app installed on my computer (the plugins scrape the DRM key out of the app iirc)

                                          1. 1

                                            Right, now I remember that I’ve stopped using calibre for a while and then came back and couldn’t get things off my kindle. I have to go fish for that plugin.

                                            1. 1

                                              This is what you want: https://github.com/apprenticeharper/DeDRM_tools

                                              As a side-note, the related Obok project allows you to remove DRM from your purchases from the Kobo store, if you decide to try those devices in the future.

                                1. 2

                                  Most web users will simply select “no to tracking” once in their browser and the browser will block all the trackers for them as they surf the web.

                                  This sounds a bit like Do Not Track, and look how well that worked. It also sounds like Firefox’s Tracking Protection feature, which is actually quite nice (although I still have Privacy Badger installed because Firefox’s list is based on a blocklist which by definition is never complete).

                                  1. 5

                                    I use Consent-O-Matic for this, because sites don’t respect DNT.

                                    1. 2

                                      I used to set the DNT flag. Then I saw an aggregation of visitor stats on one site I frequent. Only one visitor with DNT set - which I realized was myself. I concluded that setting this flag is just leaking a rare fingerprinting datapoint to any sites I visit. I no longer set DNT.

                                      1. 1

                                        Unfortunately Firefox doesn’t allow disabling the DNT flag as far as I can figure out :-/ I wish it would go away, it’s more harmful than helpful IMO, mostly because it gives the illusion of doing something while you’re actually not.

                                        1. 1

                                          If that’s the case, perhaps the statistical profile of people using DNT has changed and now its more common. It’s not like there aren’t plenty of Firefox users out there.

                                          1. 2

                                            Microsoft enabled DNT by default in Explorer back in 2012, I believe (although later disabled it again). That was kinda the beginning of DNT’s demise since publishers complained about it being an indiscriminate use of the header.

                                            Apache, for example, started ignoring the header not long after that.

                                  1. 5

                                    I like the spirit of this article, but I can’t help but think it’s too nonspecific to make a good case for itself. The author seems to be crafting a definition of “bullshit” technical content that is primarily something like “too much appeal to the authority of prestigious programmers, and not enough independent thinking”. This is all well and good - of course it’s better to have an objective argument for a technical decision than the word of some authority that it’s a good one, and it’s good for programmers to think independently about the problems they have at hand. But what does that entail in practice, with respect to specific classes of programming problems? That’s the difficult thing for a programmer to know, and this article says nothing about how one might go about making such determinations. How can you tell if any specific tutorial you’re reading “contains harmful mistakes”, so that you can know to ignore that tutorial? How can you determine if the architecture of a piece of software you work on is “entirely fucked up” because of incompetent senior engineers?

                                    Incidentally, one of the more specific and therefore potentially-applicable pieces of information, was a limited defense of authority: “Dan Abramov telling you how to use React”. As it happens, I didn’t know who Dan Abramov was and had to DuckDuckGo the name. Turns out he works at Facebook and is one of the creators of the Redux library for managing state in React apps. I have nothing against Abramov or Redux. But how can this author know that Abramov specifically is an authority who is definitely right, but tech content coming from people who aren’t of his special class of expert need to be treated with more skepticism than it currently is?

                                    1. 3

                                      this article says nothing about how one might go about making such determinations

                                      I would argue that if you have a method for making determinations then you are no longer thinking - you are just applying a method. And the article, as I read it, advocates for thinking on principle.

                                      In my view, thinking and applying a methodology are polar opposites. It’s exactly at those points where method fails us, or where we abandon method, that we are forced to think.

                                      1. 2

                                        But how can this author know that Abramov specifically is an authority who is definitely right, but tech content coming from people who aren’t of his special class of expert need to be treated with more skepticism than it currently is?

                                        I think this is where the article went wrong. Yes, appeals to authority are a fallacy when considering logical syllogisms. However, in the real world, relying on external authorities is the only way to know anything of practical consequence.

                                        The useful skill that junior developers often lack is the ability to distinguish who is an actual authority on a subject. As a member of the React core team, Dan Abramov has authority on the subject of React that Joe Blogger does not. That doesn’t mean he’s always right about React. But having an authority to rely on will gradually help you sift the wheat from the chaff in online discourse until you’ve internalized ways of independently evaluating claims yourself.

                                      1. 29

                                        This is a very long winded article and yet in a way it stopped too short. The thesis is that software didn’t go wrong but that software exists in an environment motivated by capital. The intuition that the problem isn’t software but the context that software lives in is a good one. But the author shouldn’t have stopped at Capital. The problem is that Capital exists in a context as well. At it’s crux the issue is human nature. Human nature has a number of failure modes. Those failure modes manifest in the use and accumulation of Capital as well in the development of code and in fact in any alternative attempt to replace Capital as a motivation.

                                        Solving the failure modes of software requires solving the failure modes of human beings.

                                        1. 36

                                          There is a reflex in anglophone online discussion to jump straight to attributing the state of capitalism in the US to fundamental forces of the universe, as if the sad state of healthcare provision, public transport, employment law, infrastructure etc etc are just inevitable because Human Nature. And also it has to be this way because the alternative is communism.

                                          It seems to wilfully ignore most of the rest of the developed world. You can make useful inroads into this problem with boring, un-pontificatey, un-weary-old-sage stuff like policy and government and compromise and all the other things that are deeply unfashionable to the point of being broken at the moment. It does work if you let it. The state of the examples I gave above are the result of active choices made by Americans, knowingly or otherwise. I am not saying for a second e.g. north west Europe is perfect, that is impossible because it is impossible to solve the failure modes of human beings. They have merely made a different choice to Americans about how they want their society to be (e.g. the things I mentioned above are a higher priority).

                                          At the present time, the USA is one of the easiest places in the world to become a billionaire, unhindered (relatively) by constraints societal, regulatory and moral that exist in other places (the recent tax cuts, the wealth gospel, marking up insulin 1000% would all be seen as Martian to a Dane, for example). Americans voted for this. The only other similarly fertile time for rapidly-accumulated billions in recent history was the oligarch class that formed in the vacuum of the collapsed USSR. Though in that case the absence of effective government and regulation wasn’t as a result of an active choice by the citizens.

                                          Choosing to remove many of the constraints against rapid capital accumulation is now really starting to eat into the things that gave america its strengths in the first place, such as good research and the ability to spin that research into productive industries. R&D labs are expensive and don’t survive CFO-orchestrated mergers. You can’t innovate in your Valley garage anymore because you can’t afford to buy the house with the garage from the Instagram employee who is selling it. I shouldn’t even use the valley in my example as a shorthand for an innovative place. It used to be an engine of technological innovation, now it only is if you squint really hard to try and see selling adverts as a branch of computer science. Instagram replaced Intel. Good on the VCs for taking the valley and shaping it in the way that maximises the rate at which they accumulate capital, they are winning the game whose rules were written by the American electorate.

                                          The sentiment ‘We won’t get anywhere until we solve human nature’ is a false dichotomy [the choice being between the status quo or some singular revolution in human behaviour] and quite seductive to people like us who like grand, clever, sexy [a troublesome used deliberately here] new advances to cleanly solve existing problems. (c.f. the grim and now-parodied heydays of TED where people queued up to pronounce things like ‘Technology Will Fix Education’).

                                          Your messiah won’t come and fix it. You, I, we all need to take the basics seriously and make careful choices in our everyday lives. It’s much less convenient for me at the moment to buy an oven glove online from a local kitchenware place than from amazon, but I do because it’s important. I spent $30 instead of $5 to get my hobby PCBs made in this country rather than in China because it’s important. I walked in the cold rain when I was tempted to stay inside to canvas for a local political cause because it’s important. None of these are big revolutionary things, they’re just trying to be a better cog in the machinery of my society (and all of us exist within and shape our societies, even if we don’t want to) because that’s important. The basics are important. Regulators musn’t turn a blind eye to the accumulating shortcuts of their industries. The law must apply to everyone. Lobbying is bribery by any other name but is much more tightly regulated in other countries. The money in politics must be transparent.

                                          All of these basics are difficult and boring and tiresome and essential and effective.

                                          1. 5

                                            I think it’s very helpful to view capitalism as an inevitable force of nature. Just like many other forces of nature, we want to mitigate, redirect and transform some of its effects. Wind is fine, storms and hurricanes require defensive action. Rivers are useful and even nice, but we need to guard against flooding and sometimes want/need to canalize a part.

                                            Capitalism may be human nature, but that implies nothing about the acceptable/desirable consequences. If someone thinks otherwise, they are simply committing the naturalistic fallacy.

                                            1. 2

                                              This is an important point that too often gets left behind. Capitalism isn’t some option off a menu you choose when setting up your government. It exists now, it will exist in the future, it will always exist. The study of economics isn’t something we do because we control it, it’s something that already happens that we seek to more fully understand.v You can take the most oppressive regime in history, perhaps with every bit of money controlled by the state, and there was still capitalism. The “capital” just switched over to political influence, reputation, and so forth. The same principles apply.

                                              History show us that the only thing you can really control about capitalism is how much of it you want to be overt versus covert.

                                              These discussion are really sad to read. We start off with everything being about money: who has money, who doesn’t have money, who has too little, who has too much, and so forth. Then we venture on this long and winding journey around whatever problem we’re trying to analyze only to end back up where we started. Turns out? The problem was all about money! That’s the problem!

                                              If I can take your premise and know how your analysis is going to conclude, you’re not doing much in the way of analysis. At best you’re simply regurgitating ideas you’ve consumed elsewhere and mangling them together. That might make for well-written and great prose, by the way. It could easily make for a piece of text worth reading and sharing with others. It’s just not going anywhere that we haven’t already gone a thousand times before.

                                              1. 2

                                                It exists now, it will exist in the future, it will always exist.

                                                Capitalism is an economic system that was created by people, and put into effect by force. There is nothing inevitable about it and it’s heavily reliant on the societal ideals and values, and seeks to manipulate them through media, and the very language that we use to talk about things, to ensure that it continues.

                                                The idea that we cannot build a different economic system, that might or might not involve money, ignores the fact that the dynamics of capitalism are fundamentally just societal agreements and social normals. And that societies have had, and current have, very different variations along that concept. It buys in to the idea that capitalism was a natural development, when it is anything but.

                                                In addition, your analysis that the person you are responding to is regurgitating ideas is entirely ignorant of the fact that that is all you are doing. You’re not stating anything new, you’re not even stating factual or historically correct information. You’re regurgitating half-thought ideas that have been passed along to you by your culture that you and others haven’t properly analysed, nor have you clearly read any analyses or critiques of those ideas. The fact that you’re using this to shame someone else is amazing, quite frankly.

                                                Please go and read The Origins of Capitalism by Meiksins-Wood. It’s an academic work but it’s very, very good. I’d also recommend Anthony Kenny’s History of Philosophy, purely because you don’t seem to believe that culture as a whole, and the zeitgeist specifically has changed massively over time, and not just through scientific evidence. For example, before JS Mills, morality was thought to be based on an inherent good or bad quality of the act. It was an impossible and clearly wrong idea that it could depend on the context in which an act takes place to determine whether it is a good act or a bad act. If morality itself depends on your societal context, just think about how deeply complex systems depend on specific circumstances and beliefs, and how much they could differ if those beliefs and circumstnaces were changed.

                                                1. 1

                                                  I will consider this. Thank you.

                                                  I am afraid, however, that I already know where this is going before it even begins. This is going to be about the classic definition of capitalism while I was talking more about something that academically might be called “free trade”

                                                  I tried to make that clear by my examples. Apologies if I failed. I felt it was important to bring the conversation down to the vernacular and not get too far into semantics, history, and economic theory. But your point is a good one. I’m just not sure it’s relevant given the examples I provided.

                                            2. 3

                                              This should be posted somewhere on a website of writing to be better preserved than a comment on a story posted Lobsters (not that there’s anything wrong with Lobsters comments …).

                                              What you write sinks to the core of my being and the life I’ve carved out for myself in the United States. My friends think I’m crazy for moving to a small town and making due with the (largely) older population that still resides here. Where’s the nightlife? Where’s the easy entertainment?

                                              We buy less. We consume less. We build more. My kids are being raised knowing that when you hatch chicks, that one with a deformed leg will die, and it wont be anyone’s fault. But they see the miracle of two dozen other chicks grow into livestock that provides us with eggs. We then turn around and sell the eggs to make a small profit compared to the input of grain. In this way we participate in our own version of capitalism, but we’re not trying to convert two dozen eggs a day into 10,000. I don’t need cancerous growth to show my kids how to live a high quality life.

                                              Choosing the slow growth is hard. Choosing to go without is hard. But the choices are there. Everyday we’re making choices that inform the world we live in.

                                              Thank you for giving me a train of thought to meditate on.

                                              1. 2

                                                I 100% agree, The key here is to recognize that people make particular choices and those choices have consequences and if you don’t address our tendency to make bad choices when misinformed or tempted in certain ways then no system you create to address the bad effects of those choices will succeed. Capitalism done wrong will have certain effects. Communism done wrong will have certain effects. Socialism done wrong will have certain effects.

                                                The defenders of those systems will all say “Well, that’s because they didn’t do it right.” To which I respond yes, and until you fix their tendency to do them wrong they will continue to do them wrong.

                                              2. 9

                                                That’s a great point. At the moment, capital is our primary representative of desire/human nature. And of course, this is the great bait-and-switch of capital, which convinces us that it is the real thing we desire; before capital, this “stand-in for desire” was earth itself, and then the body of the despot.

                                                It felt more productive to discuss software-under-capitalism than software-under-human-nature, not least because the article is long-winded and heady enough as it is. It’s also easier to take action against something more concrete, even if that concreteness is a trick. Just because things are human constructions or illusions doesn’t make their consequences any less real!

                                                1. 20

                                                  Human beings existed in non-capitalist forms for the vast majority of the time we’ve been on this planet. Non-capitalist cultures are rare and dying these days. But this is due to forms of globalization, notably the history of colonization. It’s not human nature but domination, often violent, that has produced the current state of affairs where capitalism as a cultural form is seen as somehow being due to “human nature”, as if it weren’t in fact a historical production.

                                                  1. 9

                                                    What do you mean by non-capitalist, in this context? I suppose one of the features of modern capitalism – the idea that the pie can grow – is a relatively new one, as is the idea that competition is good for consumers. But usually, people who reject capitalism don’t seem to reject those parts.

                                                    However, exchange on a relatively free market, which is the most important part of capitalism, has existed for probably the bulk of human history, and in the cases where it was disallowed, it still stuck around in the form of a black market.

                                                    1. 12

                                                      Various forms of exchange have existed for a really long time, but the best way to delineate ‘capitalism’ and ‘not-capitalism’ is to look at the general mode of production prevalent in society. In 900 AD, most people worked under personal obligations, i.e. their labour was not sold on the free market, and the point of producing goods wasn’t to satisfy a profit motive, rather to satisfy need and a mesh of social obligations. Only in capitalism is most work organized and most goods produced under this generalized framework of selling them, only there is labour treated as a commodity.

                                                      This is a simple, factual difference in how the economy works. You need a name for it, and ‘capitalism’ has always been that name. You can say that ‘capitalism’ actually means ‘exchange, in whatever form, is present’, but most people don’t mean that when they think of capitalism.

                                                      1. 3

                                                        I’ve seen different people use capitalism very differently, which is why I asked. I find that it’s usually worth stripping the -isms before starting a discussion. It both clarifies the terms, and reduces the emotional attachment to them.

                                                        As far as human nature goes – I don’t buy that free trade is human nature, but I do think that wanting to move past a subsistence mode of living is. Then, once there’s largely enough stuff to survive, people start wanting to have different stuff from other people, which caters to their different tastes, and markets are an effective way to achieve that.

                                                      2. 3

                                                        there are arguments that the root of capitalism is in the neolithic revolution, but again, most of the time humans existed out of this structures and some still do. There are concepts like gift economy, collective property and so on that escape what you’re describing. It’s true that in some contexts people reverted to black markets, but as a reaction to existing economic structures that made it valuable. This is not a universal truth but specific to a (indeed quite broad) subset of economic systems.

                                                      3. 2

                                                        This is true but doesn’t invalidate the point. Those cultures also had failure modes some of them the same as the current failure modes.

                                                      4. 1

                                                        Those failure modes manifest in the use and accumulation of Capita

                                                        Considering among capital are medicine and other things meant to improve our lives, I have a hard time seeing this as a failure. Rather it turns out most people don’t want to excersize their minds, and would rather spend their days watching cat videos. So that’s what we got.

                                                        The failure of humanity seems to be the desire for idleness.

                                                        1. 17

                                                          Considering among capital are medicine and other things meant to improve our lives, I have a hard time seeing this as a failure.

                                                          How, exactly, is medicine about capital? If you remove a capitalist system we don’t suddenly lose the ability to treat people, or develop new medicines. In fact, the current ways of doing both of those things are grossly inefficient, where people who cannot afford to get treatment run the risk of debilitating illness or death, and where research companies do not publish data simply because they invested capital in developing a drug that is, at best, no better than placebo.

                                                          Rather it turns out most people don’t want to excersize their minds, and would rather spend their days watching cat videos. So that’s what we got.

                                                          That’s not really the case though. The capitalist system itself causes stress on people, especially low-income people (which make up the majority). Not only could most of the work at the moment be done by less people (See: In Praise of Idleness by Bertrand Russell, and Bullshit Jobs by David Graeber), but removing stress from people’s lives allows them the opportunity to grow and focus. The idea that people who aren’t working are inherently a) of less value to society, and b) utterly unproductive, is a fallacy and a product of Religious Dogma (“Idle hands are the Devil’s workshop”). Stress kills creativity, if people didn’t have to struggle to survive (See: literally any UBI study), they not only tend to be more productive, or take valued roles in society that are scarce because they don’t have to work for the means to survive, but also they tend to be more creative. In fact, Eric S. Raymond (For however many his flaws are, and the fact that he is on the opposing side of my argument because of decades of cultural McCarthyism), in one of the essays in The Cathedral and the Bazaar, himself goes over the fact that, once the basic means are sorted, higher wages are not correlated with productivity, the basic measure that the capitalist system has for an individual’s productivity is inherently broken.

                                                          Capitalism was a system created and enforced on people by force (As Meiksins-Wood shows in The Origins of Capitalism), it is not a natural system, and has nothing to do with human nature. In fact, it hampers it. Things that people used to do, like giving gifts, being productive, collaboration, etc. are suddenly viewed only through the lens of capitalist exchange, which twists those actions to be solely about capital. Even idleness itself is under the force of capital, people who are throwing up because they are stressed, have even more stress because they feel they are failing themselves for not being able to work! The very act of idleness is now about exchanging economic activity, and about driving the economy. If you look at say, leasure activities in the early 20th century compared to the late 20th century, it goes from “Going to the local club for a round of badminton” to something much, much more focused on consumption, you can see this shift happening in around the 1960s to the 1980s.

                                                          Capitalism made it so that, suddenly, the only worth of a human being is for them to produce capital, almost always for other people. Human beings don’t just suddenly stop functioning and become mindless machines because they are outside of capitalism, that in itself is propaganda that has been shown to be false.

                                                          We are worth more, we can do more.

                                                          1. 4

                                                            Things that people used to do, like giving gifts, being productive, collaboration, etc. are suddenly viewed only through the lens of capitalist exchange, which twists those actions to be solely about capital.

                                                            They used to do other things before the invention of Capital too, like subjugating others, taking from others by force, killing others. The point I was trying to make is that Capital in and of itself doesn’t cause those failure modes anymore than anything else. It’s just part of who we are. We have failures modes like any other system and attempting to solve problems by blaming them on a tool is failing to recognize the root cause: Human Nature.

                                                            1. 4

                                                              I mean, that doesn’t really track with the facts. There have been people who were good leaders that led people to believe things that caused them to murder, and kill, and subjugate, but those aren’t necessarily inherent to human nature. Most of those things are believed to be an necessity by the people involved (Zionism, for example was seen as colonialism by the people who created it, but it was justified as an existential necessity, and they wrote entire books outlining their reasons. The cold war was seen as an existential destruction on both sides. Naziism was seen and justified as making the world a better place, free of ‘lesser’ people – My Nan grew up under Nazi Germany, in a reasonably middle class family, he was seen in a positive light because he got rid of unemployment. He also lowered education standards to an abominable level for the women, the amount of things my nan was just completely uneducated on at 87 years of age was astonishing, she didn’t even understand “what held up the planets”), or just fact of the world (look at slavery, justified as being inherently and genetically lesser, and as soon as white folks came across science we invested a lot of money and time into backing that up ideologically).

                                                              While there are a handful of killers that kill without motive, most mass killers kill because they believe it will make the world a better place, because of their worldview. The fact that people create intricate justifications for the things that they do – which is well proven through the records we can find going back literally thousands of years, show very clearly, humans aren’t inherently hostile, except when they believe they’re in no other position, or a leader becomes greedy and convinces people that there is no other choice (Or when they don’t have to be convinced, when they’re in a societal position that ensures they will follow the commands).

                                                              On the large, modern studies show that humans are naturally cooperative, and not inherently selfish, and there’s around several centuries of anarchist literature where people give more evidence towards that fact, and everything else I’ve outlined above.

                                                              1. 5

                                                                Zionism, for example was seen as colonialism by the people who created it, but it was justified as an existential necessity, and they wrote entire books outlining their reasons.

                                                                It makes me incredibly uncomfortable to see this crop up in an argument about oppressive economic systems. Zionism is a deeply complicated topic that seems to so often collapse into “Jews bad”.

                                                                1. 3

                                                                  I can understand why you feel it’s uncomfortable, I feel the same. However, my point was correct, while Zionism is a complex topic, the founders of the movement explicitly called it colonialism multiple times, see this twitter thread with excerpts from their writing (Which you can stick into Google to pull sources for them, if you don’t believe them):

                                                                  Jabotinsky, Herzl, Nordau, Ussishkin, and other founders of Zionism clearly stating it’s colonialism

                                                                  You are right we must not mistake and conflate critique of Zionism, which is a specific political ideology, with hate towards Jewish people, who follow a religious belief and have massively different political tendencies within that belief system, and you are right that there is a lot of overlap between people who critique Zionism, and people who have hatred for Jewish people, which is wildly unfortunate, as they stand in the way of actual critiques of Zionism.

                                                                  1. 16

                                                                    the founders of the movement explicitly called it colonialism multiple times, see this twitter thread with excerpts from their writing (Which you can stick into Google to pull sources for them, if you don’t believe them):

                                                                    First, I looked up the source of your linked “quote”. The only places it appears is on antisemitic and anti-Zionist websites. More digging eventually got me to the essay they claim to quote, The Iron Wall, which doesn’t have the quote. Everybody said “it’s in the source!” but nobody actually read the source.

                                                                    (It does have deeply troubling anti-Arab statements, which I don’t deny, but the gulf between what it’s saying and what people are saying it’s saying is vast.)

                                                                    Second, that’s a bait and switch. You’re conflating colonization as we understand it as an oppressive system with how they used “colonization”, which is literally just “moving to a new land.” You can’t call them the modern interpretation of colonialism because it appears in a text, translated from Russian, from a hundred years ago.

                                                                    Third, Zionism isn’t a specific political ideology. It’s a set of similar concepts that form a mishmash of different political ideologies, just like “leftism” doesn’t mean “Leninist.”

                                                                    Fourth, there is a lot of conflation between anti-Zionism and antisemitism by intention of anti-Zionists. Look up the history of “Zionology” and the Soviet effort to get Zionism declared a form of racism.

                                                                    I’m pretty mad about this because I’ve been challenged on this everybody in “progressive circles”. People have asked me at conferences “what do you think about the Israel-Palestine conflict?” I’ve had to otherwise totally progressive people that no, Israel is not an “apartheid state”, yes, Arabs are allowed to vote, no, Israel didn’t start the Six-Day War. Antisemitism is socially acceptable in leftist circles and saying “I understand why you feel uncomfortable” doesn’t absolve anyone of anything.

                                                                    1. 3

                                                                      How can I upvote this 1000 times.

                                                                      1. 2

                                                                        Did you actually do the research? You’re right that the quotes appear on anti-Semitic websites, but this includes the ones where the quotes come from primary sources (Such as diaries written by the quoted leaders, or books written by them), so that doesn’t mean anything whatsoever.

                                                                        I referred to the full thread, so let’s go through them and dig up the citations in sequence, as you will see, many of them come from the horses’ mouth:

                                                                        1) The second numbered tweet (but the first one with an image and citation) comes from page 7 of “The Case for Palestine: An International Law Perspective”, this in turn, cites the following works for the text highlighted in the twitter post:

                                                                        “38. Abdallah Schleifer, The Fall of Jerusalem”, p 23

                                                                        Which is a book written by Abdallah Schleifer, born to a secular Jewish family, a “prominent Middle East expert”, and a former member of the US foreign policy research institute.

                                                                        “39. Raphael Patai (ed.) The Complete Diaries of Theodor Herzl (1960). p 1194”

                                                                        Which is a collection of Theodor Herzl’s diary written by Patai, a Jewish-Hungarian Ethnographer.

                                                                        Are you trying to tell me that Patai and Schleifer are Anti-semitic? If that’s the fact, then state it, make your case.

                                                                        2) You’re right the second tweet (the one I linked to) comes from The Iron Wall by Jabotinsky. A seemingly trustworthy source I can find here is from en.jabotinsky.org, and it says:

                                                                        There can be no voluntary agreement between ourselves and the Palestine Arabs. Not now, nor in the prospective future. I say this with such conviction, not because I want to hurt the moderate Zionists. I do not believe that they will be hurt. Except for those who were born blind, they realised long ago that it is utterly impossible to obtain the voluntary consent of the Palestine Arabs for converting “Palestine” from an Arab country into a country with a Jewish majority.

                                                                        My readers have a general idea of the history of colonisation in other countries. I suggest that they consider all the precedents with which they are acquainted, and see whether there is one solitary instance of any colonisation being carried on with the consent of the native population. There is no such precedent. The native populations, civilised or uncivilised, have always stubbornly resisted the colonists, irrespective of whether they were civilised or savage. And it made no difference whatever whether the colonists behaved decently or not. The companions of Cortez and Pizzaro or (as some people will remind us) our own ancestors under Joshua Ben Nun, behaved like brigands; but the Pilgrim Fathers, the first real pioneers of North America, were people of the highest morality, who did not want to do harm to anyone, least of all to the Red Indians, and they honestly believed that there was room enough in the prairies both for the Paleface and the Redskin. Yet the native population fought with the same ferocity against the good colonists as against the bad. Every native population, civilised or not, regards its lands as its national home, of which it is the sole master, and it wants to retain that mastery always; it will refuse to admit not only new masters but, even new partners or collaborators.

                                                                        He very clearly likens it to colonialism, through a direct analogy, and from then on I think the variance is one caused by the translation chosen. Whether this one is more true or less true to the words he wrote is something a native reader will have to determine.

                                                                        3) The next citation (the 4th twitter post) can be traced to “Zionism and Anti-Semitism”, a book that was written by Nordau and Gottheil, it is a primary source.

                                                                        4) The 5th twitter post was by Ussishkin. Ussishkin’s writings are, according to the Jewish Virtual Library recorded in two volumes, neither of which I can find online (I have found previous works via libgen, for example). They are presumably in hebrew, so I wouldn’t be able to read it anyway unfortunately.

                                                                        This citation comes from “Expulsion Of The Palestinians” by Masalha, who is a (Palestinian (? Is that the right way to phrase that?)) academic. The book lists in the Bibliography (Sorry if I mistype anything, because I can’t copy and paste this): “See the minutes of his meeting on 24 September 1941. CAB 65/23. His pro-Zionist Secretary for India, Leopold Amery, endorsed the idea; see his letter to Churchill dated 4 October 1941, cited in Nathaniel Katzburg, Mendinlyut Bemavoch: Mendinlyut Britania Beeretz -Yisrael [The British Policy in the Land of Israel 1940-1945] (Jerusalem: 1977), p. 18.”. I will leave it to you to find those.

                                                                        5) His sixth tweet makes reference to The Palestine Jewish Colonization Association (wiki), the Jewish Colonial Trust (jewish virtual library), and the Jewish Agency’s Colonization Department (American Jewish Archives).

                                                                        Afterword: One must, indeed, wonder if Zionism isn’t Colonialism, why do multiple Zionist leaders proclaim it to be Colonialism, and why do the names of many pro-Zionist organizations explicit contain references to Colonialism?! I don’t see any other explanation other than the Zionists themselves, believed it to be Colonialism.

                                                                        That’s a bait and switch. You’re conflating colonization as we understand it as an oppressive system with how they used “colonization”, which is literally just “moving to a new land.” You can’t call them the modern interpretation of colonialism because it appears in a text, translated from Russian, from a hundred years ago.

                                                                        But doesn’t Jabotinsky, in the quote above, refer to fighting off existing people? What else is colonialism if not removing people who are already existing in a land, so you can settle there yourself? Also, I think I have a fair grasp of how people from the 1800s in Russia use the word colonialism, I’ve read Trotsky, Lenin, and Marx. All of whom make reference to those terms and use it in the same way we do today. The usage back then was not any different to the one we use now.

                                                                        the Soviet effort to get Zionism declared a form of racism.

                                                                        Both Lenin and Stalin were loudly outspoken against Anti-Semitism. The Bolsheviks and Mensheviks had a significant proportion of Jewish members, and the monarchy had treated Jewish people abominably. Shorly before the Russian Revolution, fascists (for want of a better term) locked a village full of Jewish people in a church and set it alight, just one of the many horrific incidents to happen. Before the Russian Revolution Jewish people were – quite literally – under attack. One of the few remaining recordings of Lenin is one of him giving a speech against anti-Semitism. There’s a good quote on Wikipedia from Stalin in 1931. And during the war he relocated Jews in areas that were at risk of coming under Nazi control.

                                                                        1. 0

                                                                          Oh! Hey! What’s this? A Jewish anti-Zionist song??

                                                                          And a pro-Soviet anti-Fascist Jewish folk song?

                                                                          Maybe it turns out Jewish people are real people and have views all across the Political Spectrum? Hmmm 🤔🤔

                                                                        2. 1

                                                                          I’d like to point out that the Polish government believed Madagascar was a good option because 1) it removed a population from the countryside, and 2) it extended polish influence as Colonialism. So certain strains of Zionism were in fact colonialist in justification.

                                                                2. 1

                                                                  …himself goes over the fact that, once the basic means are sorted, higher wages are not correlated with productivity, the basic measure that the capitalist system has for an individual’s productivity is inherently broken.

                                                                  I’d like to read what economists think about this but this sentence is subtly wrong in my opinion.

                                                                  I think we should start to say that for a lot of positions, an individual’s productivity is awfully hard to measure, and in some cases it’s even hard to define (cf. all the art of counting lines of code). This is always true, for both Marxism, capitalism and whatsoever, right?

                                                                  Then, in a capitalist system, wages are a statement of the natural outcome of supply and demand, which means that they can vary a lot between companies, positions and locations. In my opinion this is - by design - not a reliable measure of productivity across positions and locations. And for the same position at the same location within the same company it doesn’t work at all if productivity is hard to measure for the position.

                                                                  In fact I see capitalism as a system where wages are naturally not correlated with productivity. I also think that money can’t really buy happiness so in overall, I don’t care a lot about it.

                                                                  1. 4

                                                                    Right - ‘Productivity’ is not an objective measure, because it’s easy to produce things nobody wants.

                                                                    Once upon a time, Capitalism solved that by moving decision-making power closer to the information - but wealth concentration has diluted that advantage to homeopathic levels.

                                                                    1. 3

                                                                      That’s a fair point! And I’m very likely wrong on that front, given more consideration! The rest of it still stands :)

                                                                      1. 1

                                                                        I don’t have any arguments against the rest of it, but:

                                                                        I also think that money can’t really buy happiness so in overall, I don’t care a lot about it.

                                                                        Fundamentally, for anything sub- 30-50k/mo, more money means significant quality of life improvements. Preliminary tests of UBI have shown massive health improvements in low wage populations. Money is the gatekeeper for medical care, for access to basic necessities, and recreational activity. It’s also the gatekeeper for changing jobs, changing your environment, and removing yourself from hostile and abusive scenarios that are damaging to your mental health.

                                                                        I think this idea of downplaying that “money can’t buy happiness” is foolish. Nobody has claimed that money is a direct line to happiness, however it’s the main, sometimes only, gatekeeper between us and the solutions to almost all of the material problems that plague pretty much everyone who isn’t earning around or above the aforementioned wage line.

                                                                        I know and have heard en-masse of people who have lost their entire lives to work, simply trying to get their children into a better financial situation, so they do not have to know that pain too. I know people in the south of the USA, describe how working constantly and not having time has become so ingrained into their culture that “not having time to see your kids” is an expression of love.

                                                                        I know people who have been forced to work for abusive managers, or been forced to live in abusive households, because the cost of moving themselves out of that scenario was ridiculously, ludicrously high, and because they are completely unable to obtain that money, because of their impacted mental health.

                                                                        I know people who have died from mental health and physical health problems because they were unable to afford treatment, or who end up living with lifelong injury because they do not have the time to see the doctor, or pay for better ones. And, just to contextualise that, I live in a country where healthcare is free – ideally there shouldn’t be a cost to that, but all of the best doctors

                                                                        I know extremely intelligent and smart people who can’t find the time to work on projects that would improve, in a small way, people’s lives, because they wouldn’t be able to make a living off it.

                                                                      2. 1

                                                                        Do you actually believe that stuff?

                                                                        1. 2

                                                                          I don’t need to believe it. Read the literature, it’s been very clearly shown.

                                                                          1. 0

                                                                            The question to be answered is: what is to be done with one’s labor. Capitalism answers that with “it’s to remain with the laborer.” There is no other answer that can be moral, not if one takes as True that people may possess.

                                                                            Quite clearly shown is clearly in the eye of the beholder.

                                                                            1. 6

                                                                              Capitalism’s answer is that labor should typically be rented out to the employer under employment contracts enforced by the state. That’s not exactly the same as “remaining with the laborer.” David Ellerman makes this point quite forcefully.

                                                                              1. 1

                                                                                It remains with the laborer because they get to see the results of their labor in the form of a paycheck which can be redeemed for others’ labor. Unlike other systems where your needs are taken care of regardless of your value.

                                                                                1. 3

                                                                                  It’s just that the employment contract specifies that everything produced and consumed by the work is the responsibility of the employer, not the employee—so as a coder, everything you make is appropriated by the company.

                                                                                  If you sold your whole future labor under such conditions it would rightly be considered a version of slavery. But in capitalism we rent labor, we don’t buy it.

                                                                              2. 5

                                                                                The question to be answered is: what is to be done with one’s labor. Capitalism answers that with “it’s to remain with the laborer.”

                                                                                and the laborer has no other choice than giving it away for the least amount of compensation the market allows? like a casino, the market always favours the capital. there may be some irregularity across the different occupations (tech jobs currently have it better than most), but as a whole, those who have the capital decide how much compensation you will get for your work force. and that will always (by definition of the market) the least amount possible to keep the system running.

                                                                                1. 1

                                                                                  and the laborer has no other choice than giving it away for the least amount of compensation the market allows?

                                                                                  The option always exists to assert the market would pay more, in which case additional compensation is granted, or to work in a different field, or to not work at all, so long as you yourself didn’t steal others’ labor. The capitalist system creates value out of thin air, because one thing the Marxists get right is the value added by a person is far more than their compensation.

                                                                                  1. 3

                                                                                    The option always exists to assert the market would pay more, in which case additional compensation is granted

                                                                                    i think that in certain sectors the “prices” for labour are being fixed by the capital at the lowest point possible, most commonly in sectors which don’t require much education. unions are at a point where they are more or less corrupt and are being bought. capitalism is excellent in defending itself :)

                                                                                    or to work in a different field, or to not work at all, so long as you yourself didn’t steal others’ labor.

                                                                                    i don’t really know what to reply to this? work as something which requires a medium amount of education (x years). so i can choose between not being payed enough for my job or saying “fuck it” and have a severely reduced income in the next y years while being retrained? that’s not really an option, just like “don’t work at all”.

                                                                                    1. 1

                                                                                      They are always options, and depending on the individual’s circumstances, they may be the right or wrong options. That’s all.

                                                                                      1. 4

                                                                                        They are always options, and depending on the individual’s circumstances, they may be the right or wrong options. That’s all.

                                                                                        i don’t see much of an option in the sense of “things one can choose between”. shitty payment or unemployment is most of the time a straight route to poverty which in turn leads to social and health problems leading to making it difficult being employed again. that some people can pull themselves out of this by their bootstraps doesn’t validate the “you only have to try hard enough” meme.

                                                                                        what is lost by making sure people are paid well? bezos n-th billion? what is gained? the possibility of having a non-cutthroat society where it’s members can focus on being social (note the similarity of “social” and “society”) instead of thinking of the best way to get the most money.

                                                                                    2. 2

                                                                                      or to work in a different field, or to not work at all

                                                                                      That isn’t really the case. Many people on low-income jobs, many skilled people forced to work such jobs, are unable to do that.

                                                                          2. 4

                                                                            I wasn’t implying that using and accumulating capital were instrinsically failure modes. My point was that many of our failure modes manifest in the process of using and accumulating capital. Similarly to the way that they manifest when writing software.

                                                                            1. 1

                                                                              The failure of humanity seems to be the desire for idleness.

                                                                              If anything, I’d put it completely the other way. It is the impossibility of being content, of merely sitting in an empty room doing anything but being with our thoughts (going as far as giving ourselves electric shocks instead of being idle), that pushes ourselves to do anything (be it watching kitten videos, or accumulate useless capital) to push the burden of sentience away.

                                                                              1. 1

                                                                                the impossibility of being content

                                                                                This is how people grow though. We poke and prod and learn. Doing nothing doesn’t necessarily require being content, but it does require that your time be useless to yourself and others. Some people really want to do nothing.

                                                                            2. 1

                                                                              At it’s crux the issue is human nature. Human nature has a number of failure modes. Those failure modes manifest in the use and accumulation of Capital

                                                                              Accumulation of capital is not a failure mode. It is life serving its purpose, which is replication of genes. You are in a better position to do that the more stuff you have.

                                                                              If you have financial independence, many people are just going to play video games. They are not gonna become a pianist or a painter. Garbage in, garbage out, as they say. Softwares just empower people to do what they want to do better. And what they want is to be forever distracted.

                                                                              1. 4

                                                                                You’re going in a decent direction but miss the larger point: evolution optimizes for the population to survive, not individuals. That individuals get rich in this system is almost entirely due to how the economic, financial, and legal systems are constructed. The system also makes unhealthy, imprisons, and/or kills large numbers of people for both random and non-object reasons. That usually works against evolutionary goals.

                                                                                There’s other systems where the population as a whole has their needs met, are healthier, get good education, and sometime more time off work for leisurely activities. In well-run socialism, these benefits of their system mean that both the average individual and the population as a whole are more likely to survive and pass on their genes.

                                                                                Note: One might also look at the infant mortality rate of each country for this assessment. That’s a bit, too dark a subject for me this early in my morning. Probably others, too. I’ll pass on it for now.

                                                                                1. 1

                                                                                  In well-run socialism,

                                                                                  In a well-run utopia, everything is perfect.

                                                                                  1. 3

                                                                                    Now, you’re just trolling. A number of existing countries have the benefits I describe that increase evolutionary survivability. No need to theorize or bring in utopias.

                                                                                    Even in theory, one should expect capitalism and free market might work against evolution because they work against individuals’ health. Companies and workers are always expected to do more for less overtime. That inevitably leads to more stress, less healthy ingredients in food, more toxins in environment, more dying from lack of healthcare, etc.

                                                                                    It’s by design. Good news is you can let evolution do its thing and capitalism do its thing. You can be a fan of both. They are seperate for now unless you mean it protects the survival of rich kids’ genes. That might be true but with who knows what consequences.

                                                                                    1. 3

                                                                                      well, the usa took care that the non dictatorial socialist experiments would fail :)

                                                                                    2. 1

                                                                                      Well-run socialism is an oxymoron, did you maybe mean to say “social democracy” instead of “socialism”? The former is a way to organise society which has been adopted in some way by most western democracies, including the US - Medicare and Medicaid are examples of social programs which have been voted into being through a democratic process. Socialism is the precursor to communism and has never been shown to lead to anything but societal decline and poverty, often in combination with a stratified society where those who do not support the state in all it does - for better or for worse - are denied basic rights.

                                                                                      Social democracy is not the same as socialism. The DDR and the Soviet Union were socialist states. The Netherlands, Denmark, Sweden, Norway and Finland (and many more) are social democracies.

                                                                                      1. 1

                                                                                        The Netherlands, Denmark, Sweden, Norway and Finland (and many more) are social democracies.

                                                                                        Yeah, that’s what I’m talking about. Three of those were even examples I was ready to give. They just call those socialist where I’m from. The ones you call socialist they call communist. Although I have memory problems, I’d probably still not be sure what term to use given the varying usages of socialist, left, right, etc in my country and outside it.

                                                                                        So, looking it up on Wikipedia, it starts with “Social democracy is a political, social and economic philosophy within socialism… “ The linked article on Socialism itself includes my usage of the term. Is Wikipedia inaccurate where the social democracies aren’t in socialism or socialism not having multiple forms which include above countries? If so, it might be worth editing those articles to include the source for that, too.

                                                                                        1. 2

                                                                                          Well, there is ‘wrong’ and ‘wrong’. Social democracy is an amalgamation of some of the tenets of socialism and those of a democratic society with a market economy. It is an end stage in and of itself - social democracies do not strive after abolishing the market economy - where socialism is a precursor to communism, the ‘dictatorship of the proletariat’ with a socialist party in control of the state. Venezuela is the most recent example of such a state that I know of.

                                                                                          Marx and Engels thought the workers would eventually revolt to get a more fair share of the value created by their labour. This is not what happened though, working conditions and rewards were improved in such a way that workers did not rise up in revolt. They voted ‘their’ candidates into power, organised in labour unions and got some of their demands met in this way. Some revolutionary socialists - Lenin being the best-known example - thought this was not enough and, disappointed by the refusal of the workers to revolt stated that the proletariat needed to be guided into the classless communist society through the dictatorship of the proletariat, i.e. a leading class of revolutionary socialists would take power by non-democratic means. It is at this point where socialism and social democracy parted ways around 100 years ago.

                                                                                1. 4

                                                                                  The camera kill switch is no better than some tape.

                                                                                  I guess I don’t understand this gripe. How could a camera kill switch ever be substantially better than some tape?

                                                                                  1. 6

                                                                                    Well it doesn’t leave glue traces on your lens, and when you remove the tape you have to store it somewhere if you want to use it again later, and the tape will eventually get dust on it and stop working. Assuming the kill switch is simple to use and can handle being toggled more than 10 times without breaking it seems like any camera kill switch would be better than some tape. I was confused by that gripe too. Your comment cracked me up, thanks.

                                                                                  1. 11

                                                                                    What kind of financial math doesn’t have to be accurate?

                                                                                    Some kind of estimation?

                                                                                    I’m try to figure out why this guy is fixated on using floating point. Also hope junior devs don’t read this.

                                                                                    1. 7

                                                                                      His argument is that you have to do corrections for accurate floating point, but you have to do corrections with fixed point and integers anyway if you’re dealing with taxes or percentages. So using floating point isn’t meaningfully worse.

                                                                                      As for why, isn’t it interesting to analyze conventional wisdom?

                                                                                      1. 7

                                                                                        As for why, isn’t it interesting to analyze conventional wisdom?

                                                                                        I’d prefer more rigor than

                                                                                        Let’s start by discussing how to get the “right” answer for financial calculations (I have not worked in banking, so please correct me if I get this wrong)

                                                                                        I am not a theoretician and have not proven that this is actually correct. Let me know if you find a counter-example.

                                                                                        If it is good enough for Excel, it will be good enough for most applications.

                                                                                        Compare this to Marc Jason Dominus’ discussion on the same topic (https://blog.plover.com/prog/Moonpig.html#fp-sucks):

                                                                                        […] with floats, it’s so hard to be sure that you won’t end up with a leftover 2e−64 or something, so you write all the tests to ignore small discrepancies. This can lead to overlooking certain real errors that happen to result in small discrepancies. With integer amounts, these discrepancies have nowhere to hide. It sometimes happened that we would write some test and the money amount at the end would be wrong by 2m¢. Had we been using floats, we might have shrugged and attributed this to incomprehensible roundoff error. But with integers, that is a difference of 2, and you cannot shrug it off. There is no incomprehensible roundoff error. All the calculations are exact, and if some integer is off by 2 it is for a reason.

                                                                                        1. 2

                                                                                          The point is that the difference between doubles and decimal types is mostly quantitative, not qualitative.

                                                                                          You still have (1 / 3) * 3 =/= 1 when you use decimals, and you still have (bignum + smallnum) - bignum = 0 when smallnum < 1 and bignum is large enough. There’s just a lot more precision to hide this, and there’s the fact that decimal numbers which are not very big can be represented exactly in a decimal data type.

                                                                                          1. 1

                                                                                            This blogpost by Marc Dominus is severely misguided (to say the least). It speaks of floating point numbers as if they were inevitably imprecise and carried a random, impossible to know error. This is not the case. Floating point numbers are exact rational numbers and their operations are completely deterministic, and quite sound (When the result of an operation between floating point numbers can be exact, it is. Otherwise, the error of the result is as small as possible, by definition). There is nothing “incomprehensible” in the way floating point numbers work. As he admits in the beginning of his discussion, he does not really understand floating point numbers nor their purpose, thus he prefers to avoid them. While this is a legitimate position, I do not find much value in following him or promoting his obscurantist proposals.

                                                                                            1. 4

                                                                                              To be fair, he’s writing in the context of designing software for financial applications. Which is what’s under discussion here too .And all that’s suggested is to use integers for currency, instead of FP or decimals.

                                                                                        2. 7

                                                                                          Actuarial models. I worked on one. Sadly, it used decimals instead of doubles (not my decision) which made the whole thing quite slow. Fluctuations of a couple percent were very acceptable in that model, so there was absolutely not need to use decimals.

                                                                                          1. 2

                                                                                            Yep. And not just actuarial models. Many financial valuation models are intended as approximations, and so in these cases decimals are unnecessary. And when many numbers are crunched, which happens in certain kinds of calculations, you can see a slowdown if you are using decimals.

                                                                                          2. 2

                                                                                            Pulling a Superman III?

                                                                                            1. 1

                                                                                              I give this to the junior devs as antidote: http://beza1e1.tuxen.de/no_real_numbers.html

                                                                                            1. 2

                                                                                              Sometimes I talk when I sleep, and according to my wife we had a funny conversation relating to this

                                                                                              Me: You can stop people from using encryption

                                                                                              Her: Why not?

                                                                                              Me: What are you going to do, make math illegal?

                                                                                              Her: Can’t I?

                                                                                              Me: Silly americans

                                                                                              In all seriousness, I’d wager that most SaaS companies are already in the backpockets of the US government. You really think that if the fed comes knocking for the keys, the companies won’t relinquish everything?

                                                                                              1. 4

                                                                                                I’d wager that most SaaS companies are already in the backpockets of the US government. You really think that if the fed comes knocking for the keys, the companies won’t relinquish everything?

                                                                                                If this were completely true, passing a new law wouldn’t be necessary.

                                                                                                1. 6

                                                                                                  It is necessary if you don’t want the extent of your intercept abilities to be introduced as evidence in a court of law.

                                                                                                  1. 5

                                                                                                    I know the FBI has dropped criminal cases from Tor hidden sites to avoid divulging this information. So that’s not too far beyond the realm of belief.

                                                                                              1. 1

                                                                                                No one has mentioned it yet but I’m a big fan of the Kinesis vertical keyboard.

                                                                                                1. 14

                                                                                                  Unhelpful article. Complains about gitflow, makes no real recommendations beyond “ask questions of your team”.

                                                                                                  1. 24

                                                                                                    The whole point of the article is to advocate spending significant time & effort on original thinking about what works for you and your group, and why - instead of copying a neatly-documented workflow you found on the internet.

                                                                                                    Given that, what other kind of recommendations could it possibly make?

                                                                                                    (nb: I have a preference but no strong opinions on the topic - deriving your own workflow is actually pretty expensive and you might want to spend those cycles elsewhere, but I’ve had good yield from the exercise in one team).

                                                                                                    1. 4

                                                                                                      encouraging your team to communicate is great! if that was the main point, then the article should have been titled “talk with your team” and been filled with techniques for better communication. but the article i read mainly complained about a git pattern that lots of people find useful.

                                                                                                      1. 4

                                                                                                        Why must every article critical of a topic take the paternal role of telling you what to do instead? Can’t you exercise the critical thinking yourself? There are likely hundreds of articles out there, some linked in this thread, about alternative version control workflows, and they’re not too hard to find. Flagged your reply series as “troll” because it adds nothing to the conversation except “the author didn’t write enough and so I didn’t like the article”.

                                                                                                        1. 4

                                                                                                          The point isn’t simply to communicate, the point is to critically think about the workflow. The blog post contains the author’s critical thoughts on the workflow, and encourages people to think critically about their own workflows. Asking questions of one’s team is really a means to that end rather than the end itself.

                                                                                                          1. 0

                                                                                                            Its easy to complain about something that’s causing you pain. Its harder and more useful to look for a better course of action that can alleviate the suffering. My problem with the article is that it complains alot about problems but talks very little about solutions.

                                                                                                            (The problems described are real, I’ve experienced them myself)

                                                                                                            1. 8

                                                                                                              While I generally agree with this, it is very important to see what is being criticised.

                                                                                                              git-flow is a heavy process that has to argue for its value at every corner. The “other option” is using unstructured branching and PRs to master.

                                                                                                              It’s a general problem that processes are argued for by pointing out the absence of a replacement. Some processes can be removed without replacement.

                                                                                                              1. 1

                                                                                                                I disagree strongly with the idea that GitHub-style pull requests should ever be considered the ‘default’ workflow with git.

                                                                                                                1. 1

                                                                                                                  I neither suggested one or mind which PR style you use.

                                                                                                                  1. 1

                                                                                                                    Well I extend that to all pull requests that aren’t git-pull-request. Sending patches is the default: it’s what git was designed around.

                                                                                                                  2. 1

                                                                                                                    What’s your thinking here? Or what are you advocating against? Can you point me towards any resources or your own thoughts on this?

                                                                                                                  3. 1

                                                                                                                    That’s a useful point, which would have been helpful if included in and expanded upon in the article. (Unless I missed it somehow?)

                                                                                                                    1. 4

                                                                                                                      On that level, I definitely agree with you.

                                                                                                                      But the article in the end does make a case for reflection and inspecting your process. I think it’s a bit much to ask for what is essentially an essay to cover all the corners.

                                                                                                          2. 2

                                                                                                            Please see my answer above for one very simple suggested workflow I’ve seen work well.

                                                                                                            I think you may be going too far by labeling this ’unhelpful” because there is in fact no one size fits all solution, and the author is right about that, but I agree it could certainly be more helpful by offering some potential starting points for a solution.

                                                                                                          1. 16

                                                                                                            One thing not considered: what if the cost of content marketing was raised? A ban on medium.com has been discussed before, and that site has become remarkably user-hostile.

                                                                                                            1. 11

                                                                                                              Full support of just banning medium.com or adding a “Medium.com” downvote flag

                                                                                                              1. 4

                                                                                                                Or at the very least adding a ‘medium.com’ tag that folks can use to exclude that garbage from showing on their front pages.

                                                                                                                1. 2

                                                                                                                  The ability to filter out specific domains would be a more general solution, I think.

                                                                                                              2. 7

                                                                                                                This has come up a bunch of times in this thread and the chat room today, almost always serious (I think). We can query the domain medium.com trivially, but not the aliases like, uh blog.loadmill.com. Would someone like to write a Ruby script to loop our domains table and detect them? (You don’t have to write a migration to store this in the database, let’s start with diagnosis.) I don’t know if they’ll all be CNAMEs, As, CloudFlare, or what, so there’s a bit of research to be done here. With such a script we could write queries to find out if Medium is typically the bad stuff and decide if we’d be better off with out it.

                                                                                                                1. 5

                                                                                                                  (not sure if a blanket ban on medium.com is good or bad, but that said:)

                                                                                                                  I couldn’t find any DNS fingerprints (no cname or txt records; a points to AWS). looks like medium blogs send a link: rel=humans HTTP header on all HTTPS pages, though:

                                                                                                                  ~ %  curl -sI https://blog.loadmill.com|grep humans
                                                                                                                  link: <https://medium.com/humans.txt>; rel="humans"
                                                                                                                  

                                                                                                                  here’s it as a oneliner applied to the query you’ve posted (it’s slow, mainly due to non-responding servers):

                                                                                                                  ~ % curl -s https://gist.githubusercontent.com/pushcx/4cd41b0a935ed11e110d5ee2df7b4428/raw/448aa84b1cd0b7f90d6000d99fc1dcdd34545d30/query.txt|grep '^|' |cut -f2 -d' '|while read domain; do curl -skIm10 https://$domain|grep -Fq medium.com/humans.txt && echo $domain; done
                                                                                                                  blog.grandstack.io
                                                                                                                  blog.learngoprogramming.com
                                                                                                                  blog.minio.io
                                                                                                                  notamonadtutorial.com
                                                                                                                  blog.getambassador.io
                                                                                                                  blog.softwaremill.com
                                                                                                                  blog.bitsrc.io
                                                                                                                  blog.0day.rocks
                                                                                                                  mondaynote.com
                                                                                                                  blog.esciencecenter.nl
                                                                                                                  itnext.io
                                                                                                                  blog.plan99.net
                                                                                                                  

                                                                                                                  They also 302-redirect through https://medium.com/m/global-identity?redirectUrl= (probably to track logged in users) when not issuing a HEAD request.


                                                                                                                  i do like the ‘exclude personal home pages from the majority domain ban’ idea.

                                                                                                                  1. 3

                                                                                                                    Thanks for finding a signal. I adapted this to check all 19k+ domains that have been submitted to Lobsters; here’s the list of the 193 hosted by Medium. (Caveat: they’re Medium now and may not have been years ago when the site was submitted, and vice-versa).

                                                                                                                    $ time (touch medium.txt; mysql lobsters -e "select domain from domains" | xargs -P 20 -i% bash -c "curl -skIm10 https://% | grep -Fq medium.com/humans.txt && echo % >> medium.txt")
                                                                                                                    
                                                                                                                    real    15m48.738s
                                                                                                                    user    7m30.633s
                                                                                                                    sys     2m38.201s
                                                                                                                    
                                                                                                                    1. 4

                                                                                                                      193 out of 19k+ domains doesn’t sound all that much to be honest. If banning only Medium would drop the amount of low quality content dramatically, then the few domains hosted by Medium does not sound like a large issue. If they are, one could discuss a solution for that at a later date.

                                                                                                                      Even if a ban on Medium is too aggressive, then a tag for Medium could be a solution. Even a tag that lowers the score like the meta tags for example. That would at least discourage blog spam through them as the visibility would be limited somewhat more.

                                                                                                                  2. 4

                                                                                                                    Previous objections have been of the form “medium.com is user-hostile”. My suggestion this time is of a stronger form: if X.com is employing marketers that are taking hostile actions against the community, then is banning X.com enough to make it unattractive to employ marketers?

                                                                                                                    I’m not sure if that’s true, and I guess my post was about 70/30 snark/serious. It might not be good for multi-tenanted domains to get the banhammer because one guy hired some marketroids.

                                                                                                                    I don’t know if I will have a chance to get to writing your diagnostic script, so I’m afraid I can’t promise it for you.

                                                                                                                1. 5

                                                                                                                  If Haskell is a niche language, then OCaml is a super-niche language

                                                                                                                  It has certain popularity in Javascript ecosystem because of Bucklescript, but mostly in the form of ReasonML. Not sure, however, if it’s just a (smallish) hype; and Bucklescript originated from the same fintech niche that uses “regular” Ocaml.

                                                                                                                  1. 6

                                                                                                                    I think it may be a little misleading to claim that OCaml is “more niche” than Haskell.

                                                                                                                    I think the userbase may be smaller but the industrial adoption appears to be higher. Facebook, Docker, Citrix are the big 3 who use OCaml throughout their systems. Most the Haskell use in industry that I have found by contrast tends to be one person wrote it into their small project. For Haskell, AT&T uses it for complaint management, NVDA uses it for some small tools. That’s not to say that Haskell isn’t used extensively in any business, but rather that of the major labels who do use haskell, it does not tend to be used for major projects. By contrast for OCaml the businesses who do use it, use it extensively.

                                                                                                                    1. 4

                                                                                                                      Well, Facebook Messenger is written in it. That project was sponsored by Facebook (which already had quite a few OCaml projects) rather than anything fintech AFAIR.

                                                                                                                      1. 1

                                                                                                                        I guess the reference is to Bloomberg’s involvement with Bucklescript.

                                                                                                                    1. 65

                                                                                                                      This site is claiming to offer a “standard for opting out of telemetry”, but that is something we we already have: Unless I actively opt into telemetry, I have opted out. If I run your software and it reports on my behavior to you without my explicit consent, your software is spyware.

                                                                                                                      1. 11

                                                                                                                        but that is something we we already have: Unless I actively opt into telemetry, I have opted out.

                                                                                                                        I know this comes up a lot, but I disagree with that stance. The vast majority of people leaves things on their defaults. The quality of information you get from opt-in telemetry is so much worse than from telemetry by default that it’s almost not worth it.

                                                                                                                        The only way I could see “opt-in” telemetry actually work is caching values locally for a while and then be so obnoxiously annoying about “voluntarily” sending the data that people will do it just to shut the program up about it.

                                                                                                                        1. 28

                                                                                                                          That comment acts like you deserve to have the data somehow? Why should you get telemetry data from all the people that don’t care about actively giving it to you?

                                                                                                                          1. 12

                                                                                                                            That comment acts like you deserve to have the data somehow?

                                                                                                                            I’ve got idiosyncratic views on what “deserving” is supposed to mean, but I’ll refrain from going into philosophy here.

                                                                                                                            Why should you get telemetry data from all the people that don’t care about actively giving it to you?

                                                                                                                            Because the data is better and more accurate. Better and more accurate data can be used to improve the program—which is something everyone will eventually benefit from. But if you skew the data towards the kinds of people who opt into telemetry.

                                                                                                                            Without any telemetry, you’ll instead either (a) get the developers’ gut instinct (which may fail to reflect real-world usage), or (b) the minority that opens bug tickets dictate the UI improvements instead, possibly mixed with (a). Just as hardly anyone (in the large scale of things) bothers with opting into telemetry, hardly anyone bothers opening bug tickets. Neither group may be representative of the silent majority that just wants to get things done.

                                                                                                                            Consider the following example for illustration of what I mean (it is a deliberate oversimplification, debate my points above, not the illustration):

                                                                                                                            Assume you have a command-line program that has 500 users. Assume you have telemetry. You see that a significant percentage of invocations involve the subcommand check, but no such command exists; most such invocations are immediately followed by the correct info command. Therefore, you decide to add an alias. Curiously, nobody has told you about this yet. However, once the alias is there, everyone is happier and more productive.

                                                                                                                            Had you not had telemetry, you would not have found out (or at least not found out as quickly, only when someone got disgruntled enough to open an issue). The “quirk” in the interface may have scared off potential users to alternatives, not actually giving your program a fair shot because of it.

                                                                                                                            1. 3

                                                                                                                              Bob really wants a new feature in a software he uses. Bob suggests it to developers, but they don’t care. As far as they can tell, Bob is the only one wanting it. Bob analyzes the telemetry-related communication and writes a simple script that imitates it.

                                                                                                                              Developers are concerned about privacy of their users and don’t store IP addresses (it’s less than useless to hash it), only making it easier for Bob to trick them. What appears as a slow growth of active users, and a common need for a certain feature, is really just Bob’s little fraud.

                                                                                                                              It’s possible to make this harder, but it takes effort. It takes extra effort to respect users’ privacy. Is developing a system to spy on the users really more worthy than developing the product itself?

                                                                                                                              You also (sort of) argued that opt-in telemetry is biased. That’s not exactly right, because telemetry is always biased. There are users with no Internet access, or at least an irregular one. And no, we don’t have to be talking about developing countries here. How do you know majority of your users aren’t medical professionals or lawyers whose computers are not connected to the Internet for security reasons? I suspect it might be more common than we think. Then on the other hand, there are users with multiple devices. What can appear as n different users can really just be one.

                                                                                                                              It sort of depends on you general philosophical view. You don’t have to develop a software for free, and if you do, it’s up to you to decide the terms and conditions and the level of participation you expect from your users. But if we talk about a free software, I think that telemetry, if any, should be completely voluntary on a per-request basis, with a detailed listing of all information that’s to be sent in both human- and machine- readable form (maybe compared to average), and either smart enough to prevent fraudulent behavior, or treated with a strong caution, because it may as well be just an utter garbage. Statistically speaking, it’s probably the case anyway.

                                                                                                                              I’m well aware that standing behind a big project, such as Firefox, is a huge responsibility and it would be really silly to advice developers to rather trust their guts instead of trying to collect at least some data. That’s why I also suggested how I imagine a decent telemetry. I believe users would be more than willing to participate if they saw, for example, that they used a certain feature above-average number of times, and that their vote could stop it from being removed. It’s also possible to secure per-request telemetry with a captcha (or something like that) to make it slightly more robust. If this came up once in a few months, “hey, dear users, we want to ask”, hardly anyone would complain. That’s how some software does it, after all.

                                                                                                                              1. 1

                                                                                                                                The fraud thing is an interesting theory, but I am unaware how likely it is; you’ve theorised a Bob who can generate fraudulent analytics but couldn’t fake an IP address or use multiple real IP addresses or implement the feature he actually wants.

                                                                                                                                1. 0

                                                                                                                                  It’s not that he couldn’t do it, it’s just much simpler without that. It’s really about the cost. It’s easy to curl, it’s more time consuming or expensive to use proxies, and even more so to solve captchas (or any other puzzles). The lower the cost, the higher the potential inaccuracy. And similarly, with higher cost, even legitimate users might be less willing to participate.

                                                                                                                                  I don’t have some universal solution or anything. It’s just something to consider. Sometimes it might be reasonable to put effort into making a robust telemetric system, sometimes none at all would be preferred. I’m trying to think of a case “in between”, but don’t see a single situation where jokingly-easy-to-fake results could be any good.

                                                                                                                              2. 2

                                                                                                                                Telemetry benefits companies, otherwise companies wouldn’t use it. Perhaps it can benefit users, if the product is improved as a result of telemetry. But it also harms users by compromising their privacy.

                                                                                                                                The question is whether the benefits to users outweigh the costs.

                                                                                                                                Opt-out telemetry-using companies obviously aren’t concerned about the costs to users, compared to the benefits they (the companies) glean from telemetry-by-default. They are placing their own interests first, ahead of their users. That’s why they resort to dark patterns like opt-out.

                                                                                                                            2. 13

                                                                                                                              You assume that we actually need telemetry to develop good software. I’m not so sure. We developed good software for decades without telemetry; why do we need it now?

                                                                                                                              When I hear the word “telemetry”, I’m reminded of an article by Joel Spolsky where he compared Sun’s attempts at developing a GUI toolkit for Java (as of 2002) to Star Trek aliens watching humans through a telescope. The article is long-winded, but search for “telescope” to find the relevant passage. It’s no coincidence that telemetry and telescope share the same prefix. With telemetry, we’re measuring our users’ behavior from a distance. There’s not a lot of signal there, and probably a lot of noise.

                                                                                                                              It helps if we can develop UsWare, not ThemWare. And I think this is why it’s important for software development teams to be diverse in every way. If our teams have people from diverse backgrounds, with diverse abilities and perspectives, then we don’t need telemetry to understand the mysterious behaviors of those mysterious people out there.

                                                                                                                              (Disclaimer: I work at Microsoft on the Windows team, and we do collect telemetry on a de-facto opt-out basis, but I’m posting my own opinion here.)

                                                                                                                              1. 5

                                                                                                                                we don’t need telemetry to understand the mysterious behaviors of those mysterious people out there

                                                                                                                                Telemetry usually is not about people’s behaviors, it’s about the mysterious environments the software runs in, the weird configurations and hardware combinations and outdated machines and so on.

                                                                                                                                Behavioral data should not be called telemetry.

                                                                                                                                1. 3

                                                                                                                                  One concrete benefit of telemetry: “How many people are using this deprecated feature? Should we delete it in this version or leave it in a while longer?”

                                                                                                                                  We developed good software for decades without telemetry; why do we need it now?

                                                                                                                                  Decades-old software is carrying decades-old cruft that we could probably delete, but we just don’t know for sure. And we all pay the complexity costs one paper cut at a time.

                                                                                                                                  I’m as opposed to surveillance as anybody else in this forum. But there’s a steelman question here.

                                                                                                                                2. 14

                                                                                                                                  The quality of information you get from opt-in telemetry is so much worse than from telemetry by default that it’s almost not worth it.

                                                                                                                                  A social scientist could likewise say: “The quality of information you get from observing humans in a lab is so much worse than when you plant video cameras in their home without them knowing.”

                                                                                                                                  How is this an argument that it’s ok?

                                                                                                                                  1. 1

                                                                                                                                    There are three differences as far as I can tell:

                                                                                                                                    The data from a hidden camera is not anonymizable. Telemetry, if done correctly (anonymization of data as much as possible, no persistent identifiers, transparency as to what data is and has been sent in the past), cannot be linked to a natural person or an indvidual handle. Therefore, I see no harm to the individual caused by telemetry implemented in accordance with best data protection practices.

                                                                                                                                    Furthermore, the data from the hidden camera cannot cause corrective action. The scientist can publish a paper, maybe it’ll even have revolutionary insight, but can take no direct action. The net benefit is therefore slower to be achieved and very commonly much less than the immediate, corrective action that a software developer can take for their own software.

                                                                                                                                    Finally, it is (currently?) unreasonable to expect a hidden camera in your own home, but there is an increased amount of awareness of the public that telemetry exists and settings should be inspected if this poses a problem. People who do care to opt out will try to find out how to opt out.

                                                                                                                                    1. 2

                                                                                                                                      Finally, it is (currently?) unreasonable to expect a hidden camera in your own home, but there is an increased amount of awareness of the public that telemetry exists and settings should be inspected if this poses a problem. People who do care to opt out will try to find out how to opt out.

                                                                                                                                      I think this is rather deceptive. Basically it’s saying: “we know people would object to this, but if we slowly and covertly add it everywhere we can eventually say that we’re doing it because everyone is doing it and you’ve just got to deal with it”.

                                                                                                                                      1. 1

                                                                                                                                        I still disagree but I upvoted your post for clearly laying out your argument in a reasonable way.

                                                                                                                                    2. 3

                                                                                                                                      You seem to miss a very easy, obvious, opt-in only strategy that worked for the longest time without feeling like your software was that creepy uncle in the corner undressing everyone. As you pointed out everyone keeps the defaults, you know what else most normies do? Click next until they can start their software. So you add a dialog in that first run dialog that is supposed to be there to help the users and it has a simple “Hey we use telemetry to improve our software (here is where you can see your data)[https://yoursoftware.com/data] and our (privacy policy)[https://yoursoftware.com/privacy]. By checking this box you agree to telemetry and data collection as outlined in our (data collection policy)[https://yoursoftware.com/data_collection] [X]”

                                                                                                                                      and boom you satisfy both conditions, the one where people don’t go out of their way to opt into data collection and the other where you’re not the creepy uncle in the corner undressing everyone.

                                                                                                                                    3. 4

                                                                                                                                      You can also view this as an standardized way for opt-in, which isn’t currently available either.

                                                                                                                                      1. 3

                                                                                                                                        No, it is not. It is a standardized way for opt-out.

                                                                                                                                      2. 3

                                                                                                                                        This is a bad comment, because it doesn’t add anything except for “I think non-consensual tracking is bad”, and is only tangentially related to OP insofar as OP is used as a soapbox for the above sentiment. Therefor I have flagged the comment as “Me-too”, regardless however much I may agree with it.

                                                                                                                                        1. 23

                                                                                                                                          Except that in the European Union, the GDPR requires opt-in in most cases. IANAL, but I think it applies to the analytics that Homebrew collects as well. From the Homebrew website:

                                                                                                                                          A Homebrew analytics user ID, e.g. 1BAB65CC-FE7F-4D8C-AB45-B7DB5A6BA9CB. This is generated by uuidgen and stored in the repository-specific Git configuration variable homebrew.analyticsuuid within $(brew –repository)/.git/config.

                                                                                                                                          https://docs.brew.sh/Analytics

                                                                                                                                          From the GDPR:

                                                                                                                                          The data subjects are identifiable if they can be directly or indirectly identified, especially by reference to an identifier such as a name, an identification number, location data, an online identifier or one of several special characteristics, which expresses the physical, physiological, genetic, mental, commercial, cultural or social identity of these natural persons.

                                                                                                                                          I am pretty sure that this UUID falls under identification number or online identifier. Personally identifyable information may not be collected without consent:

                                                                                                                                          Consent should be given by a clear affirmative act establishing a freely given, specific, informed and unambiguous indication of the data subject’s agreement to the processing of personal data relating to him or her, such as by a written statement, including by electronic means, or an oral statement.

                                                                                                                                          So, I am pretty sure that Homebrew is violating the GDPR and EU citizens can file a complaint. They can collect the data, but then they should have an explicit step during the installation and the default should (e.g. user hits RETURN) be to disable analytics.

                                                                                                                                          The other interesting implication is that (if this is indeed collection of personal information under the GDPR) is that any user can ask Homebrew which data they collected and/or to remove the data. To which they should comply.

                                                                                                                                          1. 3

                                                                                                                                            The data subjects are identifiable if they can be directly or indirectly identified, especially by […]

                                                                                                                                            As far as I can tell, you’re not actually citing the GDPR (CELEX 32016R0679), but rather a website that tries to make it more understandable.

                                                                                                                                            GDPR article 1(1):

                                                                                                                                            This Regulation lays down rules relating to the protection of natural persons with regard to the processing of personal data and rules relating to the free movement of personal data.

                                                                                                                                            GDPR article 4(1) defines personal data (emphasis mine):

                                                                                                                                            ‘personal data’ means any information relating to an identified or identifiable natural person (‘data subject’); an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person;


                                                                                                                                            Thus it does not apply to data about people that are netiher identified nor identifiable. An opaque identifier like 1BAB65CC-FE7F-4D8C-AB45-B7DB5A6BA9CB is not per se identifiable, but as per recital 26, determining whether a person is identifiable should take into account all means reasonably likely to be used, such as singling out, suggesting that “identifiable” in article 4(1) needs to be interpreted in a very practical sense. Recitals are not technically legally binding, but are commonly referred to for interpretation of the main text.

                                                                                                                                            Additionally, if IP addresses are stored along with the identifier (e.g. in logs), it’s game over in any case; even before GDPR, IP addresses (including dynamically assigned ones) were ruled by the ECJ to be personal data in Breyer v. Germany (ECLI:EU:C:2016:779 case no. C-582/14).

                                                                                                                                            1. 9

                                                                                                                                              Sorry for the short answer in my other comment. I was on my phone.

                                                                                                                                              Thus it does not apply to data about people that are netiher identified nor identifiable. An opaque identifier like 1BAB65CC-FE7F-4D8C-AB45-B7DB5A6BA9CB is not per se identifiable,

                                                                                                                                              The EC thinks differently:

                                                                                                                                              Examples of personal data

                                                                                                                                              a cookie ID;

                                                                                                                                              the advertising identifier of your phone;*

                                                                                                                                              https://ec.europa.eu/info/law/law-topic/data-protection/reform/what-personal-data_en

                                                                                                                                              It seems to me that an UUID is similar to cookie ID or advertising identifier. Using the identifier, it would also be trivially possible to link data. They use Google Analytics. Google could in principle cross-reference some application installs with Google searches and time frames. Based on the UUID they could then see all other applications that you have installed. Of course, Google does not do this, but this thought experimentat shows that such identifiers are not really anonymous (as pointed out in the working party opinion of 2014, linked on the EC page above).

                                                                                                                                              Again, IANAL, but it would probably be ok to reporting installs without any identifier linking the installations. They could also easily do this, make it opt-in, report all people who didn’t opt in using a single identifier, generate a random identifier for people who opt-in.

                                                                                                                                              1. 4

                                                                                                                                                They locked the PR talking about it and accused me of implying a legal threat for bringing it up. The maintainer who locked the thread seems really defensive about analytics.

                                                                                                                                                1. 3

                                                                                                                                                  Once you pop, you can’t stop.

                                                                                                                                                  I, too, thought that your pointing out their EU-illegal activity was distinct from a legal threat (presumably you are not a prosecutor), and that they were super lame for both mischaracterizing your statement and freaking out like that.

                                                                                                                                                  1. 3

                                                                                                                                                    The maintainer who locked the thread seems really defensive about analytics.

                                                                                                                                                    It seems this is just a general trait. See e.g. this

                                                                                                                                                  2. 1

                                                                                                                                                    Now I really wish I had an ECJ decision to cite because at this point it’s an issue of interpretation. What is an advertising identifier in the sense that the EC understood it when they wrote that page—Is it persistent and can it be correlated with some other data to identify a person? Did they take into account web server logs when noting down the cookie ID?

                                                                                                                                                    Interesting legal questions, but unfortunately nothing I have a clear answer to.

                                                                                                                                                  3. 1

                                                                                                                                                    Please cite the rest of paragraph 4, definitions:

                                                                                                                                                    ‘personal data’ means any information relating to an identified or identifiable natural person (‘data subject’); an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person;

                                                                                                                                                    https://eur-lex.europa.eu/legal-content/en/TXT/?uri=CELEX%3A32016R0679

                                                                                                                                                    Which was what I quoted.

                                                                                                                                                    1. 1

                                                                                                                                                      Your comment makes the following quotations:

                                                                                                                                                      The data subjects are identifiable if they can be directly or indirectly identified, especially by reference to an identifier such as a name, an identification number, location data, an online identifier or one of several special characteristics, which expresses the physical, physiological, genetic, mental, commercial, cultural or social identity of these natural persons.

                                                                                                                                                      Please ^F this entire string in the GDPR. I fail to find it as-is. They only start matching up in the latter half starting at “an identifier” and ending with “social identity”.

                                                                                                                                                      (1) ‘personal data’ means any information relating to an identified or identifiable natural person (‘data subject’); an identifiable natural person is one who can be identified, directly or indirectly, in particular by reference to an identifier such as a name, an identification number, location data, an online identifier or to one or more factors specific to the physical, physiological, genetic, mental, economic, cultural or social identity of that natural person;

                                                                                                                                                      I agree it’s pedantic of me, but it’s not a 1:1 quote from the GDPR if a sentence is modified, no matter how small.


                                                                                                                                                      I’ve edited in the second half in any case though. I do not, however, see any way that modification would invalidate any of the points I’ve made there, however.

                                                                                                                                                  4. 2

                                                                                                                                                    If that is true, consider submitting a PR, because GDPR violations are serious business.

                                                                                                                                                    1. 3

                                                                                                                                                      Or don’t submit a PR. As the project has stated:

                                                                                                                                                      Do not open new threads on this topic.

                                                                                                                                                      People have been banned from the project for doing exactly this.

                                                                                                                                                      1. 7

                                                                                                                                                        “We don’t want to hear complaints” is not a new stance for Homebrew.

                                                                                                                                                        1. 2

                                                                                                                                                          Yeah, I got the impression that they are pretty hardline on this. I hope that they’ll reconsider before someone files a GDPR complaint.

                                                                                                                                                          Personally, I don’t really have a stake in this anymore, since I barely use my Mac.

                                                                                                                                                          I guess a more creative solution would be to fork the main repo and disable the analytics code and point people to that.

                                                                                                                                                          Edit: the linked PR is from before the GDPR though.

                                                                                                                                                      2. 1

                                                                                                                                                        But the above user didn’t post that did they? Your comment was meaningful and useful, but theirs was just sentimental. A law violation is a law violation, but OP just posted their own feelings about what they think is spyware and didn’t say anything about GDPR.

                                                                                                                                                      3. 4

                                                                                                                                                        hmm I disagree, the OP is claiming that we should have a unified standard for “Do_Not_Track”. Finn is arguing that we shouldn’t need such a standard because unless I specifically state that I would like to be tracked, I should not be tracked and that any attempts to track is a violation of consent. Finn here is specifically disagreeing with the website in question. Should we organize against attempts to track without explicit consent, or give a unified way to opt out. These are fundamentally different questions and are actually directly related. If I say everyone should be allowed into any yard unless they have a private property sign, that may cause real concern for people who feel that any yard shouldn’t permit trespassing unless they have explicit permission. They are different concerns, that are related, and are more nuanced than “thing is bad”.

                                                                                                                                                      4. 1

                                                                                                                                                        Okay. By your (non-accepted) definition, spyware abounds and is in common use.

                                                                                                                                                        Simply calling it “spyware” and throwing up your hands doesn’t work. They have knobs to turn the spying off, to opt-out. I just want all those knobs to have the same label.

                                                                                                                                                      1. 18

                                                                                                                                                        Further to this point. Strive to design your data structures so that ideally there is only one way to represent each value. That means for example NOT storing your datetimes as strings. This will imply that your parsing step also has a normalization step. In fact storing anything important as a string is a code smell.

                                                                                                                                                        1. 10

                                                                                                                                                          A person’s name should be stored as a string. City names. Stock symbols. Lots of things are best stored as strings.

                                                                                                                                                          1. 4

                                                                                                                                                            Should stock symbols contain emojis or newlines, or be 100 characters long? Probably not. I assume there are standards for what a stock symbol can be. If you have a StockSymbol type constructed by a parser that disallows these things, you can catch errors earlier. Of course then the question is what do you do when the validation fails, but it does force a decision about what to do when you get garbage, and once you have a StockSymbol you can render it in the UI with confidence that it will fit.

                                                                                                                                                            1. 3

                                                                                                                                                              Names of things are best stored as strings, yes.

                                                                                                                                                              1. 1

                                                                                                                                                                What I recommend though is to encode them in their own named string types, to prevent using the strings in ways that they are not meant to be used. We often use that to encode ID references to things which should be mostly “opaque BLOBs”.

                                                                                                                                                            2. 3

                                                                                                                                                              Interesting. If you don’t mind, I’d like to poke at that a bit.

                                                                                                                                                              Why should you care what anything is stored as? In fact, why should you expect the rest of the universe, including the persistence mechanism, to maintain anything at all about your particular type system for your application?

                                                                                                                                                              1. 8

                                                                                                                                                                They can maintain it in their own type system. The issue is information loss. A string can contain nearly anything and thus I know nearly nothing about it and must bear a heavy burden learning (parsing or validating). A datetime object can contain many fewer things and thus I know quite a lot about it lowering the relearning burden.

                                                                                                                                                                You can also build and maintain “tight” connections between systems where information is not lost. This requires owning and controlling both ends. But generally these tight connections are hard to maintain because you need some system which validates the logic of the connection and lives “above” each system being connected.

                                                                                                                                                                Some people use a typed language with code generation, for instance.

                                                                                                                                                                1. 3

                                                                                                                                                                  @zxtx told the reader trying to leverage type systems to design their own program a certain way that derives more benefit from type systems. The rest of the universe can still do their own thing.

                                                                                                                                                                  I’m not sure the string recommendation is correct. There’s several languages that are heavily based on strings powering all kinds of things out there successfully. I’ve also seen formally-verified implementations of string functionality. zxtx’s advice does sound like a good default.

                                                                                                                                                                  We probably should have, in addition to it, verified libraries for strings and common conversions. Then, contracts and/or types to ensure calling code uses them correctly. Then, developers can use either option safely.

                                                                                                                                                                  1. 3

                                                                                                                                                                    Sure some things inevitably have to be strings: personal names, addresses, song titles. But if you are doing part-of-speech tagging or word tokenization, an enumerative type is a way better choice than string. As a fairly active awk user I definitely sympathize with the power of string-y languages, but I think people new to typed languages overuse rather than underuse strings.

                                                                                                                                                                    1. 2

                                                                                                                                                                      Unfortunately, even folks who have used typed languages for years (or decades) still overuse strings. I’m guilty of this.

                                                                                                                                                                  2. 3

                                                                                                                                                                    I admit to going back and forth on this subject….

                                                                                                                                                                    As soon as you store a person name as a PersonName object…… it’s no longer a POD and you’re constricted to a tiny tiny subset of operations on it…. (With the usual backdoor of providing a toString method)

                                                                                                                                                                    On the other hand Bjarne Stoustrup’s assertion that if you have a class invariant to enforce… that’s the job of an object / type.

                                                                                                                                                                    Rich Hickey the clojure guy has an interesting talk exactly on this subject with an interesting different take….

                                                                                                                                                                    Instead of hiding the data in a type with an utter poverty of operators, leave everything as a pod of complex structure which can be validated and specified checked and asserted on using a clojure spec.

                                                                                                                                                                    ie. If you want something with a specific shape, you have the spec to rely on, if you want to treat it as ye olde list or array of string….. go ahead.

                                                                                                                                                                    1. 12

                                                                                                                                                                      I stuck to simple examples of the technique in my blog post to be as accessible as possible and to communicate the ideas in the purest possible way, but there are many slightly more advanced techniques that allow you to do the kind of thing you’re describing, but with static (rather than dynamic) guarantees. For some examples, I’d highly recommend taking a look at the Ghosts of Departed Proofs paper cited in the conclusion, since it addresses many of your concerns.

                                                                                                                                                                      1. 1

                                                                                                                                                                        Ok. That took me awhile to digest…. but was worth it. Thanks.

                                                                                                                                                                        For C++/D speakers it’s worth looking at this first to get the idea of phantom types…

                                                                                                                                                                        https://blog.demofox.org/2015/02/05/getting-strongly-typed-typedefs-using-phantom-types/

                                                                                                                                                                      2. 5

                                                                                                                                                                        As someone who worked professionally with both Clojure (before spec but with Prismatic Schema) and OCaml and I have to say I utterly prefer to encode invariants in a custom type with only a few operations instead of the Clojure way of having everything in a hashmap with some kind of structure (hopefully) and lots of operations which operate on them.

                                                                                                                                                                        My main issue writing Clojure was that I did apply some of these (really useful and versatile) functions on my data, but the data didn’t really match what I had expected so the results were somewhat surprising in edge cases and I had to spend a lot of brain time to figure out what was wrong and how and where that wrong data came to be.

                                                                                                                                                                        In OCaml I rarely have the problem and if I want to use common functions, I can base my data structures on existing data structures that provide the functions I want to over the types I need, so in practice not being able to use e.g. merge-with on any two pieces of data is not that painful. For some boilerplate, deriving provides an acceptable compromise between verbosity and safety.

                                                                                                                                                                        I can in theory do a similar thing in Clojure as well, but then I would need to add validation basically everywhere which makes everything rather verbose.

                                                                                                                                                                        1. 3

                                                                                                                                                                          I’ve used Clojure for 8 years or so, and have recently been very happy with Kotlin, which supports sealed types that you can case-match on, and with very little boilerplate—but also embraces immutability, like Clojure.

                                                                                                                                                                          With Clojure, I really miss static analysis, and it’s a tough tradeoff with the lovely parts (such as the extremely short development cycle time.)

                                                                                                                                                                        2. 3

                                                                                                                                                                          The ability to “taint” existing types is the answer we need for this. Not a decorator / facade sort of thing, just a taint/blessing that exists only within the type system, with a specific gatekeeper being where the validation is done and the taint removed/blessing applied.

                                                                                                                                                                          1. 3

                                                                                                                                                                            In Go, wrapping a string in a new type is zero-overhead, and you can cast it back easily. So it’s mostly just a speedbump to make sure that if you do something unsafe, you’re doing it on purpose and it will be seen in code review. If the type doesn’t have very many operators, you might have more type casts that need to be checked for safety, but it’s usually pretty easy to add a method.

                                                                                                                                                                            On the other hand, the Go designers decided not to validate the string type, instead accepting arbitrary binary data with it only being convention that it’s usually UTF8. This bothers some people. But where it’s important, you could still do Unicode validation and create a new type if you want, and at that point there’s probably other validation you should be doing too.

                                                                                                                                                                            1. 1

                                                                                                                                                                              The last one is the best.

                                                                                                                                                                              Instead of scaling out code, we should be scaling out tests. We’re doing it backwards.

                                                                                                                                                                              I’ve been meaning to put together a conference proposal on this but haven’t gotten around to it. It’s the kind of thing that blows people’s minds.

                                                                                                                                                                              1. 1

                                                                                                                                                                                Can you expand a little on this? Sounds interesting.

                                                                                                                                                                                1. 4

                                                                                                                                                                                  People don’t understand what tests do. If you ask them, they might say they help your code be less buggy, or they show your business customers that your program does what they’re paying for.

                                                                                                                                                                                  That’s all true, but horribly incomplete. Tests resolve language.

                                                                                                                                                                                  That is, whether it’s science, programming, running a business, or any of hundreds of other areas where human language intersects science, tests are the only tools for determining what’s true or not in unambiguous terms. Come up with some super cool new way of making a superconductor? Great! Let’s have somebody go out and make it on their own, perform a test. If the test passes, you’re on to something. Yay! If the tests fails? Either you’re mistaken or the language and terms you’re using to describe your new process has holes the reproducer was unable to resolve. Either way, that’s important information. It’s also information you wouldn’t have gained otherwise without a test.

                                                                                                                                                                                  In coding, as I mentioned above, we have two levels of tests. The unit level, which asks “Is this code working the way I expected it to?” and the acceptance level, which asks “Is the program overall performing as it should?” (I understand the testing pyramid, I am simplifying for purposes of making a terse point). But there are all sorts of other activities we do in which the tests are not visible. Once the app is deployed, does it make a profit? Is your team working the best way it can? Are you building this app the best way you should? Are you wasting time on non-critical activities? Will this work with other, unknown apps in the future? And so on.

                                                                                                                                                                                  We’ve quantitized some of this with things like integration testing (which only works with existing apps). Frankly, we’ve made up other stuff out of whole cloth, just so we can have a test, something to measure. In most all cases, when we make stuff up we end up actually increasing friction and decreasing productivity, just the opposite of what we want.

                                                                                                                                                                                  So how do we know if we’re doing the best job we can? Only through tests, whether hidden or visible. How are we doing at creating tests? I’d argue pretty sucky. How can we do tests better? More to the point, if we do tests correctly, doesn’t it make whatever language, platform, or technology we use a seconary-effect as opposed to a primary one? We spend so much time and effort talking about tools in this biz when nobody can agree on whether we’re doing the work right. I submit that this happens because we’re focusing far, far too much on our reactions to the problem than the problems themselves. If we can create and deploy tests in a comprehensive and tech-independent manner, we can then truly begin discussing how to take this work to the next level. Either that or we’re going to spend the next 50 years talking about various versions of hammers instead of how to build safe, affordable, and desirable houses, which is what we should be doing.

                                                                                                                                                                                  There’s a lot missing in my reply, but once we accept that our test game sucks? Then a larger and better conversation can happen.

                                                                                                                                                                                  1. 1

                                                                                                                                                                                    It will take me some time to digest this properly… it’s a completely different angle to which I usually approach the matter. (I’m not saying you’re wrong, I’m just saying you coming at it from such a different angle I’m going to have to step back and contemplate.)

                                                                                                                                                                                    To understand where I’m coming from let me add…

                                                                                                                                                                                    I regard tests as a lazy pragmatic “good enough” alternative to program proving.

                                                                                                                                                                                    If we were excellent mathematicians, we would prove our programs were correct exactly the way mathematicians prove theorems.

                                                                                                                                                                                    Except we have a massive shortage of that grade of mathematicians, so what can we do?

                                                                                                                                                                                    Design by Contract and testing.

                                                                                                                                                                                    DbC takes the raw concepts of program proving (pre-conditions and post conditions and invariants) and then we use the tests to setup the preconditions.

                                                                                                                                                                                    Writing complete accurate postconditions is hard, about as hard as writing the software, so we have a “useful subset” of postconditions for particular instance of the inputs.

                                                                                                                                                                                    Crude, very crude, but fairly effective in practice.

                                                                                                                                                                                    My other view of unit tests is closer to yours…

                                                                                                                                                                                    They are our executable documentation (proven correct and current) of how to use our software and what it does. So a design principle for tests is they should be Good, Readable understandable documentation.

                                                                                                                                                                                    Now I will shutup and contemplate for a day or two.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      We are saying the same thing. Heck we might even be agreeing. We’re just starting from completely opposite sides of the problem. Formally validating a program proves that it matches the specification. In this case the formal specification is the test.

                                                                                                                                                                                      I think when I mention tests you may be thinking of testing as it was done in the IT industry, either manual or automated. But I mean the term in the generic sense. We all test, all the time.

                                                                                                                                                                                      What I realized was that you can’t write a line of code without a test. The vast majority of times that test is in your head. Works for me. You say to yourself “How am I going to do X?” then you write some code in. You look at the code. It appears to do X. Life is good.

                                                                                                                                                                                      So you never get away from tests. The only real questions are what kinds of tests, where do they live, who creates them, and so forth. I’m not providing any answers to these questions. My point is that once you realize you don’t create structure without some kind of tests somewhere, even if only in your head, you start wondering exactly which tests are being used to create which things.

                                                                                                                                                                                      My thesis is that if we were as good at creating tests as we were at creating code, the coding wouldn’t matter. Once again, just like I don’t care whether you’re an OCAML person or a Javascript person, for purposes of this comment I don’t care if your tests are based on a conversation at a local bar or written in stone. That’s not the important part. The thing is that in various situations, all of these things we talk about doing with code, we should be doing with tests. If the tests are going to run anyway, and the tests have to pass for the project to be complete or problem solved, then it’s far more important to talk about the meaning of a successful completion to the project or a solution to the problem than it is to talk about how to get there.

                                                                                                                                                                                      Let’s picture two programmers. Both of them have to create the world’s first accounting program. Programmer A sits down with his tool of choice and begins slinging out code. Surely enough, in a short time voila! People are happy. Programmer B spends the same amount of time creating tests that describe a successful solution to the problem. He has nothing to show for it.

                                                                                                                                                                                      But now let’s move to the next day. Programmer A is just now beginning to learn about all of the things he missed when he was solving the problem. He’s learning that for a variety of reasons, many of which involve the fact that we don’t understand something until we attempt to codify it. He begins fixing stuff. Programmer B, on the other hand, does nothing. He can code or he can hire a thousand programmers. The tech details do not matter.

                                                                                                                                                                                      Programmer B, of course, will learn too, but he will learn by changing his tests. Programmer A will learn inside his own head. From there he has a mental test. He writes code. It is fixed. Hopefully. Programmer A keeps adjusting his internal mental model, then making his code fit the model, until the tests pass, ie nobody complains. Programmer B keeps adjusting an external model, doing the same thing.

                                                                                                                                                                                      Which of these scale when we hire more coders? Which are these are programs the programmer can walk away from? Formal verification shows that the model meets the spec. What I’m talking about is how the spec is created, the human process. That involves managing tests, in your head, on paper, in code, wherever. The point here is that if you do a better, quicker job of firming the language up into a spec, the tech stuff downstream from that becomes less of an issue. In fact, now we can start asking and answering questions about which coding technologies might or might not be good for various chores.

                                                                                                                                                                                      I probably did a poor job of that. Sorry. There’s a reason various programming technologies are better or worse at various tasks. Without the clarification tests provide, discussions on their relative merits lack a common system of understanding.

                                                                                                                                                                                  2. 1

                                                                                                                                                                                    ADD: I’ll add that most all of the conversations we’re having around tech tools are actually conversations we should be having about tests: can they scale, can they run anywhere, can they be deployed in modules, can we easily create and consume stand-alone units, are they easy-to-use, does it do only what it’s supposed to do and nothing else, is it really needed, is it difficult to make mistakes, and so on. Testing strikes me as being in the same place today as coding was in the early-to-mid 80s when OO first started becoming popular. We’re just not beginning to think about the right questions, but nowhere near coming up with answers.

                                                                                                                                                                                    1. 1

                                                                                                                                                                                      Hmm… In some ways we hit “Peak Testing” a few years back when we had superb team of manual testers, well trained, excellent processes, excellent documentation.

                                                                                                                                                                                      If you got a bug report it had all the details you needed to reproduce it, configs, what the behaviour that was expected, what was the behaviour found, everything. You just sat down and started fixing.

                                                                                                                                                                                      Then test automation became The Big Thing and we hit something of a Nadir in test evolution which we are slowly climbing out of…

                                                                                                                                                                                      This is how it was in the darkest of days…

                                                                                                                                                                                      “There’s a bug in your software.”

                                                                                                                                                                                      Ok, fine, I’ll fix how do I reproduce…..

                                                                                                                                                                                      “It killed everything on the racks, you’ll have to visit each device and manually rollback.”

                                                                                                                                                                                      (Shit) Ok, so what is the bug?

                                                                                                                                                                                      “A test on Jenkins failed.”

                                                                                                                                                                                      Ok, can I have a link please?

                                                                                                                                                                                      “Follow from the dashboard”

                                                                                                                                                                                      What is this test trying to test exactly?

                                                                                                                                                                                      “Don’t know, somebody sometime ago thought it a good idea”.

                                                                                                                                                                                      Umm, how do I reproduce this?

                                                                                                                                                                                      “You need a rack room full of equipment, a couple of cloud servers and several gigabytes of python modules mostly unrelated to anything”.

                                                                                                                                                                                      I see. Can I have a debug connector to the failing device.

                                                                                                                                                                                      “No.”

                                                                                                                                                                                      Oh dear. Anyway, I can’t seem to reproduce it… how often does it occur?

                                                                                                                                                                                      “Oh we run a random button pusher all weekend and it fails once.”

                                                                                                                                                                                      Umm, what was it doing when it failed?

                                                                                                                                                                                      “Here is a several gigabyte log file.”

                                                                                                                                                                                      Hmm. Wait a bit, if I my close reading of these logs are correct, the previous test case killed it, and the only the next test case noticed…. I’ve been looking at the wrong test case and logs for days.

                                                                                                                                                                              2. 1

                                                                                                                                                                                Because throughout your program you will need to do comparisons or equality checks and if you aren’t normalizing, that normalization needs to happen at every point you do some comparison or equality check. Inevitably, you will forget to do this normalization and hard to debug errors will get introduced into the codebase.

                                                                                                                                                                                1. 1

                                                                                                                                                                                  Ok. Thank you. I figured out what my hang up was. You first say “Strive to design your data structures so that ideally there is only one way to represent each value.” which I was completely agreeing with. Then you said “In fact storing anything important as a string is a code smell” which made me do a WTF. The assumption here is that you have one and only one persistent data structure for any type of data. In a pure functional environment, what I do with a customer list in one situation might be completely different from what I would do with it in another, and I associate any constraints I would put on the type to be much more related to what I want to do with the data than to my internal model of how the data would be used everywhere. I really don’t have a model of how the universe operates with “customer”. Seen too many different customer classes in the same problem domain written in all kinds of ways. What I want is a parsed, strongly-typed customer class right now to do this one thing.

                                                                                                                                                                                  See JohnCarter’s comment above. It’s a thorny problem and there are many ways of looking at it.

                                                                                                                                                                                  1. 1

                                                                                                                                                                                    I think ideally you still do want a single source of truth. If you have multiple data structures storing customer data you have to keep them synced up somehow. But these single sources of data are cumbersome to work with. I think in practice the way this manifests in my code is that I will have multiple data structures for the same data, but total functions between them.

                                                                                                                                                                                    1. 2

                                                                                                                                                                                      Worked with a guy once where we were going to make a domain model for an agency. “No problem!” he said, “They’ve made a master domain model for everything!”

                                                                                                                                                                                      This was an unmitigated disaster. The reason was that it was confusing a people process (determining what was valid for various concepts in various contexts) with two technical processes (programming and data storage) All three of these evolved dramatically over time, and even if you could freeze the ideas, any three people probably wouldn’t agree on the answers.

                                                                                                                                                                                      I’m not saying there shouldn’t be a single source of data. There should be. There should even be a single source of truth. My point is that this single point of truth is the code that evaluates the data to perform some certain action. This is because when you’re coding that action, you’ll have the right people there to answer the questions. Should some of that percolate up into relational models and database constraints? Sure, if you want them to. But then what do you do if you get bad incoming data? Suppose I only get a customer with first name, last name, and email? Most everybody in the org will tell you that it’s invalid. Except for the marketing people. To them all they need is email.

                                                                                                                                                                                      Now you may say but that’s not really a customer, that’s a marketing lead, and you’d be correct. But once again, you’re making the assumption that you can somehow look over the entire problem space and know everything there is to know. Do the mail marketing guys think of that as a lead? No. How would you know that? It turns out that for anything but a suite of apps you entirely control and a business you own, you’re always wrong. There’s always an impedance mismatch.

                                                                                                                                                                                      So it is fine however people want to model and code their stuff. Make a single place for data. But the only way to validate any bit of data is when you’re trying to use it for something, so the sole source of truth has to be in the type code that parses the data going into the function that you’re writing – and that type, that parsing, and that function are forever joined. (by the people and business that get value from that function)

                                                                                                                                                                                      1. 2

                                                                                                                                                                                        I suspect we might be talking a bit past each other. To use your example, I might ask what it means to be a customer. It might require purchasing something or having a payment method associated with them.

                                                                                                                                                                                        I would in this case have a data type for Lead that is only email address, a unique uuid and optionally a name. Elsewhere there is code that turns a Lead into a Customer. The idea being to not keep running validation logic beyond when it is necessary. This might mean having data types Status = Active | Inactive | Suspended which needs to be pulled from external data regularly. I can imagine hundreds of different data types used for all the different ways you might interact with a customer, many instances of these data types created likely right before they are used.

                                                                                                                                                                              3. 1

                                                                                                                                                                                Mostly agree, but I’d like to add that the ability to pass along information from one part of the system to another should not necessarily require understanding that information from the middle-man perspective. Often this takes the form of implicit ambient information such as a threadlocal or “context” system that’s implemented in library code, but as a language feature it could be made first-class.

                                                                                                                                                                              1. 6

                                                                                                                                                                                When more easily readable code starts to increase total code size, these two ideas are at odds. That dichotomy is what brought all of this to the front of my mind. I have been increasingly been hesitant to believe a refactoring just for the sake of slight readability at the cost of increased lines of code is a good thing.

                                                                                                                                                                                The way I have been putting it for years now is…

                                                                                                                                                                                The best criteria by which one can judge Good Design, is how little you need to read and understand before you can make a beneficial change to the code base.

                                                                                                                                                                                In years when, by todays standards, code bases were Mickey Mouse in size… other criteria may have dominated. But in this era of code bases ‘way larger than anyone human can hope to understand’…. My criteria dominates all others.

                                                                                                                                                                                1. 2

                                                                                                                                                                                  Do you think time to comprehension is a function of the person and the codebase together? For example, there are some cases where I’ve understood something about a bit of code a lot faster than a someone else, and vice versa. In cases like these, I think, neither the reader of the code, nor the code itself can independently explain “time to comprehension.”

                                                                                                                                                                                  1. 3

                                                                                                                                                                                    Do you think time to comprehension is a function of the person and the codebase together?

                                                                                                                                                                                    Certainly there are factors like familiarity with the general design and tools which will affect it.

                                                                                                                                                                                    But also I have noted a “That’s the way I think” factor.

                                                                                                                                                                                    I find reading “man bash” hurts my head, so many of the choices are “Not the way, I personally, think.” On the otherhand, most of the choices made by Matz, the Ruby guy, are the way I personally think. So I find the ruby standard libraries a breeze to read… (Sadly the .c files are a bit of a pain)

                                                                                                                                                                                    That said, follow on principles emerge from my principle irrespective of “the way you think”… ie. Connascent Coupling is Bad. Very Bad.

                                                                                                                                                                                    Lots of globally accessible state is Very Bad, makes it very very hard to reason about causality.

                                                                                                                                                                                1. 16

                                                                                                                                                                                  The article is written by Thomas Bushnell who worked on hurd and worked closely with RMS. What I’m glad this point so clearly put, was that the issue with RMS was not just about that particular email chain. It brought the issue into a larger picture. It takes someone who knows the guy to see that since most people don’t have that kind of experience over such a long period of time.

                                                                                                                                                                                  1. 10

                                                                                                                                                                                    It takes someone who knows the guy to see that

                                                                                                                                                                                    I mean, Selam G. did a pretty comprehensive post with references and quotes from women harassed by RMS over the years without ever knowing RMS. I’d argue that the women in question didn’t know RMS either (which is part of why he should not have been propositioning them).

                                                                                                                                                                                    When someone is being abusive we usually just need to listen to the victims and observe reality.

                                                                                                                                                                                    1. 14

                                                                                                                                                                                      I find it very hard to trust in information provided alongside clear and obvious lies about a quote, and I am suspicious of the author’s motives for misrepresenting such a quote.

                                                                                                                                                                                      1. 5

                                                                                                                                                                                        Did you read the article ? What part wad misrepresented ?

                                                                                                                                                                                        1. 5

                                                                                                                                                                                          One example out of a few from the peice, but an example with the most relevancy, a misquotation that was used by the medias (social and mainstream) to coerce Stallman out of his role.

                                                                                                                                                                                          What Stallman wrote:

                                                                                                                                                                                          We can imagine many scenarios, but the most plausible scenario is that she presented herself to him as entirely willing.

                                                                                                                                                                                          What Selam G. wrote in her piece:

                                                                                                                                                                                          …and then he says that an enslaved child could, somehow, be “entirely willing”.

                                                                                                                                                                                          This is, undoubtedly, intentionally malicious.

                                                                                                                                                                                          1. 1

                                                                                                                                                                                            The author could also just have poor reading comprehension, I guess.

                                                                                                                                                                                            1. 4

                                                                                                                                                                                              Why should we listen to an author with such poor reading comprehension? Both situations make her lose a lot of credibility.

                                                                                                                                                                                      2. 5

                                                                                                                                                                                        Yes! listening to the victims is the most important part. I like Selam G.’s followup post which has quotes from victims.

                                                                                                                                                                                        1. 5
                                                                                                                                                                                          Today, I found out that Stallman had issued a rather weak and confusing apology to the CSAIL mailing list:
                                                                                                                                                                                          
                                                                                                                                                                                              “I want to respond to the misleading media coverage of messages I
                                                                                                                                                                                              posted about Marvin Minsky’s association with Jeffrey Epstein. The
                                                                                                                                                                                              coverage totally mischaracterised my statements.
                                                                                                                                                                                          
                                                                                                                                                                                              Headlines say that I defended Epstein. Nothing could be further from
                                                                                                                                                                                              the truth. I’ve called him a “serial rapist”, and said he deserved to
                                                                                                                                                                                              be imprisoned. But many people now believe I defended him — and
                                                                                                                                                                                              other inaccurate claims — and feel a real hurt because of what they
                                                                                                                                                                                              believe I said.
                                                                                                                                                                                          
                                                                                                                                                                                              I’m sorry for that hurt. I wish I could have prevented the
                                                                                                                                                                                              misunderstanding.”
                                                                                                                                                                                          

                                                                                                                                                                                          I’m not sure what is weak or confusing about that apology.

                                                                                                                                                                                          1. 8

                                                                                                                                                                                            I think it’s because even while apologising he manages to say (paraphrasing) “I’m hurt by what you said I said” and “you didn’t understand me”. In fact, now I read it again he doesn’t actually apologise for anything except for being hurt.

                                                                                                                                                                                            1. 5

                                                                                                                                                                                              From what I read:

                                                                                                                                                                                              He defended Marvin Minsky as potentially not a rapist because he might not have known the truth, but he said Epstein definitely was a rapist. He is sorry he couldn’t make that more clear.

                                                                                                                                                                                              RMS said from Marvin Minsky’s perspective it was possibly a rich guys a prostitute harem of 18 year olds. Still gross, but to RMS the injustice was calling him a willing rapist, not a creep, with total certainty.

                                                                                                                                                                                          2. 4

                                                                                                                                                                                            The quotes in the article you linked seem to show him as a lonely sad guy who sleeps in his office. Could you elaborate on the assaults he did?

                                                                                                                                                                                            To me when he allegedly said he would kill himself if he didn’t get a date, that is a sign of someone who is very lonely and needs help, not necessarily a predator. Sure it should be addressed somehow, but the author of your articles has very little empathy for other people ‘not like her’. It just sounds like a bad situation for everyone.

                                                                                                                                                                                            1. 3

                                                                                                                                                                                              I’m sure that Stallman was and is very lonely, but he is also, intentionally or not, trying to manipulate young women into going on dates with him and sleeping with him. That is predatory behaviour.

                                                                                                                                                                                              Stallman made a large number of women uncomfortable to the extent that women professors at CSAIL kept plants in their office to ward him off. This suggests to me that they felt harassed by him.

                                                                                                                                                                                              He should get help. He should also be removed from his positions of power while he gets it so that he cannot further harass women at MIT nor easily at FOSS conferences.

                                                                                                                                                                                              It would be great if he stopped saying that voluntary or consensual pedophilia is possible, too.

                                                                                                                                                                                              Other testaments from women: https://mobile.twitter.com/_sagesharp_/status/1173637138413318144