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]