WEBVTT

00:06.399 --> 00:07.670
Hello, everyone. My name is

00:07.670 --> 00:08.800
Laszlo Krajnikovszkij,

00:08.800 --> 00:10.559
and today I would like to share

00:10.559 --> 00:12.000
some ideas about extending

00:12.000 --> 00:15.200
the model of Emacs to other applications.

00:15.200 --> 00:16.720
Brief introduction of myself:

00:16.720 --> 00:18.400
I am from Budapest, Hungary;

00:18.400 --> 00:20.320
and I have a background

00:20.320 --> 00:21.760
in Financial Economics,

00:21.760 --> 00:24.480
but by occupation I run

00:24.480 --> 00:26.320
a software development company

00:26.320 --> 00:29.119
where I mostly do product management.

00:29.119 --> 00:34.399
I try to do most of my work from Emacs.

00:34.399 --> 00:36.160
I've been using it for the past

00:36.160 --> 00:37.200
two or three years

00:37.200 --> 00:39.120
as a computer science hobby

00:39.120 --> 00:41.280
and this fascinating piece of software

00:41.280 --> 00:44.239
taught me a lot of different concepts

00:44.239 --> 00:46.000
about software architecture

00:46.000 --> 00:48.800
and programming languages,

00:48.800 --> 00:51.440
and also raised a lot of

00:51.440 --> 00:52.719
philosophical questions

00:52.719 --> 00:55.760
about human-computer interaction.

00:55.760 --> 00:57.039
I've been mostly using it

00:57.039 --> 00:59.680
for organizing my personal information,

00:59.680 --> 01:03.600
writing notes and tracking my agenda,

01:03.600 --> 01:05.519
but occasionally, I've also used it

01:05.519 --> 01:07.119
for reading and writing code

01:07.119 --> 01:09.360
and for also reading news, email,

01:09.360 --> 01:12.479
and browsing the web.

01:12.479 --> 01:16.400
What do I mean by the 'model' of Emacs?

01:16.400 --> 01:18.479
For me, the 'model' of Emacs is about

01:18.479 --> 01:21.920
the interaction model.

01:21.920 --> 01:24.880
And it's not... Emacs is just a tool

01:24.880 --> 01:26.560
for interacting with the computer.

01:26.560 --> 01:28.640
It's sort of a universal interface

01:28.640 --> 01:31.119
that allows for consistency

01:31.119 --> 01:33.280
across different apps,

01:33.280 --> 01:36.240
because everything is brought down to

01:36.240 --> 01:39.200
an Emacs buffer, which is a

01:39.200 --> 01:42.399
text-oriented interface,

01:42.399 --> 01:44.005
but that can have consistent

01:44.005 --> 01:44.880
keybinding scheme,

01:44.880 --> 01:46.960
they have consistent color scheme,

01:46.960 --> 01:50.640
and consistent workflow in general.

01:50.640 --> 01:53.200
Also, Emacs has a lot of functionality

01:53.200 --> 01:55.920
and utilizes mnemonic key bindings

01:55.920 --> 01:57.680
for calling functions,

01:57.680 --> 01:59.920
which is much more powerful than

01:59.920 --> 02:02.000
navigating contextual menus

02:02.000 --> 02:03.840
with a pointer,

02:03.840 --> 02:07.119
because the functions that are

02:07.119 --> 02:08.239
repeated the most

02:08.239 --> 02:10.640
are then ingrained in the muscle memory,

02:10.640 --> 02:12.879
therefore reducing the lag

02:12.879 --> 02:15.680
between the thought that is occurring

02:15.680 --> 02:17.520
in your mind, and its reflection

02:17.520 --> 02:21.280
on your computer screen.

02:21.280 --> 02:23.040
And also, Emacs provides

02:23.040 --> 02:25.360
a huge number of packages

02:25.360 --> 02:28.560
that can all be inspected and modified,

02:28.560 --> 02:30.640
and extended, and recombined,

02:30.640 --> 02:35.599
and just provides the best-possible

02:35.599 --> 02:37.840
malleable system experience

02:37.840 --> 02:42.080
that can potentially lead to

02:42.080 --> 02:44.080
almost any desired setup

02:44.080 --> 02:47.599
for the end-user.

02:47.599 --> 02:49.440
So, Emacs is great,

02:49.440 --> 02:52.239
but I need to use a lot of

02:52.239 --> 02:53.280
different other tools

02:53.280 --> 02:55.200
to collaborate with my coworkers,

02:55.200 --> 02:57.519
with my clients and vendors.

02:57.519 --> 03:00.080
On a normal day, I would need to be

