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]