A New Perspective: Slides ready

I added to the time slightly rather than reducing it!
master
Mike Gerwitz 2019-03-21 22:45:40 -04:00
parent f13220e816
commit 16cf83d92e
Signed by: mikegerwitz
GPG Key ID: 8C917B7F5DC51BA2
1 changed files with 74 additions and 69 deletions

View File

@ -117,7 +117,7 @@
- [ ] =vim=
- [ ] =screen=
* LACKING Slides [1/6]
* LACKING Slides [2/6]
:PROPERTIES:
:ID: slides
:END:
@ -125,7 +125,7 @@
#+BEGIN: columnview :hlines 2 :maxlevel 3 :indent t :id slides
| ITEM | DURATION | TODO | ENVIRONMENT |
|-------------------------------------------------------+----------+----------+-------------|
| Slides | 0:40:49 | LACKING | |
| Slides | 0:40:59 | LACKING | |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Summary | | | |
|-------------------------------------------------------+----------+----------+-------------|
@ -145,23 +145,23 @@
| \_ GUIs of a Feather | 0:00:35 | READY | fullframe |
| \_ Macro-Like Keyboard Instructions | 0:01:00 | READY | fullframe |
|-------------------------------------------------------+----------+----------+-------------|
| \_ A New Perspective | 0:12:49 | REVIEWED | |
| \_ A New Perspective | 0:12:58 | READY | |
| \_ Perspective Topics | | | |
| \_ Secrets? | 0:01:10 | REVIEWED | fullframe |
| \_ Lifting the Curtain | 0:00:35 | REVIEWED | frame |
| \_ Text | 0:00:35 | REVIEWED | fullframe |
| \_ Text is a Universal Interface | 0:01:19 | REVIEWED | fullframe |
| \_ The Shell Command Prompt | 0:00:40 | REVIEWED | frame |
| \_ Eliminating the Web Browser | 0:01:00 | REVIEWED | frame |
| \_ Browser vs. =wget= Comparison | 0:00:15 | REVIEWED | frame |
| \_ Finding Text on the Command Line | 0:01:00 | REVIEWED | frame |
| \_ A More Gentle Reply | 0:01:00 | REVIEWED | frame |
| \_ Writing to Files (Redirection) | 0:00:55 | REVIEWED | frame |
| \_ Starting Our List | 0:01:00 | REVIEWED | fullframe |
| \_ Command Refactoring | 0:02:05 | REVIEWED | fullframe |
| \_ Again: Text is a Universal Interface | 0:00:20 | REVIEWED | againframe |
| \_ Pipelines | 0:00:15 | REVIEWED | fullframe |
| \_ Summary of the Unix Philosophy | 0:00:40 | REVIEWED | fullframe |
| \_ Secrets? | 0:00:55 | READY | fullframe |
| \_ Lifting the Curtain | 0:00:35 | READY | frame |
| \_ Text | 0:00:35 | READY | fullframe |
| \_ Text is a Universal Interface | 0:01:19 | READY | fullframe |
| \_ The Shell Command Prompt | 0:00:55 | READY | frame |
| \_ Eliminating the Web Browser | 0:01:04 | READY | frame |
| \_ Browser vs. =wget= Comparison | 0:00:20 | READY | frame |
| \_ Finding Text on the Command Line | 0:01:00 | READY | frame |
| \_ A More Gentle Reply | 0:01:00 | READY | frame |
| \_ Writing to Files (Redirection) | 0:00:55 | READY | frame |
| \_ Starting Our List | 0:01:00 | READY | fullframe |
| \_ Command Refactoring | 0:02:05 | READY | fullframe |
| \_ Again: Text is a Universal Interface | 0:00:20 | READY | againframe |
| \_ Pipelines | 0:00:15 | READY | fullframe |
| \_ Summary of the Unix Philosophy | 0:00:40 | READY | fullframe |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Program Composition | 0:09:10 | REVIEWED | |
| \_ Composition Topics | | | |
@ -773,7 +773,7 @@ I don't wish that suffering upon anyone.
To get around that,
we need to change how we think about our computing a bit.
** REVIEWED A New Perspective [0/16]
** READY A New Perspective [15/15]
*** Perspective Topics [13/13] :noexport:
- [X] What if I could walk away and get a coffee, play with the kids,
come back and have it done for me?
@ -810,7 +810,7 @@ To get around that,
- [X] Alias =fetch-url= for =wget -qO-=.
- [X] Introduce the Unix philosophy
*** REVIEWED Secrets? :B_fullframe:
*** READY Secrets? :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -820,18 +820,19 @@ To get around that,
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:01:10
:DURATION: 00:00:55
:END:
So what if I told you that,
while the average user is cursing me out for sending them 1000 URLs,
I could go grab some coffee and play with my kids and come back however
much time later to a list that has been generated for me,
and it'd still be done before the user has even had a chance to open
all of the URLs,
letalone check them?
So what if I told you that I could go grab some coffee and play with my kids
and come back later to a list that has been generated for me by an
automated process?
And what if I told you that it'd only take a minute or two to for me to
create this process?
And that you don't need to be a programmer to do it?
Well if I told you that then you'd be pretty pissed at me for sending you
1000 URLs.
So I would never do that.
This is where the whole concept of ``wizardry'' comes in.
Some of you are sitting in the audience or watching this remotely rolling
@ -840,17 +841,17 @@ Some of you are sitting in the audience or watching this remotely rolling
But to those of you who are confined to the toolset that I just
demonstrated...it's
/not/ going to be obvious.
You may still be thinking of how to accomplish that using a web browser.
The problem is that there is a whole world and way of computing that is
hidden from most users.
And it's not hidden because it's a secret.
It's because modern interfaces have come to completely mask it or provide
alternatives to it that happen to be ``good enough'' for a particular.
alternatives to it that happen to be ``good enough'' for a particular use
case.
But ``good enough'' is only good enough until it's not.
*** REVIEWED Lifting the Curtain :B_frame:
*** READY Lifting the Curtain :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -902,7 +903,7 @@ We don't need to view the webpage with all its fancy formatting.
For the problem we're trying to solve,
the graphical representation provides little benefit.
*** REVIEWED Text :B_fullframe:
*** READY Text :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -935,7 +936,7 @@ And sure enough,
Completely different program,
and we can still find the text using the same keybinding.
*** REVIEWED Text is a Universal Interface :B_fullframe:
*** READY Text is a Universal Interface :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -966,8 +967,7 @@ Let's save this HTML as a file,
If we opened this file,
it would open in our web browser and we would see the same webpage,
although it would look a bit different since a lot of the styling is
stored outside of this HTML file,
and there won't be any images.
stored outside of this HTML file.
But if again we opened this HTML file in our text editor,
you would see that same plain text HTML as before;
@ -985,7 +985,7 @@ Up until this point,
an /alternative/ to something.
Now we're going to venture into a world where it is /the/ interface.
*** REVIEWED The Shell Command Prompt :B_frame:
*** READY The Shell Command Prompt :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1012,7 +1012,7 @@ output line N
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:00:40
:DURATION: 00:00:55
:END:
If you open a VTE,
@ -1023,18 +1023,27 @@ This is a /command prompt/.
The program that is prompting you for a command is called the /shell/.
The GNU shell is =bash=,
which is the default on most GNU/Linux systems.
It's also the default on Mac OSX,
if you happen to be using that,
though I recommend against it.
Since we're talking about freedom in your computing,
I hope that you'll try bash on an operating system that respects your
freedom to use, study, modify, and share its software,
like a GNU/Linux distribution.
This laptop here runs Trisquel.
Bash is also the default on Mac OSX,
but the rest of the operating system is non-free;
you have no freedom there.
And Windows now has something they call
``Bash on Ubuntu on Windows'',
which is GNU/Linux running atop of the Windows kernel.
Of course a fully free GNU/Linux system is better.
which just is GNU/Linux running atop of the proprietary Windows kernel.
You can do better that that!
Bash isn't required to run any of the commands I'm presenting as part of
this talk.
When I present commands here,
the command line we are executing is prefixed with a dollar sign,
and the output immediately follows it,
like so.
*** REVIEWED Eliminating the Web Browser :B_frame:
*** READY Eliminating the Web Browser :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1066,11 +1075,12 @@ $ wget -O speakers.html \
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:01:00
:DURATION: 00:01:05
:END:
Alright!
The goal is to retrieve the HTML file at a given URL.
GNU/Linux distributions usually come with GNU =wget=,
which does precisely that.
To invoke it,
@ -1093,13 +1103,14 @@ The backslash here allows us to continue the command onto the next line;
otherwise, a newline tells the shell to execute the command.
So remember previously that we manually created =speakers.html= by viewing
the source of the webpage in IceCat.
the source of the webpage in a web browser and saving it.
If we open this file,
we'll find that it contains /exactly the same text/,
and we never had to open a web browser.
we'll find that it contains /exactly the same text/ as when we manually
did it,
and we never had to open a web browser.
And we can search it all the same as before for ``free software''.
*** REVIEWED Browser vs. =wget= Comparison :B_frame:
*** READY Browser vs. =wget= Comparison :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1117,7 +1128,7 @@ $ wget https://libreplanet.org/2019/speakers/
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:00:15
:DURATION: 00:00:20
:END:
This is a very different means of interacting with the computer,
@ -1129,7 +1140,7 @@ It's hard to imagine a more direct line of communication with the computer
for downloading a webpage,
short of reading your mind.
*** REVIEWED Finding Text on the Command Line :B_frame:
*** READY Finding Text on the Command Line :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1164,9 +1175,7 @@ For that we use a tool called =grep=.
The first argument to =grep= is the search string,
and the remaining arguments---just one here---tell it where it should
search.
The first argument to =grep= is quoted because it contains a space,
otherwise the shell would think our search phrase was only `free' and that
the files we wanted to search were `software' and `speakers.html'.
The first argument to =grep= is quoted because it contains a space.
You'll get a bunch of output;
I just included a small snippet here.
@ -1182,7 +1191,7 @@ So while we have efficiently /conveyed/ a search string,
we didn't receive an efficient /reply/---it's
information overload.
*** REVIEWED A More Gentle Reply :B_frame:
*** READY A More Gentle Reply :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1247,7 +1256,7 @@ But if you recall our research task,
We can do that too,
by using two pipes in place of two ampersands.
*** REVIEWED Writing to Files (Redirection) :B_frame:
*** READY Writing to Files (Redirection) :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1265,9 +1274,6 @@ $ echo 'Hello again, world!' > hello.txt
# appends (echo adds a newline)
$ echo 'First line' >> results.txt
$ echo 'Second line' >> results.txt
# truncates file (empties)
> results.txt
#+END_SRC
**** Notes :B_noteNH:
@ -1303,11 +1309,9 @@ The second type,
lines,
``First line'' and ``Second line'' respectively.
If the file doesn't yet exist,
an empty one will be created before writing.
it will be created.
I think maybe you can see where I'm going with this.
*** REVIEWED Starting Our List :B_fullframe:
*** READY Starting Our List :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1331,7 +1335,8 @@ $ wget --quiet -O speakers.html \
Take a look at that for a moment.
/<pause ~5s>/
Can anyone tell me what the result of this command line will be?
Can anyone tell me in just one sentence what the result of this command line
will be?
/<pause ~5s>/
/<react appropriately>/
@ -1348,7 +1353,7 @@ At this point,
But this is a hefty command to have to modify each time we want to try a
different URL.
*** REVIEWED Command Refactoring :B_fullframe:
*** READY Command Refactoring :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1498,7 +1503,7 @@ By the way,
But before we keep going,
I want to go back to a point I mentioned previously.
*** REVIEWED Again: Text is a Universal Interface :B_againframe:
*** READY Again: Text is a Universal Interface :B_againframe:
:PROPERTIES:
:BEAMER_env: againframe
:BEAMER_ref: *Text is a Universal Interface
@ -1522,7 +1527,7 @@ That's because text is something that both humans and computers can work
This is a fundamental design principle in the Unix tools that I have begun
to present to you.
*** REVIEWED Pipelines :B_fullframe:
*** READY Pipelines :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1547,7 +1552,7 @@ As part of the Unix philosophy,
More broadly,
the Unix philosophy can be summarized as:
*** REVIEWED Summary of the Unix Philosophy :B_fullframe:
*** READY Summary of the Unix Philosophy :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:DURATION: 0:00:40