[[!meta title="Emacs saves the Web (maybe)"]] [[!meta copyright="Copyright © 2023 Yuchen Pei"]] [[!inline pages="internal(2023/info/web-nav)" raw="yes"]] # Emacs saves the Web (maybe) Yuchen Pei (he/him, pronounced: "eww-churn pay"), IRC: dragestil, , , mastodon: dragestil@hostux.social [[!inline pages="internal(2023/info/web-before)" raw="yes"]] On one hand, Emacs is the crown jewel of the GNU Project for its customisability and the ability to effortlessly convert users to hackers. On the other hand, today many of the sticky issues with proprietary software proliferation stems from the web, including the Javascript trap[1] on the client side and the SaaSS trap[2] on the server side. So enters the topic of this talk. I will briefly talk about these issues and existing non-emacs solutions, followed by ideas and demonstrations on how Emacs can fix user freedom on the web, including: emacs clients for specific websites and services, emacs-based browsers aka universal frontends, transformer of emacs packages to web apps and firefox browser extensions, and more. - [1] - [2] Projects and tools mentioned in the talk: - LibreJS - lynx - noscript - GreaseMonkey - Haketilo - mitmproxy - Invidious - youtube-dl - libretube - newpipe - woob - Redirector - libredirect - openwith - mastodon.el - mastorg - sx.el - buildbot.el - emacs-hnreader - emacs-w3m - luwak - url-rewrite - wkhtmltopdf - pdf-tools - emacs-web-server - yolo.el - bom.el About the speaker: Yuchen is a computer programmer, mathematician and free software advocate based in Melbourne, Australia. He is addicted to writing Emacs packages[3], of which a few has made into ELPA. He likes to claim to be the only free software advocate in Australia, in the hope that someone will correct him and point him to fellow comrades fighting for user freedom in Oz. - [3] # Discussion ## Questions and answers - Q: I like the idea of using org mode to display data from the web. Are there many different packages that does that? (I am newish to Emacs, so maybe this is obvious to everyone else.) - A: dragestil uses roughly 10 packages that display data from the web.  Roughly half of them are org-mode based - Q: Have you tried EAF (Emacs Application Framework) and its browser? If yes, what is your opinion about it? - A: No I haven't. My impression is it would run javascript by default. Not sure whether it has any extensions to block js. A nice comparison between different browsers including EAF, nyxt and emacs-webkit can be found in the readme file of - Q: I find the JavaScript trap almost impossible to avoid since I like to buy used stuff online and use my online bank. How do you deal with the JavaScript trap? I use NoScript and compromise on the few things I really feel I cannot live wihtout. Eww is nice for a lot of things, especially with R for less noise, but I need Firefox for those JS-entrapped pages... - A: Unfortunately I don't have a solution for that. I run nonfree javascript when doing banking or online shopping, though in a more isolated environment (mullvad browser) with a VPN. It's a tiny portion of my online activity (<.1% I suppose), so it's not *that* bad - However, that does not mean emacs cannot help. woob has a few clients interfacing with online banking, so perhaps at least some banks allow the possibility of non-js client. It would be good to look into this. - Q: This is not really relevant to the talk, but I am curious about your nickname. Do you have some connection to Norway? Your nick indicates an interest in the architectural style inspired by the decoration on viking ships that was popular in the early 20th century. dragestil = dragon style - A: dragestil is my favourite architectural style. Look at these images on wikipedia - aren't they gorgeous? I've only seen one of these famous ones in real life, the Buksnes Church on Lofoten Islands. - Thoughts about Nyxt; about its aims, its approach, its relevance, etc.? - Very early on, ran into issues with keybindings. More specifically, some conflicts between binding j to follow-hint in document mode and C-s/C-r to next-suggestion/previous-suggestion in prompt buffer mode. Did not continue with trying nyxt because keybindings are basic functionalities IMO. Might revisit someday. nyxt has a noscript-mode btw that blocks javascript. A nice comparison between different browsers including EAF, nyxt and emacs-webkit can be found in the readme file of - Q: so trying to understand, is emacs being used as a web proxy to scrub potentially privacy attacking JS? - Q: Anyone else here has experimented with Nyxt? I haven't much, but can't say there's not an overlap with some of the ideas of Emacs and all. Just curious. - Not the speaker: - I recommend qutebrowser over nyxt. For me it was just easier to use, customize and has better user experience. - I do/did too. But then it occurred to be that a very simple locally-loaded extension might very well be able to transform any of the major browsers into 99 + of Nyxt when paired with an Emacs backend (and websocket async bidirectional communication between the two)... (when said extension is made of a service worker part and a per-page part, to access both browser-level API/state, and page-level DOM, with just these two bits) e.g. could expose/present open tabs as pseudo-buffers (à la "virtual buffers/files"), candidates for completion, and such ## Notes - mastorg for mastodon - hacker news in org mode - emacs-web-server for hosting things from Emacs - Dang, this is really a great demo. - I love how he's using org-mode to do it all. - It might actually save the web! - Emacs as a Firefox extension!!! Ha! - Definitely some interesting ideas in that one, and the literate form is top-notch. Warrants a focused rewatch for me (back-n-forth between 2 talks is not conductive to my best focus it seems...) - I *really* like Org-Babel as a bridge to make complex one-off tasks ("why did the stuff in the database get into this state?" type things, usually) reproduceable and version-controlled. - Hear hear! Howard's talks over the years have converted me to do pretty much anything in Org-mode in literate form at this point :) - I use org-babel for recurring tasks that I need to remember. Things I have to run once a month, etc. I guess I could use cron, but usually they aren't really time sensitive enough. Or they are things like clearing my mu4e trash, which requires that I quit mu4e. - "It's not Emacs!" Ha! [[!inline pages="internal(2023/info/web-after)" raw="yes"]] [[!inline pages="internal(2023/info/web-nav)" raw="yes"]]