Threads for gthm

  1. 2

    I’m covered in kids so it’s hard to check, but does this not follow more quickly from Cauchy-Schwarz applied to the second given inequality?

    Edit: No, we only get a weaker result.

    1. 10

      Joe needed to transfer a number of files between two computers, but didn’t have an FTP server. “But I did have distributed Erlang running on both machines” (quote from the book, not the blogpost), and he then proceeded to implement a file transfer program in, what? 5-10 lines of Erlang, depending on how you count? Beautiful.

      1. 6

        It’s certainly impressive. As someone used to corporate environments 15 years after Joe wrote this, I’m even more amazed at the network access he enjoyed.

        1. 2

          Ye-ess, the network access and ability to start/access a server program is key, isn’t it?

          If it were SSH instead of Erlang, one could write

          ssh joe@server sh -c "base64 < myfile" | base64 --decode > myfile.copy
          

          to much the same effect — this is not downplaying at Erlang at all, it’s a second illustration of how powerful a remote procedure call sytem can be. (And SSH can only return text, imagine having Erlang where your RPC can return any data structure a local call can. (In part because Erlang deliberately limits its data structures to ones that can be passed as messages.))

          1. 3

            If it were SSH instead of Erlang, one could write

            The funny thing is that iirc SCP works like this (or has fallbacks to work like this)

            And SSH can only return text, imagine having Erlang where your RPC can return any data structure a local call can

            SSH can transmit arbitrary data. That’s how terminal control characters still work.

            1. 2

              Heh, I’ve used ssh cat a few times when scp and sftp weren’t available or didn’t function.

      1. 9

        Either SemVer means something, or it doesn’t. I choose to believe that it does.

        I choose to believe it doesn’t.

        Or, well, more precisely, I believe that semver at most communicates developer intent about the changes that went into a release. Bumping a minor version number is equivalent to the claim that “we think this is backwards compatible”. Actually proving that a change is backwards compatible in practice can get rather difficult and I don’t believe it’s ever done.

        I had an idea a few years ago for a Go tool that would estimate a lower bound on the semver version bump between two version of the same codebase, by looking at the exported types and functions and comparing signatures. I then wanted to run it on the claimed public releases of some open source projects and file issues arguing that their versions should be much higher than the official ones. In the end I decided that the effort outweighed the pleasure to be had from the shitposting.

        1. 8

          The canonical example here is all the people who got extremely upset when a popular Python cryptography package switched from implementing its critical stuff in a C extension, to implementing it in a Rust extension. Many angry commenters felt this was a violation of SemVer (which, to be clear, the project had never claimed to follow in the first place) and should have required a major version bump despite the fact that the public API of the module had not changed.

          I’m obviously biased, but also personally a fan of the approach Django settled on, which is that the version number is not the thing you care about. Instead it’s whether the releases you’re looking at are designated for long-term support or not. Django’s deprecation and release cycles are set up so that:

          • Every third feature release (every couple years at the current pace) is an LTS with a longer support period (currently averaging around 30 months from initial release, compared to around 18 for a non-LTS).
          • All API that exists and doesn’t raise deprecation warnings in the current LTS will also exist in the next LTS.

          So if you want infrequent upgrades and maximum stability, run on the current LTS, and your upgrade process when the next one comes out is to clear deprecation warnings. Or if you want to always have the latest features — which may come at the cost of dealing with deprecation/removal more often — you can jump to every release as it comes out.

          1. 1

            The Python cryptography thing happens every time any library adds a dependency (or upgrades a dependency) that can be conflicted with. In Python (and most other languages) that’s every dependency, because the entire dependency tree can contain at most one version of a thing. It just so happens that adding a Rust compiler as a dependency is way more incompatible than average.

            It would be hard to prove that a release of something was backward-compatible, in general, but it’s not hard to prove that these changes aren’t. I think this suggests that major version changes are a big deal and should be avoided: They’re likely to cause a huge amount of churn in your transitive dependants.

            More generally, as long as SemVer works on the meh/meh/you’re-screwed model, people are going to want major version bumps every time any of them is screwed, and major version bumps are going to screw people.

            1. 3

              It just so happens that adding a Rust compiler as a dependency is way more incompatible than average.

              As far as I’m aware, the cryptography module has always provided pre-compiled binary packages on PyPI. They certainly were providing them when they made the switch to doing the extension in Rust.

              Part of the outrage was people claiming that this broke support for certain platforms Rust doesn’t support (though I believe most or all of those are also platforms Python itself does not officially support). Part of it was just people being angry because being anti-Rust is a culture-war thing for certain segments of the programming population.

              I have never actually heard from someone who was a user of the module, on a platform and architecture that Python itself supports, and who was unable to install and use it after the switch.

              1. 2

                It hit me on Debian stable at some point. For whatever reason there wasn’t a prebuilt wheel pip wanted to install, and when I tried rustc memory pressure slowed the system to a crawl (would it have finished eventually? I have no idea; I couldn’t afford to lag out the other services that were swapping, so I chickened out). I didn’t particularly blame the package maintainers for this situation, but I did swear at the Python ecosystem collectively a bit for not managing to install a binary. I don’t know if it was missing or if pip just didn’t find it. We didn’t wait to see if the problem would be resolved, just dropped the functionality that depended on cryptography and moved on with our lives.

                1. 2
            2. 1

              despite the fact that the public API of the module had not changed

              Did it change which OSes the package could run on? I know that Rust isn’t supported everywhere yet…

              1. 2

                Did it change which OSes the package could run on?

                This was the crux of the disagreement. It changed what platforms the package could potentially compile on.

                As far as the package’s authors were concerned, the rust replacement was capable of compiling on every platform they had previously claimed to support, so nothing had changed. As before they distributed precompiled binaries for supported platforms.

                But users of, say, a completely unsupported AIX (I don’t remember the actual platform in question, just picked AIX out of the air, it was on that plane of obscurity) port of python complained that this broke the cryptography package for them.

                The disagreement was fundamentally between: the user base assumption that if they could convince something to compile, this meant it worked and therefore anything that broke their ability to continue to convince it to compile was a breaking change, and the maintainers belief that SemVer applies to what you actually claim to support, and that just because something happens to compile on an unsupported and untested platform doesn’t mean it will meaningfully work, except by accident (and that “works by accident” is a horrible thing to depend on for cryptography, since for all anyone knew the AIX compiler might be screwing up security critical code).

                (I’m not very sympathetic to the users’ camp in the argument; SemVer is only meaningfully feasible if the notion of support for compatibility exists within well-defined, maintainer-determined boundaries)

          1. 3

            While this is intended for web content (it’s a collaboration between Google, Microsoft, and Yandex), it’s interesting as a general data-modeling project, too.

            1. 8

              Each day we stray further from Codd’s light.

              1. 3

                These seem like higher-level descriptions. I don’t see any reason you can’t use them in a relational DB after some straightforward normalization.

              2. 1

                Somewhere, William Kent clenches his fist.

              1. 4

                To me this post feels like a good example of how the future is here but is unevenly distributed. The post is a review of Github’s efforts to allow LaTeX in its Markdown flavor. I would see this as a niche nice-to-have for Github issues and maybe light math in READMEs, while the conclusion of the post seems to want to use it for bigger things like research articles:

                The reason why I’m so excited about this feature is that, in combination with version control and the issues/discussions capabilities in GitHub, I can see tectonic changes in how we’re publishing science. At last, science can really reap the benefits of a connected internet by moving away from static PDFs to living, breathing repositories which render like PDFs and provide a central place where one can actually talk about the article. – And fix bugs!

                The thing is, setting up what they describe is already possible today. You write a Github Action to compile the LaTeX files in your project and host the resulting PDFs somewhere like S3. Then you can get exactly the workflow they describe, where people collaborate on research papers using pull request, can publish drafts in the same way, and can file bug reports if they want. You can get away with this on the free tiers of Github Actions and one of the S3 look-a-likes.

                For many of us nerds, setting this up is trivial, even if it involves annoying amounts of yaml and slow testing cycles. For others, like presumably the post author, it involves so many known or unknown unknowns that it is effectively impossible.

                1. 4

                  I agree, it’s like people who want to shoehorn Markdown into every part of the publishing process - from writing a comment on a web forum to authoring a technical book.

                  Markdown is great, but it has limits, and rather than trying to extend MD to cover everything it’s better to choose the tools that are suited for different roles.

                  If you’re already familiar with La/Tex math markup, the rest of the syntax isn’t that bad. I think it’s great you can add math markup via MathJAX but if you’re writing anything more complex than a README, use La/TeX. It’s as plaintext as Markdown, after all.

                  1. 1

                    I don’t think “this paper can only be reasonably developed on github because of the math stuff in GFM” is a good idea, but I guess it will become wide-spread.

                  1. 10

                    I’ve spent the last four weeks banging my head against terraform and AWS and agree that this could be simpler, but also hop and skip to work with a smile every day because it doesn’t involve yaml anywhere.

                    1. 7

                      Last week I spent two days chasing why the terraform setup I was using crashed each time saying it was missing a file in the bucket the same off-the-shelf module was creating. Finally gave up and asked the authors what I was doing wrong.

                      Answer: not wrong, this is intended behaviour. I should run terraform until the crash, then manually go add the file it says is missing, then run terraform again.

                      Working around that, terraform provisioned an AWS Airflow cluster in a “failed” state. AWS error message says, paraphrasing, it “may be an IAM issue, or maybe something with networking, who knows!”

                      1. 1

                        this sounds like an absolutely delightful experience. thoughts and prayers.

                        tbh experiences like this is what cemented my belief that aws should be easy. in fact, it must be easy.

                      2. 1

                        the people have spoken, yaml all the things. i must agree with you though. a proper typed lang with editor completion is so much better.

                        use the go api and define your infraset as a struct instead of yaml and the cli!

                        hop and skip driven development.

                        1. 5

                          a proper typed lang with editor completion is so much better.

                          I wish Dhall was used more for this sort of thing, esp since it supports JSON & YAML outputs.

                          1. 2

                            it’s not a bad idea. cuelang also looks promising. sadly none of these have really taken off yet.

                            making things easier probably shouldn’t start by making them harder.

                          2. 1

                            a proper typed lang with editor completion is so much better.

                            Pulumi provides this, in Python, Typescript, and Go (off the top of my head - Typescript for sure)

                            1. 1

                              true! this a good idea. yet all the iac providers are just-another-cloudformation-tm. the value add from cf to any other the others is low, and any choice among them is fine. cdk has a pulumi inspired interface now as well.

                          3. 1

                            i also think that data schema needs to be so simple that you can actually remember it. simpler types, repeated patterns, etc. show me your yaml-schema/go-structs and i won’t have to wade through your code.

                          1. 2

                            This would have come in handy at the scientific publisher I worked for that kept every paper under RCS, which I honestly had trouble using after getting used to git.

                            1. 9

                              Ah, this takes me back to my own PhD in mathematics and all the time I spent avoiding doing the research I was supposedly there to do. Good times.

                              1. 3

                                As a slight counterpoint, I had a job in 2019 where I had to work on Windows after having used some flavor of Linux or BSD since 2004, and it was… fine? I setup WSL and just kept moving on with my life mostly as before, except for certain things I’d drop into the GUI for.

                                I do agree that package management is a mess on Windows, but again, it was mostly a non-issue because of WSL. I used chocolatey to install a couple of programs and that was it. We also used Windows on our prod hosts and I tried to get them under some kind of Infra as Code management (settling on puppet after reviewing the options and deciding it was the closest to having any kind of Windows support). I hated every step of it and will never work with Windows on prod hosts again (say what you want about systemd, then try to run services reliably on a Windows host and deal with restarts and logging etc, and then get back to me), but don’t care about it being on dev machines. To each their own.

                                However, copy-pasting things to and from Excel and having it just figure out what’s a table and what isn’t and having it all work is MAGIC. Oh my lord, so good.

                                1. 1

                                  However, copy-pasting things to and from Excel and having it just figure out what’s a table and what isn’t and having it all work is MAGIC. Oh my lord, so good.

                                  Coming from a Mac, I had the opposite experience. Drag-and-drop and copy-and-paste work far less well on Windows. This was even the case in Office apps: in the Mac version of PowerPoint, I could drag an image from Safari into a slide and then drag the slide from one presentation to another and it never occurred to me that this wouldn’t work. On the Windows version, dragging an image from Edge didn’t work, neither did dragging a slide between presentations. I believe both of these are now fixed, but the fact that they didn’t work in 2018 was a shock.

                                  I wish *NIX DEs would copy OpenStep’s pastebin model instead of Windows’ clipboard model.

                                1. 21

                                  I appreciate posts like this. So honest and reasonable. Real life description of a real life business and the software that is running it.

                                  1. 6

                                    I agree. I’m at the end of a five year stint at a large company and paying attention to tech twitter and co, and I very much just want people to tell me what terrifying things they’re doing and for what bad reasons and not lie to me about how Best Practice N+1 is totally practiced by their whole org and not a thing someone considered doing once but then dropped.

                                    1. 1

                                      War stories like this are exciting and macho and cool. But definitely not suitable for juniors ;)

                                  1. 12

                                    Every time I come across one of these pro-TDD articles, I always remember Ron Jeffries attempt to implement sudoku: https://ronjeffries.com/xprog/articles/oksudoku/ https://ronjeffries.com/xprog/articles/sudoku2/ https://ronjeffries.com/xprog/articles/sudokumusings/ https://ronjeffries.com/xprog/articles/sudoku4/ https://ronjeffries.com/xprog/articles/sudoku5/ TD;DR—one of the main pushers of TDD utterly fails at TDD in a series of articles that come across as satire of TDD.

                                    1. 12

                                      My main takeaway from that has always been “if I work on something publicly and then lose interest the Internet will hound me about it until the end of time.”

                                      I flit between ideas all the time. One of these days I’ll flit away from an FM project and people will forever use it as proof that FM is stupid.

                                      1. 2

                                        What’s FM?

                                        1. 1
                                        2. 1

                                          The problem isn’t that he didn’t complete it, the problem is that he set it up as an example of how TDD produces superior results to non-TDD. Even then simply losing interest wouldn’t have been a big deal.

                                          The problem is that what he documented was ever increasingly complexity of implementation, and didn’t even achieve basic functionality.

                                          1. 1

                                            He didn’t set it up that way at all:

                                            A number of people on the tdd list have reported having a lot of fun TDD programming the game of Sudoku. I’ve not played the game, though of course I’ve tripped over the piles of books in the bookstores and at the airport. But discussion of the thing makes it sound like it might be fun to TDD on it, as people are saying. Let’s get started.

                                            […]

                                            I’m not saying this is good, or what you should do, or anything of the kind. I’m displaying what I do, faced with this problem, and how I explore what the computer and I can do in moving toward a Suduko solution.

                                            1. 2

                                              I’m not saying this is good, or what you should do, or anything of the kind.

                                              The contextually reasonable interpretation of this statement was not him talking about how he was going about the development methodology, but about his actual approach to solving the sudoku, to which I say fair enough - often a first attempt at doing something turns out to be the wrong way (especially given his stated lack of familiarity with the problem space).

                                              I’m displaying what I do, faced with this problem, and how I explore what the computer and I can do in moving toward a Suduko solution.

                                              This is where we get to why people find this series so absurd. This is an (the?) expert on TDD showing how TDD influences development of software, and the result of his approach is an absurd level of complexity in the solution, regardless of whether the approach was actually “correct”.

                                          2. 1

                                            But Ron Jeffries is an original signer of the Agile Manifesto, and a consultant selling Agile practices, including TDD. So are you a recognized expert in FM and are selling it to organizations?

                                            1. 6

                                              Yes, he is.

                                              1. 4

                                                He is and he does.

                                            2. 5

                                              It really was an amazing series, and I agree I initially thought it was satire.

                                              I always feel a lot of pro-TDD folk think the alternative to TDD is no tests - of course I have test cases, but many more test cases come out of the implementation not the design. The actual act of implementing a feature in a well thought out way makes you realize what things are more complex and require more tests.

                                              The idea that any set of tests made ahead of time capture the actual nuance of real software development is farcical, and I’ve seen again and again in pro-TDD posts.

                                              Then there’s also the super problematic appropriation of another culture for no real benefit.

                                              1. 2

                                                Then there’s also the super problematic appropriation of another culture for no real benefit.

                                                Can you link to a more verbose explanation of what you mean by this? Of all the problems I’ve seen cited with TDD, that’s the first time I’ve heard it called cultural appropriation.

                                                1. 7

                                                  As @telemachus said it’s the appropriation of terms like katas, dojo, etc by people of fairly universally western developers. Some of these terms and concepts have non-trivial meaning in the originating cultures, and co-opting them for some fad development methodology is kind of gross, and totally unnecessary.

                                                  Western culture has plenty of similar concepts that could be used instead, so adopting terms from a culture that you fundamentally lack any real involvement with comes across as considering the importance of terms from another culture as being less significant than western culture.

                                                  There are places where we’ll refer to things like “the church of X” where X is some development ideology so western developers do understand that we can use our own cultural concepts, but the formal systems seem to always adopt features of East Asian culture. Part of this is the western fetishization of isolated chunks of East Asian culture, but the formalization of such behaviour is super irksome.

                                                  1. 3

                                                    Thanks for expanding a little. I had kind of zeroed in on the Jeffries series that the thread had drifted to, and “kata” and “dojo” were no longer front of mind when I read your appropriation comment.

                                                    I have long objected to the two terms in the original article on the grounds that I dislike thinking about programming as some kind of martial arts discipline. This angle hadn’t really occurred to me.

                                                    (And thanks @telemachus for adding the other examples, too.)

                                                  2. 4

                                                    I’m guessing that he means the use of “kata.” I can’t speak for the OP, but I’m often uncomfortable with the way that (some) programmers use East Asian culture. (E.g., Koans, faux Buddhist sayings, conversations between a “Master” and a “student” leading to wisdom, etc.)

                                                    Specific examples:

                                                    These sorts of things are easy to do without the appropriation, and they can still be fun and engaging.

                                                    E.g.,

                                                  1. 3

                                                    There will always be those who invent a term for a particular hammer then tell everyone they should use it for all DIY jobs.

                                                    I have plenty of experience with TDD, both good and bad, and in that experience I see a clear line dividing when it likely works and when it likely won’t. Beware anyone preaching TDD for all, or even many, situations, but also beware writing it off as never useful.

                                                    1. 1

                                                      This is my experience too. I switch back and forth among tests-first and tests-during and tests-after depending on context.

                                                      It was useful to force myself to stick with pure, no-compromises TDD for the entirety of a nontrivial project. Making myself figure out how to solve problems with a tests-first development approach when it wasn’t obvious how to do so was the only way I was able to begin to distinguish between, “TDD is a bad fit for this kind of task,” and, “I am too inexperienced to see how to do this with TDD.” The latter is probably still true in some of the cases I shy away from TDD, but I like to think having tried the discipline out for real gives me better perspective.

                                                      1. 4

                                                        I agree, a significant part of the problem with TDD is that it obsesses over tests to an extent that it gets in the way of actually development, creates tests for single sub components to an extent that is far from necessary.

                                                        I recall in the WebKit project there was a period where a bunch of TDD folk started adding huge amounts of basic functionality tests for core data types that were already extensively tested through the tests of real functionality. These tests did not add any functionality, but in some cases they even added complexity to the implementations in order to be able to write tests of internal functionality. I recall that in at least one case they actually introduced regressions as part of introducing complexity to support testing (the regressions being caught by other tests that they didn’t run - because they had already written tests for the basic data type functionality, so running the full engine tests “wasn’t necessary”.

                                                        I think this applies to all the fad-driven-development methodologies, they take an reasonable piece of software development, and then just take it to extreme, and declare that that extreme is the only way to reliably develop software.

                                                      2. 1

                                                        It’s something I use quite often. But not all the time, and not none of the time. I also sometimes write tests after an initial implementation, and then use tests-first for changes. But never stupid things like iterating between code and tests every 2 lines of change, and returning hardcoded results; hardcoded values are OK if actually need to build another part first, and are just fulfilling record requirements in a typed language, then its fine, but I’m criticising the silly tick-toking method you see in videos)

                                                        1. 1

                                                          I think it’s acceptable to return hard coded data during development. Normally you are returning data in a specific shape, and will dynamically generate that shape later.

                                                          1. 2

                                                            I agree, but IMO you do it because it allows you to work on something else that is expecting data in that shape, not just so you can turn a useless test green.

                                                    1. 24

                                                      I think Gemini is defined by what it isn’t rather than what it is (very punk rock), and that’ll be its ultimate downfall. Instead of trying to build something, they worry little nice touches will be the end and become the web again.

                                                      For a good example of what I mean, this is what I think of when I think of Gemini now - bullying people out of purity. (Or RFC LARP.)

                                                      1. 29

                                                        You’ve discovered that Drew Default is a dick. We all knew this. He’s been here. We know.

                                                        One could argue it’s a public service to provide a client that Drew Default will eventually blacklist. The users will be spared whatever his latest fucking insane windmill charge is. Think of the users.

                                                        1. 3

                                                          brave to attack someone in a forum where they cannot respond

                                                          1. 1

                                                            I sure hope Drew has better things to do than to respond to this kind of nonsense

                                                        2. 7

                                                          Or as Jawbreaker would have it:

                                                          “You’re not punk, and I’m telling everyone”

                                                          Save your breath, I never was one

                                                          Much like any clique, it’s got its purity tests. That’s a good example you’ve got there.

                                                          1. 5

                                                            It’s a curious perversion of open source development—who has the right to control or limit what other people do in their own software, especially adding features they find useful? One could argue that it’s daft, impractical or morally offensive, and they might be right. You can’t stop people publishing code, which leaves you with a rather primitive set tools—benevolent dictatorship, consensus and coercion—to keep a minimalist project on track. “Nice little touches” were never on the table, and favicons were only one in a litany of attempted extensions. Without continuous backpressure the markup definitely would have reached a level of complexity that browsing from a terminal would be undesirable. Most of the backpressure was achieved by solderpunk writing gently, but ultimately leaning heavily on their authority as the author of the spec to prevent unwanted excursions. Later they reduced their involvement so the availability of tools to keep things on track diminished.

                                                            That’s what Gemini is, for better or worse. Purity and ensuring purity is in its DNA. When I look at your link, I see that more as a reflection on the project than the person who wrote it. Even if others wouldn’t have been quite so blunt (or didn’t have the leverage to counter code with code) many were definitely thinking it. There’s a shock factor seeing that kind of thing on a GitHub issue—it would be a crazy demand in most software ecosystems, but in context I didn’t find it surprising.

                                                            1. 6

                                                              Without continuous backpressure the markup definitely would have reached a level of complexity that browsing from a terminal would be undesirable.

                                                              Browsing from a terminal isn’t one of the stated goals of the project though. I’m not sure if purity politics were essential for Gemini at the outset, but I do think that users of Gemini are interested in that kind of purity politics because of what Gemini and its purity represents for them.

                                                              1. 2

                                                                Browsing from a terminal isn’t one of the stated goals of the project though

                                                                Good point, I misremembered that this was more explicit. However it is a goal of gemtext that it should be usable without any processing of formatting, which amounts to much the same thing.

                                                                the text/gemini format has been designed so that simple clients can ignore the more advanced features and still remain very usable.

                                                                It is strictly optional for clients to do anything special at all with headings [/list items/blockquotes]

                                                                (gemtext format)

                                                                1. 4

                                                                  Good point, I misremembered that this was more explicit. However it is a goal of gemtext that it should be usable without any processing of formatting, which amounts to much the same thing.

                                                                  This exact split is reflected at large in the community and in practice ended with the minimalist group winning. For a lot of folks, they saw the goals of Gemini as a way to create a pure part of the Net where they can use their favorite tools (terminal, text editors, etc) to surf around. I contrast this with Usenet which has a much more laissez-faire attitude on what you can post in an article and how a newsreader should format an article.

                                                          1. 36

                                                            I used Arch for years, even before they switched to systemd. I find it a little too hand-holdy now. I use NixOS, by the way.

                                                            1. 47

                                                              I think it says a lot about both Arch and Nix that I legitimately have no idea whatsoever if you’re being serious or trolling.

                                                              1. 31

                                                                NixOS users are the vegans of the family

                                                                1. 16

                                                                  As a vegan, I resent this. I never talk about being vegan unless someone asks. Or to take a shot at NixOS users apparently.

                                                                  1. 3

                                                                    If food comes up, I tell people. I don’t try to preach to people, but I’ll engage (to some extent) when asked. I do not engage when people ask questions such as “what do you even eat?” or when people are just being dicks about it—not usually worth it.

                                                                  2. 16

                                                                    Are you saying NixOS is trendy and less cruel, and better for the environment?

                                                                    1. 13

                                                                      They are probably saying there’s a stereotype of many vegans being absolutely insufferable to be around with, and vilifying anybody that isn’t a vegan. At least in my experience that stereotype (unfortunately) has some truth to it.

                                                                      1. 3

                                                                        It’s not vegans in general, it’s PETA. PETA knows that they can’t convert anyone who isn’t 95% of the way already, so their strategy is to remain in the public eye through shock marketing, on the “all publicity is good publicity” theory.

                                                                        I know lots of vegans who never say anything about other people’s food choices, and only mention their own choice when it comes up.

                                                                        1. 2

                                                                          How do you tell if someone’s vegan?

                                                                          Say “Look, I’m happy to make vegan entrees, sides, and desserts for the party, but you have to tell me now, instead of three hours in when I see you aren’t eating anything and ask if you’re okay.”

                                                                          1. 1

                                                                            I was a vegetarian for 20 years, including when I met my wife. My wife was never vegetarian but she doesn’t eat cheese.

                                                                            We visited a friend and found that they had made a three part pizza for the evening: one part with pepperoni and cheese, one part with cheese but no pepperoni, and one part with pepperoni but no cheese.

                                                                            We were very grateful but a bit embarrassed by the effort on our behalf.

                                                                            1. 3

                                                                              If it helps, they probably saw it as a chance to challenge themselves. Or a chance to flaunt their cooking skills. I def feel both when cooking for restricted diets

                                                                        2. 2

                                                                          There’s not the same moral dimension to Nix, compared to veganism; people who don’t use Nix are not somehow morally deficient or inappropriate. The main reason that we share Nix is to ease the suffering of users, not the suffering of computers or packages.

                                                                          1. 2

                                                                            Yeah. I get it. This is me not being confused, and deflecting this stupid comparison.

                                                                          2. 8

                                                                            Given your homepage declares your veganism in its second sentence, I don’t think you can feign too much indignation about the grandparent jibe.

                                                                            1. 1

                                                                              Huh? I live a vegan lifestyle, yes. Do you have a problem with that?

                                                                              Jesus. Mechanical engineers are insufferable.

                                                                              1. 11

                                                                                You announce you’re a vegan. That’s literally the reason for the “btw, I’m vegan/arch user” joke. There’s nothing wrong with that, but as you can see the stereotype matches reality.

                                                                                1. 2

                                                                                  They announce it on their webpage… that you chose to go and read…

                                                                                  1. 1

                                                                                    I am fully aware.

                                                                              2. 2

                                                                                If you’ve used NixOS, you’ll know less cruel doesn’t apply

                                                                                1. 2

                                                                                  It’s been a long time, but I gave up pretty quickly. 😀

                                                                          1. 3

                                                                            Confusingly, what is discussed in the post is not the same as data oriented design: https://en.m.wikipedia.org/wiki/Data-oriented_design

                                                                            1. 1
                                                                              1. 7

                                                                                It is, but so is steering a ship, and yet no captain would steer right into the reefs.

                                                                            1. 3

                                                                              The future⁺ is now.

                                                                              1. 6

                                                                                Of all the places to find a Stan Kelly reference, this I was not expecting.

                                                                                Edit: also @cadey, I think you have a typo around “host colon porn thing”, unless this is targeting a very different audience.

                                                                                1. 4

                                                                                  I thought I fixed that, oops.

                                                                                  1. 4

                                                                                    Null sweat!

                                                                                    1. 3

                                                                                      Should be fixed now!

                                                                                      1. 1

                                                                                        You’ve made my day, chummer.

                                                                                    2. 3

                                                                                      The Stan Kelly parody is beautiful.

                                                                                    1. 3

                                                                                      Zookeeper works this way, in case you want to see a system like this in the wild.

                                                                                      1. 9

                                                                                        In this post we will re-invent a form of math that is far superior to the one you learned in school.

                                                                                        My first thought was how hyperbolic that statement is, then I realized, yeah, geometric algebra…

                                                                                        1. 5

                                                                                          I don’t know what it is about geometric algebra that brings out the cranks. It’s very handy though that they call it geometric algebra instead of Clifford algebra.

                                                                                          1. 2

                                                                                            Over a century ago, the cranks were the ones excited about vectors.

                                                                                            Just remember what Lord Kelvin said:

                                                                                            “Symmetrical equations are good in their place, but ‘vector’ is a useless survival, or offshoot from quaternions, and has never been of the slightest use to any creature.”

                                                                                            Letter to G. F. FitzGerald (1896) as quoted in A History of Vector Analysis: The Evolution of the Idea of a Vectorial System (1994) by Michael J. Crowe, p. 120

                                                                                            1. 7

                                                                                              People have taken Clifford algebras very seriously. They’ve been used to try to make geometric sense of second cohomology groups, and the equivalent of Hodge theory has been worked out. Those efforts haven’t yielded a lot back. So far the returns on considering general Clifford algebras over just the exterior algebra have been brutally diminishing. But for some reason they’ve caught the imagination of a wider public. My comments are made as someone who wants to love them, but can’t justify doing so given that simpler tools yield more powerful results.

                                                                                              1. 3

                                                                                                IMO the big cool thing about Clifford algebra is how easy it is to teach and understand. Learning Cliifford algebra for me was a lot like when I bought a decent modern MIG welder. I’m genuinely confused as to why the precursors persist in curriculum in spite of being so obviously inferior.

                                                                                                1. 3

                                                                                                  Why don’t you ask an actual working mathematician or theoretical physicist this question? Like quaternions, Clifford algebras are cool and elegant, but for whatever reason they just haven’t proven very useful in applications to either physics or other mathematics. Exterior algebra and differential forms, on the other hand, have proven themselves to be extremely useful in both theoretical and applied differential geometry (the theory of connections on principal and associated fiber bundles, which is the foundation of modern gauge theories in physics, is most naturally phrased in terms of differential forms).

                                                                                          2. 4

                                                                                            Yeah, the author kind of buried the lede, never actually naming this system until the very end. I started out with my crank-radar tingling, but the position made sense, so after a while I skipped forward to find what this is called, and it seems legit.

                                                                                            i see some people dissing it in the comments, but as someone who sort of hit a wall in 2nd-year college physics, I can say that the math derived here seems a lot clearer than the stuff I remember bouncing off of when learning rotational mechanics or E&M.

                                                                                            1. 3

                                                                                              To be honest, I didn’t really intend to diss geometric algebra. I’m largely impartial to the topic since it’s been over 8 years since any of the code I write has been related to geometry or the physical world in any way. However, I do remember being really impressed back then with how that formulation holds together and it definitely broadens one’s horizons. I don’t think the excitement these people have for it is baseless, but they do sound like me when I’m trying to explain to my half-asleep great great aunt and her neighbor why everybody should be using Nix.

                                                                                          1. 2

                                                                                            You’ve raised good points I want to think about and reply to. It’s the weekend so I’m with the family, and given my posting rhythm I feel comfortable promising a reply in the next six months.

                                                                                            1. 2

                                                                                              I’ve never quite understood the reason to prefer this sort of deployment pattern for features rather than using environment variables or command-line arguments to toggle feature flags. I know that it is later-bound, which is preferable in general, but the extra moving parts look like additional maintenance costs to me.

                                                                                              1. 1

                                                                                                It starts making sense (to me, at least) once you have enough hosts. At work I’ve worked on systems running on around a thousand hosts, and being able to toggle flags without doing an infra rollout is nice.

                                                                                                1. 2

                                                                                                  At Google, flags were flipped using command-line arguments to containers, and special flag-flipping deployments could be done to only flip flags but not update or relocate containers. It did not impact velocity, because in practice, flag flips were batched and given their own deployment cadence.

                                                                                                  I worry that a fancy feature gate becomes an anxiety-relief tool where product owners can endlessly toggle features on and off in order to fine-tune the user experience. But feature gates and flag flips are not meant for that; they are meant to allow code to roll out incrementally without incrementally enabling new features, improving stability. Googlers were encouraged to deprecate and remove old flags as part of service maintenance. This cuts down on the overall number of code paths, improving code quality.

                                                                                                  1. 2

                                                                                                    I’ve seen this failure mode play out a number of times… the number of feature gates grows out of control and it becomes impossible to predict how the system is going to behave. It relies on gates not as a release control tool, but as some kind of central database that the product cannot work without, then bad things happen.

                                                                                                    Just like with any tool, there are trade offs and teams can shoot themselves in the foot if they don’t have any discipline.

                                                                                                2. 1

                                                                                                  The core idea is to separate the deployment of code from the release of features. Environment variables are immutable, updating them requires restarting processes. When there are a few hundred instances of a program running, restarting them all can take hours sometimes. This means that if something goes wrong, you need as much time to rollback to a stable state as you have spent rolling out the latest version, meanwhile your customers are suffering from the software defect.

                                                                                                  Decoupling the deployment and release using feature gates helps scale engineering teams and reduce the risk associated with shipping software updates. Propagation of feature gate changes is <10s, and so is the rollback time in case something goes wrong.

                                                                                                  But the major advantage of feature gates is the ability to target specific customers, or groups of customers, to enable the updates for. A typical release driven by feature gates will go through a dozen updates, enabling customer tiers from the least risky to the most; which are usually from free to highest paying accounts. This can be expressed with immutable configuration as well, but would require a restart of the fleet each time a new customer tier is enabled.

                                                                                                  This is not the only way to solve these problems, but it is one that is often useful.