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.