A New Perspective: Slides ready
I added to the time slightly rather than reducing it!master
parent
f13220e816
commit
16cf83d92e
143
slides.org
143
slides.org
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue