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]