1. 12

    This is a little off-topic, but I wonder if companies choose to use complex solutions such as a SPA or Kubernetes to attract and more importantly, retain talent. If you’re trying to get experience in the industry (ages 22-28 usually) to build a solid career, would you rather work at a place that uses the latest tool so you can put it in your résumé? The code quality or technical debt is irrelevant - you will most likely work somewhere else in a few years.

    This even happens with companies that do use SPAs. On HN I read a comment from someone at a company using Ember saying they have a hard time hiring because people want React experience instead.

    1. 3

      My company is exactly doing that, the engineering management forces the teams to adopt latest technologies because it’s a pain to recruit in our area without “cool” technologies.

      So it’s down to “go + react + kubernetes”…

      1. 2

        If companies paid developers what they were worth and gave them a real stake in the profits they generate they wouldn’t have to play stupid games with shiny technology.

        However, techies are generally stupid short-sighted and are willing to chase shiny instead of getting paid. This hurts all of us.

        1. 2

          This sounds very plausible to me. I feel like you’d be considered a dinosaur for using Ember nowadays. Perhaps using the word “nowadays” would also encourage the same label :)

          I’m now using jQuery again because of a code base I inherited at work.I feel like a certain segment of the population would find that fact appalling or, at the very least, strange.

          1. 2

            Absolutely. Talented people got that way because they like to learn. If you want to acquire and keep them, you have to provide them with opportunities to learn the things that they want.

          1. 10

            Another Dockerless alternative: put your data directory on a tmpfs file system. If you want to make setup a breeze, you can keep your pre-start state on a real disk and rsync it to tmpfs at the start of every test run.

            For mysql, other than what folks have already said, you can use the MEMORY engine for your database.

            1. 1

              for testing the sled database a few thousand times per day I do something similar by running most tests in /dev/shm

            1. 4

              Sounds like all these arguments apply to any threading program. Go is not the same as Goto because you keep your thread of execution, despite adding another.

              1. 2

                Yes, they do apply to any threading program, which is the point—you’re applying the analogy too literally. Goto is a low-level mechanism that was (largely) replaced by a higher-level mechanism (structured programming) that did the same work in a much more understandable and reliable way. In SAT terms, goto is to structured programming as today’s thread APIs are to structured concurrency.

                1. 2

                  We did have C style concurrency with pthreads, that just sucks. The go statement gives us back our ability to thread without the boilerplate. Nurseries remove the ability to “just take care of it while I’m not looking” with more boilerplate.

                  1. 3

                    Are the if/then and for statements just more boilerplate too, then?

                    1. 0

                      Yes. If we could do with zero boilerplate we would. Look at Shell with its && and || making it fast to test assumptions without the boilerplate of an if.

                      1. 5

                        Any time I look at raw TLA+ I’m reminded of how much I appreciate abstractions above logical dis/conjunction

                    2. 2

                      The article literally lists pthreads as an example of the “go statement.”

                1. 1

                  This connects pretty well with how I like to introduce these concepts while giving rust trainings. Thinking about mutable vs immutable borrows similarly to RwLocks (for crowds that have concurrency experience) really makes it click effectively.

                  1. 4

                    The bit about how it’s hard to tell what will close a Reader/WriterCloser underneath you is super valid. I’m not sure how you’d manage that without some kind of “reference count” or similar (i.e. only actually close until the count hits zero).

                    Another awkward use case is how to write http middleware that hash-sums a post body (i.e. for slack webhook validation) and then also lets inner actions read from the request post body.

                    1. 6

                      It’s simple. If you pass a *Closer to something, you should assume that something is going to close it. Otherwise you’d just pass it a Reader or a Writer.

                      1. 2

                        Not everyone gets the memo that this is the way it’s supposed to work. Very often, folks will create large interfaces and pass them around, with no intent on using everything defined.

                        1. 2

                          Sure, but at a certain point, what can you do about people ignoring the docs and even the sort of high level guidance of the language? I mean, deep reading docs is hard, reading the go proverbs isn’t https://go-proverbs.github.io/ – and you only have to get to the 4th one to get to “The bigger the interface, the weaker the abstraction.”

                          1. 5

                            “The bigger the interface, the weaker the abstraction.” says very little to someone not engaged in deeply understanding it.

                            Obviously, we can’t throw our hands up and say, “what can you do? People will be people!!!” What we can do is ensure that code we write and review takes these principles to heart, and shows the value of it.

                            1. 2

                              Absolutely, and after doing all that – people are still going to write terrible code that directly goes against all the norms and recommendations. I am all for doing our level best to try to guide people – but leading a horse to water and all that.

                        2. 1

                          I think this is true, but it basically means you should never pass a *Closer unless you really really have to. The callee should manage the IO lifecycle.

                          I would even go so far as to say one of the heavily opinionated Go linters should warn (maybe they do, I have never checked because I don’t think highly opinionated linters are a good idea for anything but beginners).

                          1. 1

                            This makes sense, but two difficulties.

                            1. Still requires careful analysis of docs. It’s very easy to pass a closereader off to a function taking a reader.

                            2. You can’t just pass something like a gzip.reader to another layer. Even if that layer closes, it doesn’t close the bottom.

                            1. 1

                              When I read stuff like this I change my mind about go being a language that can be learned in a weekend.

                              1. 1

                                You can certainly pick it up and use it effectively in a weekend, but surely you couldn’t learn the ins and outs of anything substantial in just a weekend.

                            2. 4

                              Between io.TeeReader and io.Pipe I think you can probably wire something up. There’s a decent amount of “plumbing” included, although it took me a few passes through the docs to find it all.

                              1. 4

                                Yeah, its quite worth it to read through the whole std library docs, I seem to find a new thing each time I skim it again.

                              2. 1

                                how to write http middleware that hash-sums a post body (i.e. for slack webhook validation) and then also lets inner actions read from the request post body.

                                I’ve had to do something like that and I ended up writing a small TeeReadCloser struct that wraps TeeReader but also has a Close method that closes both the reader and the writer. You can probably get by with a version that takes a WriteCloser like mine and one that just takes a Writer and combine them as needed, though I wonder why they couldn’t just put these in the standard library.

                              1. 8

                                I’m not a fan of n-gate. (I have no general issue with the profanity, I just don’t find it creative. Read one, read all.)

                                Still, I’m a bit surprised that it doesn’t lose a word about Rust, one of his hot topics in the last years :). We made it :).

                                1. 8

                                  I just don’t find it creative. Read one, read all.

                                  Counterpoint: Medium blogs, of which we must suffer an endless barrage.

                                  1. 6

                                    It’s not a tug of war, both can have this quality.

                                  2. 2

                                    Maybe he just got bored with the repetition. It was getting redundant even to him. It was leave it off for a day or troll himself about it.

                                  1. 7

                                    This is a pointless article, really. There are so many ways of doing safe concurrency in Haskell, and yet, the author chooses a very unidiomatic unsafe way, which happens to highlight Rust’s type system’s fundamental strength. The one thing the whole language is built around.

                                    What’s at fault here is the secret function. You can’t just accept an arbitrary IO action and run it concurrently with any other arbitrary IO action. Haskell gives you so many ways to encode your expectations from your arguments, so secret should be more conservative about what it accepts if it’s planning to run it concurrently.

                                    1. 11

                                      I don’t think it’s pointless. Your argument applies to any language, even C++. C++ gives you primitives for composing safe concurrent programs but I wouldn’t say articles pointing out how hard it is to do so in practice are pointless. The main takeaway from the article is as you said, effectful computation is hard. I don’t think that’s pointless.

                                      1. 9

                                        The difference is that the IO ref he’s using causes a gagging response in a Haskeller, and it’s definitely a red flag that you’ll have to justify rigourously to anyone reviewing your code. Whereas in C++ you’re defining the equivalent of an IORef every second line, so an error like this can easily slip through. In a way, using an IORef is like an unsafe block in Rust.

                                        So, it’s not that Haskell gives you safe primitives, it’s that the natural, easy, idiomatic way to write Haskell is safe.

                                      2. 3

                                        I have a similar reaction to most articles that complain about Rust allowing unsafe things to be expressed. Haskell STM is a dream. Both languages give you plenty of escape hatches that can be misused, but we’re able to write such nice libraries abstracting over the dangerous parts because of them.

                                        1. 1

                                          I’ve never heard of anyone having a problem with Rust allowing unsafe things to be expressed. I think you’re misrepresenting the argument against how ‘unsafe’ works in Rust.

                                          The problem is that once you have ‘unsafe’ anywhere in your code, it becomes very difficult to control how much code must be written with that in mind. Changing some code not marked unsafe can create memory unsafety that wasn’t there before. That’s a really bad attribute to have.

                                          1. 1

                                            Yup, just like the escape hatches in haskell. We have two usable languages because of them.

                                            1. 1

                                              ‘Haskell does it’ is not an excuse.

                                            2. 1

                                              The problem is that once you have ‘unsafe’ anywhere in your code, it becomes very difficult to control how much code must be written with that in mind. Changing some code not marked unsafe can create memory unsafety that wasn’t there before. That’s a really bad attribute to have.

                                              This is also misrepresenting, I must say. unsafe blocks and functions are specifically not allowed to mess with the surroundings. Especially, if you take safe types in and give safe types out (borrows, lifetimes, owned data, etc.), you have to hold all their invariants (e.g. that &mut doesn’t alias). Also, unsafe code might express expectations on the direct caller (e.g. “this function could be called twice to produce two &mut references, which is why it is unsafe and you must make sure that you don’t do this”). But that’s all very localised.

                                              There’s bugs in implementing this, and they might bite you far down the road, but nothing that people have to keep in mind in the scope of a larger codebase.

                                              1. 1

                                                This is also misrepresenting, I must say. unsafe blocks and functions are specifically not allowed to mess with the surroundings.

                                                They absolutely are allowed to. If they couldn’t mess with their surroundings, they simply wouldn’t do anything.

                                                Also, unsafe code might express expectations on the direct caller (e.g. “this function could be called twice to produce two &mut references, which is why it is unsafe and you must make sure that you don’t do this”). But that’s all very localised.

                                                It’s not localised. Any module with unsafe has to be analysed as a whole. You cannot just look at the parts marked ‘unsafe’. If ‘unsafe’ is anywhere in the module, you have to look at the whole module, and the result of looking at the whole module might be ‘the behaviour of this module depends on the behaviour of other modules too, we have to look at all the rest of them’.

                                                People say things like ‘unsafe is good, because unsafe operations can only happen inside unsafe blocks’. And that’s true, in a sense, but it’s also false in a sense. Unsafe operations in the sense of ‘things that can have undefined behaviour’, yes. Unsafe operations in the sense of ‘things that can cause undefined behaviour later’, no.

                                        1. 8

                                          I’m really excited about Quinn, as it addresses a number of issues I’m trying to mitigate in a replication system I’m designing and implementing in rust:

                                          • a phone switching networks frequently as it’s synchronizing a database
                                          • HOL blocking while sending a mixture of metadata, blocks, and large blobs
                                          • kernel TCP bottlenecks
                                          1. 1

                                            If you’re worried about kernel TCP bottlenecks then you haven’t experienced the UDP bottlenecks. Kernel TCP can do a lot to improve performance.

                                            1. 1

                                              https://conferences.sigcomm.org/imc/2017/papers/imc17-final39.pdf

                                              ¯_(ツ)_/¯

                                              I’m curious about your experiences though, what are you specifically thinking of when you say that?

                                          1. 4

                                            Hmm, I’m not sure about QUIC. Witch TCP, every process used the in-kernel implementation of TCP. Now, every programming language has to make their own implementation of the transport layer protocol. What could possibly go wrong?

                                            1. 7

                                              The kernel could implement most of QUIC in the networking stack.

                                              TCP is showing it’s age a bit and I think QUIC is worth the pain of switching over, even if it means hitting a few roadbumps on the way.

                                              1. 6

                                                In practice, modern languages already face significant fragmentation if you want to interact with modern distributed systems :/ It’s not like the kernel handles HTTP, gRPC, thrift or any of the other things whose varying support across languages tends to impose significant constraints on the engineers who can interact with the systems that speak them.

                                                But at least Rust is easy to embed :]

                                                1. 4

                                                  IIRC, a network driver installed TCP/IP on Windows long ago. Maybe Windows 12, Linux 5, and macOS 10.17 will have QUIC built-in?

                                                  1. 1

                                                    Yes, so there will be a transition period where application layer software will have the QUIC stack built-in.

                                                    1. 3

                                                      But! Keeping it in the application layer has been described as a benefit. As with many recent protocol things (TLS1.3) a big goal is preventing ossification, and not putting it in the kernel goes towards that.

                                                  2. 3

                                                    Maybe QUIC is something that can be implemented in the kernel networking stack in the future, once it is seen as viable protocol when enough applications are using it.

                                                    1. 3

                                                      That is true, and it seems this already has been done by some researchers.[1] However, as the kernel currently does not support is, languages will probably still implement it for legacy clients to take advantage of speed improvements to servers that support QUIC. I hope this mess of different implementations will be avoided.

                                                      [1] https://dl.acm.org/citation.cfm?id=3242106

                                                  1. 19

                                                    Urbit’s innovations have stood in the dark shadow of moldbug’s neofeudalist writings. Every time Urbit comes up in conversations among crypto people here in Berlin, someone in the group says “but have you looked at what Curtis wants the world to look like?” and then the subject changes.

                                                    I think it’s good for the project that people can say “yeah but he’s gone now, what do you think about the ___ mechanism?” since there are some interesting ideas to examine in there. They built everything from scratch. A VM, a language, a filesystem, etc etc etc…

                                                    But still, this is kind of like if Terry had stepped away from TempleOS.

                                                    1. 7

                                                      The whole concept as I understand it seems pretty interesting, but come on - the entire ecosystem of Urbit is still absurd. Hoon, the weird new pronunciation scheme you have to learn, the obtuse naming schemes…

                                                      1. 3

                                                        I found the weird names annoying as well, but Curtis does come up with a valid reason for this, in that everything gets rewritten and refactored multiple times, so “…it lets the hard problem of naming get solved later, and hence better.” As the system gets more mature, and actually usable, it would be nice if they came up with some meaningful names for the bigger components (e.g. rename Ford to Build System). He also admits his biggest mistake was assigning 1 to false and 0 to true. I’m sure this was a result of his habitual contrariness.

                                                        1. 4

                                                          I’m sure this was a result of his habitual contrariness.

                                                          Or perhaps cognitive contamination from /bin/sh.

                                                      2. 10

                                                        Every time Urbit comes up in conversations among crypto people here in Berlin, someone in the group says “but have you looked at what Curtis wants the world to look like?” and then the subject changes.

                                                        And I find this quite baffling. It’s deeply disappointing that people whom I respect default to this gossip-driven analysis instead, that a project as ambitious and worthy as Urbit gets buried in “foogate” style rumors.

                                                        Urbit is fascinating. It is the only project I know of designed to address distributed problems (viz. community moderation, censorship, identity, ownership) from an incentive-based approach instead of the typical GNU-style “sheer will and religion” approach.

                                                        1. 34

                                                          Since Curtis apparently wants the world to be in a certain manner and more or less spun up his own world in Urbit, maybe it’s prudent to consider what Curtis’ opinions on things are before adopting the project that likely embodies them?

                                                          I’m not sure myself, but in a project like this, it may be hard to meaningfully separate creator and creation - even after the creator left (as the fundamental architecture is still shaped in his image).

                                                          1. 5

                                                            I think the new primer https://urbit.org/primer/ makes a good case that there is nothing actually feudal about Urbit in practical terms. Once you own a planet, the personal level of Urbit entity, you are free to have its traffic routed by any star, the network routing level, that will accept you. This could be a problem it Facebook or some government buys up every star in the system, which is unlikely for the foreseeable future.

                                                            1. 6

                                                              Once you own a planet

                                                              Of which there will be - by design (“Any reputation system needs scarcity of identity.”) - fewer than there are people on this planet right now (4 billion in total). Given how these systems work, it will be interesting to reclaim “lost” ones, reducing supply even further over time.

                                                              Will everybody else be a sharecropper? Or will they have to spin up their own network?

                                                              Now these identities can be subpartitioned (“moons”, again 2^32, and they’re bound to their “planet”), but if global network size doesn’t matter, why setup such limits in the first place? This isn’t the 1970’s anymore (as they correctly state in their marketing material).

                                                              This could be a problem it Facebook or some government buys up every star in the system

                                                              They merely need to control the galaxies: “The galaxies form a senate which updates the logic of the Ethereum land registry by majority vote”. The platform doesn’t seem to design elections for this “senate” into the platform.

                                                              “Tlon remains the guardian of the urbit.org galaxies. We have always wanted the address space to be widely distributed.” - address space, yes. But Tlon owns the right to repartition the entire platform as they “bought back” galaxies. Even if you “own” a planet, that’s only one of Tlon’s decisions away from not being yours anymore.

                                                              Since control over your data is bound to a planet, which is contingent of (at some point) a galaxy “sponsoring” you, and they can make up all the rules, it looks like just the same kind of sharecropping to me as any of the big vendor-lock platforms that make up the modern internet. Just with more obscure ownership.

                                                              1. 5

                                                                and they can make up all the rules

                                                                This is just dishonest. The “rules” are voted on by a senate, the same way the rules of the internet are voted on by the IEEE currently.

                                                                Tlon owns the right to repartition the entire platform as they “bought back” galaxies. Even if you “own” a planet, that’s only one of Tlon’s decisions away from not being yours anymore.

                                                                False. Owning Urbit addresses is like owning a bitcoin wallet. Tlon can’t take it away from you any more than Satoshi can.

                                                                (edit:)

                                                                if global network size doesn’t matter, why setup such limits in the first place?

                                                                Global network size does matter, as you quoted, “Any reputation system needs scarcity of identity.” It seems to me like you are giving Urbit a bad-faith reading. If you try a good-faith reading, try the “principle of charity”, you might find that you agree with Urbit more than you realize.

                                                                1. 3

                                                                  The “rules” are voted on by a senate

                                                                  Who or what makes up the senate? I quoted the part of their marketing material already and to me it looks like absolute rule by whoever controls a majority of galaxy nodes, so 129 hosts. The rules they vote on make up the “land registry”, from which, apparently, everything else is derived.

                                                                  “Any reputation system needs scarcity of identity”

                                                                  Yes, I quoted that.

                                                                  But how is a reputation system relevant to what you can or cannot do to your append-only data log? I prefer scuttlebutts solution to approximately the same problem: you keep your log, I keep my log, and if I decide to trust you, I also look at your log (and parse the bits you decide to share with me by giving me the keys).

                                                                  No need for reputation except the reputation that already exists in the real world, that makes me decide whether to trust you.

                                                                  [edit to add: the Urbit folks claim elsewhere that galaxies and stars are entirely meaningless, but since they’ve been made part of the fabric that makes up the platform, by having them spawn each other and planets, they can’t be that meaningless. Otherwise, why add them in the first place?]

                                                                  1. 3

                                                                    Who or what makes up the senate?

                                                                    Galaxy owners. See the bottom of https://urbit.org/primer for the distribution. I don’t think anyone really knows exactly how this will work yet, the owners are pretty well distributed with nobody owning 51% of the address space.

                                                                    But how is a reputation system relevant to what you can or cannot do to your append-only data log?

                                                                    It’s not. A reputation system is relevant to how valuable my Urbit is. If I start spamming people with my planet, then the star that is my supervisor can stop sending me packets. I could move to another star, but if my reputation gets bad enough, nobody will want to send/receive my packets, and my Urbit will become worthless, I wouldn’t even be able to resell it. This is not the case with e.g. email addresses, which spammers can create ad infinitum. That is the only reason for the scarcity of addresses.

                                                                    Re: the append log, only I can write to that, no different than scuttlebutt.

                                                                    Also, nobody claimed galaxies and stars are meaningless; they are network infrastructure responsible for routing packets. They are arbitrary in that a planet doesn’t really care which star it’s getting packets from, just like you don’t care which AWS data center is serving you a website.

                                                          2. 17

                                                            Paraphrasing a comment I made about Jordan Peterson’s work - learning Urbit and the weird way it is structured is a significant time investment. A simple heuristic to determine whether something is worth your time is to check what the creator of this thing is like.

                                                            In the case of JP, my impression is unfortunately only 3rd hand.

                                                            In the case of Jarvin, or rather his alter ego Mencius Moldbug, I have read some primary material, such as the following blog post:

                                                            https://www.unqualified-reservations.org/2013/01/how-bitcoin-dies/

                                                            Imagine that the BTC/USD market is perfectly liquid with no exchange overhead. Imagine also that there are two types of BTC users: Jews, who speculate (holding BTC long-term with the expectation that it will appreciate against USD); and Aryans, who only trade (and sweep all BTC balances into USD at the end of every day). These are simplifications, of course—but edifying ones.

                                                            Jarvin was (in my imperfect recollection) criticized for the use of these terms, and (again, iirc) replied that he was only being “provocative”. Fair enough, I’m sure Jarvin (and people of his ilk) have plenty of experience in discussing whether what they’re writing is only provocative or if they’re genuinely anti-Semitic (Jarvin identifies as a Jew, I believe). It’s a depressingly common occurrence online.

                                                            But from a step outside, looking at something to invest time and effort in, and seeing that a project is closely identified with a person I would never want to be associated with, it’s quite easy to choose not to delve too much further.

                                                            I also happen to believe that he (along with many cryptocurrency enthusiasts) are fundamentally mistaken about how economics work, and I discount Urbit for that reason too.

                                                            1. 0

                                                              In the case of Peterson, his work is philosophical, so that heuristic makes a large amount of sense. Although when dealing with someone so, uh, misrepresented by various groups, I’d think it would be more sensible to actually look at the (readily, freely available) source material.

                                                              I agree that it is a significant time investment to fully understand, but I think you can get a good approximation of his basic mindset by watching one of his non-combative interviews, or one or two of his (non-biblical) lectures .

                                                              1. 1

                                                                Thanks for the suggestions!

                                                                I was a bit unclear when I wrote:

                                                                In the case of JP, my impression is unfortunately only 3rd hand.

                                                                I meant it in the narrow sense that I cannot offer any first-hand critique of his work. I’m really hesitant to parrot statements like “Person X holds Y views” unless I’ve verified this personally.

                                                                (I’d love to post a link to my comment but it’s really hard to find on the site, I’ll try to update if I can find it)

                                                                However, there’s a limit of how much time I’m prepared to spend just to be able to defend or criticize someone. In JP’s case, my desire to engage with his work is minimal since his most well-known public stance is vociferously anti-trans.

                                                                1. 1

                                                                  In JP’s case, my desire to engage with his work is minimal since his most well-known public stance is vociferously anti-trans.

                                                                  This is a good example of why it is worth going to the source. Peterson is not anti-trans, which he has stated many times and demonstrated by having respectful, productive interviews with at least one trans person that I can think of (Theryn Meyer).

                                                                  The popular narrative conflates his objection to compelled speech in general with his objection to trans people (who were the subject of a particular piece of compelled speech legislation).

                                                                  1. 2

                                                                    I was prodded by your comment to read up a bit more about the entire Canadian controversy that I referred to.

                                                                    You’re correct, based on the reporting I’ve read JP can’t be denoted as anti-trans. Thanks for encouraging me to learn more about this issue.

                                                                    1. 2

                                                                      Thanks for being open to revisiting your views; that’s a remarkably rare virtue.

                                                              2. -1

                                                                if they’re genuinely anti-Semitic (Jarvin identifies as a Jew, I believe) … are fundamentally mistaken about how economics work, and I discount Urbit for that reason too.

                                                                What? You seem confused. Urbit is a technological structure, not a political one or economic one.

                                                                1. 15

                                                                  Urbit is a technological structure, not a political one or economic one.

                                                                  The entire premise of Urbit is the ownership of “scarce resources” (analogous to physical land) where one can seek rent. That’s both economic and political.

                                                                  1. 3

                                                                    Ok, but that’s no different from DNS.

                                                                    Also:

                                                                    Urbit’s distribution and sponsorship hierarchy of galaxies, stars and planets is not designed as a political structure, or even a social structure. The actual social layer is in userspace – one layer up.

                                                                    Socially and politically, Urbit is a flat network of planets. Galaxies and stars are plumbing. No one cares which star is your sponsor, any more than your Facebook friends care who your ISP is, or you care what data center Facebook is in.

                                                                    1. 5

                                                                      Ok, but that’s no different from DNS.

                                                                      DNS is absolutely a politic, economic and technical structure.

                                                                      1. 3

                                                                        You’re misunderstanding structures and the downstream implications that these structures cause. DNS is a techincal structure that has implications which are technical, political, and economic.

                                                                        The US Congress is a political structure which has implications that are political and economic (and sometimes technical, in the case of, say, regulating Facebook data privacy or whatever).

                                                                        1. 6

                                                                          DNS isn’t just a technical structure. The distinction between structures and implications (which I don’t think is useful in this context anyway) does to economics, but DNS does make political/social choices - for example, the number of root servers, control being hierarchical rather than distributed, and so on. All of these are both technical and political choices that the project makes, and that’s after generously excluding the organisations, committees, and documents that make DNS work.

                                                                          Urbit’s choice to have “scarce resources” is an intentionally different political choice from the one DNS made, which never intended to hit the resource limits we currently have with IPv4 - which is why we now have IPv6, and an address space where addresses becoming scarce is almost entirely implausible for the foreseeable future. Urbit’s choice was made with full knowledge of how scarcity effects these systems, making it absolutely clear that the design decision is political, not technical.

                                                                  2. 6

                                                                    Is there an example of a technology that doesn’t have political or economic implications? Considering the potential scope and impact of Urbit beyond its technological contributions seems especially important since it seems to me that it’s trying to alter the current conventional paradigm for internet services.

                                                                    1. 3

                                                                      Is there an example of a technology that doesn’t have political or economic implications?

                                                                      No. And I didn’t say it doesn’t have political/economic implications, in fact it definitely does. But in my opinion, the Urbit political implications are better than what we currently have. Consider:

                                                                      Socially and politically, Urbit is a flat network of planets. Galaxies and stars are plumbing. No one cares which star is your sponsor, any more than your Facebook friends care who your ISP is, or you care what data center Facebook is in. … Because sponsorship has an escape mechanism, it is not a feudal bond (like your relationship to Facebook).

                                                                      Urbit is a decentralized network of social networks. No one can regulate it. Urbit is made to blossom into an endless garden of human cultures, each of which must regulate itself, none of which can bother the others. The soil in which these flowers grow must be level and neutral.

                                                                2. 7

                                                                  I agree. It’s a kind of politics that makes people weak centered on our basic instincts of us vs them. The better route is to separate the two, ignore whatever bullshit he writes on his blog, focus on his technology, identify what good/bad can come out of it, and (if good) then either adopt or clone plus compete with it. The adopt or clone decision is where you consider the person. Even then, it’s not their political ramblings so much as what they do in a development and business context day to day. A person with strange beliefs who acts civil and hard working around others in a business is fine with me.

                                                                  Edit to add: Work in diverse company with piles of people each with different beliefs, some diametrically opposed. We somehow still function and mostly get along with each other. Different mindset with effort put in is all it takes. Makes job more interesting, too.

                                                                  1. 4

                                                                    Except Urbit is deeply rooted, in its design, by Jarvin’s beliefs about politics and economics. A technology can’t stand in isolation from its context when its a deeply social technology like Urbit.

                                                                    1. 5

                                                                      That’s a statement of faith, not proof. Assuming no patent risk, I can literally take his tech, distill out ideas useful to me, and use it for those things. I could’ve done that without ever knowing what his political beliefs are. I can do it while knowing what his political beliefs are. I can even do it to support things he opposes. Therefore, they provably don’t matter if I’m not partnering with him.

                                                                      They matter to you or others like you who feel a need to combine a person’s political beliefs or statements with everything they do. You’re limiting yourself voluntarily for ideological reasons. I intentionally avoided limiting myself that way since it reduces what I can get done with no value in return. My opponents who control the world in damaging ways also don’t limit themselves like you: they’ll work with or fund people whose beliefs or personalities they can’t stand if it achieves common goals. Got them where they are. Defeating them to stop real damage (vs crap people write on Internet) will take all kinds of people working together despite differing beliefs.

                                                                      1. 5

                                                                        Oh don’t get me wrong, I’m all for appropriate parts of technology for uses outside their design. My statement wasn’t about restricting yourself. What I mean is that (and this is especially true in software) the design of a technology is better understood when looking at the “whys” and not just the “hows”. For example, why does Urbit limit its address space? It’s not a technological limitation. In fact, there are lots of parts of the system built around the idea of artificial resource scarcity. Without understanding this system “top”, which covers many lines of code in various components, how are you going to properly take what you need if say, you don’t want that silly limitation?

                                                                        A person with strange beliefs who acts civil and hard working around others in a business is fine with me.

                                                                        I find that a person with “strange beliefs” (to put it nicely) is also a strange person to work with. Most work is communist in nature ( in the Graeber definition of “from each according to their ability, to each according to their need”). When you ask for a code review, your colleague typically doesn’t say “I will do it but what will you do for me?”. If you need a wrench, the guy next to you doesn’t go “Only if you give me $1”. If the friction is low enough, or need great enough, people will typically do it. Any strange beliefs that stray away from this kind of work ethic typically make all work far less efficient, and even unworkable.

                                                                        1. 2

                                                                          In fact, there are lots of parts of the system built around the idea of artificial resource scarcity.

                                                                          Ok, now I agree with you there. What you’re talking about, though, is design goals. I’m all for understanding them since I need to understand the rationale behind the decisions. I think I avoided Urbit when I saw cryptocurrencies or something mentioned. The rationales might have a political component. I can still ignore that if I choose. Sometimes, I learn from it like with privacy techs whose features might be inspired by sneaky behavior of companies or governments. One can still separate design requirements from political motivations in most cases just by filtering and/or generalizing.

                                                                          “is also a strange person to work with. “

                                                                          Now, now, that’s jumping to conclusions. A person should be judged on what they actually do rather than hypothesizing. I only read a little on this guy with some people saying he’s really nice at conferences with informative talks. Some people said there were problems but those posts weren’t as specific. If he’s actually disrupting people, then he’s not a good guy to have around. If he’s not and is helpful, then he is potentially a good guy to have around. That’s how I do it with coworkers. It works with some being weird on occasion but they usually just avoid uncomfortable subjects if they know it bothers someone. Unless they’re assholes which is a different thing entirely. ;)

                                                                          “When you ask for”

                                                                          Since I know little about him, I’d say whoever you’re describing is a person that demands something in return for his work. Presumably, the employees aren’t working for free. They’re doing that, too. I’m also aware of, experienced a lot of, people trying to be users getting others to do their work for them or get something from nothing. They’re not give and take people so much as take, take, take. One strategy for dealing with that is to be a no, extra, free work by default person who is selective about their generosity. I just read an awesome article about such a transition recently.

                                                                          Now, that said, a person that acts like that can also be a drain on a business or not right for its culture. Not even political culture so much as performance standards. If they’re paid to do an app, the best team will always be supporting each other to get it out the door in whatever state the business needs. I’d not hire such a person that made everything a trade if they were already getting paid for an outcome that required that minor thing to achieve. I’d rather them be helpful by default covering for each others’ weaknesses and helping them improve on them. I’m sure you’re of the same mind on that, too. :)

                                                                          1. 6

                                                                            “is also a strange person to work with. “

                                                                            Now, now, that’s jumping to conclusions.

                                                                            Re-reading what I wrote I was definitely a little obtuse. Let me elaborate, I find people with his kind of ideas usually hard to work with. But that’s just my experience. I didn’t mean strange ideas in general, but “strange ideas” as in, his ideas. Reading previous articles, it seems his co-workers basically seemed to have done what you would do, basically tiptoe around those issues to maintain a polite atmosphere. Which is fine and probably the most appropriate thing to do in that situation.

                                                                            However, I think we can agree that we should not entertain asinine ideas. If he was a flat earther and designed his software to have a 2D address space because the plane is the way to go, we would certainly find that a strange design choice that introduces complexity. But for some reason when someone thinks some races are a better fit for slavery and that democracy is bad and incorporates those ideas into his design by having an ownership model based on those ideas, we seem to say “I can work with that guy, he is fine, he likes cats as I do”. To me, that’s just a form of support and validation. Maybe you are able to compartmentalize these things, but what if the person can’t and finds your support validation of the other stuff. I’m going to call in Godwin’s Law here and say, yes, Hitler also loved his mother and painted some nice stuff, but would I work with him on chemistry projects?

                                                                            1. 2

                                                                              If he was a flat earther and designed his software to have a 2D address space because the plane is the way to go, we would certainly find that a strange design choice that introduces complexity.

                                                                              I don’t know about you, but I would judge the idea as strange if I would not see the benefits of it, not because its author has different political views. If 2d addresses would solve many issues than it might be a good idea regardless of who came up with it.

                                                                              1. 2

                                                                                “But for some reason when someone thinks some races are a better fit for slavery and that democracy is bad “

                                                                                Those are actually specific examples where I’d consider not working with someone. Especially if the project was about individual empowerment and decentralization. I’ve still worked with people who had a white supremacist background. We’d occasionally have to call them out on their behavior if a discussion between them and black folks involved race. They’d make an advance which we sane, white people would block. They almost always walk off. Then, it’s done. They and the black folks usually get along day-to-day with one we just fired being missed a lot. Might shock you with the stuff you read on tech forums about what blacks, Jews, etc believe and need for inclusive environments, eh?

                                                                                “To me, that’s just a form of support and validation. Maybe you are able to compartmentalize these things, but what if the person can’t and finds your support validation of the other stuff.”

                                                                                Which brings me to this. Down here in the South, we know there’s lots of racists on each side. As we might say it, we know everyone has a bit of bullshit or crazy shit in their head. With a Christian majority, we’re also taught that people are inherently sinful with us needing to admonish it, be forgiving, and be patient in helping them get better. So, what of these people who think other races are inferior and individual decisions are worthless? How to get them further away from these beliefs?

                                                                                There’s only one thing that works that I can tell from observing where the South was and is today. That’s getting different people in one place forced to be around each other, tolerating each other, for long periods of time. For us, it starts in public schools where racist whites and blacks along with people in the middle are stuck together. Then in the workplaces. The process over time lowered that racist bullshit down to tolerable levels where the KKK-style people are fairly uncommon or rare depending on the area. They mostly hide from us. Even they often like black people where they are compartmentalizing what they learned to like vs what they were taught to hate.

                                                                                What you’re advocating is essentially enlightened people pushing out those who still need to learn stuff away from those who will teach them. Then, they cluster into groups of racists who continue reading garbage, hating on people, plotting, and planning. Many such shunned groups ended up voting for Trump last election since he was only one pretending to care about them. There was no way to reach them since the radical-leftist liberals succeeded in censoring them off as many forums as possible. They similarly created their own recruiting locals and drowning out opposition. Division and siloing at an all-time high on the net like it used to be in meat space in the South. (slow clap for radical liberals)

                                                                                We’re not showing support for these idiots: we’re showing them that people are better than they think. We’ll call them out where needed. If they disrupt too much and ignore warnings, we’ll eject them from that position so they know we mean business. They’ll have another chance to do better. Contrast that to radical-liberal doctrine behind CoC’s where statements on any medium or place will get people blocked from all places with similar CoC. See paragraph above for where that shit leads. My reaction is more patient and measured with a chance for people to learn over time. And it always takes time.

                                                                                1. 3

                                                                                  That’s getting different people in one place forced to be around each other, tolerating each other, for long periods of time.

                                                                                  I think this is absolutely right. I’m not advocating for people to splinter of and shun each other. What I’m advocating is people should not ignore bad ideas and make sure the other party knows. I’m not a moral relativist. And you are right about Trump folks feeling left out. You are also right that the liberals basically ignored them.

                                                                                  However, You are wrong that radical-leftists are liberals because they are not liberals. Radical leftists despise liberals just as much as the right does. But you won’t find that kind of discussion on Fox News or NY Times.

                                                                                  1. 2

                                                                                    I forgot about the definition dispute. My bad. Yeah, OK, your position seems a lot more reasonable. I like that. :)

                                                                                  2. 1

                                                                                    I’m a lot less patient and tolerant than I used to be: particularly of stupid stuff directed at someone else.

                                                                              2. 1

                                                                                The reason for network address scarcity is to make spamming cost-ineffective.

                                                                                Compare that with the state of email spam, where email addresses are basically free.

                                                                                1. 2

                                                                                  Alternatively, they could do something like bank-level verification checking government ID’s and requiring a deposit to create an account. Then, maybe fining whoever is spamming. Then, it should go down. Worst case with low or now fines, whoever is compromised will find out about that changing their credentials or reinstalling their system.

                                                                                  Jumping from “there’s spam cuz addresses are free” to “need network address scarcity” is the kind of unnecessary, risky solution that crowd is fond of. Better to just fix the problems in existing systems or design new ones with methods proven in existing ones. They have an irrational aversion to doing that for some reason.

                                                                                  1. 1

                                                                                    Relying on government ids is a centralized solution. Urbit is decentralized, thus needs a decentralized reputation system.

                                                                                    1. 2

                                                                                      It could be bootstrapped that way. The different organizations become part of the reputation system. Hell, it might even become a new service from banks and credit unions. They already often act as notaries.

                                                                                      1. 1

                                                                                        Yeah, I’d rather not have banks regulating my computer usage…

                                                                                        1. 2

                                                                                          Are you using burst transmission or a mesh network not connected to the Internet (doubtful)? Otherwise, you already use a centralized service via one of the big ISP’s that ID’d you and took payment with centralized currency. They also regulate your computer usage far as the network goes. Although they got issues, they’re still less volatile than most of these decentralized systems. The most popular ones, esp Bittorrent, operate over the centralized ones, too, for their benefits. That’s despite decentralized options being available for a long time. They’re too slow and unreliable.

                                                                                          It always interests me that you rely on centralized services on one hand with justifications but tell me in other areas there can be no justification for relying on centralized service. Make up your mind. Meanwhile, the inconsistency suggests to me that we can leverage centralized services as a component in these decentralization schemes.

                                                                                          1. 3

                                                                                            Decentralized computing infrastructure is something valuable we should work toward. We’re not there yet, but Urbit is a step in the right direction. Ofc sometimes its better to centralize some things, but in computing I’d rather have decentralized infra.

                                                                                  2. 0

                                                                                    Spamming is not the main motivation. The main motivation is to provide a source of funding to the company by selling the space. Oh, and the designer was a neo-feudalist which probably inspired the whole enterprise.

                                                                                    1. 3

                                                                                      The main motivation is to provide a source of funding to the company by selling the space.

                                                                                      I’ll add that I’m skeptical of all companies that look like pyramid schemes or at least just funnels of money to the creators in exchange for tech that’s highly risky. Throw in any cryptocurrencies to that list since they’re usually structured in an elitist way for founders. If it’s a money system, I want it done fairly by non-profits or public-benefit companies whose incentives will protect the currency, exchange, and so on. Preferably one that’s already profitable from another revenue stream where they don’t have to worry about trying to monetize the financial project. It can just breakeven with a slight surplus or donations to cover expansion.

                                                                                      1. 3

                                                                                        You are right on the money here.

                                                                                        1. 3

                                                                                          Great pun haha.

                                                                          2. 7

                                                                            Lol no one owes moldbug respect

                                                                          3. 5

                                                                            Whatever his political stance he’s still as excellent a writer as he was one the old Usenet. One of the more memorable flames on talk.bizarre was from his hand.

                                                                            1. 11

                                                                              I found him self-aggrandizing and subject to an inescapable superiority complex. When he writes philosophy he is unnecessarily verbose, so everything said seems tainted by trivial matters such as the author ego and it leaves me wondering whether the actual ideas expressed are self-sufficient or tainted by this ego: trying to project, to present himself: keeping at the marketing speak level and building an idea of himself, instead of leaving his ideas laid bare.

                                                                              It’s not precise, and he just reads like an insufferable prick. I found Urbit rather interesting though, but I can only rejoice that the project is now without this guy.

                                                                              1. 2

                                                                                I tried reading the linked post and couldn’t make heads or tails of it. Maybe because it’s written “in-universe” so to speak and therefore addresses those people familiar with the specialized terminology of the Urbit system.

                                                                            1. 2

                                                                              In my brief time in a research lab, I got to sit in on a lot of practice talks given to the advisors in preparation for presenting at larger conferences. The feedback almost always boiled down to not clearly answering these questions:

                                                                              1. what is the problem?
                                                                              2. where do existing solutions fall short?
                                                                              3. how can you do better?

                                                                              If these 3 things are clear (using tactics like those in the linked deck), the talk will usually go well.

                                                                              1. 3

                                                                                I quickly realized that without extensive unit test coverage (which I was not interested in writing for a learning experience), it was nearly impossible to determine whether I had achieved real correctness

                                                                                Unit tests don’t help very much for this kind of thing. When I write consensus algorithms, I build them on a simulator that chooses seedable pseudorandom delivery times (or drops) for messages sent from any node to another, iterating over the next scheduled message until a desired budget.

                                                                                It’s sooooo powerful to build distributed algorithms around an interface like this (in any programming language):

                                                                                fn receive(
                                                                                    current_time,
                                                                                    incoming_message,
                                                                                    from_address
                                                                                ) -> [(outgoing_message, to_address)];
                                                                                
                                                                                fn tick(current_time) -> [(outgoing_message, to_address)];
                                                                                

                                                                                My favorite recipe:

                                                                                • use quickcheck to generate a cluster with a set of weather events (partitions at certain times, slowness, probability of drops, etc…) that have a source address, destination address, start time, and end time
                                                                                • generate a set of participants that implement the above interface
                                                                                • generate a set of incoming client requests from a special client address, to a certain instance at a certain time
                                                                                • fuzzily call tick on the participants to get them to run any leader election logic etc…
                                                                                • for all outgoing messages (the return value of both functions in the interface) choose whether to drop the message based on the generated partition/weather set, and if not, choose a delivery time in the future. throw the message into a priority queue keyed on the delivery time
                                                                                • iterate over the priority queue, zipped with fuzzy+lossy tick intervals, calling the receive function for participants receiving a message, and tick for participants who have their tick function called
                                                                                • after a certain time is up, look at any responses that clients received. these can be treated in a similar way as a concurrent single node system calling a concurrent data structure, in terms of simple linearizability testing! this is so powerful! you can very easily know if your system is linearizable or not by permuting the different requests (bounding permutation by intervals where a response was observed before a request was received) and trying to find an ordering where all of the observed client responses are able to be received when being sent serially. if not, the system is not linearizable.
                                                                                • you can step through this in logical time based on generated delivery times. this lets us run the simulation many thousands of times faster than we could run it in a “real cluster”

                                                                                A Jepsen test takes 5 minutes to do a single run (after spending a month+ setting up the testing infrastructure and writing the code). We can do 10000 of these tests per second, and get a far gnarlier weather history. This lets engineers building the system run the simulation as part of a standard testsuite that they execute locally before opening a PR, and then getting a clear cluster trace of how things happened that should not have, when desired invariants are violated.

                                                                                1. 7

                                                                                  Almost all nontrivial filesystem usage is riddled with race conditions x_x

                                                                                  1. 7

                                                                                    This is why people want filesystems with snapshot support, like ZFS, BTRFS, APFS, and NTFS. That way, your applicaton doesn’t have to know how to deal with files changing in the middle of being read.

                                                                                    Or, you could just use a transactional DBMS.

                                                                                    1. 6

                                                                                      SQLite: a safer, better filesystem.

                                                                                      1. 8

                                                                                        D. Richard Hipp (the creator and main author of SQLite) has said many times that the goal of SQLite is not to replace other databases but replace broken file opening/writing.

                                                                                        1. 2

                                                                                          filesystem or about what it takes for a proper FILE* = fopen(…) implementation?

                                                                                          1. 5

                                                                                            I’m just saying I trust SQLite to do storage correctly, esp in presence of faults, than what most programmers, including me, roll by hand. It’s one of the rare examples where adding complexity to TCB reduces risk. No larger analysis or claim… just that.

                                                                                            1. 4

                                                                                              I apologise for being a bit too dense in my reply. What I meant was principally the same as msingle pointed out but with emphasis on the C view of “FILE” rather than as a whole filesystem; If you follow the nitty gritty details of actually getting something like the fopen/fwrite/… API to work reliably, which means accounting for concurrent access, locking, buffer management, integrity and so on you end up with something quite similar to SQLite. Minus the SQL part.

                                                                                              1. 1

                                                                                                Glad you elaborated cuz that last part is basically how I think about it. Easier to let it handle all that than get it right myself on every app every time, esp in a hurry.

                                                                                            2. 1

                                                                                              Do you want fopen to give you a view of a file, frozen at the moment of opening? I can see the advantages, but also aren’t there use cases that would not work? And it’s immediately obvious it would not be trivial - imagine a program that leaves a file open for days, or a file that is now open 100 times at different moments.

                                                                                              1. 1

                                                                                                There are ways of dealing with this efficiently in modern file systems. They basically use a copy on write and/or a log structure to efficiently allow multiple readers reading at different points of time in the files history without any of them locking the others for extended periods of time.

                                                                                                1. 1

                                                                                                  Yes, I just wonder if there are some edge cases that are not easy to think of - and also how copy-on-write semantics works with files that are not block structured in storage (extents or flash file systems). And just in my role as old person, re that “modern file systems” thing - http://www.yodaiken.com/2016/01/25/the-auragen-file-system/

                                                                                                2. 1

                                                                                                  In the spirit of keeping it as an acceptable “easy” file abstraction to avoid having to deal with the large number of edge cases, yes. It could possibly be done by some fringe use of current mechanisms via the memfd_create (+ sealing, linuxism) and exposing it back to FILE* via open_memstream. I think I would personally prefer to do it by having normal mmap take (yet) another flag that would enable Copy-on-Write- like behaviour to avoid the truncate()+SIGBUS case, but I am not exactly sure.

                                                                                                  1. 1

                                                                                                    Question is whether the trade off is worth it. After all, the problem here is backups of active files which is a dumb idea in the first place.

                                                                                              2. 2

                                                                                                Now that I reread what I wrote, bringing up DBMS’s is kind of off-topic. A general-purpose backup tool obviously can’t force everything on the system to use SQLite. It should be able to just request a frozen (Copy-on-Write) view into the file to handle this, like all of the filesystems that I previously mentioned support.

                                                                                                1. 2

                                                                                                  This requires your backup program to open the database and create a transaction to block changes. Most tar like backup programs don’t do that.

                                                                                                  1. 1

                                                                                                    Yeah that makes sense. Im chalking it up to speed reading while on first cup of coffee. My bad.

                                                                                                    1. 4

                                                                                                      That’s okay. I like sqlite, use it a lot, but there’s been some exaggerated love recently. There was another thread on HN a few days ago that also somewhat incredibly assumed you could s/fopen/sqlite/ and everything would be magically fixed. I think this is pretty dangerous without understanding how sqlite actually achieves its consistency.

                                                                                            1. 2

                                                                                              I’ll be hanging around the rust table a bit! Feel free to stop by or DM if you’re interested in geeking out/hacking on/learning about lock free programming, high performance databases, distributed systems and correctness testing techniques :)

                                                                                              Hoping to grow a few new contributors of all skill levels to sled, as the congress has proven to be a nice space for facilitating this in the past few years! (wow… sled is already a multi-year obsession…)

                                                                                              1. 7

                                                                                                This year I drilled into transaction protocol and consistency papers a bit, spreading out from storage engine concerns that occupied much of 2017 for me. Some of the ones that stood out for me were these:

                                                                                                I’m suspecting that in 2019 I’ll turn more attention to lock-free programming, replication, correctness testing, formal methods, and maybe more query compilation :]

                                                                                                1. 5

                                                                                                  As part of implementing transaction support in sled I’ve been writing an STM library for Rust with a focus on learning about how much of an STM implementation can be exhaustively tested, and how to build confidence in the areas where that is not feasible. As an API goal for this, I’d like to let people write a concurrent doubly-linked list without much more trouble than the current effort to write a non-concurrent singly-linked list.

                                                                                                  So far, I’ve just been applying parts of the Cicada paper, and intentionally violating constraints (changing equality operations on read/write timestamps, omitting certain checks etc…) and ensuring that tests immediately break.

                                                                                                  This week will probably see the implementation of a few hermitage-style tests that look for specific anomalies, but at high levels of concurrency and contention.

                                                                                                  Sled recently got support for reverse iterators and a monotonic ID generator that can dish out 75-125 million sustained ID’s per second on a macbook pro, and not double-allocate across crashes (although it will skip some), so the path to MVCC is pretty much clear now. I’d like to get the first version of a transactional database out by the end of the 35c3 this year :]

                                                                                                  Looking forward to seeing friends and family in the old country, flying to NYC on Saturday for a little more than a week!

                                                                                                  1. 7

                                                                                                    Can someone explain to me, a Rust tourist at best, why async/await are desirable in Rust when awesome sauce concurrency because of the ownership / borrowing model have been baked into Rust since its inception?

                                                                                                    FWIW I also really like the idea of working groups, and I think focusing on the areas where Rust gets the widest usage is super smart.

                                                                                                    1. 15

                                                                                                      The current Futures implementation exerts a lot of “rightward pressure” when you’re trying to chain multiple future results together. It works, and works safely, but it’s a bit messy to work with and there’s a lot of nesting to deal with, which isn’t easily readable.

                                                                                                      The async/await proposal is basically syntactic sugar to linearize logic like that into a straight-line set of reasoning that’s a lot easier to work with.

                                                                                                      1. 15

                                                                                                        The biggest problem with the current Futures, as far as my experience goes, is that the method-chaining style involves so much type inference that if you screw up a type somewhere the compiler has no prayer of figuring out what you meant it to be, or even really where the problem is. So you have to keep everything in your head in long chains of futures. I’m expecting async/await to help with this just by actually breaking the chains down to individual expressions that can be type-checked individually.

                                                                                                        Edit: And it’s desirable in Rust because async I/O is almost always(?) going to be faster than blocking I/O, no matter whether it’s single threaded or multi-threaded. So it doesn’t necessarily have anything to do with threads, but rather is an orthogonal axis in the same problem space.

                                                                                                        1. 5

                                                                                                          I hope a lot of care is taken to make it easy to specify intermediate type signatures. I know that in other languages with type inference I’ll “assert” a signature halfway through some longer code mainly as docs but also to bisect type error issues.

                                                                                                          1. 1

                                                                                                            Totally agreed. As far as I understand (which is not much), saying async foo(); is similar to return foo(); in how the language treats it, so you should be able to get the compiler pointing quite specifically at that one line as the place the type mismatch occurs and what it is. If you have to do foo().and_then(bar).and_then(bop); then it just says “something went wrong in this expression, sorry, here’s the ten-generic-deep nested combinator that has an error somewhere”.

                                                                                                            1. 1

                                                                                                              Async is the easier part. async fn will be sugar:

                                                                                                              async fn async_fun() -> String {
                                                                                                                // something
                                                                                                              }
                                                                                                              
                                                                                                              fn async_fun() -> impl Future<Item=String> {
                                                                                                                // something
                                                                                                              }
                                                                                                              

                                                                                                              In the back, this builds a Generator. await is setting up the yield points of the generator.

                                                                                                              async fn async_fun() -> String {
                                                                                                                let future = futures::future::ok(String::from("hello, i'm not really asynchronous, but i need quick example!"));
                                                                                                                let string: String = await!(future);
                                                                                                                string
                                                                                                              }
                                                                                                              

                                                                                                              So yes, the type mismatch would occur at the binding of the await and the right hand side is much easier to grasp. Basically, “and_then” for chaining can now largely be replaced by “await”.

                                                                                                          2. 1

                                                                                                            Ah, you’re right. I SHOULD know this in fact from the bad old days of Java when “Non Blocking IO” came out :)

                                                                                                            1. 1

                                                                                                              This has pretty much been my only major negative with rust up to this point, i’ve got three apps underway in rust all using Futures and it just starts getting hairy when you get to a certain level of complexity, to the point you can be hammering out code and when you get to your Futures chaining it stops you dead in your tracks because it’s hard to read and hard to reason about quickly. So i’m on board with async/await reserves for sure.

                                                                                                            2. 3

                                                                                                              This sums it up very well. I can do everything I personally want to do with Futures as they exist now in Rust. That said, I feel like async/await will really clean things up when they land.

                                                                                                              1. 2

                                                                                                                That’s interesting! I guess I’d mostly thought of async/await as coming into play in languages like Python or Javascript where real concurrency wasn’t possible, but I suppose using them as a conceptual interface like this with real concurrency underneath makes a lot of sense too.

                                                                                                              2. 9

                                                                                                                I believe async/await are desirable in all languages that implement async I/O because the languages usually walk this path, motivated by code ergonomics:

                                                                                                                1. Async I/O and timing functions return immediately, and accept a function to call (“callback”) when they’re done. Code becomes a pile of deeply nested callbacks, resulting in the “ziggurat” or “callback hell” look.
                                                                                                                2. Futures (promises) are introduced to wrap the callback and success/failure result into an object that can be manipulated. Nested callbacks become chained calls to map/flatMap (sometimes called then).
                                                                                                                3. Generators/coroutines are introduced to allow a function to suspend itself when it’s waiting for more data. An event loop (“executor”, “engine”) allows generators to pause each time a future is pending, and resume when it’s ready.
                                                                                                                4. “async”/“await” keywords are added to simplify wiring up a promise-based generator.

                                                                                                                In rust’s case, I think it was “implement generators/coroutines” which hit snags with the existing borrow checker.

                                                                                                                There’s a cool and very in-depth series of articles about the difficulty of implementing async/await in rust starting here: https://boats.gitlab.io/blog/post/2018-01-25-async-i-self-referential-structs/ (I’m pretty sure this was posted to lobsters before, but search is still broken so I can’t find it.)

                                                                                                                1. 8

                                                                                                                  “async”/“await” keywords are added to simplify wiring up a promise-based generator.

                                                                                                                  Going further: it follows the very general algebraic pattern of monad. Haskell has “do-notation” syntax which works for Promises but also Maybe, Either, Parser, etc.

                                                                                                                2. 8

                                                                                                                  In addition to the great explanations of others, here are a couple diffs where the Fuchsia team at Google was able to really clean up some code by switching to async/await:

                                                                                                                  1. 1

                                                                                                                    Interesting! That speaks to the Rust 2018 initiative’s focus on ‘embedded’ in the mobile sense.

                                                                                                                    1. 3

                                                                                                                      The initiative has been surprisingly successful. Most of my clients are currently on embedded Linux and smaller.

                                                                                                                1. 3

                                                                                                                  Hanging out at RustFest Rome, eating lots of good food and hacking on sled! In the last day I added support for reverse iterators, durable monotonic ID generation, and am slowly giving the documentation a facelift. Depending on how things go, sled might have MVCC and some basic transaction support by the end of the weekend :)

                                                                                                                  1. 12

                                                                                                                    It’s a lost cause on politics, friendlysock. The vast majority of votes in most threads favor political activism in both submissions and comments. They also favor a specific kind of leftist politics over others with consistent responses, positive and negative, over about a year. The recent thread prioritized political action, up to pushing a person to quit their job, over the technical content by around 6 to 1 votes when I last looked. Situation is similar for others. Also, low-content, political comments get more support at times than high-content, technical comments.

                                                                                                                    Conclusion: the Lobsters community isn’t what it was when you wrote What Lobsters Is and Isnt. It is now a community that prioritizes leftist, political activism over all other activities with a small, chunk of dissenters. It’s also a link aggregator whose content is a mix of that, stuff in your Is list, and stuff in your Isnt list. It’s dishonest to say anything else that doesnt reflect what majority of voting users promote and commenters do here.

                                                                                                                    Ill be updating my description of the site in near future to match its current mix of deep tech, HN/Reddit-like news, and leftist activism. Im also going to stop all poitical comments counter to that leftist style of politics since the dominant group has consensus that they’re not welcome here and therefore too low-impact to matter. I will note they weren’t censored: a strength of Lobsters’ moderation. Ill only comment like that further where it impacted or is aimed at me. I might also modify my submissions to reflect this community’s priorities putting the others somewhere else (eg a blog). I’ll note the changes in my profile so people in Lobsters’ minority, folks like us, can still follow that stuff if they choose.

                                                                                                                    I’ll probably start the process next year since November and December are so busy for me. I have some other ideas that might improve things further for both political opponents and minority folks (esp anti-politics for Lobsters). I think 2019 will be an interesting time for Lobsters.

                                                                                                                    1. 9

                                                                                                                      Im also going to stop all poitical comments counter to that leftist style of politics since the dominant group has consensus that they’re not welcome here and therefore too low-impact to matter.

                                                                                                                      I don’t think this is true, especially since you are the one of the few who call out the inconsistencies when you see them. The marginal value is especially important when there are few, going down from 5-4-3-2-1 against the endless horde of leftist posturing and virtue signaling makes every step the more damaging to reasons and honesty.

                                                                                                                      The reasoning that the dominant group has consensus isn’t even an argument in my mind. To follow this line of reasoning, one should only voice one’s opinions, or the truths if they agree with the consensus view. That is clearly a bad place to be in.

                                                                                                                      At the end of the day ethical questions will always be more relevant and more voted on. Because it impacts everyone, while technical issue can be both beyond your grasp (i.e. you don’t know enough about this particular tech to talk about it) or simply boring. Add to that the highly emotionally charged nature of ethics and politics, we shouldn’t really count number of votes and comments as to be metric by which to value opinions and discussions. I’m not going to stop speaking English because there are 15 billions or however many Chinese speakers (in some timeline).

                                                                                                                      1. 6

                                                                                                                        Thanks for the encouragement. Especially from someone who doesn’t back down on their own politics in this space. I agree with most of your comment. I’m even continuing to do the dissent in places where it counts (aka mostly real life). I’m just cutting it off for Lobsters. Maybe most of these online forums with low numbers of people with leftist activists in control. Which they definitely are now.

                                                                                                                        You see, your post presumes two things: this is a place for actual, political discussion; the old Lobsters is worth fighting for. I disagree with both with the 2nd following from the 1st.

                                                                                                                        The site was a low-noise, technical site with occasional, political scuffles. The first meta where I put strong arguments for no politics or free speech had a huge number of people supporting my position. They were both putting time in with arguments (most important) and upvoting (peripherally important). There were many people on opposing side, too. Their side wanted specific kind of politics in every thread, mostly downvotes/insults anyone that disagrees (some were nice), and occasionally some would want a CoC that would let them ban dissent(ers).

                                                                                                                        During and after the mass invite, the people in the leftist activist crowd invited a lot more people. As I fought their false claims and demands for no dissent, more people on no politics and free speech sides droppped off in both comments and votes. Seeing patterns from other sites, they decided that Lobsters would be politically dominated and not worth further investment. Some for just politics, others for whole site. Eventually, we had a moderator and admin with similar beliefs as the crowd with most mindshare. Add to that some long-running members were telling them they’d quit Lobsters if (a) politics wasn’t allowed everywhere or (b) it became “like HN, Reddit, etc.” by allowing non-left folks to post their own links those leftist abhorred. What hypocrisy if goal is actual, political discussion and evolution. That overall combination sealed the fate of the technically-focused, less-political Lobsters.

                                                                                                                        Now, that site is gone. Look at the current vote counts and moderator statements on various positions here. Still consistent with my claim it’s changed. Now, if that is the environment, next question is, “Is political action worth effort?” Prior conversations indicate these people are not here for discussion. Their type of politics believes they’re already correct about the fundamentals (a religion), that people are getting harmed (mostly imagined) by every dissenting statement/action, and their moral imperative is to convert everyone to their beliefs to reduce that harm and promote the good they believe in. They’re evangelists, not philosophers or conversationalists, at least when it’s about politics. That kind of view is also why they act like a mob on anyone disagreeing even with civil posts, often with accusations of harm or discrimination. You’ll also see them throw low-effort comments while people like me in outgroup wanting actual discussion might put 30 min into making ours thoughtful and civil. That was really draining. Which was the goal, deterrence of dissent, which worked since the numbers shifted with high participation from people with their beliefs but almost zero participation from those of us with alternative beliefs.

                                                                                                                        Conclusion: the political aspects of Lobsters are now an echo chamber for a specific kind of politics with everything else to be heavily penalized and shunned. Most of their action is virtue signaling and/or outgroup shaming since it achieves nothing in the real world toward their goals. The actual, political discussion they intend is among people in their group evangelizing their beliefs, hashing out differences they tolerate within parameters of shared beliefs, developing plans for increasing conformance in more spaces (online/offline), and so on. Although for some it’s intentional, others seem to be just going with the flow since that’s what they believe. After increasing participation by non-leftist-activist Lobsters, turning the site around would require changing the beliefs of one moderator, maybe the admin, and maybe 40-80 voters based on last action I saw. Then, Lobsters would immediately loose key members who will quit on political grounds. The people you’re convincing value those members, too. So, that’s a monumental effort to either get politics off Lobsters or shove it into dedicated, political threads. It’s possible the latter happens as a compromise without monumental effort but I’m not holding my breath: admin probably won’t do something that makes the people who will quit follow through with their promise.

                                                                                                                        Conclusion 2: If I’m not extremely busy, you’ll see it by 2019. Meanwhile, I’ll be done discussing politics after a transition since Lobsters isn’t a site for political discussion: it’s a leftist-activist site dedicated to evangelizing their politics and correcting non-conformance while also enjoying reading and commenting on some technical stuff. There’s a dissenting group doing other things. They’re not in control or increasing in number, though. Do what you want on your end. Just know you’re doing it in a church expecting religious renouncement rather than a political conversation expecting evolution of thought.

                                                                                                                        1. 2

                                                                                                                          yeah, you convinced me.

                                                                                                                      2. 8

                                                                                                                        There are a string of sites that I’ve abandoned (Tumblr, Twitter, HN, Reddit) for similar reasons that you outline. Up until relatively recently, Lobste.rs. seemed to be a sane corner of the internet where most discussions could take place without devolving into moral posturing.

                                                                                                                        I’m unsure if ceding the territory to the hyper-political is the right answer. From a mental health perspective it certainly is, but from of societal perspective it appears to just lead to more isolation and polarization.

                                                                                                                        1. 7

                                                                                                                          The admin and one moderator support what I describe along with most of voters in those threads and comments. It’s already done. The environment is fixed to that situation at the moment. We have to integrate with or reject that situation. There’s at least two choices:

                                                                                                                          1. Ignore the politics to focus on the technical content.

                                                                                                                          2. Contribute to the politics to further the goals of the new, community politics while improving one’s standing in it. This will reinforce the current situation with that type of politics and focus going up from here.

                                                                                                                          I’m doing 1 for now after this thread unless pulled into a discussion. I’ll be doing some of 2 due to overlap between their and my politics in terms of benefiting people. Thinking about various possibilities. Retreating from political discussion in a place where it goes nowhere outside specific groups’ beliefs and practices, the community’s majority position, makes the most sense just purely on an effort/impact basis. There were some great moments that came out of all that work, though. I won’t forget them.

                                                                                                                        2. 10

                                                                                                                          For what it’s worth, I really appreciate your comments about security and building things that are reliable. I’ve learned a lot from your comments, and I hope to learn more in the future.

                                                                                                                          It’s pretty taxing for me personally to read your posts that go into politics. In my reading, your tone changes pretty dramatically from the endless-well of experience and good-natured sharing of knowledge to a more condescending, defensive one.

                                                                                                                          Things are more politically interesting than they were when I found this site a few years ago. Things are less stable, and we are in an increased state of conflict. Conflicts on this scale will permeate more and more of our lives until they are resolved. To the extent that this is a space of low-friction discourse, the conflict will act itself out when two sides decide to play the game. People are saying “oh, isn’t it such a bad thing that the palantir OP couldn’t respond to the top comment?” but It’s not. They chose not to play that particular game. I think you’re right to identify that your conflicts are those of your choosing.

                                                                                                                          1. 13

                                                                                                                            “For what it’s worth, I really appreciate your comments about security and building things that are reliable. I’ve learned a lot from your comments, and I hope to learn more in the future.”

                                                                                                                            Thank you! I’ll stay at it!

                                                                                                                            “It’s pretty taxing for me personally to read your posts that go into politics” … “to a more condescending, defensive one.”

                                                                                                                            I appreciate your honesty. Given you bring it up, I figure I’ll explain one last time unless asked again. I can at least tell you where that defensiveness comes from that ties into Lobsters in at least two, major ways:

                                                                                                                            1. Black students and administrators at a black school with similar beliefs and practices, esp disagreement = offense or personal attack, used them to justify silencing, shouting at, slandering, and physically beating white students on a daily basis. I endured this for years like other whites did at every black school I asked about. I got PTSD from the effects of beatings, esp having to see them coming from a mere glance. They simultaneously talked up our privilege, their oppression, and so on despite them having all the advantages and power which they used to hurt us. That led almost all white students (except a few like me) to believe similar stories in media were lies perpetuated by an aggressive race of people. The few, really-good students and teachers plus me wanting to get along kept me non-racist (biased at worst). Liberals of Lobsters’ type and blacks told me from then onto today that structural oppression against whites doesn’t exist, our claims don’t matter, and/or just perpetuate “real” racism against minorities. So, the psychological damage, PTSD cases, discrimination, and resulting racism among white victims will continue until such systematic racism against whites is exposed, squashed where possible, and sympathy extended to victims rather than denial of their existence. People said same stuff here, too, so I fought it for a while. One that switched positions floored me: it’s so, so, so rare.

                                                                                                                            2. Prior threads where I expressed civil disagreement with examples got me hit with personal attacks and people that misrepresented my comments on purpose. There were usually many of them at once with some having high upvotes. When a non-leftist or non-PC-leftist did that, they’d usually get slammed by the same people talking about comment quality and inclusiveness should stay up before the comment was collapsed. That difference happened a lot. Knowing there’s people watching with intent to do that either creates a chilling effect or increases agitation/resolve in most people who sense it. Even greater in me since I grew up in a murder capital with micro and overt aggression making me optimized to react fast and hard to it. I’m still so toned down compared to how folks in Mid-South, esp minority members, usually respond to personal insults tied into politics, esp racial. For the rest here, it was largely a chilling effect: many people contacted me over time after Lobsters got super-political saying they didn’t feel safe voting or commenting on political stuff since they thought they’d loose their account. A few thanked me for representing dissenting opinions. Some left.

                                                                                                                            Put those two together and I was still getting personal attacks, I got a little defensive when talking about the same things with the same people. It’s only natural even though I hate it had to be painful experience for onlookers who weren’t involved in such behavior. I should mention that some people here put in a lot of effort to be civil. A few even would message me links helping me understand their side of things. @pushcx and @Irene particularly handled lots of tough situations well: their responses prioritized civil discussion, tolerance of dissent, and remedial action wherever possible. The political discussions (and battles) taught me which Lobsters had good to outstanding character in difficult situations. I’ll remember them in the future if opportunities knock.

                                                                                                                            This is all historical, though, since I’ll be done with my form of politics on this site soon or by the end of the year. Could be a few more discussions left since there’s ongoing meta and transitional effects I might not see coming. I’m minimizing it, though, while still posting those security and reliability papers/tips yall love. We have a great, little, security/verification community here with folks good at theory, some at practice, and some that do both. Gotta keep building that up on top of other communities. There’s possibilities to bring in more experienced and CompSci people in things like UI/UX that are highly important, but get less attention.

                                                                                                                          2. 10

                                                                                                                            “Leftist political activism” is a weird way to characterize caring about our social milieu.

                                                                                                                            That said, I’ve seen a lack of engagement by those with contrary political views, other than to bemoan talking about any issue that isn’t narrowly technical.

                                                                                                                            1. 9

                                                                                                                              The highest-voted, leftist views are about what constitutes racism/sexism, transgender identity, political correctness with language policing, focus on inclusive behavior prioritizing non-whites/males, and telling people to quit Palantir (but not Google or Apple/Foxconn). These kind of views are most dominant in terms of upvotes and replies. When described, most people say leftist, social justice, and so on.

                                                                                                                              I’m open to other phrases so long as the label will indicate most or all of the above to a centrist, conservative, or other person that doesn’t closely follow such politics.

                                                                                                                              1. 3

                                                                                                                                I would disagree with you on one premise. There are hardly any “leftist views” here. I would classify most of them as “right of center but not too right”. The discourse has gone so far right in the last 30 years, that fairly conservative views of old are now “leftist”. I would argue that most conservatives wouldn’t be able to identify leftist views. In fact, I find most conservatives are pretty comfortable with some of them. The ideals of freedom were often historically leftist ideas, for example. It’s pretty surprising to most Republicans that Lincoln corresponded and read Marx, and that communists joined the Republican party early on instead of creating their own. History is easily forgotten, especially in the tech world.

                                                                                                                                1. 6

                                                                                                                                  This is a semantic argument. I’m sure if you go back long enough white means black or w/e.

                                                                                                                                  Right now leftists are interested in what was described.

                                                                                                                                  1. 0

                                                                                                                                    It is a semantic argument, with substantial differences in perspective on how its decided. I happen to agree with mempko, there are hardly any leftist views here, either in an economic or cultural sense. Being of the left isn’t a free for all, it has very real and substantial poles around which it organizes its ideology, and I was actually taken aback to see mempko’s comment given that I agreed and usually (almost always actually) I feel very much alone in settings like this. Just because someone supports, say, civil rights does not necessarily make them of the left. Same I might add for gender issues.

                                                                                                                                  2. 2

                                                                                                                                    Of Democrats and Liberals in U.S., a huge chunk of them push these views. Some don’t. No Republicans or Conservatives do that I’m aware of at least for these contexts. It would be pretty fringe. The Democrats and Liberals are Leftists or Left-leaning. Therefore, they’re Leftist Views at least to Americans.

                                                                                                                                    The situation might be different to people outside of America. The Europeans on both Hacker News and Lobsters sometimes have interesting comments about what’s called socialist here vs over there.

                                                                                                                                    1. 3

                                                                                                                                      It’s true that Europeans have different ideas of what leftist views are. But this is because Europeans still have a large base of leftists in the public sphere. But what I’m saying is that even by American standards, someone like Bernie Sanders would have been a moderate republican 50 years ago. That shift to the right has been so dramatic that people believe Democrats are “leftist”, when historically in America they are clearly right of center. 50 years of propaganda does a lot to change public views.

                                                                                                                                      So yes, you are right to say Democrats are “leftist” because that’s what convention says they are. But this almost blinds people to actual leftist views.

                                                                                                                                      I also think the newest generation will once again change what that means.

                                                                                                                                      1. 3

                                                                                                                                        That all makes sense. I have to use the current terms since that’s what everone is using. It enables wider understanding.

                                                                                                                                        1. 1

                                                                                                                                          My issue with a lot of conservatives is that they use the term “leftist” as a derogatory term. Which is sad because a lot of leftist ideas should appeal to conservatives. It’s almost as though words have the opposite meaning in the US as they do in the rest of the world. For example, the word Libertarian used to be synonymous with anarchist, and anarchists are strictly hardcore leftists. I feel the words “conservative” is similar now because to me a lot of modern conservative views are pretty extreme. I think conservatives have a lot in common with real leftists if they look closely. Many conservative talking points are basically Marxist! For example, the idea that you should be paid what you are worth. The ideas of freedom and individuality. Many leftists are against some Liberal ideas like cultural relativism. I’m sorry but genital mutilation is wrong.

                                                                                                                                          1. 1

                                                                                                                                            I agree again that lots of groups are more similar than different in some ways and their classification changed over time.

                                                                                                                                            Ill add to you first line that liberals bash conservatives incessantly in every forum I see, including here. It’s impossible for most of them to have a real, political discussion if things are that antagonistic. There’s a few of us doing actual discussion here now. Most threw votes for or against on reflex to push their views with the least participation and communication possible. People, esp on HN and Lobsters, have constantly reminded me it’s part of human nature (tribal instincts).

                                                                                                                                            So, folks have to confront that part, say “it’s about us, too, not just them,” constantly read other side’s views/evidence, and constantly re-assess. Most important, they have to learn to fight the instinct to attack the other side in discussions. Second that happens, it becomes an emotional fight where rational arguments have no effect. If folks keep at that, they’re just bullying and dominating, not doing discussion.

                                                                                                                                            I appreciate you mostly staying on actual, civil discussion in our conversations despite our beliefs being far apart. I always enjoyed them even if they got stressful. I still appreciate at least one person sets standard for science on improving people’s potential/happiness even though my view is more pessimistic. ;)

                                                                                                                                2. 6

                                                                                                                                  “Caring about our social milieu” is a weird way to characterize leftist political activism.

                                                                                                                                  I’ve seen a lack of engagement by those with contrary political views, other than to bemoan talking about any issue that isn’t narrowly technical.

                                                                                                                                  That’s pretty consistent, wouldn’t you say? Though “bemoan” is a rather impolite way of putting it.

                                                                                                                                  (edit: on second reading, the post I’m replying to is actually some sort of low-key insult. disgusting.)

                                                                                                                                  1. 2

                                                                                                                                    That said, I’ve seen a lack of engagement by those with contrary political views, other than to bemoan talking about any issue that isn’t narrowly technical.

                                                                                                                                    I don’t hold particularly contrary political views, but I have to wonder if you’d actually welcome this kind of discussion from people with opposing political views, varying views on ethics, and similar?

                                                                                                                                    1. 0

                                                                                                                                      Why not?

                                                                                                                                  2. 0

                                                                                                                                    Your comments in that thread were not ‘counter to leftwing activism’. They were counter to common decency. You accused someone of being a hypocrite with no basis whatsoever.

                                                                                                                                  1. 11

                                                                                                                                    When I was at Tumblr in 2013-15 we were always having to fight Apple. It was strange, at that time Tumblr was often the app you saw on iPhones in the flagship Apple store in Manhattan to really show off the potential of the phone, but then they would delist us when we put out a new release because a tester was able to use the app to find porn. At that time, about 11% of the content stored actually was “adult” in nature, although it was likely a higher proportion of view volume.

                                                                                                                                    This led to a particularly huge fiasco for us when we tried to make searching for certain tags that often resulted in “adult” material hidden when searched for from the mobile app. Some of those tags were things like “lesbian” etc… which obviously was not a move that made our large LGBTQ+ community happy.

                                                                                                                                    Over time, a lot of effort was spent trying to hide mature content from the mobile app. At one point, we used a company with people in India to look at flagged images to verify that they were in fact mature (or in violation of our very liberal policies at the time, basically just no child porn, self-harm or gore. Search for “cats of jihad” and you may find terrorists who we let stay under the philosophy of “sunlight is the best disinfectant”, which worked fine for our community which self-policed itself quite a bit more effectively than other social media platforms of the time. posters couldn’t remove content that other people responded to calling them out). We learned that in India tickling might be considered a pretty mature activity.

                                                                                                                                    Despite these efforts, it was always a cat-and-mouse game. Sometimes it was resolved by a “call from above”. It was always stressful, and we always felt like we had to censor ourselves too much to survive in Apple’s walled garden.

                                                                                                                                    Anyway, I expect this is just another temporary removal.