03:00.080 --> 03:02.640
switching between five to six

03:02.640 --> 03:04.319
different web applications

03:04.319 --> 03:07.840
and chat applications.

03:07.840 --> 03:11.840
They all have the same flaws.

03:11.840 --> 03:14.879
They all lack customizability,

03:14.879 --> 03:16.560
because it was never intended

03:16.560 --> 03:19.280
by the original developers of the app

03:19.280 --> 03:21.120
that the end user can tinker

03:21.120 --> 03:24.239
with the product they're creating.

03:24.239 --> 03:29.120
But also, those apps are cloud-based,

03:29.120 --> 03:33.599
and usually not very good for privacy,

03:33.599 --> 03:36.480
and this also creates limitations

03:36.480 --> 03:40.080
for offline-based workflows,

03:40.080 --> 03:43.599
or for in general not relying on

03:43.599 --> 03:44.560
the internet connection

03:44.560 --> 03:46.959
to use something.

03:46.959 --> 03:49.440
All these applications,

03:49.440 --> 03:50.720
they create a situation

03:50.720 --> 03:53.040
when there's a lot of context-switching

03:53.040 --> 03:55.360
between different apps,

03:55.360 --> 03:56.959
and this context-switching

03:56.959 --> 03:59.920
comes from different color schemes,

03:59.920 --> 04:03.280
different workflows in general

04:03.280 --> 04:04.879
for different apps.

04:04.879 --> 04:06.400
So, there is always

04:06.400 --> 04:10.400
this little frame of time

04:10.400 --> 04:13.599
where you need to orient yourself

04:13.599 --> 04:15.280
in this other application.

04:15.280 --> 04:17.280
Of course, over time,

04:17.280 --> 04:18.799
it gets more automated,

04:18.799 --> 04:20.560
but still, this context switching

04:20.560 --> 04:26.720
is very bad for productivity.

04:26.720 --> 04:30.080
These apps don't support very well

04:30.080 --> 04:31.759
the keyboard-driven workflows,

04:31.759 --> 04:33.520
because the default set of keybindings

04:33.520 --> 04:34.479
is always limited,

04:34.479 --> 04:39.280
and you always need to resort to

04:39.280 --> 04:44.160
mouse-driven workflows.

04:44.160 --> 04:46.400
But Emacs has some issues

04:46.400 --> 04:48.320
as a tool for work as well.

04:48.320 --> 04:50.800
First of all, it lacks integration

04:50.800 --> 04:51.759
with all these tools,

04:51.759 --> 04:54.560
so I constantly need to be switching

04:54.560 --> 04:57.759
between Emacs and these applications,

04:57.759 --> 04:59.919
or basically, my web browser.

04:59.919 --> 05:03.039
Emacs is very good for text input

05:03.039 --> 05:04.720
and for editing text,

05:04.720 --> 05:07.039
but it's not always perfect

05:07.039 --> 05:09.440
for reading information

05:09.440 --> 05:11.199
from an Emacs buffer,

05:11.199 --> 05:12.080
because it doesn't

05:12.080 --> 05:16.560
render images and HTML properly.

05:16.560 --> 05:18.800
Also, Emacs lacks performance

05:18.800 --> 05:19.919
under heavy load,

05:19.919 --> 05:21.840
so when you try to run

05:21.840 --> 05:23.280
too many things in parallel,

05:23.280 --> 05:26.560
the single-threaded nature of Emacs

05:26.560 --> 05:28.880
just makes it hang.

05:28.880 --> 05:30.960
For this reason,

05:30.960 --> 05:32.560
I wouldn't rely on Emacs

05:32.560 --> 05:38.320
to take care of all my system processes.

05:38.320 --> 05:40.400
And of course, it has some

05:40.400 --> 05:42.240
legacy UI limitations

05:42.240 --> 05:46.400
being a software that was written

05:46.400 --> 05:49.039
40 years ago.

05:49.039 --> 05:53.759
This results in a very limited usability

05:53.759 --> 05:59.680
on mobile and other touch devices.

05:59.680 --> 06:01.759
I've been thinking

06:01.759 --> 06:03.840
about a hybrid approach

06:03.840 --> 06:05.840
that you could still use Emacs

06:05.840 --> 06:10.080
as a core of your life,

06:10.080 --> 06:11.840
and then extend it

06:11.840 --> 06:15.120
with adjacent web applications

06:15.120 --> 06:16.960
where Emacs can be used

06:16.960 --> 06:21.600
as a text processing backend

06:21.600 --> 06:24.080
and use Org mode files

06:24.080 --> 06:25.600
as a universal format

