1. 13

    A person I know who was active on Twitter around 2010 said that he felt at home with the geeky culture on twitter then, and regrets the loss of that culture as twitter became more mainstream and politically relevant on an international scale. I suspect that some of the homey feeling of mastodon is this same effect - because of its newness, and lack of backing by an expansion-seeking corporation, it hasn’t attracted enough people the author doesn’t like yet. Just like Twitter in 2010.

    This doesn’t mean that I’m anti-Mastodon. In fact, I’m strongly in favor of it, and I hope it gains more adoption as a competitor to Twitter. I’m always in favor of open, decentralized platforms that are not controlled by a profit-seeking corporation. But I’d like to see the author revisit this article in 1 or 3 or 5 years, if the same people who he thinks make Twitter a “garbage pile” are on Mastodon as well.

    Of course one crucial difference between Twitter and Mastodon is that by design Mastodon makes it easy for communities to arise that have the power to systematically block content they don’t want to see. So maybe even in that future, the author would still feel “at home” on Mastodon, and so would the garbage pile people, and everyone would be happier than they are today.

    1. 6

      if the same people who he thinks make Twitter a “garbage pile” are on Mastodon as well.

      Some of them are already on the Fediverse, if not using Mastodon. Each instance can control who it federates with, and life goes on.

      1. 2

        I have heard it is even better: sometimes instance A federates with B, but only for explicit subscriptions and targeted messages (not for global search etc.). In this case, communicating with both sides of the schism of the day becomes feasible even on individual-user level, not just on the instance-level.

      2. 3

        Of course one crucial difference between Twitter and Mastodon is that by design Mastodon makes it easy for communities to arise that have the power to systematically block content they don’t want to see. So maybe even in that future, the author would still feel “at home” on Mastodon, and so would the garbage pile people, and everyone would be happier than they are today.

        I’m not familiar enough with Mastodon to know how this works. But if it’s as you describe above, then given the current highly-polarized state of Western democracy, we must recognize the downside of a system that would encourage people to disappear even further into the comfort of their own ideological ingroups.

        To the extent that Twitter users are confronted with opinions they vehemently disagree with, that’s a good thing for society. (Even though it’s notoriously rare for such a disagreement on Twitter to lead to a productive conversation.)

        1. 5

          On the one hand it is true; on the other hand, having a global conversation seems to encourage everyone to take a side in every conflict, which drives the polarization even deeper. It is not enough to show people things they disagree with, you have to show mostly the high-quality examples of the opposing views for anything good to happen.

          Maybe overlapping personal bubbles could provide better diffusion of ideas by avoiding indestructible walls? I am not sure this would work, I just don’t think we have any obviously-better simple options.

      1. 3

        I like it. There are clearly performance downsides to CGI (and does httpd support concurrent requests to a single FastCGI backend?), but I could see myself using this for a lot of real-world projects where those downsides don’t matter.

        I think the key takeaway from this project is that while C-based CGI web applications have traditionally been a security minefield, there are now fewer mines in that field thanks to usable sandboxing mechanisms like OpenBSD’s pledge(2) and wrappers like kcgi. Developers still need to worry about vulnerabilities that could leak or change internal application state, but the application itself can be fairly well contained without dealing with containers/jails.

        1. 3

          As far as I can tell from browsing the source code to httpd it does not support concurrent (fastcgi multiplex) requests to a single fastcgi backend. I don’t think nginx supports this either though. For higher performance you might just need to use proxy_pass in nginx which does support concurrent requests.

          1. 2

            IIUC, FastCGI has no notion of flow control when multiplexing connections, which seems a little scary if you have high load.

        1. 22

          This reads a lot like “Kotlin is better than Java, hence better than any other language”

          1. 12

            I think it’s because the article has the unstated premise that you’re stuck with Java for one reason or another—because of Android, as in the author’s case, or because the codebase you’re paid to work on is already written in Java. By “whatever dumb language”, I get the feeling that he really does mean precisely Java here.

          1. 1

            I am reminded of the article “The Profound Weakness of the .NET OSS Ecosystem”, by a developer frustrated by the lack of .NET alternatives to certain kinds of frameworks taken for granted in the Java ecosystem (Akka in particular). I wonder whether this would change his assessment of the landscape any?

            For my part I think this is a step in the right direction for Microsoft’s standing in the open source developer community—one of many we’ve seen them take lately.

            1. 4

              Very interesting, thanks for posting this.

              For someone who hasn’t had the chance to read through all the documentation (yet), what are the main ways Bond differs from Protocol Buffers?

              1. 9

                Hey, OP here.

                The current offerings (Thrift, ProtoBuffs, Avro, etc.) tend to have similar opinions about things like schema versioning, and very different opinions about things like wire format, protocol, performance tradeoffs, etc. Bond is essentially a serialization framework that keeps the schema logic stuff the same, but making the tasks like wire format, protocol, etc., highly customizable and pluggable. The idea being that instead of deciding ProtoBuffs isn’t right for you, and tearing it down and starting Thrift from scratch, you just change the parts that you don’t like, but keep the underlying schema logic the same.

                In theory, this means one team can hand another team a Bond schema, and if they don’t like how it’s serialized, fine, just change the protocol, but the schema doesn’t need to.

                The way this works, roughly, is as follows. For most serialization systems, the workflow is: (1) you declare a schema, and (2) they generate a bunch of files with source code to de/serialize data, which you can add to a project and compile into programs that need to call functions that serialize and deserialize data.

                In Bond, you (1) declare a schema, and then (2) instead of generating source files, Bond will generate a de/serializer using the metaprogramming facilities of your chosen language. So customizing your serializer is a matter of using the Bond metaprogramming APIs change the de/serializer you’re generating.

              1. 7

                I like the aesthetic of pattern matching and I agree that it can make things more readable, but this article presents a false dichotomy between either pattern matching with enum type safety, or procedural languages without it.

                In the event that branching on the language is rewritten as a switch statement, I was surprised to find that Microsoft’s C# compiler apparently does not have any flags to enable the desired warning (at least such that I was able to find with a cursory web search). However, this isn’t a fundamental limitation of procedural languages. Take the following C99 code and compile it in GCC:

                https://gist.github.com/318f6047ad167cf7cd15

                You’ll get the following error message if -Werror=switch is specified (which is implied if you compile with -Wall -Werror):

                % gcc-4.8 -Werror=switch -o switch switch.c
                switch.c: In function ‘convert’:
                switch.c:13:2: error: enumeration value ‘GERMAN’ not handled in switch [-Werror=switch]
                  switch (lang) {
                  ^
                cc1: some warnings being treated as errors