1. 13

    One of my hugest pet peeves with programming language main pages is when they describe their syntax, but have absolutely no code examples on their landing page or within 1 or 2 clicks. I’ve been clicking around on their website and haven’t found any obvious link to a short example of what the language looks like.

    1. 9

      Being one of the authors I admit: yes we should improve this.

      Find code examples in presentations and in the latests article referred to in the Blog section: https://www.blech-lang.org/blog/

      1. 2

        Even starting from that link to the blog, finding a code sample takes quite some time, so here’s a direct link to the first Blech code sample in the latest blog post: Decoding the DCF77 Signal with Blech > The Application’s Top-Level.

        And here’s a short code sample from later in that same post:

        activity CaptureSync (dcf77: bool)
            // Perform the measurement and restart if the level drops meanwhile.
            when not dcf77 reset
                var len: nat16 = 0
                repeat
                    await true // Await next sys tick.
                    len = len + 1
                until len > DCF77_SYNC_LEN end
            end
        end
        
    1. 4

      I agree with a lot of these points, but some of them feel really specific to the author.

      You are not officially considered a programmer anymore until you attend a $2K conference and share a selfie from there.

      You’re a programmer if you write computer programs - full stop.

      A tutorial isn’t really helpful if it’s not a video recording that takes orders of magnitude longer to understand than its text.

      This is really a personal opinion - I get frustrated if a tutorial for something is only in a video - especially on a text-centric medium like programming.

      Internet connectivity is the norm and being offline is an exception which is the opposite of how it was back then.

      This is a really harmful mindset for the software landscape - I’d argue this is why always-online DRM for video games is even a thing. You can completely alienate an entire audience because of your assumptions about internet connectivity.

      1. 3

        Those points felt more like a mix of beneficial things and jabs at the modern mentality, culture, and trends than useful differences. Especially…

        A significant portion of programming is now done on the foosball table.

      1. 2

        I never, ever permanently delete code that I’ve put more than a couple of hours into. Usually there’s some nugget or some $thing that I did that I’ll remember in 2 years that I want to do again, or to reference how I structured $thing. I have 110 directories in my main projects directory and that will only ever continue to grow.

        1. 25

          I actually discussed this with a friend because we were frustrated when we tried to persuade others to use eg Signal. We came up with a three tried argument list.

          You might not care but others do.

          This is basically the argument made by the two articles, Snowden et al. While one might not have anything to hide. We have to protect others that care for us such as NGOs and journalist. I’m from Germany and folks here still can remember the last to dictatorships. So it’s probably more convincing here.

          You don’t know if you have anything to hide.

          A lot of people don’t really know what they have to hide until it hits them. That was covered in the article below as well. My example is often WhatsApp. Facebook might encrypt the messages but the value is in the meta data. Who wrote to whom when from where. It is very scary what these data points can reveal. I once saw a talk by someone who started to track himself. He found that he could predict his movement with just around two weeks worth of data. So what would your opponent say if the next credit card, apartment or job is refused based on some meta data on them?

          Your future self might care a lot.

          This is the most convincing to me and usually got others as well. While we might not have anything to hide now we might care quite a bit in the future. Any data is saved for basically forever. Companies and states might not see value in the data they have now but they are quite eager to find use for it. Facebook is in active talks with banks to base decisions on data. It takes not much imagination to see health care companies evaluate our purchasing behaviour of the last decades to decide on our premiums.

          This is a sloppy write down. I know the frustration.

          1. 6

            You might not care but others do.

            One thing I heard that really opened my eyes to this was the idea that, in order for a restrictive law to be changed, it must be broken. The easiest examples are prohibition laws - with alcohol prohibition in the 1930s US, to more contemporary prohibition laws involving cannabis. Millions of people smoke weed erryday, be it for recreational or medical purposes, and many state governments have caught on that maybe it’s not as bad of a thing as they originally thought.

            Another example that might fit would be in countries where homosexuality is illegal. If authorities snoop texts and phone calls in order to determine homosexuals in their country, they will forever be oppressed by the whims of whoever is in charge that day.

            1. 1

              smoke weed erryday

              I see what you did there ;)

            2. 5

              Donald Trump has been a strong example for “Your future self might care a lot.” (in the past I’ve heard “what if the nazis got into power again!” to which the response is “like that would ever happen”). You may trust some governments, but Donald Trump is president now. He has a console in front of him, he can search everyone’s emails, everything. What do you think he could do with it? Did you ever say anything bad about him he might not want you to repeat? Do you think he could use it to target people he doesn’t like and prevent them fighting him? If only those people had been using encryption to protect themselves.

              1. 1

                Can we please not have politically-charged content here?

                1. 4

                  Eh, I’m personally fine with it as long as it’s stated civilly and makes a relevant, substantive, & debatable point. Once someone starts throwing stones, then we can start talking about shutting people down.

                  1. 1

                    I’d just like to state, as I didn’t make this clear enough despite it being my intention as the message, I didn’t mean to express an opinion on politics. Mostly because I don’t have one! I don’t follow political news, or Donald’s latest controversial news story or whatever. It was intended to be entirely a specific aspect of the government angle that historically I’ve failed to express. Due to a lot of dislike for Donald, it has recently gone down much better.

                    I apologize if it came across any other way, I also don’t want that kind of content here. Hopefully my point wasn’t too diluted by my failure to properly include that in my comment.

                2. 3

                  There is one more you missed:

                  Massive data stores mean massive data breaches. This costs the whole society, and sometimes in the billions. There was great blog posted that I believe I saw here on lobste.rs that used the analogy of stockpiling oily rags to extract tiny amounts of oil from and the dangers that poses. I can’t find it right now though.

                  tl;dr: Collecting too much data in one place can be dangerous, it is not about you personally.

                  1. 3

                    A good example that highlights the last two categories is:

                    Are you okay with being denied insurance, or having increased premiums because some machine learning algorithm drew some incorrect inference based on your private data?

                    1. 1

                      The simplest way to communicate “You might not care but others do” for Signal specifically is: whenever people ask for contact info, explain why they should make a Signal if they want to contact you, and refuse to use alternatives.

                      If they insist on not using Signal to contact you, they’re putting their convenience over your privacy, which is what we call a lost cause.

                    1. 36

                      Twitter is a terrible platform for (among other things) long hand writing, it’s unreadable. I wish people would stop using it for that.

                      1. 26

                        Unlike the other folks who are defending Twitter, I think Twitter isn’t a great format for consuming content, but I also think it reduces friction for producing content, which results in a lot of great content that wouldn’t otherwise exist. For example, foone lays out his reasons for posting on Twitter here:

                        Not to humblebrag or anything, but my favorite part of getting posted on hackernews or reddit is that EVERY SINGLE TIME there’s one highly-ranked reply that’s “jesus man, this could have been a blog post! why make 20 tweets when you can make one blog post?”

                        CAUSE I CAN’T MAKE A BLOG POST, GOD DAMN IT.

                        I have ADHD. I have bad ADHD that is being treated, and the treatment is NOT WORKING TERRIBLY WELL. I cannot focus on writing blog posts. it will not happen.

                        if I try to make a blog post, it’ll end up being abandoned and unfinished, as I am unable to edit it into something readable and postable. so if I went 100% to blogs:

                        You would get: no content

                        I would get: lots of unfinished drafts and a feeling of being a useless waste

                        but I can do rambly tweet threads. they don’t require a lot of attention for a long time, they don’t have the endless editing I get into with blog posts, I can do them. I do them a bunch! They’re just rambly and twitter, which some people don’t like.

                        I’ve tweeted about it before, but I’ve been told this is “unprofessional” and I’m sorry if this surprises you, but I am not a professional writer. of course my hobby writing is going to be unprofessional. Cause it turns out there’s good reasons I’m not a professional writer, and the main one is that I can’t do it.

                        Note that this also address the one direct criticism in the other sub-thread, broken sentences.

                        Personally, if my options are “read foone’s writing on Twitter (or via something that re-writes his Twitter threads)” or “not be able to read foone’s writing”, I’ll choose the former.

                        For some authors, like @jxxf, this is less extreme. He has a blog that he writes on, but the tradeoff is still the same at the margin: because he has a low friction platform available to him, he writes a lot more than he otherwise would and I’m glad he does.

                        I view this the same way I view complaints that making programming easier has dumbed down programming because (for example) people no longer have to understand pointers to produce useful software. I think that’s great, on balance, even if there are some downsides.

                        For people who dislike Twitter so much that they would rather have no content than content on Twitter, they can make that choice for themselves: when they see a twitter.com link, they can not click on it. Some people would prefer to make that choice for other people (as of the time of this writing, this post has downvotes for “spam”, “off topic”, and “broken link”, which are all incorrect IMO) and I don’t agree with that. From looking at lobsters content from twitter, it seems like maybe 2-4 twitter posts get traction each month? IMO, it’s preferable that people who don’t want to read content on Twitter click “hide” 2-4 times a month than to not have this content exist at all or get flagged off of lobsters.

                        1. 7

                          I’ve read this guy’s reasoning before and I just don’t believe it. The guy may have adhd, I have no reason to doubt him, but I think anyone capable of writing super long tweet messages and doing in-depth device break downs can be taught to write blog posts one paragraph at a time.

                          Of course, the dude should write however he likes, I’m not his boss. He may believe what he says, but I think his reason is not real.

                          I agree with your “don’t click on it.” approach as what I love about the internet is our ability to choose and filter.

                          I don’t comment out of a wish to squash this guys stuff and I certainly don’t have to read it. But I comment because I want to understand why people write this way, and want to discourage others from writing this way, as overall it reduces the amount of content people can read, I think. Since this way takes longer to read, is hard to share and respond to thoughtfully.

                          1. 2

                            I have ADHD and I can relate really strongly to the sentiment. My thoughts don’t flow in a natural stream, it’s more spurts and fits. I can sit down and write a blog post, sure, but I’ll be sitting around writing it for 30+ minutes (an eon!) before I either a) get bored, and decide the point I’m trying to make isn’t worth making anyway, or b) realize my thoughts really don’t sound as good as I thought they did, even if they may have some merit. In the end, the blog post ends up getting deleted either way.

                            I’d say using Twitter over a blogpost is more writer-centric than reader-centric, which obviously hinders the audience, but the way foone puts in the previous post really resonates with me:

                            if I try to make a blog post, it’ll end up being abandoned and unfinished, as I am unable to edit it into something readable and postable. so if I went 100% to blogs:

                            You would get: no content

                            I would get: lots of unfinished drafts and a feeling of being a useless waste

                            It’s all about focus, collecting thoughts, and forming them into a singular, discrete narrative - which just does not jive with ADHD behavior.

                            1. 2

                              Agreed as a fellow. My draft folder is a nightmare, my writing is comment sections and tweets.

                              Even if I write a blog post it becomes painful, as I usually hyperfocus on it, will spend multiple days on it and end up rereading it too often out of fear for small errors. Tweet chains are much more permissive and raw.

                              The guy may have adhd, I have no reason to doubt him, but I think anyone capable of writing super long tweet messages and doing in-depth device break downs can be taught to write blog posts one paragraph at a time.

                              I hate to say it, but if I had a dime for every time a neurotypical person just utters disbelief about how my brain works, I’d have a ton of money on the side.

                              These effects are very real.

                              1. 1

                                I called out the ability to train. I understand ADHD really well. What I meant is that it’s quite possible to train on a writing technique where I write only one sentence or paragraph at a time.

                                That’s not unique to twitter. I can do the same thing in WordPress or google docs or many other tools that I can adapt to use.

                                Maybe this author can’t do it, but they can learn to produce content in a way that is still possible given their medical condition.

                                I was disputing the statement that the author can’t or that it’s impossible given ADHD. I don’t think that’s accurate. Maybe The author doesn’t want to train or learn. That’s cool, that is their prerogative. But the reason they aren’t doing it isn’t ADHD, it’s that the author likes it that way and is unwilling to change.

                              2. 2

                                Eh I can believe it. I have ADHD. Sometimes the things you can do, and the things you can’t do, don’t make any goddamn sense. ADHD is an executive dysfunction disorder. Shorter tasks do help…

                              3. 1

                                Not an unreasonable insight, but on the other hand if you can write 20 tweets, you can also write the same 20 tweets in a .html page?

                                By biggest gripe with Twitter is that it doesn’t work in Firefox for whatever reason. Clicking “Show this thread” just doesn’t seem to do anything. Probably due to some Firefox setting I changed or whatnot, but it’s really hard to figure out what (I discovered that copy/paste was broken in Twitter because I disabled the clipboard API, took me a long time to figure out). It can also takes ages to load (although not ridiculously slow, my connection in Indonesia is somewhat low bandwidth/high latency).

                                It’s all about what your goal is, if you want to just “tweet out in the universe” then by all means, go ahead. But if you want to reach people, then a blog post is probably more effective.

                                Perhaps this is an opportunity for creating better blogging software that combines the best of both 🤔

                              4. 9

                                I like it as a format because it forces you to be concise and make every 280 characters a self-contained point. It’s a fun writing constraint.

                                1. 13

                                  The endless scrolling, broken sentences (that most attempts have) and crappy twitter experience when JS is disabled doesn’t make it fun to read.

                                  1. 15

                                    I’d suggest maybe turning JS on to make your UX better, but I feel like you’re not going to be receptive to that idea.

                                    1. 4

                                      I suggest nitter, for a far more usable and less hostile experience, without requiring JS:

                                      https://nitter.net/jxxf/status/1219009308438024200

                                      1. 1

                                        Wow - JS or not, that’s a really nice UI.

                                      2. 4

                                        Ok, even with JS on, it’s still a bunch of poorly separated blocks of sentences and sentence fragments.

                                        The comment above mentions a ‘fun writing constraint’.

                                        Writers, find a different way to punish yourselves without punishing your readers. The number of hours a writer spends on a piece is almost certainly less (much, much less) than the number of combined hours that readers spend reading it. Don’t drag your readers through shit for “fun.”

                                        1. 2

                                          Why not? Nobody is forcing you to read it.

                                          If someone wants to have fun writing in a weird format, that’s their prerogative. They don’t have to be maximising your utility.

                                          That said, consider just using something like this: https://nitter.net/jxxf/status/1219009308438024200

                                        2. 1

                                          I disagree that JS should be required to be treated decently on a website.

                                      3. 6

                                        This isn’t a constraint if it’s split over 50 tweets.

                                        This tweet stream is an example of how things aren’t self-obtained points. Almost all of these tweets are meaningless without context before and after.

                                        This story seems made up, like a business fable and even more so because it’s tweeted out in small amounts.

                                        This was interesting the first few times I saw it 13 years ago. But now it’s weird and confusing and shows how valuable friends and editors are to the writing process.

                                        I read a novel in 1999 where the entire story took place in emails. It was an interesting constraint. But the same book today would not be original enough to outweigh the awkwardness of such a constraint.

                                        I am not sure what’s up with these “tweet storms.” I guess they are best for online brands or something since people can like and tweet each item. This author seems quite successful with hundreds of interactions per message. So maybe it makes more money, or sells more ads, or just shows which paragraphs are best liked.

                                        But I just wonder if the author is capable of setting up a blog.

                                        I liked the story, but it took much longer to try to read because of all the scrolling. It’s also harder to read because the lack of paragraphs and grammar and links.

                                        1. 1

                                          Is Exegesis by Astro Teller the book you are thinking of?

                                          1. 1

                                            That looks pretty cool, but not it. I’ve added it to my to read pile.

                                            I was referring to E: a Novel by Matt Beaumont. It was set in present day (2000) office place and was just a simple, relatively ok office drama.

                                        2. 0

                                          I am with you. There is something engaging about the dramatic separation of paragraphs that each read like headlines. Not great for details, but for short stories I find it fun.

                                        3. 2

                                          I think there should be automation for mirroring twitter threads in an accessible format.

                                          I don’t click Twitter links anymore, because my Twitter experience typically goes as follows.

                                          1. Click the twitter.com link on lobsters
                                          2. “If you’re not redirected, click this link”
                                          3. “It looks like you’re browsing without JS. Do you want to continue to basic site? [Yes]” (Yes is the only option provided here.)
                                          4. Get redirected either to the twitter home page or a thread I clicked on 3 days ago on reddit, which was stored in a cookie and did not update correctly.
                                          5. Repeat steps 0-2.
                                          6. Arrive at the page, start reading the content in between the repeating author name, user name, and irrelevant timestamps.
                                          7. Any other Twitter links on that page, go back to step 0.
                                          8. Trying to open any images takes me back to either the author’s page, the twitter home page, or some other thread I clicked on recently.

                                          I think browsing without JS is valid, and no-JS users deserve to be first-class visitors.

                                          1. 1

                                            @bandali says:

                                            I suggest nitter, for a far more usable and less hostile experience, without requiring JS:

                                            https://nitter.net/jxxf/status/1219009308438024200

                                          2. -1

                                            Twitter threads are a de facto standard for publishing and consuming content like this on the internet, the ship has sailed, and it’s just mind-numbingly uninteresting to have to endure replies like this every time one is shared to a content aggregation platform. Get with the times, old man 👴🏻 ✊🏻 ⛅️

                                            1. 3

                                              De facto standard lol? Since when? Blogging is still alive and well and blog posts outnumber twitter threads 100:1 on lobsters alone.

                                          1. 19

                                            Soundness is definitely a thing that can come up, though in handling tens of thousands of lines I don’t feel like I’ve hit it directly.

                                            On the other hand, Typescript’s type system is still the most useful typesystem I have ever used. The way unions, “everything is a dictionary”, being able to filter out keys and the like, and everything else work together mean that I can write business logic that handles really dynamic data shapes, and still get guarantees that are basically impossible in other languages without generating loads of wrapper types.

                                            For example just being able to inline declare a variable of having “type A and type B” is such a great way of allowing for new APIs.

                                            Ultimately Typescript not seeing typing as a mechanism for implementing the language execution semantics, but really as a checker of code validity, opened it up to really practical advantages.

                                            1. -2

                                              On the other hand, Typescript’s type system is still the most useful typesystem I have ever used.

                                              I have a canary of sorts which I use to guess whether I will appreciate a type system.

                                              1 == "1"
                                              

                                              The correct way to handle this is to issue a type error at compile time (or at least runtime if the language doesn’t have a significant check phase in the compiler). The two ways to fail this are:

                                              • typecheck, return false (python2, python3, ruby, crystal do this)
                                              • typecheck, return true (typescript, javascript, php do this)

                                              I haven’t made final decisions which of these is scarier.

                                              Interestingly, some of the above languages do fine if we use inequality instead:

                                              1 >= "1"
                                              

                                              Some languages from the top of my head that do this the way I like it: Haskell (and I assume many of the other strongly typed functional languages as well), Common Lisp (at least sbcl, dunno if it’s standard), Rust, Zig, Nim.

                                              1. 9

                                                To be fair you should always use === in TypeScript, then it works as expected.

                                                1. 6

                                                  To be fair you should always use === in TypeScript

                                                  To be even fairer, this is not even a Typescript thing, it’s a Javascript thing? A linter on a JS project will complain about the use of ==, without going near Typescript.

                                                  1. 3

                                                    Throwing my 2-cents in here, PHP is the same. Using === will enforce type checking on the comparison.

                                                    1. 3

                                                      I don’t think it “type checks” per se in PHP, but rather avoids doing an implicit conversion.

                                                      1 == "1" evaluates to true, while 1 === "1" evaluates to false. It won’t error out, like a type checker will typically do for you.

                                                    2. 1

                                                      To be fairest, Typescript actually does this the way I want. See https://lobste.rs/s/qfpbk9/is_typescript_worth_it#c_hs0olb

                                                    3. 2

                                                      Does it error, or does it return false like python, ruby, crystal (and js with ===)?

                                                      1. 2

                                                        It does error at compile time.

                                                        1. 1

                                                          Yeah, seems like both == and === work as I want in Typescript. See https://lobste.rs/s/qfpbk9/is_typescript_worth_it#c_hs0olb

                                                          I’m liking Typescript right now.

                                                      2. 1

                                                        Ah, forgot about that. Do ts linters warn about ==?

                                                        1. 2

                                                          Yeah they do.

                                                      3. 2

                                                        I don’t understand why a typecheck of the integer numeral 1 and a string happening to contain the numeral one returning false is scary.

                                                        I know nearly zero about type theory. Could you please explain?

                                                        1. 6

                                                          Because it’s a category mistake – it’s a nonsensical question.

                                                          1. 5

                                                            Ah I think I see, so that’s what demands that the response be an exception rather than false.

                                                            It’s not just “Is a number equal to a string?” “No.” it’s “That’s not even a sensical question to ask.”

                                                            I guess I feel like that’s a bit counter intuitive, since I generally want boolean operators to provide answers in boolean form, but then I don’t know anything about category theory either.

                                                            sigh clearly I have a lot to learn :)

                                                            1. 9

                                                              Well, it depends. Mathematically there’s nothing “wrong” with it, but it raises some uncomfortable questions. Like “what’s the domain of the == function?” Turns out, equality is not a mathematical function! If it was, everything would be in its domain, aka the forbidden Set Of All Sets. There’s a couple ways around this: the type way is to say that == is actually a collection of functions, one for each type. This ends up working out, and makes comparing different types impossible.

                                                              But there are other formulations! Like there’s nothing wrong with saying int and str always compare false, you just have to be clear what your mathematical axioms are.

                                                              1. 4

                                                                I think it might help to look at the Haskell signature for ==:

                                                                (==) :: a -> a -> Bool

                                                                It makes it clear that you can only compare two values of the same type.

                                                                1. 4

                                                                  In Lisps, you typically have = and equal?/equalp. With = you’re asking “are these two things numerically equal”, which is a nonsensical thing to ask about a string and an integer (or a vector and a list, or a character and a boolean, or two other non-number objects). With equal? you’re asking “are these two objects structurally the same thing?”, which makes sense and “false” would be the obvious answer for objects of different types.

                                                                  So presumably in many languages, == is the equal? in the above description, but there’s no separate = predicate.

                                                                  And then there’s eq?/eqp, which asks “are these things the same object?”, which is a question of identity, not equality. That’s similar to what the is operator does in Python, for example. But yeah, this stuff is confusing if you’ve only been exposed to languages that conflate these different ways of comparing because you’re not used to having to make the choice of which kind of comparison to use in different situations.

                                                                  1. 1

                                                                    so that’s what demands that the response be an exception rather than false

                                                                    I think no one wants it to throw an exception, but to simply not compile.

                                                              2. 2

                                                                1 == "1" is a classic JS gotcha (double equals is not “check for equality” but “check for equality and if it fails check for toString equality”) and 1 === "1" does what you expect.

                                                                I have decently used “fancy type” languages like Haskell, Purescript and Rust. Their type systems still make me somewhat unhappy compared to TS for “enterprise apps” (the one thing that I kinda wish that TS had but would bef impossible given soundness and how stuff works is the return type polymorphism).

                                                                1. 2

                                                                  1 == "1" is a classic JS gotcha

                                                                  I call it a classic maldesign, but ok :)

                                                                  1. 3

                                                                    I mean it’s not good, and there’s a reason you don’t see == anywhere in most codebases.

                                                                    I guess it’s just not an issue that one hits in practice if you’re an experienced practitioner (compare to…. array bounds errors that even experienced C programmers will hit often). It’s a thing you set your linter to notice, and then never do it.

                                                                2. 1

                                                                  Couldn’t edit this any longer, so will make an errata to my comment and mark it incorrect:

                                                                  Contrary to what I stated, Typescript does this exactly as I think is best, i.e. signal an error at compile time.

                                                                  vegai@Vesas-iMac ~/tmp> cat derp.ts
                                                                  
                                                                  let derp1 = 1 == "1";
                                                                  let derp2 = 1 === "1";
                                                                  
                                                                  
                                                                  vegai@Vesas-iMac ~/tmp> tsc derp.ts
                                                                  derp.ts:2:13 - error TS2367: This condition will always return 'false' since the types 'number' and 'string' have no overlap.
                                                                  
                                                                  2 let derp1 = 1 == "1";
                                                                                ~~~~~~~~
                                                                  
                                                                  derp.ts:3:13 - error TS2367: This condition will always return 'false' since the types 'number' and 'string' have no overlap.
                                                                  
                                                                  3 let derp2 = 1 === "1";
                                                                                ~~~~~~~~~
                                                                  
                                                                  
                                                                  Found 2 errors.
                                                                  

                                                                  Don’t even need the strict mode. So apologies to everyone for that bit of bullshitting – I went to check the behaviour in the first typescript playground I found, which for some reason did not behave like this.

                                                              1. 6

                                                                There’s a book, Programming Pearls by Jon Bently that has a lot of really good programming problems for practice, and it gets you thinking.

                                                                Beyond that I would recommend doing Advent of Code - the problems are presented in plain English, and while the problems are fictional, it’s good practice for when you’re given plain English specifications and you need to make a program that matches them. It’s also good because they’re presented in two parts, where the second part is sometimes a twist or change in specifications - another thing that comes up very often in real life programming.

                                                                1. 4

                                                                  I discovered Haxe a while back when I was writing a toy language and wanted a VM to target instead of writing my own. It looks like a neat language, I’m just not in the mood to learn a new one right now. Does anyone here use it? What for?

                                                                  1. 4

                                                                    I don’t personally, but I know that the game Dicey Dungeons is written in Haxe.

                                                                    I’m tempted by it because it has Algebraic Data Types and a bunch of other things I consider useful for good domain modeling and project structure.

                                                                    1. 3

                                                                      If you want a good VM to target, take a look at HashLink.

                                                                      1. 2

                                                                        My impression was that NekoVM had been essentially unmaintained for a long while, so a better VM target is definitely great news.

                                                                        1. 2

                                                                          Yes, that’s Haxe’s VM, correct? I’m just writing my own stack-based VM until I decide the language evolves past “toy” stage. But it’s definitely on the table if it’s a good fit.

                                                                        2. 3

                                                                          Papers, Please is another excellent game written in Haxe.

                                                                          1. 2

                                                                            I don’t often code in Haxe but it’s the only language I actually finished a game in. Syntax-wise it’s not too bad since it’s pretty similar to other Algol descendants. Nothing there that touches my fancy.

                                                                            For compilation targets and cross-platform works it’s one of the best programming languages I’ve worked with. It’s being dogfooded by the designers for writing their own games (like Northguard), the community is friendly and big enough.

                                                                            1. 2

                                                                              I don’t use it, but Dead Cells is written in Haxe, and that is an excellent game.

                                                                              I haven’t dug into it myself, mostly because I tend to focus on websites over games right now.

                                                                              1. 2

                                                                                That looks sick, thanks for the link. Looks like Papers, Please was written in Haxe, too. This language has a larger market share (especially in the indie game market) than I realized.

                                                                                1. 2

                                                                                  I’ve got almost 100 hours into Dead Cells between the switch and steam versions. It’s quite a fun game.

                                                                            1. 1

                                                                              The only problem I have is that it seems like it’s susceptible to spam and advertising startups - someone here already mentioned that their first two clicks were startup landing pages.

                                                                              However, I like it because there are times at work when it’s the last 30 minutes and I’ve mentally checked out, and need something to read before I leave. It also seems geared more towards the tech side, probably because those are the folks submitting links in the first place. I’ll try to remember to submit some interesting links that aren’t necessarily tech-related.

                                                                              Also, it might be useful to see how many links are in your database on the landing page, so I can tell when I’ve effectively exhausted them.

                                                                              1. 3
                                                                                • I use Arch Linux both at home and at work, although I’ve been tempted to switch to something slightly more stable and without rolling releases.
                                                                                • I use i3 for my window manager, since it has effectively ruined me for other WMs. Keyboard is king.
                                                                                • My editor is Vim, in the terminal.
                                                                                • My terminal is Alacritty.
                                                                                • My shell is fish
                                                                                • My browser is Firefox with the “vimium” vim keybind extension
                                                                                • Geary for email, but I’m looking to switch (suggestions welcome)
                                                                                • In the terminal, I use tmux and use it to handle terminal sessions. tmux attach is very helpful for when I want to SSH in to my work machine from home and do work there.
                                                                                • Weechat for exactly one IRC server and channel (@dsh, you here?)
                                                                                • find and ripgrep in the terminal for finding stuff
                                                                                • Nextcloud for cloud storage
                                                                                • tokei to count lines of code (very, very fast compared to cloc)
                                                                                1. 3

                                                                                  take a look at https://github.com/sharkdp/fd instead of find. it’s nicer (like ripgrep), with gitignore support, colors by default, etc…

                                                                                  1. 1

                                                                                    I’m quite content with Fastmail’s web interface. I don’t like to have my email client always open anyway, because it can break new out of flow. What’s making you want to switch from Geary btw?

                                                                                    1. 1

                                                                                      Geary’s interface feels like it doesn’t update consistently. For example, I’ll see that I have 2 unread messages, but the actual view of my inbox won’t show that unless I manually switch from one mailbox folder to another (e.g. inbox -> drafts -> inbox). Doing some cursory searches shows that this may have been fixed earlier this year so I’ll have to see if I can get an update for my distro.

                                                                                      Additionally, I really wish Geary had a “read all” button. It was suggested about a year ago, but it’s still an open issue. Maybe it’s time for me to learn Vala and make that contribution.

                                                                                  1. 16

                                                                                    C++: Gives me so much power to hang myself and decorate my body beautifully. I love and hate you so much.

                                                                                    Ruby: You were the chosen successor to Smalltalk, but never adapted the VM and the powerful GUI runtime editor. Instead, you eloped and married Rails.

                                                                                    Rust: So elegant, until I get to an inextricable line, and with the compiler fighting me, that line is as painful and takes about as long as giving birth.

                                                                                    1. 4

                                                                                      Rust: So elegant, until I get to an inextricable line, and with the compiler fighting me, that line is as painful and takes about as long as giving birth.

                                                                                      I feel this in my soul. You can tell the compiler is trying its hardest to tell you what you’re doing wrong, but when you have a lifetime error or an error with a trait object and you’re just not getting it, and you wish there was a “well screw this” button you could press to at least get the damn thing to compile… sigh. The things we do for love.

                                                                                      1. 3

                                                                                        and you wish there was a “well screw this” button you could press to at least get the damn thing to compile

                                                                                        There is: you fall back to reference counting for just that. Then, you get its safety and performance benefits everywhere that borrow checked with just that part costing you. Then, you can figure it out later if it’s worth it.

                                                                                        1. 4

                                                                                          99% of my horrible issues revolve around manual lifetime annotations. For some reason, I tend to get along with the borrow checker the vast majority of the time.

                                                                                          e.g. this line using clap was exceptionally painful:

                                                                                          type HelpFn<'a> = fn(App<'a, 'a>) -> App<'a, 'a>;

                                                                                          1. 5

                                                                                            That looks horrific. I mean, Lisp at least looks more consistent even as it horrifies some newcomers.

                                                                                            1. 5

                                                                                              At some point one of my projects acquired a struct member with the following type:

                                                                                              Option<&'subj mut &'c mut dyn FnMut(&[u8]) -> Option<(Vec<u8>, Vec<u8>)>>
                                                                                              

                                                                                              I don’t know how it happened or when, but there it is.

                                                                                              1. 3

                                                                                                I just realize something. This language might overtake Java in lock-in and job security one day. Just with a smaller number of companies.

                                                                                                1. 1

                                                                                                  Yikes. I’m guessing the 'subj lifetime must be guaranteed to outlive the 'c lifetime?

                                                                                                  1. 3

                                                                                                    Indeed – the structure it’s defined in is struct Subject<'a: 'd, 'r, 'o, 'd, 'i, 'c: 'subj, 'subj>. Don’t look at me like I meant for this to happen.

                                                                                              2. 3

                                                                                                I’ve tried to learn Rust, and lifetimes are where I ran into a brick wall and gave up. The ownership/borrowing concepts and the borrow checker wasn’t a problem.

                                                                                          2. 2

                                                                                            Ruby: You were the chosen successor to Smalltalk, but never adapted the VM and the powerful GUI runtime editor. Instead, you eloped and married Rails.

                                                                                            Sooo much good snark potential wasted there! You left out the usual rant about glyphs and the perl syntactic sugar!

                                                                                            1. 3

                                                                                              Glyphs? You mean sigils? I don’t have a problem with those because they indicate scope and not types (like last time I used Perl was years ago), which is useful for making methods with same name as instance variables (@). I’d agree with complaints about the obliquely named global variables like $$. I actually prefer Ruby over Python when dealing with lots of regular expressions because it’s a language built-in.

                                                                                              The VM + GUI runtime editor (like Smalltalk had) I mention I feel is a massive missed opportunity because of Ruby’s incredible runtime introspection, metaprogramming capabilities, and dynamic reload. It would have helped better distinguish itself from Python with these strengths, but I feel like the train is passed on that though.

                                                                                              1. 1

                                                                                                The VM + GUI runtime editor (like Smalltalk had) I mention I feel is a massive missed opportunity because of Ruby’s incredible runtime introspection, metaprogramming capabilities, and dynamic reload. It would have helped better distinguish itself from Python with these strengths, but I feel like the train is passed on that though.

                                                                                                I agree. Even things like RubyMine don’t go nearly far enough. You could still build one! Although tbh ruby has the same problem Python does in that there aren’t very many superb cross platform GUI environments for it, so you’d need to design one of those too (Not that every Smalltalk implementation didn’t do that too :)

                                                                                          1. 4

                                                                                            Rust: Refactoring something is a pain in the ass. For example, if I’m working on writing a new struct and think I need a lifetime as part of the struct, I have to add two annotations to each impl block where the lifetime is used. Although this has gotten better with lifetime elision, it’s still just a lot of boilerplate that makes it incredibly frustrating to deal with.

                                                                                            Python: Please let me have static types, I’m begging you (mypy is getting there, but it’s not perfect)

                                                                                            C++: After writing Rust, and then trying to move something without using std::move, 1000 lines of error messages leaves me aghast at how people are able to be productive in this language. I realize that you begin to see patterns in these error messages (e.g. trying to copy something without a copy constructor) and if you really take the time to read a handful of error messages, you can usually pinpoint what’s going wrong. But it’s a lot of work.

                                                                                            1. 2

                                                                                              If you want types with Python… have you looked at Nim?

                                                                                            1. 18

                                                                                              In this case, isn’t it better to reply to the comment, explaining why you think it’s misunderstood?

                                                                                              1. 7

                                                                                                This seems right to me. If you want to convey something specific to the person you’re downvoting, then reply to them. The categories, as I understand it, exist to curb reflexive downvoting.

                                                                                                1. 7

                                                                                                  There are plenty of times I downvote without leaving a comment. Either because I’ve tried leaving a comment before and they were hostile/unreceptive, or because others have tried leaving a comment and failed to make any noticeable impression. It’s much easier to just downvote and move on than it is to engage in a hopeless battle to change someone’s behavior.

                                                                                                  1. 7

                                                                                                    Regrettably, downvoting without explanation provides very weak signal and as a community norm is toxic.

                                                                                                    1. 17

                                                                                                      There’s a lot more that’s toxic about this place than downvotes. Other than certain members who continue to be inflammatory (which is not a synonym for “expressing opinions I disagree with,” as so many like to believe), for example, I think a legitimate argument could be made that upvotes are more toxic than downvotes. We continually have short, low-efffort, low-content comments upvoted, usually because they are “clever” or are a “zinger.” The upvotes, at minimum, encourage this type of behavior. If I want that shit, I’ll go to r/programming.

                                                                                                      Either way, one can’t be expected to do battle with folks whose comments are so predictably tired and inflammatory, that I can often say, “oh there’s one comment, and given the title of the post, I can bet that so-and-so said something like such-and-such.” There’s just no point. And then you have other members that just repeatedly grind the same ol’ political axe any chance they get. Nobody has the energy to respond to all of these comments. And even when you do, you’ll invariably be accused of tone policing (or similar) and “shutting down alternative opinions.” So then you have to deal with those folks too.

                                                                                                      So, from my perspective, we have a culture we’ve established here of very light moderation, and a very high tolerance for asinine/unconstructive behavior. Every time I come here, I more and more think about just deleting my account and leaving. I don’t see any of this changing, and my guess is that it’s only going to get worse as the number of members increase.

                                                                                                      1. 15

                                                                                                        The downvote category I have wished for much more often than the proposed one is “Rude”. Replying to an inflammatory or ad hominem comment often just makes the commenter escalate, and best-case it derails the discussion. “Troll” isn’t right because the commenter isn’t deliberately trolling (at least I’d like to think things aren’t that bad). If someone is being blatantly uncivil I’d like to be able to downvote that behavior, regardless of content.

                                                                                                        1. 2

                                                                                                          I could go for a category like that. Anything along the lines of: mean, disrespectful, uncharitable.

                                                                                                        2. 8

                                                                                                          I often get a lot of ‘troll’ down votes mixed with lots of up votes. I don’t think I am a troll, so don’t really know what to do when that happens and nobody says anything. It is just an anonymous ‘fuck you’ from someone out there for some reason I don’t understand.

                                                                                                          One thing I found is If you want to make long form comments and have people see it, you are better off making a submission or blog post than trying to convince a single person of anything via comments.

                                                                                                          anyway, if it was me who annoyed you, sorry about that, its not something I’m doing on purpose.

                                                                                                          1. 6

                                                                                                            I hear you. I don’t have an answer - if I did, I’d be doing it.

                                                                                                            I definitely agree that there’s a trap where short jokes rise to the top. I think upvotes do have some value in letting people feel good for saying something that was received well, but it’s an open question whether the benefits outweigh the costs.

                                                                                                            I don’t have any special insight to offer on the other issues you mentioned, other than to say that for a place to be a community requires members to be committed to positive engagement. It isn’t easy.

                                                                                                            1. 4

                                                                                                              Yeah, indeed, it is quite hard. IMO, probably the only path is to 1) convince existing moderators or new moderators to devote more time to policing this place and 2) shift the culture of the community to welcome stricter moderation of content. That’s… hard for any number of reasons!

                                                                                                            2. 5

                                                                                                              We continually have short, low-efffort, low-content comments upvoted, usually because they are “clever” or are a “zinger.” The upvotes, at minimum, encourage this type of behavior.

                                                                                                              How often does this happen, though? Anecdotally, I only ever see the low-effort comments once in a while - usually on the more popular posts that have been simmering on the front page for more than a day. And usually those replies aren’t ever top-level, usually a reply to something else. In my experience, the vast majority of posts on this site feel thoughtful and sincere. When the “clever” posts happen, I’m actually relieved and reminded, “oh yeah, lobste.rs folks do have a sense of humor”, even if it wasn’t all that clever or funny.

                                                                                                              Either way, one can’t be expected to do battle with folks whose comments are so predictably tired and inflammatory, that I can often say, “oh there’s one comment, and given the title of the post, I can bet that so-and-so said something like such-and-such.”

                                                                                                              This is something I endorse. I will often see people attacking other peoples’ opinions directly on this website. I’m sure that a certain subset of folks here toe the line between “strong opinion” and “inflammatory”, and they know they’re toeing the line, but they haven’t done anything technically against the rules - but after reading their comments, there’s a bad taste left in your mouth. They may use harsh language directed at the person they’re replying to, or deliberately insult a piece of what they’re saying in a curt manner, or being just plain rude. Perhaps a “arguing in bad faith” or “rude” downvote option might help, but then again, we already have a “troll” downvote option - so that may just be what we want to use in those situations.

                                                                                                              I suppose I don’t really browse the site as often as other people here, so my experience may not be in line with yours. Thoughts?

                                                                                                              (postscript: I’m always worried I’m going to misunderstand someone’s argument and then have a whole thing where it feels like I’m arguing in bad faith when in reality, I’m being confident about the entirely wrong thing because my reading comprehension sucks. When faced with “post opinion” or “delete and avoid possible misunderstanding” I will more often than not choose the latter to avoid uncomfortable confrontation.)

                                                                                                              1. 7

                                                                                                                I personally feel like I see those low effort zingers a lot. The linked thread from this meta thread has them, for example. On the one hand, I think humor is good, but on the other, a lot of it that I see here do it at the expense of others. I see a lot of comments in the style of n-gate.com, which I personally think is just a complete and total pile of garbage, although it’s perhaps less on-the-nose in comments here at lobste.rs.

                                                                                                                But, everyone is likely to have their own standards for what kind of conversations they want to see here. I’d prefer to keep high standards. We already have places on the Internet where the n-gate style of humor is encouraged and accepted. In contrast, we have precious few places where we can expect continued high quality discussion. Lobste.rs is decent in the grand scheme of things; I’m likely a harsh critic because I sense the potential to be something better.

                                                                                                              2. 1

                                                                                                                I think a legitimate argument could be made that upvotes are more toxic than downvotes.

                                                                                                                (my emphasis)

                                                                                                                Why? A comment with a large number of upvotes is not promoted in any way apart from the small number inside the arrows. There’s no sorting algorithm like on Reddit that promotes this.

                                                                                                                If you believe that people are changing their commenting style for karma points, thus degrading the site for everyone else, you may have a point. But “toxic” is a very strong word.

                                                                                                                1. 4

                                                                                                                  I don’t really want to get lost in definitions of words. I used toxic because friendlysock did. If you want to choose a different word for describing both situations that is less strong, then sure, go right ahead. Also, saying it’s about karma kind of undervalues it. Most of us are human, and it’s not unlikely that we get a dopamine hit when we say something that is popularly validated.

                                                                                                                  1. 2

                                                                                                                    There’s a big difference between a forum which is genuinely toxic - where newcomers are looked down upon and insulted, where snark reigns supreme, and trolls run unchecked - and a forum that might tend towards silliness and unseriousness but doesn’t literally make people anxious to visit.

                                                                                                                    I’m fine with zingers and one-liners being downvoted - “me-too” and “off-topic” work for this - if the community feels they have no place here. I don’t see it at this moment in time as a big deal though.

                                                                                                              3. 2

                                                                                                                What if a comment couldn’t be downvoted unless it has at least one reply? Or a given person is not allowed to downvote unless they have left a reply?

                                                                                                                1. 3

                                                                                                                  That would just play into the hands of literal trolls. A downvote is all the response a troll comment deserves.

                                                                                                              4. 3

                                                                                                                I’ve done this too. My comment above was solely in the case where it seems as if a commenter has specifically misunderstood a post or a comment. In that case, I believe it’s more constructive to reply and ask for clarification, instead of leaving a hypothetical “misunderstood” downvote.

                                                                                                                1. 3

                                                                                                                  I’d prefer that the default behavior was moving on with no action.

                                                                                                                  1. 2

                                                                                                                    Oh I don’t mean to suggest anyone has a responsibility to reply whenever they downvote. I think I’ve done the same thing. I only mean to say that if you do want to communicate something specific, they say it.

                                                                                                                    1. 1

                                                                                                                      Aye yeah, that makes sense!

                                                                                                                2. 4

                                                                                                                  I’m of the opinion that the reply should be in addition to the downvote, to keep the discussion on track. Otherwise the comment will have the same moderation value as other comments, increasing its exposure and causing more confusion.

                                                                                                                  1. 3

                                                                                                                    I would echo this, misunderstandings happen, it doesn’t necessarily warrant a downvote. If you feel like clearing it up, that keeps the conversation going in what is hopefully a constructive way. If you don’t feel like clearing it up, that is also fine.

                                                                                                                    And perhaps I am misunderstanding here, but a downvote says you were wrong to misunderstand and I may or may not clear up the misunderstanding.

                                                                                                                  1. 14

                                                                                                                    Aside from the main vulns in the article, some highlights that I found horrifying:

                                                                                                                    Additionally, if you’ve ever installed the Zoom client and then uninstalled it, you still have a localhost web server on your machine that will happily re-install the Zoom client for you, without requiring any user interaction on your behalf besides visiting a webpage. This re-install ‘feature’ continues to work to this day.

                                                                                                                    Offered and declined a financial bounty for the report due to policy on not being able to publicly disclose even after the vulnerability was patched.

                                                                                                                    Enabling “Participants: On” when setting up a meeting, I discovered that anyone joining my meeting automatically had their video connected.

                                                                                                                    1. 8

                                                                                                                      The localhost web server struck me the most. That’s literally what a virus or some malware would do.

                                                                                                                      1. 1

                                                                                                                        This doesn’t neutralize all the major problems with Zoom (the company), but, in fairness, the article points out that the problem about your video being automatically turned on doesn’t happen when you change your preferences to keep your video off when you join calls. That said, I haven’t actually tested the full truth table of all the booleans involved here.

                                                                                                                      1. 2

                                                                                                                        I use fish for my shell, and since it evaluates a function for the prompt each time (instead of PS1), this is what my fish_prompt function looks like:

                                                                                                                        function fish_prompt --description 'Write out the prompt'
                                                                                                                            set -l home_escaped (echo -n $HOME | sed 's/\//\\\\\//g')
                                                                                                                            set -l pwd (echo -n $PWD | sed "s/^$home_escaped/~/" | sed 's/ /%20/g')
                                                                                                                            set -l prompt_symbol ''
                                                                                                                            switch "$USER"
                                                                                                                                case root toor
                                                                                                                                    set prompt_symbol '#'
                                                                                                                                case '*'
                                                                                                                                    set prompt_symbol '$'
                                                                                                                            end
                                                                                                                            printf "[%s@%s%s%s %s%s%s]%s "  $USER (set_color cyan) (prompt_hostname) (set_color normal) (set_color $fish_color_cwd) $pwd (set_color normal) $prompt_symbol
                                                                                                                        end
                                                                                                                        

                                                                                                                        It’s pretty much the standard Bash prompt, for example:

                                                                                                                        [user@host ~/dev/adventofcode-2017/day1]$

                                                                                                                        The hostname is teal and the directory is a nice green. Everything else is white.

                                                                                                                        1. 2

                                                                                                                          Cool - this looks exactly like the old smashthestack IO wargame. Interestingly, IO seems to have disappeared from the smashthestack page, so I assume it transferred ownership to this site?

                                                                                                                          1. 15

                                                                                                                            For those who don’t know, these slide are by Graydon Hoare, the person who did the initial legwork for Rust.

                                                                                                                            1. 9

                                                                                                                              I am ecstatic to hear that the TryFrom API was finally stabilized.

                                                                                                                              1. 5

                                                                                                                                I don’t think I agree–and that’s speaking as someone transitioning to Protonmail later this year.

                                                                                                                                Main shutdowns I can think of: Google+, the least popular of the major social networks. Security risk, and no real loss even from the point of view of users. Still have Blogger, Sites, Waze

                                                                                                                                Google Talk, which migrated to Hangouts. (Hangouts to be phased out soon? Unsure about that.) A net loss, since Hangouts isn’t federated.

                                                                                                                                Allo, killed in favor of Messenger and Duo.

                                                                                                                                Google Reader…. Nope, still sad about that one.

                                                                                                                                All of these are consolidating competing functionality into one solution. I think it’s a moderately successful strategy that Google is big enough to compete against its own services in fields like social and messaging, kill the less successful product, and roll its best features into the survivor. I see the article’s point that this creates confusion and people who liked the killed function are disadvantaged, but it’s still an interesting way to spur innovation.

                                                                                                                                1. 4

                                                                                                                                  Hangouts to be phased out soon? Unsure about that.

                                                                                                                                  Yup, they’re moving to “Google chat”. They’ve moved (moving?) enterprise users off already and onto their new platform. It’s kind of like Slack, which is where it feels like a lot of these chat applications are heading.

                                                                                                                                1. 2

                                                                                                                                  I was looking at Xanadu recently mostly out of curiosity, and everything that Ted Nelson says feels really hand-wavy and more like coming from the perspective of a potential user, rather than someone who is designing a protocol, or markup, or suite of tools - or whatever Xanadu actually is. In fact, the more I read about the work that’s been done on Xanadu, it just feels like WWW with a prettier markup language (and transclusions, which would be super useful). It feels like the vast majority of what Xanadu aims for can be accomplished with HTTP and a markup language. Is it really this simple, or am I missing something?

                                                                                                                                  I am aware, however, that this came about long before the world wide web was invented - but while WWW was actually implemented, Xanadu was merely a bunch of good ideas that someone wrote down.

                                                                                                                                  1. 2

                                                                                                                                    everything that Ted Nelson says feels really hand-wavy and more like coming from the perspective of a potential user

                                                                                                                                    Ted is mostly concerned with user experience, and he is not a programmer. When he writes things up, he generally frames it from a user perspective, rather than a programmer perspective. (This is a problem, because he’s surrounded by very skilled & smart programmers, & has clever and solid solutions to a lot of problems that he doesn’t articulate in his documentation.) It’s a problem that I tried to resolve in my documentation of Xanadu designs aimed at engineers.

                                                                                                                                    The document linked here doesn’t have that problem, because Ted didn’t write it – it was written by the XOC team at Autodesk. As a result, it’s full of details of data structures and actual pseudocode implementations of operations.

                                                                                                                                    a prettier markup language

                                                                                                                                    Xanadu does not use embedded markup, because embedded markup breaks consistency guarantees. It’s not really reasonable to look at Xanadu as a ‘better Web’, in the same way it’s not really reasonable to look at haskell as a ‘better C++’: Xanadu designs are built on strong guarantees about consistency & simple but nuanced relations.

                                                                                                                                    Basically: embedded markup breaks the concept of transclusion, because embedded markup confuses structure (which is part of formatting) with content. This means that, in order to reliably reuse content, you’d need to actively strip markup in complicated & messy ways, encouraging a separate layer that pretends it’s not there – but such a layer would break guarantees about data being static, & those guarantees turn things like bidirectional linking from impossible to trivial.

                                                                                                                                    Now, over time, newer implementations have ditched some of the theoretical simplicity of XOC-era designs in favor of wholesale adopting some web tech. For instance, all implementations since 2007 (and possibly earlier) have used HTTP for transfer – which means that we are in the same boat as the web in terms of guarantees about documents remaining static & not disappearing. (I pushed hard for IPFS integration for this reason.)

                                                                                                                                    The enfilade structures described in the XOC document here & used in Udanax Green are not used in modern implementations (in part because the people doing new implementations don’t have the strong mathematical background that Mark Millar & other folks doing the general enfilade theory in the late 70s had, and in part because computers have gotten fast and pipes have gotten thick so the performance benefits that these implementations provided to people dialing into a Sun workstation from their C-64 are no longer really relevant). Instead, we have EDLs written in a human-readable CSV-like format, transferred over HTTP, & we use standard HTTP features for partial fetching for transclusion purposes when available (but since they’re usually not, we typically download the whole thing & chop it up ourselves… actually, OXU and Xanadu Cambridge may not even bother with partial fetches or with sparse caches, but XanaSpace did because our aim was viewing & editing seriously huge corpora – like legal precedent and such).

                                                                                                                                    while WWW was actually implemented, Xanadu was merely a bunch of good ideas that someone wrote down.

                                                                                                                                    Xanadu has an awful lot of implementations. Unfortunately, none of them are fully complete. (Udanax Green is usable – you can view & edit documents in it with the PyXi interface, & it’s been open source for 20 years – but it has some bugs that cause occasional text corruption. OpenXanadu & Xanadu Cambridge, from 2014 and 2016 respectively, are fully functional web-based translit viewers, but they don’t ship with fully featured editors & SOP limits their functionality.) We just never had as many dedicated developers on a single Xanadu implementation as there are on a single modern web browser.