The revived No JS Club celebrates websites that don’t use Javascript, the powerful but sometimes overused code that’s been bloating the web and crashing tabs since 1995. The No CSS Club goes a step further and forbids even a scrap of styling beyond the browser defaults. And there is even the No HTML Club, where you’re not even allowed to use HTML. Plain text websites!

The modern web is the pure incarnation of evil. When Satan has a 1v1 with his manager, he confers with the modern web. If Satan is Sauron, then the modern web is Melkor [1]. Every horror that you can imagine is because of the modern web. Modern web is not an existential risk (X-risk), but is an astronomic suffering risk (S-risk) [2]. It is the duty of each and every man, woman, and child to revolt against it. If you’re not working on returning civilization to ooga-booga, you’re a bad person.

A compromise with the clubs is called for. A hypertext brutalism that uses the raw materials of the web to functional, honest ends while allowing web technologies to support clarity, legibility and accessibility. Compare this notion to the web brutalism of recent times, which started off in similar vein but soon became a self-subverting aesthetic: sites using 2.4MB frameworks to add text-shadow: 40px 40px 0px hotpink to 400kb Helvetica webfonts that were already on your computer.

I also like the idea of implementing “hypotext” as an inversion of hypertext. This would somehow avoid the failure modes of extending the structure of text by failing in other ways that are more fun. But I’m in two minds about whether that would be just a toy (e.g. references banished to metadata, i.e. footnotes are the hypertext) or something more conceptual that uses references to collapse the structure of text rather than extend it (e.g. links are includes and going near them spaghettifies your brain). The term is already in use in a structuralist sense, which is to say there are 2 million words of French I have to read first if I want to get away with any of this.

