No JS, No CSS, No HTML: online "clubs" celebrate plainer websites
-
Separating layout from content is good. CSS is a really bad way to do it.
Do you have an example of a good way to do it?
-
HTML but no-CSS has defaults though.
Can you read books
wrote last edited by [email protected]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.
-
Why do you think I'm advocating for getting rid of CSS and not being silly?
I don't think. You can't prove I do! Leave me alone. You're one of them! I knew it all the time.
-
Maybe we could have
No-JS
andNo-Client-Storage
(which would include cookies) headers added to HTTP. Browsers could potentially display an icon showing this to users on the address bar.Theoretically, browsers could even stop from the JS engine from being started for the site in the first place. Though I wouldn't be surprised if the engine is too tied into the code of modern browsers for that to work.
A Content-Security-Policy with script-src 'none' should already allow for that . no js can be loaded like that
-
Two fluently, and maybe a tenth each of two more, why?
Because then you know that it isn't easy to keep on top of it all the time.
I would appreciate it if you wouldn't just point at my mistake but say what would be right and why. If you know, that is.
-
I think because in 10 or so years, there might be a new standard that breaks the site again. Or makes it unusable.
TXT walkthroughs are still used for a reason. Its much harder to break txt files over decades.
All that is assuming someone still wants to read your txt but that is besides the point.
This. Text files are great for so many reasons! Hard to construct something malicious, too, so pretty great for uploads.
-
Sure, but you can’t be tracked via css so it’s okay in my book. Have fun with your whacky css sites.
whacky css sites.
-
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.
They’re not standards, it’s just default styles, which you can change.
-
Maybe we could have
No-JS
andNo-Client-Storage
(which would include cookies) headers added to HTTP. Browsers could potentially display an icon showing this to users on the address bar.Theoretically, browsers could even stop from the JS engine from being started for the site in the first place. Though I wouldn't be surprised if the engine is too tied into the code of modern browsers for that to work.
Theoretically, browsers could even stop from the JS engine from being started for the site in the first place.
The NoScript extension is basically this. Most of the client side stuff is off by default and you can enable it per-domain. It breaks a whole lot of websites, but often in ways where the main content of a website is still readable. Over time, you can build up a list of "allow by default" domains and most of the web you care about works. Though, you may have to spend a moment or two sorting out permissions when you visit a new site.
-
You've convinced me to learn and implement OTA on my 8266. Thanks!
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.
-
You've convinced me to learn and implement OTA on my 8266. Thanks!
wrote last edited by [email protected]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.
-
What devilry is this? Written word?
Real cultures use oral history to store knowledge!Passing information between two simultaneously existing entities? Get outta here! All cultures use the Jung collective unconscious to store knowledge!
-
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.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.
-
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.
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.
-
You are using ASCII? Weak. True website surfers use raw character values, like The Matrix in 1999.
(ó﹏ò。) oh no my internet cred
-
Jesus. This is getting out of hand.
I photocopied my screen (those all in one printers are heavy) and I cannot find the glue little help?
-
Sure, but you can’t be tracked via css so it’s okay in my book. Have fun with your whacky css sites.
you can’t be tracked via css
-
Because then you know that it isn't easy to keep on top of it all the time.
I would appreciate it if you wouldn't just point at my mistake but say what would be right and why. If you know, that is.
Alright man, I didn't mean for it to hit so hard. I'm just trying to help. I assumed you were English-speaking because they are honestly the ones to most often make that kind of mistake.
Sorry if I offended you.
Anyway, I edited my first comment there, before you replied last. So the correct thing is there now.
(It should be "than".)
Love ya.
-
They’re not standards, it’s just default styles, which you can change.
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,