1. 17

This article is also available over Gopher with selector 2017-02-02 for the menu.

The Gopher URL is the following: gopher://verisimilitudes.net/12017-02-02

Comments are preferable to points and part of why I submit my work here.

  1.  

  2. 29

    The frustration of the author in their Lobste.rs bio is palpable:

    If you take a look at my submissions, you’ll see most of my work is ignored and my book recommendations have been most popular, as of the time of writing this; I believe this is because, no different than Hacker News, this website is mostly populated by people with only surface-level interest in computing, if that; meanwhile, a book recommendation lets everyone have their opinion and they give it points because they easily understand it.

    While frustrated, I intend to keep this account until it completely ceases to serve me, at which time I’ll do my best to delete everything ever made under this account.

    Marketing yourself is difficult, but having distain for your audience because they will not recognize your obvious intelligence is a trap. Congrats on discovering that a clever project name will get you some self-gratifying attention, but for long term success have some humility and respect for your fellow man.

    1. 10

      People may be expecting to see some moderator action here…

      I honestly don’t know what to make of the article. I don’t find the jokes in it funny, nor do I find them appropriate for this forum (“homo” is not simply a silly word; it causes real harm). I don’t encourage personal attacks in all but the most exceptional circumstances, but I did find that your comment provided helpful context, and you were pretty restrained. Ultimately, I think I’m glad that you commented as you did. For the sake of civility, I want to encourage you not to get drawn into back-and-forth about this; I think your top-level comment stands well on its own.

      1. 1

        I don’t find the jokes in it funny, nor do I find them appropriate for this forum (“homo” is not simply a silly word; it causes real harm)

        Isn’t this referring to homoiconicity? The author states his language has this property. “Homo” has uses beyond the offensive type you’re referring to, it’s a latin prefix - homogeneous, homophone, homoiconicity.

        I’m not trying to say it’s inoffensive to everyone - I just don’t draw the conclusion that the author using it in this way.

        1. 3

          I felt the entire joke of the first paragraph was that it’s using a bunch of funny-sounding words that are often considered inappropriate, and claiming they’re being used solely for their technical meanings.

      2. 4

        How about engaging with the content rather than bringing in the author’s off-topic profile text? Congrats on fulfilling their expectations.

        1. 5

          Thanks, but I’m going to let my comments stand. The tone and purpose of the article I think is best explained by his bio.

          This article is not a serious attempt at coding. If you think I’m off-topic, fine. But software is more than just code. I’ll take clarity and respect over cleverness and contempt every time.

          1. [Comment from banned user removed]

            1. 14

              I don’t know what you expect, but I’m well aware this isn’t a JavaScript or Rust program with a founding pledge and a logo and a code of conduct and other irrelevencies. You seem like the manner of person I bemoan in my quip.

              This place makes Hacker News look good, but that doesn’t make it good, itself. I’m not the gmail-using, github-star giving, ’‘open source’’ software promoting, JavaScript-pro idiot hipster that seems to infest this place and looks at an APL program and looks down on it.

              One (albeit vague) critique of your program, and you bemoan them for “looking down” on APL programs. In a non-sequitur you condemn a vague intersection of JS and Rust programmers and users of popular web services as “idiot hipsters” that “infest” Lobsters. Who is looking down on whom?

              If you’re not willing to peacefully cohabit a space that doesn’t homogeneously subscribe to the identity politics of the web-chaste APL hacker, why are you on this website? It’s entitled and insulting to so consistently lash out towards the community and at the same time expect others to provide feedback on your work.

              1. [Comment from banned user removed]

                1. 3

                  Anyway, I could ask the staff here to delete everything I’ve ever written here, as I own the copyright, but perhaps I serve a valuable purpose here as a source of alternative opinions and ideas.

                  I’m not sure owning copyright entitles you to require a publisher to remove your comments.

                  I’d like you to stay, personally, but I also think your communication would be improved by not implicitly or explicitly insulting your readership. You may think WWW is “nonsense” but it’s very much a fringe position.

              2. 8

                Your angry and contemptuous comments (of which I’ve seen a few now) aren’t exactly a positive contribution to Lobste.rs either though… Perhaps a look in the mirror is in order.

            2. [Comment removed by moderator Irene: These personal attacks are inappropriate. There's blame enough to go around in this thread, but your remark escalates the situation rather than calming it down.]

              1. [Comment removed by moderator Irene: Removing the tree under a deleted comment.]

                1. [Comment removed by moderator Irene: Removing the tree under a deleted comment.]

                  1. [Comment removed by moderator Irene: Removing the tree under a deleted comment.]

                    1. [Comment removed by moderator Irene: Removing the tree under a deleted comment.]

                      1. [Comment removed by moderator Irene: Removing the tree under a deleted comment.]

            3. 4

              As with all Brainfucks, this is an interesting toy.

              In terms of actual expressive power, I’m doubtful whether this language is more powerful than Brainfuck, up to a constant factor; it’s therefore not more abstractive than Brainfuck. There exists a short Brainfuck self-interpreter whose invocation at runtime would cost only O(n) memory overhead; this is comparable to the typical hygienic macro system.

              The computational cost of bracket-matching during = is interesting. Your reference implementation handles it during copying, which is a reasonable way to go; still, the underlying seeking that the instruction pointer has to do during bracket-walking is O(n²). This would complicate using a naïve self-interpreter. This improved self-interpreter doesn’t remove the bracket-walking entirely. However, I think that this might be a fundamental limitation of having a single data tape; I seem to recall that formal Turing machines have a divide between single-tape and double-tape machines precisely because of the difference in time complexity between moving up and down multiple segments of a single tape in single steps. (Don’t worry, all multi-tape Turing machines are still Turing-equivalent if we say “polynomial time” everywhere.)

              However, any possible efficiency improvements introduced by = are surely outweighed by how hamfisted it is. Overwriting the entirety of instructions or data, rather than being able to open a lightweight staging prompt on some arena of cells and calling the compiler as a routine, means that a program is effectively segmented into a series of big stages. In each stage, a program can:

              • Alter RAM to look like a new program.
              • Reach = with non-zero under the pointer. The program becomes the new program in RAM.
              • Reach = with 0 under the pointer. The program is reflected into RAM.

              However, reflection in Brainfuck is superfluous here. The initial stage’s reflection data can be statically encoded at the front of the program code, and every other stage’s reflection data can be generated to be statically encoded in the fronts of their program codes. Additional expressive power could be added for less-than-constant encoding cost by first accepting the constant cost of the self-interpreter, as outlined above; then, = ends up being only worth it on extremely short hand-crafted examples, I’d expect. This is because altering RAM to look like a new program is cheaper with the self-interpreter than with repeated invocations of =, once the tower of abstractions is deeper than the cost of expressing each abstraction in terms of mere Brainfuck. (Brainfuck’s lack of subroutining behavior or structured code makes this harder to see than normal.)

              1. 2

                I would love to read the implementation but I think there’s some encoding problem. None of the APL symbols are rendered properly for me. For example I see ⍝ where I would expect ⍝.

                1. 1

                  The link is written in this way:

                  <a charset="UTF-8" href="masturbation.apl">implementation</a>
                  

                  This didn’t correct it, however. Your browser probably gives you the option to change the character encoding of a document manually, but I’ll change the link to behave properly if it’s a matter of changing this tag.

                  1. 4

                    Your server isn’t sending a content type or encoding header with the page itself. The charset attribute on the anchor isn’t supported by any browser. I don’t know of a way to change the encoding client-side in mobile Safari, but you are right it can be changed in most desktop browsers.

                    As @spc476 said, the best way to correct it is to configure Apache to deliver files with .apl extension with a Content-type: text/plain; charset=utf-8 header.

                    1. 3

                      Another way to fix it with Apache is to add a AddDefaultCharset directive to the configuration.

                      1. 1

                        I wonder why UTF-8 is not the standard default encoding for HTTP.

                        1. 10

                          because HTTP predates UTF-8 and wide adoption of HTTP predates wide adoption of UTF-8

                  2. 2

                    I don’t have a problem with the APL version on Gopher.

                    https://codemadness.org/gopherproxy/?q=verisimilitudes.net/0/masturbation.apl

                    1. 2

                      I’m surprised how the [ and ] “operators” looks ad-hoc in their description but seems to implement very generic constructs in practice.

                      1. 2

                        Looping! That generic construct is looping of course!

                      2. 1

                        gopher://verisimilitudes.net/1/2017-02-02 What about an extra slash after the item type?

                        1. 2

                          What about an extra slash after the item type?

                          Gopher URLs have a specific format, where the first character is the item type and isn’t transmitted. The part after that is the selector.

                          My Gopher URL encodes the following selector, which is the correct one:

                          2017-02-02
                          

                          Your Gopher URL encodes the following selector, which is incorrect; some servers do have selectors beginning this way, but mine doesn’t:

                          /2017-02-02
                          

                          My Gopher server is currently too lenient on what it accepts, but I expect to change this, so selectors that begin with ‘’/’’ and requests that, say, use Line Feed instead of Carriage Return and Line Feed will stop working at that point.

                          1. 1

                            Indeed!

                            We can see it here (at 2.1. Gopher URL Syntax)

                               A Gopher URL takes the form:
                            
                                  gopher://<host>:<port>/<gopher-path>
                            
                               where <gopher-path> is one of:
                            
                                  <gophertype><selector>
                                  <gophertype><selector>%09<search>
                                  <gophertype><selector>%09<search>%09<gopher+_string>
                            

                            [edit]: I suppose this is the gopher server? http://verisimilitudes.net/gophershell

                            Simple and efficient!