[[!meta title="Emacs saves the Web (maybe)"]]
[[!meta copyright="Copyright © 2023 Yuchen Pei"]]
[[!inline pages="internal(2023/info/web-nav)" raw="yes"]]
<!-- Initially generated with emacsconf-publish-talk-page and then left alone for manual editing -->
<!-- You can manually edit this file to update the abstract, add links, etc. --->
# Emacs saves the Web (maybe)
Yuchen Pei (he/him, pronounced: "eww-churn pay"), IRC: dragestil, <mailto:id@ypei.org>, <https://ypei.org>, 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] <https://www.gnu.org/philosophy/javascript-trap.html>
- [2] <https://www.gnu.org/philosophy/who-does-that-server-really-serve.en.html>
Projects and tools mentioned in the talk:
- LibreJS <https://gnu.org/s/librejs>
- lynx <https://lynx.invisible-island.net>
- noscript <https://NoScript.net>
- GreaseMonkey <https://www.greasespot.net/>
- Haketilo <https://haketilo.koszko.org>
- mitmproxy <https://mitmproxy.org>
- Invidious <https://invidious.io>
- youtube-dl <https://youtube-dl.org>
- libretube <https://libre-tube.github.io>
- newpipe <https://newpipe.net>
- woob <https://woob.tech/>
- Redirector <http://einaregilsson.com/redirector/>
- libredirect <https://libredirect.github.io>
- openwith <https://addons.mozilla.org/addon/open-with/>
- mastodon.el <https://codeberg.org/martianh/mastodon.el>
- mastorg <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/mastorg.el>
- sx.el <https://github.com/vermiculus/sx.el>
- buildbot.el <https://g.ypei.me/buildbot.el.git/about/>
- emacs-hnreader <https://github.com/thanhvg/emacs-hnreader>
- emacs-w3m <https://emacs-w3m.github.io/>
- luwak <https://g.ypei.me/luwak.git/about/>
- url-rewrite <https://g.ypei.me/url-rewrite.git/about/>
- wkhtmltopdf <https://wkhtmltopdf.org>
- pdf-tools <https://github.com/vedang/pdf-tools>
- emacs-web-server <https://elpa.gnu.org/packages/web-server.html>
- yolo.el <https://g.ypei.me/dotted.git/tree/emacs/.emacs.d/lisp/my/yolo.el>
- bom.el <https://g.ypei.me/bom.el.git/about/>
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] <https://g.ypei.me>
# 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
<https://github.com/akirakyle/emacs-webkit>
- 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 <https://en.wikipedia.org/wiki/Dragestil> -
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
<https://github.com/akirakyle/emacs-webkit>
- 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...)
- lounge-582, 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"]]