Republished Under Creative Commons Terms. Boing Boing Original Article.

  • ThePowerOfGeek@lemmy.world
    link
    fedilink
    English
    arrow-up
    138
    arrow-down
    2
    ·
    9 days ago

    JavaScript, AJAX, and modern web frameworks have pushed us away from displaying information in a pure and clean way. We need to go back to a better time!

    Looks at no-HTML websites

    Shit, we’ve gone back too far!

    • B-TR3E@feddit.org
      link
      fedilink
      English
      arrow-up
      50
      ·
      9 days ago

      CSS on the other hand is quite essential to separate layout from content. Which is a good thing, so I can’t really think of a reason for a “no-CSS” rule. Specifically if you can use inline styles as well but in a way more messy way.

      • howrar@lemmy.ca
        link
        fedilink
        English
        arrow-up
        5
        ·
        8 days ago

        I think the idea is that you keep the layout as simple as possible such that you don’t need any code for it, css or otherwise.

      • sik0fewl@lemmy.ca
        link
        fedilink
        English
        arrow-up
        3
        ·
        8 days ago

        I know that’s what CSS is supposed to do, but I’m not sure many people use it that way.

        • B-TR3E@feddit.org
          link
          fedilink
          English
          arrow-up
          2
          ·
          8 days ago

          Oh, come on. You really want some at least readable output. Things like image borders, consistently positioned images/diagrams, line breaks and page borders. Some whitespace and indentations, too. You just can’t read a couple of pages full of unformatted raw text without massive eye fatigue. I’m all for dumping JS and excessive frameworks, I’d prefer well-formed XHTML over any of that clients-side scripted crap, but totally rejecting CSS is pointless zealotry.

            • B-TR3E@feddit.org
              link
              fedilink
              English
              arrow-up
              1
              ·
              edit-2
              8 days ago

              Yes , I can read books. I even read one or two of the 1200 around me. Those with the fuckpics and some of the funnier ones, like “Phänomenologie des Geistes” by Hegel. I wouldn’t have if they had been layouted using browser standards.

                • B-TR3E@feddit.org
                  link
                  fedilink
                  English
                  arrow-up
                  1
                  ·
                  8 days ago

                  That’s not even convincing pedantery. Nobody would assune that a browser’s standard style might be an RFC, IETF- or in any way official standard,

          • zloubida@sh.itjust.works
            link
            fedilink
            English
            arrow-up
            1
            ·
            8 days ago

            In a perfect world, these would be decided not server-side, but client-side by choices made by the browser users.

            But our world is not perfect.

            • B-TR3E@feddit.org
              link
              fedilink
              English
              arrow-up
              2
              ·
              8 days ago

              I don’t think. You can’t prove I do! Leave me alone. You’re one of them! I knew it all the time.

  • Absaroka@lemmy.world
    link
    fedilink
    English
    arrow-up
    44
    ·
    9 days ago

    I do wonder if we’re going to see some websites popping up that kind of hit the reset button on social media and go back to smaller communities of folks with something in common.

    I kind of miss the days of actually having online conversations with folks you know are real people (not bots), that aren’t trying to be an influencer, or get famous, or some how many money off your interactions.

    • meejle@lemmy.world
      link
      fedilink
      English
      arrow-up
      18
      ·
      9 days ago

      I think it’ll happen, but I don’t think it’s happening yet.

      The unease is already there (“the internet used to be a place”/“why isn’t the internet fun any more?” sentiments and #OldWeb #SlowWeb hashtags), but I don’t think people are ready to do anything about it.

      I’m only one guy, with a small internet following, but I recently had a go at launching a small “Gaymers” webring (well, a simplified version of one). I promoted it on my socials, I laid out why I think it’s a good idea, I paid to “Blaze” it on Tumblr – I even emailed some like-minded creators directly.

      I rewrote the webpage multiple times, to try to make it more persuasive and more concise. I added a contact form in case people felt uncomfortable emailing me. I loosened the rules to allow commercial websites, as long as they were still independent. I worked hard on the widget and incorporated feedback (made it respect prefers-reduced-motion and made a static version for sites where animation would feel out of place).

      I got some good feedback; lots of people said it was interesting, and a good idea. But literally no one joined or expressed any interest in joining. 🤷‍♂️

      I’m going to have one more go at promoting it next time I’ve got money to spare, but I’ll most likely end up quietly deleting it along with any evidence it existed, because a webring of one is fucking embarrassing. 💀

      I guess if you build it, they will not necessarily come lmao

      • TerHu@lemmy.dbzer0.com
        link
        fedilink
        English
        arrow-up
        5
        arrow-down
        1
        ·
        9 days ago

        i love the idea of hosting sites as part of a ring, but i don’t love the idea of having to add my full name and address in the about section, which i’d be legally required to do… i think that’s part of the issue for some people at least.

    • Melvin_Ferd@lemmy.world
      link
      fedilink
      English
      arrow-up
      1
      ·
      9 days ago

      Is there any way to go back to running these things on an old Dell in the corner of a bedroom next to a fire extinguisher?

      That’s when we have truly won

  • Rose@slrpnk.net
    link
    fedilink
    English
    arrow-up
    44
    ·
    8 days ago

    “No HTML club” is kinda going too far on the Web. If you go there you might as well start a No HTTP Club and serve stuff over Gopher and FTP.

    But we definitely need an HTML 2.0 Club.

    • rottingleaf@lemmy.world
      link
      fedilink
      English
      arrow-up
      6
      ·
      8 days ago

      HTML 2.0 doesn’t have tables, and tables are not so bad, even org-mode has tables.

      Since HTML 4.01 was a thing when I first saw a website:

      Being able to have buttons is good. Buttons with pictures too.

      And, unlike some people, I liked the idea of framesets. A simple enough websites could have an IRC-like chat frame to the left and the main navigable area to the right.

      And the unholy amount of specific tags is the other side of the coin for not yet using JS and CSS for everything.

      I think an “RHTML” standard as a continuation and maybe simplification of HTML 4.01 (no JS, no CSS, do dynamic things in applets, without Netscape plugins do applets with some new kind of plugins running in a specialized sandboxed VM with JIT) could be useful. Other than this there’s no need in any change at all. It’s perfect. It has all the necessary things for hypertext.

        • kazerniel@lemmy.world
          link
          fedilink
          English
          arrow-up
          3
          ·
          edit-2
          7 days ago

          I hated frames, but I do have a tiny bit of nostalgia for them because I started web design in the early '00s when they were all the craze for handmade blogs and portfolio sites :D

          And the iframes took up like 1/4 of the screen (with miniscule faint text!) while the rest of the page were large brush swoops and other graphical elements 🥹

          And the tiny navigation buttons without any text that you had to figure out from the hovered URL.

          Ah it was all so fucking unusable, but pretty xD

      • Teppichbrand@feddit.org
        link
        fedilink
        English
        arrow-up
        2
        ·
        8 days ago

        I just talked to a friend a couple days ago, we’ll take a weekend off, do a hackaton to rebuild our sites in this style. Dithering the images looks really cool, I’d like to do his as well.

    • gandalf_der_12te@discuss.tchncs.de
      link
      fedilink
      English
      arrow-up
      7
      ·
      8 days ago

      it also matters because the complexity of websites is a burden to end-user devices. especially on weak smartphones, as i’m using rn, the power usage of heavy websites sucks a lot, as it considerably slows down the device overall.

  • Matriks404@lemmy.world
    link
    fedilink
    English
    arrow-up
    31
    ·
    8 days ago

    What we need is a subset of modern web, without any bloat, especially JS frameworks.

    A lot of websites can be static HTML + CSS.

  • AmidFuror@fedia.io
    link
    fedilink
    arrow-up
    15
    ·
    9 days ago

    I am in the “whistling into the phone handset on a dialup connection is the purest form of online communication” club.

        • Agent641@lemmy.world
          link
          fedilink
          English
          arrow-up
          7
          ·
          edit-2
          8 days ago

          We can go further. We could take away your fancy "URL"s and just use IP addresses for navigation.

          Heck, we could do away with TCP/IP altogether and network over serial. It’s a perfectly functional protocol with several baud rates to choose from. I like ol’ reliable 9600, but I sometimes dabble in 115200 when I’m feeling adventurous.

          • raldone01@lemmy.world
            link
            fedilink
            English
            arrow-up
            2
            ·
            edit-2
            8 days ago

            Back in school my friends all flashed their mcus with 4-8MB images over serial with 115200 baud. I set up ota updates over wifi. They were all fascinated by my speedy flashes. However when I offered to help them set it up, not one was interested because their setup was working as is and slow flashing is not a “bad” thing since it gave them an excuse to do other things.

            We are talking minutes vs seconds here.

            The teachers were surprised by my quick progress and iterations. When I told them my “trick” the gave me bonus points but also were not interested in learning how to do ota which was very easy. A simple 20 minute first time setup would have saved sooo much time during the year.

              • raldone01@lemmy.world
                link
                fedilink
                English
                arrow-up
                1
                ·
                edit-2
                8 days ago

                I don’t think the promise chain is really needed here.

                I used this script:

                import Axios from 'axios'
                import OldFS from 'fs'
                import { PromiseChain } from '@feather-ink/ts-utils'
                
                const fs = OldFS.promises
                
                const image = process.argv[2]
                const destination = `http://${process.argv[3]}/vfs/ota`
                const now = process.argv[4] === 'now'
                const once = process.argv[4] === 'once'
                
                async function triggerUpdate(): Promise<void> {
                  console.log('Uploading new binary')
                  const file = await fs.readFile(image)
                
                  await Axios({
                    method: 'POST',
                    url: destination,
                    headers: {
                      'Content-Type': 'application/octet-stream',
                      'Content-Length': file.byteLength
                    },
                    data: file
                  })
                  console.log('Finished uploading')
                }
                
                (async () => {
                  const updateChain = new PromiseChain()
                  console.log(`Watching file '${image}' for changes\nWill upload to '${destination}'!`)
                  if (once) {
                    await triggerUpdate()
                    return
                  }
                  if (now)
                    await updateChain.enqueue(triggerUpdate)
                  OldFS.watch(image, async (eventType) => {
                    if (eventType !== 'change')
                      return
                    let succ = false
                    do {
                      try {
                        console.log('Change detected')
                        await updateChain.enqueue(triggerUpdate)
                        succ = true
                      } catch (e) {
                        console.error(e)
                        console.log('Retrying upload')
                      }
                    } while (!succ)
                    console.log('Upload finished')
                  })
                })()
                

                Relevent code on the esp:

                You can ignore my cpp stuff and just put this in the handler of the stock webserver.

                auto ota = vfs->addHandler(makeDirectory("ota"));
                        {
                          ota->addHandler(makeDirect([](auto &con) {
                            if (con.req->method != HTTP_POST)
                              return HandlerReturn::UNHANDLED;
                
                            // https://github.com/espressif/esp-idf/tree/master/examples/system/ota/native_ota_example/main
                            // https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ota.html
                            auto updatePartition = esp_ota_get_next_update_partition(nullptr);
                            if (updatePartition == nullptr)
                              return sendError(con,500, "No free ota partition found!");
                            esp_ota_handle_t otaHandle;
                            auto err = esp_ota_begin(updatePartition, con.req->content_len, &otaHandle);
                            if (err != ESP_OK)
                              return sendError(con, 500, std::string{"Can't start ota update: "} + esp_err_to_name(err), true);
                
                            int receivedBytes = 0;
                            do {
                              auto end = httpd_req_recv(con.req, buf.data(), buf.size());
                              // ESP_LOGE(TAG, "Received %d", receivedBytes);
                              // hexDump("RECV:", buf.data(), end);
                              if (end <= 0) {
                                esp_ota_abort(otaHandle);
                                return sendError(con, 500, "Error receiving", true);
                              }
                              err = esp_ota_write(otaHandle, buf.data(), end);
                              if (err != ESP_OK) {
                                esp_ota_abort(otaHandle);
                                return sendError(con, 500, std::string{"Error writing: "} + esp_err_to_name(err), true);
                              }
                              receivedBytes += end;
                            } while (receivedBytes < con.req->content_len);
                
                            err = esp_ota_end(otaHandle);
                            if (err != ESP_OK)
                              return sendError(con, 500, std::string{"Failed to end: "} + esp_err_to_name(err), true);
                
                            err = esp_ota_set_boot_partition(updatePartition);
                            if (err != ESP_OK)
                              return sendError(con, 500, std::string{"esp_ota_set_boot_partition failed: "} + esp_err_to_name(err), true);
                            auto ret = sendOK(con);
                            FactoryResetServiceCon().reboot(1000 / portTICK_PERIOD_MS);
                            return ret;
                          }));
                        }
                

                I also used a custom partition table for 2 partitions so that when my program crashes it can just go back to boot the previous version.

                Here it is for reference:

                partitions.csv

                # Name,   Type, SubType, Offset,  Size, Flags
                # Note: if you change the phy_init or app partition offset, make sure to change the offset in Kconfig.projbuild
                nvs,      data, nvs,     0x011000, 0x006000,
                otadata,  data, ota,     0x017000, 0x002000,
                phy_init, data, phy,     0x019000, 0x001000,
                ota_0,    app,  ota_0,   0x020000, 0x1F0000,
                ota_1,    app,  ota_1,   0x210000, 0x1F0000,
                

                Note: This partition table is for a special model of the ESP32 though.

                Also another disclaimer: This code does not represent my current coding abilities and may be outdated - it worked well though.

              • raldone01@lemmy.world
                link
                fedilink
                English
                arrow-up
                1
                ·
                8 days ago

                Hahahah. Awesome. Have fun! You just need a simple webserver. The builtin one will do and then you use the ota functions of the ESP IDF.

  • Lovable Sidekick@lemmy.world
    link
    fedilink
    English
    arrow-up
    12
    ·
    8 days ago

    I’ll say one thing for the No CSS philosophy - at least it eliminates light-colored text on a light-colored background using the thinnest possible font, which is probably the stupidest stylistic trend since the web began.

    • GnuLinuxDude@lemmy.ml
      link
      fedilink
      English
      arrow-up
      4
      ·
      7 days ago

      I remember the wonderful feeling when Discord had a redesign in like 2017 or 2018 where they undid that awful gray-on-white design trend and made the text actually have contrast. These days the annoying trendy design thing is articles/blogs with extremely narrow width.

      no i do not want to read paragraphs
      that are this wide. this is making it
      way more annoying to read. please
      stop doing this.
      

      at least Firefox has Reader Mode.

      • bluesheep@lemm.ee
        link
        fedilink
        English
        arrow-up
        2
        ·
        7 days ago

        I’m annoyed by that too, and I think the reason is so they can cram more ads in it. I had to turn of my adblock for a second and forgot to turn it back on while going to a news site and I swear to God 2/3rd of the page was ads. Turned it back on and those spaces were empty making only 1/3rd of the page used. Still way better tho I’m never turning it off again.

  • the_wiz@feddit.org
    link
    fedilink
    English
    arrow-up
    8
    ·
    8 days ago

    Just to mention it:

    gopher://sdf.org

    There is no better place for plain and real content

  • moseschrute@lemmy.ml
    link
    fedilink
    English
    arrow-up
    8
    arrow-down
    1
    ·
    edit-2
    8 days ago

    Just out of curiosity what percentage of people here are using Voyager as their Lemmy client?

    Spoiler

    Voyager wouldn’t work without JavaScript… shhh don’t tell anyone

      • moseschrute@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        edit-2
        8 days ago

        There are so many people here that hate cloud based services. And the same people also hate JavaScript. Like you realize if your app was just static JavaScript files, you could literally just download the entire site to your computer and run it? Why is JavaScript the enemy?

        JavaScript isn’t the enemy. The enshitification of technology is the enemy.

  • oakward@feddit.org
    link
    fedilink
    English
    arrow-up
    7
    arrow-down
    1
    ·
    8 days ago

    You are using ASCII? Weak. True website surfers use raw character values, like The Matrix in 1999.