Rehearsed talk

This is the final state of the talk before it was presented.  Note
that what I presented does not match the notes exactly.
master
Mike Gerwitz 2019-03-25 12:53:44 -04:00
parent 3d8d8a594e
commit fad5b41407
Signed by: mikegerwitz
GPG Key ID: 8C917B7F5DC51BA2
1 changed files with 124 additions and 143 deletions

View File

@ -117,84 +117,81 @@
- [ ] =vim=
- [ ] =screen=
* LACKING Slides [4/6]
* REHEARSED Slides [5/5]
:PROPERTIES:
:ID: slides
:END:
** Summary :noexport:
#+BEGIN: columnview :hlines 2 :maxlevel 3 :indent t :id slides
| ITEM | DURATION | TODO | ENVIRONMENT |
|-------------------------------------------------------+----------+----------+-------------|
| Slides | 0:40:59 | LACKING | |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Summary | | | |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Introduction | 0:01:50 | READY | |
| \_ Spoken Intro | 0:00:50 | READY | note |
| \_ Choreographed Workflows | 00:00:20 | READY | fullframe |
| \_ Practical Freedom | 0:00:40 | READY | fullframe |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Practical Example: Web Browser | 0:07:03 | READY | |
| \_ Browser Topics | | | |
| \_ Example: Web Browser | 0:00:20 | READY | frame |
| \_ Finding Text (Mouse-Driven GUI Interaction) | 0:01:00 | READY | frame |
| \_ GUIs Change Over Time | 0:00:45 | READY | frame |
| \_ Muscle Memory | 0:00:40 | READY | fullframe |
| \_ A Research Task | 0:00:20 | READY | fullframe |
| \_ Executing the Research Task | 0:02:24 | READY | frame |
| \_ GUIs of a Feather | 0:00:35 | READY | fullframe |
| \_ Macro-Like Keyboard Instructions | 0:01:00 | READY | fullframe |
|-------------------------------------------------------+----------+----------+-------------|
| \_ A New Perspective | 0:12:58 | READY | |
| \_ Perspective Topics | | | |
| \_ 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:15 | READY | |
| \_ Composition Topics | | | |
| \_ LP Sessions | 0:02:30 | READY | fullframe |
| \_ Interactive, Incremental, Iterative Development | 0:01:10 | READY | fullframe |
| \_ Discovering URLs | 0:02:15 | READY | fullframe |
| \_ Go Grab a Coffee | 0:00:15 | READY | fullframe |
| \_ Async Processes | 0:00:45 | READY | fullframe |
| \_ Executable Shell Script and Concurrency | 0:01:30 | READY | fullframe |
| \_ Execution Time | 0:00:50 | READY | frame |
|-------------------------------------------------------+----------+----------+-------------|
| \_ More Examples | 0:09:52 | REVIEWED | |
| \_ More Example Topics | | | |
| \_ Resize Images | 0:00:30 | REVIEWED | frame |
| \_ Password Generation | 0:00:45 | REVIEWED | frame |
| \_ Password Manager | 0:01:39 | REVIEWED | frame |
| \_ Remote Password Manager With 2FA | 0:01:30 | REVIEWED | frame |
| \_ Taking Screenshots | 0:00:35 | REVIEWED | frame |
| \_ Screenshot OCR | 0:01:00 | REVIEWED | frame |
| \_ Full Circle | 0:02:24 | REVIEWED | fullframe |
| \_ Getting Help | 0:01:30 | REVIEWED | frame |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Outro | | DEVOID | |
| \_ Outro Topics | | | |
|-------------------------------------------------------+----------+----------+-------------|
| \_ Thank You | 00:00:01 | | fullframe |
| ITEM | DURATION | TODO | ENVIRONMENT |
|-------------------------------------------------------+----------+-----------+-------------|
| Slides | 0:39:53 | REHEARSED | |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ Summary | | | |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ Introduction | 0:01:24 | REHEARSED | |
| \_ Spoken Intro | 0:00:25 | REHEARSED | note |
| \_ Choreographed Workflows | 00:00:20 | REHEARSED | fullframe |
| \_ Practical Freedom | 0:00:40 | REHEARSED | fullframe |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ Practical Example: Web Browser | 0:06:34 | REHEARSED | |
| \_ Browser Topics | | | |
| \_ Example: Web Browser | 0:00:10 | REHEARSED | frame |
| \_ Finding Text (Mouse-Driven GUI Interaction) | 0:01:00 | REHEARSED | frame |
| \_ GUIs Change Over Time | 0:00:45 | REHEARSED | frame |
| \_ Muscle Memory | 0:00:40 | REHEARSED | fullframe |
| \_ A Research Task | 0:00:20 | REHEARSED | fullframe |
| \_ Executing the Research Task | 0:02:05 | REHEARSED | frame |
| \_ GUIs of a Feather | 0:00:35 | REHEARSED | fullframe |
| \_ Macro-Like Keyboard Instructions | 0:01:00 | REHEARSED | fullframe |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ A New Perspective | 0:12:48 | REHEARSED | |
| \_ Perspective Topics | | | |
| \_ Secrets? | 0:00:55 | REHEARSED | fullframe |
| \_ Lifting the Curtain | 0:00:35 | REHEARSED | frame |
| \_ Text | 0:00:35 | REHEARSED | fullframe |
| \_ Text is a Universal Interface | 0:01:10 | REHEARSED | fullframe |
| \_ The Shell Command Prompt | 0:00:55 | REHEARSED | frame |
| \_ Eliminating the Web Browser | 0:01:04 | REHEARSED | frame |
| \_ Browser vs. =wget= Comparison | 0:00:20 | REHEARSED | frame |
| \_ Finding Text on the Command Line | 0:01:00 | REHEARSED | frame |
| \_ A More Gentle Reply | 0:01:00 | REHEARSED | frame |
| \_ Writing to Files (Redirection) | 0:00:55 | REHEARSED | frame |
| \_ Starting Our List | 0:01:00 | REHEARSED | fullframe |
| \_ Command Refactoring | 0:02:05 | REHEARSED | fullframe |
| \_ Again: Text is a Universal Interface | 0:00:20 | REHEARSED | againframe |
| \_ Pipelines | 0:00:15 | REHEARSED | fullframe |
| \_ Summary of the Unix Philosophy | 0:00:40 | REHEARSED | fullframe |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ Program Composition | 0:09:15 | REHEARSED | |
| \_ Composition Topics | | | |
| \_ LP Sessions | 0:02:30 | REHEARSED | fullframe |
| \_ Interactive, Incremental, Iterative Development | 0:01:10 | REHEARSED | fullframe |
| \_ Discovering URLs | 0:02:15 | REHEARSED | fullframe |
| \_ Go Grab a Coffee | 0:00:15 | REHEARSED | fullframe |
| \_ Async Processes | 0:00:45 | REHEARSED | fullframe |
| \_ Executable Shell Script and Concurrency | 0:01:30 | REHEARSED | fullframe |
| \_ Execution Time | 0:00:50 | REHEARSED | frame |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ More Examples | 0:09:52 | REHEARSED | |
| \_ More Example Topics | | | |
| \_ Resize Images | 0:00:30 | REHEARSED | frame |
| \_ Password Generation | 0:00:45 | REHEARSED | frame |
| \_ Password Manager | 0:01:39 | REHEARSED | frame |
| \_ Remote Password Manager With 2FA | 0:01:30 | REHEARSED | frame |
| \_ Taking Screenshots | 0:00:35 | REHEARSED | frame |
| \_ Screenshot OCR | 0:01:00 | REHEARSED | frame |
| \_ Full Circle | 0:02:24 | REHEARSED | fullframe |
| \_ Getting Help | 0:01:30 | REHEARSED | frame |
|-------------------------------------------------------+----------+-----------+-------------|
| \_ Thank You | 00:00:01 | | fullframe |
#+END:
** READY Introduction [3/3]
*** READY Spoken Intro :B_note:
** REHEARSED Introduction [3/3]
*** REHEARSED Spoken Intro :B_note:
:PROPERTIES:
:BEAMER_env: note
:DURATION: 0:00:50
:DURATION: 0:00:25
:END:
Hello, everyone!
@ -202,27 +199,16 @@ Hello, everyone!
My name is Mike Gerwitz.
I am a free software hacker and activist with a focus on user privacy and
security.
I'm also a GNU Maintainer and software evaluator,
and hold various administrative duties within GNU.
I'm also a GNU Maintainer and volunteer.
I have about twenty years of programming experience,
half of that professionally.
And I've been a computer user for longer.
So I've been around long enough to see a decent evolution in how we interact
with machines.
I've gotten a sense of what feels right and wrong as both a user and a
hacker.
So I'm here today to try to explore a healthy balance,
and walk you through what I see as an efficient means of computing,
based on the problems that /I've/ encountered,
and the problems I've seen /others/ encounter over the years.
My hope is that the examples I have chosen will be useful not just to
programmers,
but to lightly technical users as well.
*** READY Choreographed Workflows :B_fullframe:
*** REHEARSED Choreographed Workflows :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:DURATION: 00:00:20
@ -244,7 +230,7 @@ And I don't deny that this has been a useful method for making computers
But it's important to understand where this trend falls short.
*** READY Practical Freedom :B_fullframe:
*** REHEARSED Practical Freedom :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -273,10 +259,11 @@ My goal here is to blur those lines between ``user'' and ``programmer'' and
But it does require a different way of thinking.
To begin,
let's start by exploring something most people are familiar with.
let's start by exploring something that I think most people can relate to
using.
** READY Practical Example: Web Browser [8/8]
** REHEARSED Practical Example: Web Browser [8/8]
*** Browser Topics [3/3] :noexport:
This example is the main segue from GUIs into the utility of keybindings
into shell, so it has to be compelling. I chose something that is
@ -316,7 +303,7 @@ frequently done by users: visiting webpages and searching for text.
text editor.
- [X] But what if I had 10? 100? 1000? This is still tedious and slow.
*** READY Example: Web Browser :B_frame:
*** REHEARSED Example: Web Browser :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -326,7 +313,7 @@ frequently done by users: visiting webpages and searching for text.
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:00:20
:DURATION: 00:00:10
:END:
The only GUI I use on a day-to-day basis is my web browser.
@ -336,10 +323,7 @@ In this case,
This is a screenshot of an admittedly staged session,
and contains a number of addons.
I chose a graphical web browser as an example because I feel that it's
something that almost everyone can relate to using,
*** READY Finding Text (Mouse-Driven GUI Interaction) :B_frame:
*** REHEARSED Finding Text (Mouse-Driven GUI Interaction) :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -404,7 +388,7 @@ There is no canonical representation for these instructions,
because it involves clicking on elements that have no clear name to the
user.
*** READY GUIs Change Over Time :B_frame:
*** REHEARSED GUIs Change Over Time :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -461,7 +445,7 @@ When you type =Ctrl+F=,
it immediately opens that search bar and gives focus to the textbox,
so you can just start typing.
*** READY Muscle Memory :B_fullframe:
*** REHEARSED Muscle Memory :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -500,7 +484,7 @@ You develop muscle memory.
/<Repeatedly make motion with hand and fingers like a madman during the
above paragraph.>/
*** READY A Research Task :B_fullframe:
*** REHEARSED A Research Task :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -529,7 +513,7 @@ And I want you to come up with a list of the webpages that /do not/ contain
How might we approach this problem as an average user?
*** READY Executing the Research Task :B_frame:
*** REHEARSED Executing the Research Task :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -634,7 +618,7 @@ _Keyboard_
******* Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:01:10
:DURATION: 00:00:50
:END:
Fortunately we have /many/ more keybindings at our disposal!
@ -674,7 +658,7 @@ We don't have to seek out our actions each time in the GUI---the
operations are always at our fingertips,
literally.
*** READY GUIs of a Feather :B_fullframe:
*** REHEARSED GUIs of a Feather :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -708,7 +692,7 @@ Certain keybindings are ubiquitous---if
Let's look at those keybindings a bit more concisely,
since that last slide was a bit of a mess.
*** READY Macro-Like Keyboard Instructions :B_fullframe:
*** REHEARSED Macro-Like Keyboard Instructions :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -772,7 +756,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.
** READY A New Perspective [15/15]
** REHEARSED 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?
@ -809,7 +793,7 @@ To get around that,
- [X] Alias =fetch-url= for =wget -qO-=.
- [X] Introduce the Unix philosophy
*** READY Secrets? :B_fullframe:
*** REHEARSED Secrets? :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -848,9 +832,10 @@ 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 use
case.
But ``good enough'' is only good enough until it's not.
But ``good enough'' is only good enough until it's not,
until you need to do something /outside/ of that preconceived workflow.
*** READY Lifting the Curtain :B_frame:
*** REHEARSED Lifting the Curtain :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -902,7 +887,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.
*** READY Text :B_fullframe:
*** REHEARSED Text :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -935,7 +920,7 @@ And sure enough,
Completely different program,
and we can still find the text using the same keybinding.
*** READY Text is a Universal Interface :B_fullframe:
*** REHEARSED Text is a Universal Interface :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -946,7 +931,7 @@ Text is a Universal Interface
**** Notes :B_noteNH:
:PROPERTIES:
:BEAMER_env: noteNH
:DURATION: 00:01:20
:DURATION: 00:01:10
:END:
Text is a universal interface.
@ -984,7 +969,7 @@ Up until this point,
an /alternative/ to something.
Now we're going to venture into a world where it is /the/ interface.
*** READY The Shell Command Prompt :B_frame:
*** REHEARSED The Shell Command Prompt :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1034,7 +1019,7 @@ Bash is also the default on Mac OSX,
you have no freedom there.
And Windows now has something they call
``Bash on Ubuntu on Windows'',
which just is GNU/Linux running atop of the proprietary Windows kernel.
which just is GNU running atop of the proprietary Windows kernel.
You can do better that that!
When I present commands here,
@ -1042,7 +1027,7 @@ When I present commands here,
and the output immediately follows it,
like so.
*** READY Eliminating the Web Browser :B_frame:
*** REHEARSED Eliminating the Web Browser :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1109,7 +1094,7 @@ If we open this file,
and we never had to open a web browser.
And we can search it all the same as before for ``free software''.
*** READY Browser vs. =wget= Comparison :B_frame:
*** REHEARSED Browser vs. =wget= Comparison :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1139,7 +1124,7 @@ It's hard to imagine a more direct line of communication with the computer
for downloading a webpage,
short of reading your mind.
*** READY Finding Text on the Command Line :B_frame:
*** REHEARSED Finding Text on the Command Line :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1190,7 +1175,7 @@ So while we have efficiently /conveyed/ a search string,
we didn't receive an efficient /reply/---it's
information overload.
*** READY A More Gentle Reply :B_frame:
*** REHEARSED A More Gentle Reply :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1255,7 +1240,7 @@ But if you recall our research task,
We can do that too,
by using two pipes in place of two ampersands.
*** READY Writing to Files (Redirection) :B_frame:
*** REHEARSED Writing to Files (Redirection) :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -1310,7 +1295,7 @@ The second type,
If the file doesn't yet exist,
it will be created.
*** READY Starting Our List :B_fullframe:
*** REHEARSED Starting Our List :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1352,7 +1337,7 @@ At this point,
But this is a hefty command to have to modify each time we want to try a
different URL.
*** READY Command Refactoring :B_fullframe:
*** REHEARSED Command Refactoring :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1502,7 +1487,7 @@ By the way,
But before we keep going,
I want to go back to a point I mentioned previously.
*** READY Again: Text is a Universal Interface :B_againframe:
*** REHEARSED Again: Text is a Universal Interface :B_againframe:
:PROPERTIES:
:BEAMER_env: againframe
:BEAMER_ref: *Text is a Universal Interface
@ -1526,7 +1511,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.
*** READY Pipelines :B_fullframe:
*** REHEARSED Pipelines :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1551,7 +1536,7 @@ As part of the Unix philosophy,
More broadly,
the Unix philosophy can be summarized as:
*** READY Summary of the Unix Philosophy :B_fullframe:
*** REHEARSED Summary of the Unix Philosophy :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:DURATION: 0:00:40
@ -1588,7 +1573,7 @@ We start to think of how to decompose problems into small operations that
We think of how to chain small, specialized programs together,
transforming text at each step to make it more suitable for the next.
** READY Program Composition [7/7]
** REHEARSED Program Composition [7/7]
*** Composition Topics [6/6] :noexport:
- [X] Clarify how pipelines work with existing =wget | grep=.
- [X] More involved pipeline with more than two programs.
@ -1609,7 +1594,7 @@ We think of how to chain small, specialized programs together,
- [X] Extract =url-grep= into script.
- [X] Demonstrate running jobs in parallel with =xargs=.
*** READY LP Sessions :B_fullframe:
*** REHEARSED LP Sessions :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1715,7 +1700,7 @@ $ fetch-url https://libreplanet.org/2019/speakers/ \
| uniq -cd \
| sort -nr \
| head -n5 \
| sed 's#^ *\(.\+\) <em>\(.*\)</em>#\2 has \1 speakers#g'
| sed 's#^ *\(.\+\) <em>\(.*\)</em>#\2 has \1 speakers#'
The Tor Project: State of the Onion has 5 speakers
Large-scale collaboration with free software has 4 speakers
The joy of bug reporting has 2 speakers
@ -1817,7 +1802,7 @@ Your computer will speak the top five talks by presenter count to you.
Listening to computers speak is all the rage right now,
right?
*** READY Interactive, Incremental, Iterative Development :B_fullframe:
*** REHEARSED Interactive, Incremental, Iterative Development :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -1866,7 +1851,7 @@ If something doesn't work,
And because we're working with text as data,
a human can replace any part of this process!
*** READY Discovering URLs :B_fullframe:
*** REHEARSED Discovering URLs :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -2066,7 +2051,7 @@ We can do that too by reading =results.txt= in place of standard input to
Phew!
*** READY Go Grab a Coffee :B_fullframe:
*** REHEARSED Go Grab a Coffee :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -2089,7 +2074,7 @@ The Internet is fast nowadays;
ideally, we wouldn't have to wait long.
Can we do better?
*** READY Async Processes :B_fullframe:
*** REHEARSED Async Processes :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -2142,7 +2127,7 @@ But what if we have 1000?
That isn't efficient,
and it's a bit rude to server administrators.
*** READY Executable Shell Script and Concurrency :B_fullframe:
*** REHEARSED Executable Shell Script and Concurrency :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -2171,7 +2156,7 @@ wget -qO- "$url" \
$ chmod +x url-grep
#+END_SRC
#+BEAMER: \begin{onlyenv}<1-2>
#+BEAMER: \begin{onlyenv}<1>
#+BEGIN_SRC sh
$ while read URL; do
./url-grep 'free software' "$URL" >> results.txt
@ -2179,7 +2164,7 @@ $ while read URL; do
#+END_SRC
#+BEAMER: \end{onlyenv}
#+BEAMER: \begin{onlyenv}<3>
#+BEAMER: \begin{onlyenv}<2>
#+BEGIN_SRC sh
$ xargs -n1 ./url-grep 'free software' > results.txt
@ -2187,7 +2172,7 @@ $ xargs -n1 ./url-grep 'free software' > results.txt
#+END_SRC
#+BEAMER: \end{onlyenv}
#+BEAMER: \begin{onlyenv}<4>
#+BEAMER: \begin{onlyenv}<3>
#+BEGIN_SRC sh
$ xargs -n1 -P5 ./url-grep 'free software' > results.txt
# ^ 5 concurrent processes
@ -2244,7 +2229,7 @@ Here we specify =5=,
meaning =xargs= will run five processes at a time.
You can change that to whatever number makes sense for you.
*** READY Execution Time :B_frame:
*** REHEARSED Execution Time :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2292,7 +2277,7 @@ We've come a long way from using the web browser and a mouse.
Now that we've finally completed our research task,
let's look at a few more examples.
** REVIEWED More Examples [0/8]
** REHEARSED More Examples [8/8]
*** More Example Topics [7/7] :noexport:
- [X] Screenshots with =import=.
- Including copying to clipboard.
@ -2310,7 +2295,7 @@ Now that we've finally completed our research task,
- [X] Finding documentation with =info= and =man=.
*** REVIEWED Resize Images :B_frame:
*** REHEARSED Resize Images :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2343,7 +2328,7 @@ The second example uses the =find= command and searches all child
directories as well.
Both examples produce a new set of images prefixed with =sm-=.
*** REVIEWED Password Generation :B_frame:
*** REHEARSED Password Generation :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2388,7 +2373,7 @@ The EFF recommends taking at least six words,
This one is particularly memorable and morbid-sounding.
I'm a little upset that I put it in the slide instead of using it!
*** REVIEWED Password Manager :B_frame:
*** REHEARSED Password Manager :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2470,7 +2455,7 @@ Since the decrypted data exist only as part of the pipeline,
the decrypted passwords are only kept plaintext in memory for the duration
of the script.
*** REVIEWED Remote Password Manager With 2FA :B_frame:
*** REHEARSED Remote Password Manager With 2FA :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2540,7 +2525,7 @@ But you could easily do both---
*** REVIEWED Taking Screenshots :B_frame:
*** REHEARSED Taking Screenshots :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2580,7 +2565,7 @@ Notice the new =image/png= type there.
Now you can paste the image into other programs,
like image editors or websites.
*** REVIEWED Screenshot OCR :B_frame:
*** REHEARSED Screenshot OCR :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2662,7 +2647,7 @@ And yet,
YMMV though with tesseract,
depending on your settings and training data.
*** REVIEWED Full Circle :B_fullframe:
*** REHEARSED Full Circle :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
:END:
@ -2764,7 +2749,7 @@ That also thwarts systems that implement the terrible anti-pattern of try to
prevent you from pasting passwords.
*** REVIEWED Getting Help :B_frame:
*** REHEARSED Getting Help :B_frame:
:PROPERTIES:
:BEAMER_env: frame
:END:
@ -2832,10 +2817,6 @@ This is obviously a bit different than how people interact with GUIs,
documentation.
** DEVOID Outro
*** Outro Topics :noexport:
This section may be able to be merged into the previous; I have it here as a
placeholder to show why the status of [[*Slides]] is =LACKING=.
** Thank You :B_fullframe:
:PROPERTIES:
:BEAMER_env: fullframe
@ -2855,7 +2836,7 @@ Mike Gerwitz
Slides and Source Code Available Online
<[[https://mikegerwitz.com/talks/cs4m]]>
<[[https://mikegerwitz.com/talks/cs4m]].pdf>
\bigskip