WEBVTT 00:03.040 -->00:00:05.206 Hi, my name is Matthew Zeng, 00:00:05.206 --> 00:00:07.526 aka MT or Mingde. 00:00:07.526 --> 00:00:10.766 Welcome to EmacsConf2021. 00:00:10.766 --> 00:00:12.846 I hope everyone is enjoying 00:00:12.846 --> 00:00:14.286 the conference so far. 00:00:14.286 --> 00:00:16.766 I am one of the maintainers 00:00:16.766 --> 00:00:18.566 of the Emacs Application Framework. 00:00:18.566 --> 00:00:22.606 I was also here last year during EmacsConf2020 00:00:22.606 --> 00:00:24.366 and did a 20 minute presentation 00:00:24.366 --> 00:00:26.606 on the overall architecture of EAF 00:00:26.606 --> 00:00:28.486 as well as a small demo. 00:00:28.486 --> 00:00:31.966 A lot of things had changed since 2020, 00:00:31.966 --> 00:00:34.406 and that's why today I'm here to present: 00:00:34.406 --> 00:00:38.045 Emacs Application Framework, A 2021 Update. 00:00:38.046 --> 00:00:41.086 So we all know Emacs, 00:00:41.086 --> 00:00:42.326 and we definitely know that 00:00:42.326 --> 00:00:44.486 Emacs is not just a text editor, 00:00:44.486 --> 00:00:46.926 but a text-centric work environment, 00:00:46.926 --> 00:00:48.606 and it lacks *efficient* 00:00:48.606 --> 00:00:50.686 multimedia rendering capabilities 00:00:50.686 --> 00:00:53.126 such as website, PDF, and video rendering. 00:00:53.126 --> 00:00:55.361 We all want that, right? 00:00:55.361 --> 00:00:58.366 Therefore the EAF project wants to 00:00:58.366 --> 00:01:00.286 solve this problem while also 00:01:00.286 --> 00:01:02.806 retaining the rich Emacs ecosystem 00:01:02.806 --> 00:01:06.046 and its customizability and extensibility. 00:01:06.046 --> 00:01:10.726 The solution is to outsource the hard part 00:01:10.726 --> 00:01:12.486 to Python and NodeJS 00:01:12.486 --> 00:01:14.366 by bridging Elisp with them 00:01:14.366 --> 00:01:16.126 so that Python and JavaScript 00:01:16.126 --> 00:01:17.926 can do the hard work 00:01:17.926 --> 00:01:20.126 and minimize the Elisp workload, 00:01:20.126 --> 00:01:21.926 which ultimately speeds up 00:01:21.926 --> 00:01:24.446 our end-user experience using Emacs. 00:01:24.446 --> 00:01:27.646 Do note that Python and JavaScript 00:01:27.646 --> 00:01:30.406 already have a very mature ecosystem 00:01:30.406 --> 00:01:32.206 that provides a foundation 00:01:32.206 --> 00:01:34.366 to modern multimedia applications, 00:01:34.366 --> 00:01:38.006 so basically, EAF enables Emacs to extend 00:01:38.006 --> 00:01:40.406 to Python and JavaScript ecosystems, 00:01:40.406 --> 00:01:42.286 therefore extending to 00:01:42.286 --> 00:01:44.366 modern multimedia apps too. 00:01:44.366 --> 00:01:47.606 As we're on a tight schedule today, 00:01:47.606 --> 00:01:49.726 I can't go into every detail 00:01:49.726 --> 00:01:51.486 about how EAF achieves this. 00:01:51.486 --> 00:01:53.606 I did go through a lot of things 00:01:53.606 --> 00:01:54.886 during last year's presentation, 00:01:54.886 --> 00:01:57.326 so I highly recommend anyone interested 00:01:57.326 --> 00:01:59.206 to check out that presentation, 00:01:59.206 --> 00:02:01.686 and the project repository itself. 00:02:01.686 --> 00:02:05.725 Today we're focusing on *what changed*. 00:02:05.726 --> 00:02:09.606 Now the first change 00:02:09.606 --> 00:02:10.926 that you'll definitely notice 00:02:10.926 --> 00:02:12.686 is that we have a new logo! 00:02:12.686 --> 00:02:15.926 This logo uses gearwheels 00:02:15.926 --> 00:02:18.486 to symbolize how EAF extends Emacs 00:02:18.486 --> 00:02:20.886 to web and multimedia applications 00:02:20.886 --> 00:02:23.286 that bring new possibilities to Emacs. 00:02:23.286 --> 00:02:28.726 Since last year, EAF has replaced 00:02:28.726 --> 00:02:30.886 the DBus communication technology 00:02:30.886 --> 00:02:33.446 with the cross-platform EPC, 00:02:33.446 --> 00:02:35.286 the Emacs RPC stack, 00:02:35.286 --> 00:02:37.526 which has an Elisp implementation 00:02:37.526 --> 00:02:39.246 and a Python implementation, 00:02:39.246 --> 00:02:41.006 exactly what we need. 02:42.160 --> 00:02:43.760 This and some other changes 00:02:43.760 --> 00:02:46.080 enable EAF to support Windows, 00:02:46.080 --> 00:02:49.519 Windows 10 and Windows Subsystem for Linux, 00:02:49.519 --> 00:02:51.840 as well as all distros that support 00:02:51.840 --> 00:02:54.319 pacman, apt, dnf, pkg, 00:02:54.319 --> 00:02:56.959 zypper package installer commands, 02:56.959 --> 00:02:59.840 which includes Arch-based, Debian, 00:02:59.840 --> 00:03:04.720 or Ubuntu-based, Fedora, etc. 03:04.720 --> 00:03:08.239 However, do note that the maOS support 03:08.239 --> 00:03:10.319 works with some known issues. 00:03:10.319 --> 00:03:15.359 Have a look if you want to try out. 03:15.360 --> 00:03:18.400 Previously, EAF was able to make Elisp 03:18.400 --> 00:03:20.720 communicate with Python, as well as 00:03:20.720 --> 00:03:23.280 Python to communicate with JavaScript, 03:23.280 --> 00:03:24.959 meaning that Elisp can call 00:03:24.959 --> 00:03:27.280 Python functions and vice versa, 00:03:27.280 --> 00:03:29.680 and Python can call JavaScript functions 00:03:29.680 --> 00:03:32.560 and vice versa, but if you want Elisp 00:03:32.560 --> 00:03:34.720 to communicate with JavaScript, 00:03:34.720 --> 00:03:36.239 you have to go through Python, 00:03:36.239 --> 00:03:38.879 which is rather troublesome. 03:38.879 --> 00:03:41.120 Now, thanks to the EPC, 00:03:41.120 --> 00:03:42.400 Elisp can communicate 00:03:42.400 --> 00:03:43.840 with JavaScript directly 03:43.840 --> 00:03:45.519 using =eval_js= function 00:03:45.519 --> 00:03:47.040 and =eval_emacs_function= 00:03:47.040 --> 00:03:49.840 in Elisp and Python respectively. 03:49.840 --> 00:03:51.840 This greatly simplifies the code 00:03:51.840 --> 00:03:52.640 that will be needed 00:03:52.640 --> 00:03:56.958 to write a web app in EAF. 03:56.959 --> 00:03:59.120 Speaking of web applications, 00:03:59.120 --> 00:04:01.200 VueJS is a web framework 00:04:01.200 --> 00:04:03.840 that's been gaining a lot of popularity 00:04:03.840 --> 00:04:04.720 in recent years 00:04:04.720 --> 00:04:08.959 for its simplicity and functionality. 04:08.959 --> 00:04:11.840 In the past, you were only able to write 04:11.840 --> 00:04:14.319 simple JavaScript and HTML web apps 00:04:14.319 --> 00:04:17.280 for EAF. It was quite some work 04:17.280 --> 00:04:20.880 to create a full-featured web application. 04:20.880 --> 00:04:23.360 Now you can write new apps using EAF 04:23.360 --> 00:04:27.919 that work seamlessly with Emacs and Elisp. 00:04:27.919 --> 00:04:30.880 There are a few existing EAF apps 04:30.880 --> 00:04:32.800 written with Vue already 04:32.800 --> 00:04:34.639 to demonstrate the possibilities 00:04:34.639 --> 00:04:38.720 of Vue-based extensions in Emacs. 04:38.720 --> 00:04:41.520 The first one is the EAF File Manager, 04:41.520 --> 00:04:44.160 written by ManateeLazycat himself, 00:04:44.160 --> 00:04:46.400 as an alternative option to dired, 00:04:46.400 --> 00:04:47.919 as he found dired's performance 00:04:47.919 --> 00:04:49.280 to lag considerably 04:49.280 --> 00:04:52.240 when there are way too many files. 04:52.240 --> 00:04:56.080 It supports wdired and fd functionality, 00:04:56.080 --> 00:05:01.600 and let me demonstrate that to you. 05:01.600 --> 00:05:06.160 See? And this is the app. 05:06.160 --> 00:05:08.639 Go back here. 05:08.639 --> 00:05:12.240 Another one is the EAF RSS Reader, 05:12.240 --> 00:05:15.039 written by our Summer of Code 2021 student 00:05:15.039 --> 00:05:18.240 ShaoChenHeng. It is a fast RSS reader 00:05:18.240 --> 00:05:21.600 that uses the EAF browser for previews, 05:21.600 --> 00:05:32.479 and let me demo that to you as well. 05:32.479 --> 00:05:35.039 Pragmatic Emacs. 05:35.039 --> 00:05:37.199 And you can view every site 00:05:37.199 --> 00:05:45.359 in the EAF Browser. 05:45.360 --> 00:05:46.880 To ease the process 00:05:46.880 --> 00:05:49.840 of creating a new EAF application, 00:05:49.840 --> 00:05:52.880 we've separated the EAF core and its apps, 00:05:52.880 --> 00:05:54.479 so that EAF apps now have 00:05:54.479 --> 00:05:56.800 their individual repositories. 00:05:56.800 --> 00:05:58.000 You can find them under 00:05:58.000 --> 00:06:02.000 the emacs-eaf GitHub organization. 06:02.000 --> 00:06:04.560 Because of the number of EAF apps 00:06:04.560 --> 00:06:05.840 and their dependencies 00:06:05.840 --> 00:06:08.319 that vary from system to system, 06:08.319 --> 00:06:10.080 we've also introduced a new 00:06:10.080 --> 00:06:12.639 =M-x eaf-install-and-update= command 00:06:12.639 --> 00:06:14.560 which is a wrapper around the new 00:06:14.560 --> 00:06:17.039 install-eaf python script 00:06:17.039 --> 00:06:19.280 dedicated to installing, updating, 00:06:19.280 --> 00:06:20.720 and maintaining EAF apps 00:06:20.720 --> 00:06:21.680 and their dependencies 00:06:21.680 --> 00:06:24.160 for the end user. 06:24.160 --> 00:06:25.600 Now it is very easy 00:06:25.600 --> 00:06:27.440 to create a new EAF app. 00:06:27.440 --> 00:06:29.039 You just need to do it. 00:06:29.039 --> 00:06:31.120 You can just do it in your own repository, 00:06:31.120 --> 00:06:34.720 such as in GitHub, GitLab, or wherever. 06:34.720 --> 00:06:36.160 The first thing to do is 00:06:36.160 --> 00:06:39.520 to fork the eaf-demo or the eaf-vue-demo 00:06:39.520 --> 00:06:41.280 as a starting template, 00:06:41.280 --> 00:06:43.520 then update the dependencies.json file 00:06:43.520 --> 00:06:46.400 to list the new dependencies you introduced 06:46.400 --> 00:06:48.560 on various systems. 06:48.560 --> 00:06:51.199 Afterwards, once your app is finished, 00:06:51.199 --> 00:06:53.039 you simply need to submit a PR 00:06:53.039 --> 00:06:54.000 to the EAF core 06:54.000 --> 00:06:56.720 that modifies the applications.json list 06:56.720 --> 00:07:03.039 to include your new app. And that's it. 07:03.039 --> 00:07:04.720 Come try it out and write your own 00:07:04.720 --> 00:07:09.598 EAF extensions today! 07:09.599 --> 00:07:11.840 There are many other new updates. 00:07:11.840 --> 00:07:13.919 To list a few: we reached 00:07:13.919 --> 00:07:17.199 more than 60 contributors, hooray! 07:17.199 --> 00:07:19.759 And also, you can now use the familiar 07:19.759 --> 00:07:22.160 Control s and Control r isearch 00:07:22.160 --> 00:07:23.280 for real-time search, 00:07:23.280 --> 00:07:24.560 functioning very similar 00:07:24.560 --> 00:07:27.039 to the Emacs isearch, 07:27.039 --> 00:07:29.759 in the EAF Browser, PDF Viewer, 00:07:29.759 --> 00:07:32.080 and many other applications. 07:32.080 --> 00:07:34.000 Additionally, you can also create 00:07:34.000 --> 00:07:35.680 EAF PDF annotations 00:07:35.680 --> 00:07:44.318 either inline or as a pop-up, etc. etc. etc. 07:44.319 --> 00:07:47.680 Finally, let's talk about Popweb. 07:47.680 --> 00:07:50.080 Popweb is a very, very new project 00:07:50.080 --> 00:07:52.639 that started like exactly two weeks ago, 00:07:52.639 --> 00:07:55.199 that focuses particularly on the 00:07:55.199 --> 00:07:55.919 multimedia pop-up functionality in Emacs. 00:07:55.919 --> 00:08:02.080 Pop is considered to be a sister project 00:08:02.080 --> 00:08:04.879 and lightweight version of EAF. 08:04.879 --> 00:08:07.039 They both share a very similar design 08:07.039 --> 00:08:09.039 and some code, and they are maintained 00:08:09.039 --> 00:08:10.080 by the same people, 00:08:10.080 --> 00:08:13.680 which is me and ManateeLazycat. 08:13.680 --> 00:08:15.599 Here's a quick demo to see the 08:15.599 --> 00:08:23.840 responsiveness of its preview. 08:23.840 --> 00:08:27.919 Here we go. On the right, see... 00:08:27.919 --> 00:08:30.720 Oh, here we go. Yes. 08:30.720 --> 00:08:32.560 And these are the LaTeX preview. 00:08:32.560 --> 00:08:44.800 I can quickly show the next one. 08:44.800 --> 00:08:48.160 So this is the end of my presentation. 08:48.160 --> 00:08:50.000 Feel free to post questions 00:08:50.000 --> 00:08:52.160 on the collaborative pad, IRC, 00:08:52.160 --> 00:08:53.519 or directly send me an email. 00:08:53.519 --> 00:08:55.680 I'll be around all this, 00:08:55.680 --> 00:08:57.839 at all these places, 08:57.839 --> 00:08:59.519 and if you found any issue, 00:08:59.519 --> 00:09:01.200 please submit an issue 00:09:01.200 --> 00:09:04.160 to the EAF official issues, 00:09:04.160 --> 00:09:08.880 and don't forget to check out the wiki. 09:08.880 --> 00:09:10.160 Thank you and enjoy 00:09:10.160 --> 00:09:13.680 the rest of EmacsConf 2021. 00:09:13.680 --> 00:09:14.680 [captions by sachac]