06:25.600 --> 06:29.600
for converting textual data,

06:29.600 --> 06:33.199
and then If emacs can be

06:33.199 --> 06:36.639
connected with those applications

06:36.639 --> 06:37.520
that I mentioned

06:37.520 --> 06:39.520
a couple of slides before

06:39.520 --> 06:41.280
through their API, and you can have

06:41.280 --> 06:43.199
a two-way communication between them,

06:43.199 --> 06:46.000
and just export in JSON, let's say,

06:46.000 --> 06:47.440
and then convert to Org mode,

06:47.440 --> 06:49.039
and then use the Org mode

06:49.039 --> 06:52.960
for these local web apps.

06:52.960 --> 06:57.599
Then you can use Emacs for editing,

06:57.599 --> 07:00.800
and Org mode, but then you can use

07:00.800 --> 07:03.360
this adjacent web application

07:03.360 --> 07:05.039
for viewing information,

07:05.039 --> 07:08.720
making small edits, and in general,

07:08.720 --> 07:11.692
possibly have an enhanced

07:11.692 --> 07:14.639
user-defined UI that is

07:14.639 --> 07:17.039
directly connected to Emacs.

07:17.039 --> 07:19.759
Emacs Application Framework

07:19.759 --> 07:21.520
is a project that tries to achieve

07:21.520 --> 07:23.840
a common goal, but it tries to

07:23.840 --> 07:24.639
achieve that through

07:24.639 --> 07:25.520
displaying everything

07:25.520 --> 07:27.840
in the Emacs buffer,

07:27.840 --> 07:28.840
whereas I'm thinking

07:28.840 --> 07:30.800
if it can be displayed

07:30.800 --> 07:33.759
in any web browser, but utilize

07:33.759 --> 07:36.560
Emacs Application Framework API

07:36.560 --> 07:38.639
as a bridge between Elisp

07:38.639 --> 07:40.960
and Python and Javascript,

07:40.960 --> 07:41.759
so you can use

07:41.759 --> 07:44.879
the modern front-end frameworks

07:44.879 --> 07:48.560
to create those web interfaces easier

07:48.560 --> 07:49.280
and connect them

07:49.280 --> 07:53.919
with Emacs functionality.

07:53.919 --> 07:57.280
These user-controlled web apps

07:57.280 --> 08:04.126
would basically result in

08:04.126 --> 08:05.680
the user connecting

08:05.680 --> 08:10.319
to this external cloud-based tool,

08:10.319 --> 08:13.759
let's say Asana, but then

08:13.759 --> 08:16.400
process everything through Org mode

08:16.400 --> 08:19.840
and then display in an Org mode file

08:19.840 --> 08:24.720
or display in this enhanced way

08:24.720 --> 08:28.960
through the adjacent local web app,

08:28.960 --> 08:31.280
a front-end for which

08:31.280 --> 08:34.080
could be written in any .js framework

08:34.080 --> 08:37.440
for front-end development.

08:37.440 --> 08:42.159
I encourage everyone in the community

08:42.159 --> 08:45.279
who is interested in similar questions

08:45.279 --> 08:48.160
to share their opinion

08:48.160 --> 08:50.959
about the potential risks and drawbacks,

08:50.959 --> 08:53.120
about any other ways

08:53.120 --> 08:54.640
to achieve a similar goal,

08:54.640 --> 08:57.519
if anyone else is doing this already

08:57.519 --> 08:59.920
that i might not know about,

08:59.920 --> 09:02.399
and in general, just share ideas

09:02.399 --> 09:03.760
about what else can be done

09:03.760 --> 09:07.519
to integrate Emacs with more stuff

09:07.519 --> 09:10.640
and how Emacs can become

09:10.640 --> 09:14.080
more approachable by non-technical users

09:14.080 --> 09:16.160
because I would love to see

09:16.160 --> 09:20.080
more people using Emacs, to be honest.

09:20.080 --> 09:21.680
Yeah. Thank you very much

09:21.680 --> 09:23.440
for listening to this talk.

09:23.440 --> 09:26.080
I will be taking questions

09:26.080 --> 09:27.600
and feedback in the pad

09:27.600 --> 09:31.920
after the conference.

09:31.920 --> 09:33.920
You can reach me through this email

09:33.920 --> 09:36.720
laszlo@laszlo.is .

09:36.720 --> 09:39.600
I'll be posting

09:39.600 --> 09:41.760
some more detailed articles

09:41.760 --> 09:44.959
and description of this idea

09:44.959 --> 09:47.166
that I was trying to present today.

09:47.166 --> 09:49.040
[captions by Laszlo]