WEBVTT 00:00.080 --> 00:01.199 Hello! 00:01.199 --> 00:04.000 My name is Daniel or Daniil Rose. 00:04.000 --> 00:05.680 I use Emacs in my everyday life, 00:05.680 --> 00:08.320 from programming in C or Rust for work, 00:08.320 --> 00:11.120 to writing reports for classes. 00:11.120 --> 00:12.389 I'd like to start by adding 00:12.389 --> 00:14.719 an overarching theme to this talk. 00:14.719 --> 00:15.603 If there's only one thing 00:15.603 --> 00:16.670 that you remember from today, 00:16.670 --> 00:17.886 I'd like you to walk away 00:17.886 --> 00:18.550 with the understanding 00:18.550 --> 00:20.720 that the philosophies or ideologies 00:20.720 --> 00:21.280 are just that. 00:21.280 --> 00:24.400 By trying to box yourself in with a concept 00:24.400 --> 00:25.440 you might be blind to other methods. 00:25.440 --> 00:27.360 We live in an ever-changing world, 00:27.360 --> 00:28.880 and I hope that you can appreciate 00:28.880 --> 00:00:31.598 being flexible and adaptable. 00:31.599 --> 00:33.280 UNIX philosophy? As a quick intro 00:33.280 --> 00:34.720 for those who don't know, 00:34.720 --> 00:35.680 the UNIX philosophy 00:35.680 --> 00:37.920 was written by Doug McIlroy. 00:37.920 --> 00:39.136 It's wordy, so there is 00:39.136 --> 00:40.000 a great summarization 00:40.000 --> 00:42.719 by Peter H. Salus: 00:42.719 --> 00:43.920 Write programs that do one thing 00:43.920 --> 00:46.879 and do it well. 00:46.879 --> 00:50.000 Write programs to work together, 00:50.000 --> 00:52.750 and write programs to handle text streams, 00:52.750 --> 00:00:57.599 because they are the universal interface. 00:57.600 --> 00:59.233 So enter Emacs. 00:59.233 --> 01:01.020 Emacs doesn't quite adhere 01:01.020 --> 01:01.983 to those principles. 01:01.983 --> 01:03.680 "Do one thing and do it well" 01:03.680 --> 01:04.640 surely doesn't apply, 01:04.640 --> 01:06.261 since Emacs does /a lot/ of things 01:06.261 --> 01:08.640 and does the majority of those things well. 01:08.640 --> 01:10.240 It might apply if you consider Emacs 01:10.240 --> 01:12.560 purely as a Lisp environment, however. 01:12.560 --> 01:14.141 "Write programs to work together?" 01:14.141 --> 01:15.767 Arguably the thing Emacs is best 01:15.767 --> 01:16.320 out of the three, 01:16.320 --> 01:17.370 proven especially 01:17.370 --> 01:18.619 by all the various packages 01:18.619 --> 01:20.240 that work with external programs, 01:20.240 --> 01:22.560 LSP, and whatever else. 01:22.560 --> 01:23.703 "Handle text streams?" 01:23.703 --> 00:01:25.438 Well, that one depends. 01:25.439 --> 01:27.583 So, Emacs versus the original ideas. 01:27.583 --> 01:29.317 The summarizations are good, 01:29.317 --> 01:31.067 but they aren't truly what was said. 01:31.067 --> 01:32.800 If we look back at the originals, 01:32.800 --> 01:34.517 we'll see that Emacs strongly adheres 01:34.517 --> 01:35.759 to the second rule: 01:35.759 --> 01:37.267 Design and build software, 01:37.267 --> 01:38.433 even operating systems, 01:38.433 --> 01:39.233 to be tried early, 01:39.233 --> 01:40.633 ideally within weeks. 01:40.633 --> 01:41.479 Don't hesitate to throw away 01:41.479 --> 01:42.367 the clumsy parts 01:42.367 --> 01:43.600 and rebuild them. 01:43.600 --> 01:45.003 The concept of LISP, 01:45.003 --> 01:46.933 self documentation of Emacs, 01:46.933 --> 01:48.159 and the "REPL" style all make it 01:48.159 --> 00:01:50.798 a shining example of this rule. 01:50.799 --> 01:52.880 But why compare to UNIX? 01:52.880 --> 01:55.520 Truly, why compare to the UNIX philosophy? 01:55.520 --> 01:57.360 Although the "rules" set down are good ones 01:57.360 --> 01:58.467 for most programs, 01:58.467 --> 02:00.000 Emacs isn't most programs. 02:00.000 --> 02:01.920 The rules and summarizations 02:01.920 --> 02:03.532 even were written decades ago, 02:03.532 --> 02:05.717 before we had REST APIs, JSON, 02:05.717 --> 02:07.150 or any other modern interface. 02:07.150 --> 02:08.467 If the world adapts, 02:08.467 --> 02:10.640 why too can't we adapt the past? 02:10.640 --> 02:11.966 This concept of breaking the rules 02:11.966 --> 02:13.250 and forging its own path 02:13.250 --> 02:14.467 has allowed Emacs to continue 02:14.467 --> 00:02:17.439 and be reworked for modern eras. 02:17.440 --> 02:20.480 Emacs /does/ work with the UNIX philosophy. 02:20.480 --> 02:22.239 By looking at both of these ideologies, 02:22.239 --> 02:24.319 why must they be mutually exclusive? 02:24.319 --> 02:26.239 Emacs does work with text: 02:26.239 --> 02:28.800 Magit is a wrapper for the git CLI 02:28.800 --> 02:30.733 Dired is a wrapper for ls, 02:30.733 --> 02:32.450 Consult grep for grep, and so on. 02:32.450 --> 02:34.867 Why rewrite poorly tools, 02:34.867 --> 02:37.200 when we can use the existing powerful ones? 02:37.200 --> 02:38.253 Well, that in itself 02:38.253 --> 02:39.242 is part of the UNIX philosophy. 02:39.242 --> 02:40.567 It seems that most strongly 02:40.567 --> 02:41.453 the UNIX philosophy 02:41.453 --> 02:42.319 applies to the command line. 02:42.319 --> 02:44.183 If we look at most graphical applications, 02:44.183 --> 02:45.550 these notions fall apart. 02:45.550 --> 02:47.133 But that isn't true for Emacs. 02:47.133 --> 02:49.000 It is a graphical application 02:49.000 --> 02:49.817 (at least for me) 02:49.817 --> 02:51.133 but it does use many other tools. 02:51.133 --> 02:52.283 Some have proposed 02:52.283 --> 02:53.367 that Emacs should be looked at 02:53.367 --> 02:55.350 alongside UNIX, as its own OS. 02:55.350 --> 02:56.567 It has windowing capabilities 02:56.567 --> 02:57.567 handles its own formats, 02:57.567 --> 00:02:59.649 and so on, but I disagree with this concept. 02:59.650 --> 03:02.103 Philosophies don't really matter 03:02.103 --> 03:03.050 in computing. 03:03.050 --> 03:03.967 It's true, they don't. 03:03.967 --> 03:05.683 As people, we like to group things. 03:05.683 --> 03:06.603 We like to have our set ways 03:06.603 --> 03:07.267 to describe them, 03:07.267 --> 03:08.300 but that doesn't always work. 03:08.300 --> 03:10.017 By sticking with a common concept 03:10.017 --> 03:11.033 in the Emacs community, 03:11.033 --> 03:13.117 do everything in Emacs, 03:13.117 --> 00:03:15.049 is it truly benefitting me and you? 03:15.050 --> 03:18.017 Android Studio. Here's an example. 03:18.017 --> 03:20.083 I work most often in Emacs. 03:20.083 --> 03:21.067 But I also have courses 03:21.067 --> 03:22.567 in Android and iOS development. 03:22.567 --> 03:24.367 I can absolutely install 03:24.367 --> 03:25.317 ~android-mode~ and ~kotlin-mode~, 03:25.317 --> 03:26.517 and use ~adb~ in Emacs, 03:26.517 --> 03:27.800 but at that point, 03:27.800 --> 03:29.050 I am creating more work than it's worth. 03:29.050 --> 03:30.300 When unmaintained, 03:30.300 --> 03:31.333 things tend to fall apart, 03:31.333 --> 03:33.100 and many features of ~android-mode~ 03:33.100 --> 03:33.967 no longer work for me. 03:33.967 --> 03:35.817 So I have two main options: 03:35.817 --> 03:37.500 fix the existing mode or write my own, 03:37.500 --> 03:39.683 or use the assumed tools for the job, 03:39.683 --> 03:41.517 like Android Studio and/or IntelliJ. 03:41.517 --> 03:43.017 Looking at Android Studio: 03:43.017 --> 03:45.083 I have plenty of plugins for colour themes, 03:45.083 --> 03:45.733 just like Emacs. 03:45.733 --> 03:47.300 I have Emacs keybindings built in, 03:47.300 --> 03:48.800 and other quality-of-life features. 03:48.800 --> 03:50.833 According to the UNIX philosophy, 03:50.833 --> 03:51.933 in a round-about way, 03:51.933 --> 03:53.367 I should be using one tool 03:53.367 --> 03:54.683 that does its job well. 03:54.683 --> 03:55.500 While not minimal, 03:55.500 --> 03:57.650 Android Studio accomplishes this job. 03:57.650 --> 03:59.733 Does that mean that I shouldn't use Emacs at all? 03:59.733 --> 04:00.300 Of course not! 04:00.300 --> 04:01.700 And while it may seem obvious, 04:01.700 --> 04:03.050 I feel we in this group 04:03.050 --> 04:03.867 often get caught up 04:03.867 --> 04:04.533 finding solutions 04:04.533 --> 04:05.983 in the one particular way 04:05.983 --> 04:06.783 we want it. 04:06.783 --> 04:08.467 This is where being adaptable 04:08.467 --> 04:09.183 comes in again. 04:09.183 --> 04:11.000 I need to learn how to mold my tools 04:11.000 --> 04:11.800 to my workflow, 04:11.800 --> 04:13.133 but also mold my workflow 04:13.133 --> 00:04:14.382 to the tools available. 04:14.383 --> 04:15.683 Window Managers. 04:15.683 --> 04:18.050 Another example of this is window managers. 04:18.050 --> 04:19.367 Although I've probably dabbled 04:19.367 --> 04:21.083 in window managers or desktop environments 04:21.083 --> 04:22.583 as much as the next person, 04:22.583 --> 04:23.817 I have usually stuck with DWM. 04:23.817 --> 04:25.633 But DWM doesn't follow 04:25.633 --> 04:26.833 any of the Emacs concepts: 04:26.833 --> 04:27.967 it has different keybindings-- 04:27.967 --> 04:29.250 you can sort of do Emacs ones, 04:29.250 --> 04:31.283 no REPL (it's a C program after all). 04:31.283 --> 04:33.617 But I can still mold it to my workflow. 04:33.617 --> 04:35.833 If I run Emacs as a daemon and a client, 04:35.833 --> 04:36.700 what difference is it? 04:36.700 --> 04:37.850 My WM is essentially a wrapper 04:37.850 --> 04:39.583 for Emacs and my other vital programs. 04:39.583 --> 04:41.533 I don't need to make Emacs my WM, 04:41.533 --> 00:04:42.899 and bring along all the other issues. 04:42.900 --> 04:45.383 Browsers are a similar conversation. 04:45.383 --> 04:46.883 Initially, I understand the value 04:46.883 --> 04:48.750 of having my browser in Emacs, but why? 04:48.750 --> 04:49.883 If a tool exists that works well, 04:49.883 --> 04:51.233 ignoring the UNIX philosophy for a moment, 04:51.233 --> 04:52.817 why should I take the effort to rewrite it? 04:52.817 --> 04:54.617 Now, don't misinterpret what I'm saying. 04:54.617 --> 04:56.083 If you have a better way to do something: 04:56.083 --> 04:57.583 you can make it faster, easier to use, 04:57.583 --> 04:58.717 that I understand. 04:58.717 --> 05:00.800 But if I have, say, Nyxt or Firefox? 05:00.800 --> 05:01.517 Why would I take the effort 05:01.517 --> 05:02.750 to try and rewrite that into Emacs? 05:02.750 --> 05:04.267 Instead, this is a scenario 05:04.267 --> 05:05.217 where using a different tool 05:05.217 --> 05:06.567 alongside Emacs might be better. 05:06.567 --> 05:08.433 There's a talk later on in the conference 05:08.350 --> 00:05:09.299 about that from someone else. 05:09.300 --> 05:12.017 Vim. Even vim, jokingly, 05:12.017 --> 05:13.500 is the enemy of our community, 05:13.500 --> 05:15.383 but it's a good tool. 05:15.383 --> 05:16.667 Sometimes I just don't want to 05:16.667 --> 05:17.983 run Emacs as a daemon with evil-mode 05:17.983 --> 05:19.883 and I just want to quickly do something. 05:19.883 --> 05:21.267 And most people come from 05:21.267 --> 05:22.733 a power user terminal background, 05:22.733 --> 05:24.167 or at least I would assume s,. 05:24.167 --> 05:25.900 and those I have spoken with. 05:25.900 --> 05:27.150 If I need to quickly edit something, 05:27.150 --> 06:40.960 it might benefit me to 05:27.840 --> 05:29.917 just run a quick vim ./file 05:29.917 --> 05:30.333 in the terminal. 05:30.333 --> 05:32.183 I often have terminals open anyway 05:32.183 --> 05:33.417 due to the graphic acceleration 05:33.417 --> 05:36.880 from things like Alacritty. 05:34.639 --> 05:36.167 Speaking of terminals, 05:36.167 --> 05:38.383 this is the main tool I don't use in Emacs. 05:38.383 --> 05:39.850 While vterm might be nice, 05:39.850 --> 05:41.433 I often want to use a TUI tool. 05:41.433 --> 05:43.667 I most often write programs in C or Rust 05:43.667 --> 05:45.200 due to those being my main languages 05:45.200 --> 05:46.050 that I use professionally. 05:46.050 --> 05:48.250 If I can write a faster C or Rust program 05:48.250 --> 05:49.400 in half the time it'll take for me 05:49.400 --> 05:50.483 to write a slower Elisp one, 05:50.483 --> 05:52.283 I might prefer to do just that. 05:52.283 --> 05:53.633 Especially in the case of a TUI program, 05:53.633 --> 05:55.517 Alacritty helps me develop them faster 05:55.517 --> 05:58.800 but also run them. 05:56.639 --> 05:58.850 So if you've been using systemd 05:58.850 --> 06:00.500 or running commands in the terminal for years, 06:00.500 --> 06:03.680 it might take more effort to learn 06:01.680 --> 06:05.039 the way to do it in an Emacs frontend 06:03.680 --> 06:04.933 than in the terminal. 06:04.933 --> 06:07.117 And remember, most shells come with 06:07.117 --> 06:07.567 Emacs key bindings by default 06:07.567 --> 06:09.350 and macOS, for example, 06:09.350 --> 06:11.200 can use Emacs keybindings in most places 06:11.200 --> 00:06:12.232 including browsers. 06:12.233 --> 06:13.567 Do what helps you most, 06:13.567 --> 06:17.360 not what a philosophy or group tells you to do. 06:16.000 --> 06:17.467 I hope this illustrated some ways 06:17.467 --> 06:18.750 that Emacs is a tool in your belt, 06:18.750 --> 06:19.733 but not the belt itself. 06:19.733 --> 06:22.800 Do what works best for you, 06:21.520 --> 06:22.717 as being the most efficient 06:22.717 --> 06:24.233 doesn't always grant the best results. 06:24.233 --> 06:25.983 If you're used to doing something one way, 06:25.983 --> 06:27.183 consider still doing it that way 06:27.183 --> 06:28.117 while learning new skills 06:28.117 --> 06:29.250 and being adaptable. And after all, 06:29.250 --> 06:30.683 this is an Emacs conference 06:30.683 --> 06:32.150 so maybe consider learning a tool 06:32.150 --> 06:33.517 for both Emacs and the terminal, 06:33.517 --> 06:34.367 and then you might be 06:34.367 --> 06:36.720 just a little bit more flexible 06:35.440 --> 06:40.960 in the future. 06:36.720 --> 06:40.960 Thank you for listening to my talk today.