[INCLUDE TH/speedbar.blogme] [SETFAVICON dednat4/dednat4-icon.png] [SETFAVICON IMAGES/forthsun.png] [# (defun c () (interactive) (find-blogme3-sh0-if "2021-workshop")) (defun u () (interactive) (find-blogme-upload-links "2021-workshop")) ;; http://angg.twu.net/2021-workshop.html ;; http://angg.twu.net/2021-workshop.html#what ;; http://angg.twu.net/2021-workshop.html#december ;; http://angg.twu.net/2021-workshop.html#november ;; file:///home/edrx/TH/L/2021-workshop.html ;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-11/msg00241.html ;; https://lists.gnu.org/archive/html/help-gnu-emacs/2021-12/msg00074.html ;; (find-emacs-tangents-links "2021" "11" "29" "msg00012" "txtsUyi2hGEqe") ;; ;; (defun o () (interactive) (find-TH "2021-oficina")) ;; (defun w () (interactive) (find-TH "2021-workshop")) ;; (defun ow () (interactive) (find-2b '(o) '(w))) ;; «.december» (to "december") ;; «.timezones» (to "timezones") ;; «.november» (to "november") #] [lua: -- require "sandwiches-defs" -- use_sand_htmlizeline() -- require "videoindex" -- (find-blogme3 "videoindex.lua") -- def [[ videolines 1Q body VideoIndex.new():videolinesconcat(body, BR()) ]] require "sandwiches-all" -- (find-blogme3 "sandwiches-all.lua") def [[ _ 2 shorthand,text R(short_:expand(shorthand), nilify(text) or shorthand) ]] def [[ pe 1 body _B.P(mapconcat(htmlizeline, splitlines(body), BR())) ]] def [[ pe' 1Q body _B.P(mapconcat(htmlizeline, splitlines(body), BR())) ]] def [[ ne' 1Q body NARROW(_B.P(pe(body))) ]] def [[ RIGHTFIG 2 target,img "" ]] short_:add [[ eeit => (find-eepitch-intro "3. Test blocks") find-eeit-links => (find-eepitch-intro "3.1. `find-eeit-links'") eepitch => (find-eev-quick-intro "6. Controlling shell-like programs") eepitch-block => (find-eev-quick-intro "6. Controlling shell-like programs") dofile => (find-lua51manual "#pdf-dofile") dofile -> http://angg.twu.net/IMAGES/2021-square-cube-3.png languages => (find-eev "eev-testblocks.el" "examples") nav -> 2020-list-packages-eev-nav.html oficina -> 2021-oficina.html M-e => (find-eev-quick-intro "2. Evaluating Lisp") M-j => (find-eev-quick-intro "7.2. The list of eejump targets") M-k => (find-eval-intro "5. Going back") main-keys => (find-emacs-keys-intro) cut-and-paste => (find-eev-quick-intro "5.2. Cutting and pasting") task-and-notes => (find-here-links-intro "1. Alternating between \"task\" and \"notes\"") here => (find-here-links-intro "2. \"Here\"") keys-567 => (find-emacs-keys-intro "5. Undoing") elisp => (find-elisp-intro) psne => (find-psne-intro) refining => (find-refining-intro) video-links -> http://angg.twu.net/2021-video-links.html video-links => (find-video-links-intro) eev2019 -> emacsconf2019.html eev2019-demo => (find-eev2019video "13:10" "Demo: patching xpdf") eev2020 -> emacsconf2020.html eev2020b -> 2020-some-template-based.html miniforth-html -> miniforth-article.html#why-forth miniforth-pdf -> http://angg.twu.net/miniforth/miniforth-article.pdf#page=12 Sassmannshaus -> https://www.youtube.com/watch?v=Lr4YljhBGt8 Greta -> https://emacsconf.org/2021/talks/pattern/ Prot -> https://emacsconf.org/2021/talks/freedom/ Montessori -> https://emacsconf.org/2021/talks/montessori/ Suzuki -> https://www.amazon.com/Suzuki-Viola-School-Vol-Part/dp/0874872413 Suzuki -> https://academicworks.cuny.edu/cgi/viewcontent.cgi?article=1929&context=gc_etds#page=98 Sevcik -> https://www.amazon.com/Sevcik-Viola-Opus-Part-Otakar/dp/0711997705 video-1 -> http://angg.twu.net/eev-videos/2021-workshop-1.mp4 video-2 -> http://angg.twu.net/eev-videos/2021-workshop-2.mp4 video-1-thumb -> IMAGES/2021-workshop-1-small.png video-2-thumb -> IMAGES/2021-workshop-2-small.png prerequisites => (find-eev-exercises-intro "0. Prerequisites") exercises => (find-eev-exercises-intro) exercises-1 => (find-eev-exercises-intro "1.1. The base case 1") from-find-ekey => (find-eev-exercises-intro "3.3. Copy from `find-ekey-links'") ]] def [[ TABLE2 2 left,right "\n".. "\n".. "\n".. "
$left$right
" ]] def [[ FIG 2 target,img "" ]] ] [SETHEADSTYLE [LUCIDA]] [htmlize [J Workshop: Creating and Saving Elisp Hyperlinks] [# # ____ _ # | _ \ ___ ___ ___ _ __ ___ | |__ ___ _ __ # | | | |/ _ \/ __/ _ \ '_ ` _ \| '_ \ / _ \ '__| # | |_| | __/ (_| __/ | | | | | |_) | __/ | # |____/ \___|\___\___|_| |_| |_|_.__/ \___|_| # #] [# H3 A workshop on creating and saving Elisp hyperlinks] [lua: short_:add [[ (find-1stclassvideo-links "2021workshop1") (find-1stclassvideo-links "2021workshop2") (find-1stclassvideo-links "2021workshop3") (find-1stclassvideo-links "2021workshop4") (find-1stclassvideo-links "2021workshop5") (find-1stclassvideo-links "2021workshop6") 2021workshop1 => (find-eev "eev-videolinks.el" "2021workshop1") 2021workshop2 => (find-eev "eev-videolinks.el" "2021workshop2") 2021workshop3 => (find-eev "eev-videolinks.el" "2021workshop3") 2021workshop4 => (find-eev "eev-videolinks.el" "2021workshop4") 2021workshop5 => (find-eev "eev-videolinks.el" "2021workshop5") 2021workshop6 => (find-eev "eev-videolinks.el" "2021workshop6") ]] ] [P [COLOR red Long story short:] I gave a series of workshops on "creating and saving elisp hyperlinks" in 2021 because I needed to get feedback on some parts of eev. Very few people attended but I produced a lot of material, both before and after the workshops. Parts of this material were polished later, but I also made six videos in a hurry because there was a chance that a few advanced users would pop up in the last workshop, and I wanted to be prepared. The advanced users didn't come and there are links to some of these videos in [STOH (find-saving-links-intro)], so I sort of "have to" keep those videos in the list of first-class videos even though I find them embarassing.] [P If you execute `M-x find-1stclassvideos' you will see that: [BR] 1) there are six videos called [_ 2021workshop1 2021workshop1], [_ 2021workshop2 2], [_ 2021workshop3 3], [_ 2021workshop4 4], [_ 2021workshop5 5], [_ 2021workshop6 6], [BR] 2) they appear near the top of the list - and so they look important, [BR] 3) their comment fields say "Very bad - don't watch!". ] [P [STANDOUT Update, 2023jan02:] I added subtitles to the videos, and with subtitles I don't think that they are bad anymore! See [R 2021-eev-exercises.html this page]. 🙂] [P The rest of this page is old.] [br] [br] [# «december» (to ".december") #] [P [IT [COLOR red TL;DR: I will give a workshop on Emacs on the saturday, 04-dec-2021. [NAME december] Come! Everyone's welcome! The instructions are at the end of this section! =)]]] [br] [H3 1. A short explanation] [P This was the abstract of my [R emacsconf2019.html presentation] at the EmacsConf2019:] [NARROW [P [BF Title:] [BR] How to record executable notes with eev - and how to play them back ] [P [BF Abstract:] [BR] In the old times we would take notes about a task - think on fieldnotes - by using paper notebooks. Nothing was automatic then: we had to decide what to write and how to write it, we had to switch between "task" and "notes", we had to learn how to write both readably and concisely, and we had to learn how to switch between task and notes without losing focus. Learning these things usually took years. ] [P In this talk I will present a package called "eev" that lets us do a modern version of this. Some of its lower-level modules implement support for many kinds of elisp hyperlinks and a variant of `isend-mode' called `eepitch' that lets us select an interpreter and send lines of the current buffer to it; on top of that it has [COLOR red tools that let us create and modify elisp hyperlinks with very few keystrokes]. I will show 1) how to use the elisp hyperlinks and eepitch blocks in already existing notes, 2) how to create elisp hyperlinks and eepitch blocks with very few keystrokes, 3) how to use this to do "task"+"notes" with just a few more keystrokes than we would use to do just "task", 4) how I've been using this to teach Emacs to total beginners.] [P The eev homepage is at [Q <][R http://angg.twu.net/#eev][Q >].] ] [P Note the part in red: "tools that let us create and modify elisp hyperlinks with very few keystrokes". Until some time ago these tools were very hard to learn; a few people were able to figure out from the [R [STOT (find-here-links-intro)] documentation] how to use them fluently, but most people weren't. I [IT think] that I found a way to teach them in a way that is both quick and reasonably fun, that is somewhat inspired by how string instruments are taught - and much closer to the [_ Suzuki] way than to the Sevcik way. See also [_ Sassmannshaus this] - I especially like the part in which he says "there is a moment in which most of the learning takes place".] [P When we are learning a string instrument we have to coordinate a lot of fingers (too many to count), a lot of arms (2), a lot of elbows (2), our head (1) - that is usually pressing the chin rest too hard - the bow, and our eyes, and we have to try to read the music while we try to play in time. A good teacher can help us make the fingers, the arms, etc, work well using less of our attention, and when this happens it frees some of our mental space and lets us concentrate on the music and on making it sound like music, not like struggling.] [P I [IT believe] that in the right setting, and with the right tricks, people will be able to concentrate on selecting and copying the right hyperlinks instead of just struggling to memorize the key sequences. One of these tricks is to copy the diagram of the exercise to the notes buffer, as you can see in the second video below at 3:07.]

[FIG http://angg.twu.net/eev-videos/2021-workshop-1.mp4 IMAGES/2021-workshop-1-small.png] [FIG http://angg.twu.net/eev-videos/2021-workshop-2.mp4 IMAGES/2021-workshop-2-small.png] [FIG http://angg.twu.net/eev-videos/2021-workshop-3.mp4 IMAGES/2021-workshop-3-small.png] [FIG http://angg.twu.net/eev-videos/2021-workshop-4.mp4 IMAGES/2021-workshop-4-small.png] [FIG http://angg.twu.net/eev-videos/2021-workshop-5.mp4 IMAGES/2021-workshop-5-small.png] [FIG http://angg.twu.net/eev-videos/2021-workshop-6.mp4 IMAGES/2021-workshop-6-small.png]

[P [IT I am still writing the material that we will use in the workshop.] The [IT core] of the material will consist on 4 or 5 very short videos like the first two ones above and a series of diagrams like the one [_ from-find-ekey here]. The non-core material will consist of lots of explanations and elisp hyperlinks, like [_ exercises-1 this]. In the next few hours I plan to record two videos about the basic exercises and reorganize [_ exercises this] completely.] [br] [# # __ ___ _ # \ \ / / |__ __ _| |_ # \ \ /\ / /| '_ \ / _` | __| # \ V V / | | | | (_| | |_ # \_/\_/ |_| |_|\__,_|\__| # #] [P [NAME what] [BF What:] the [COLOR red main] theme will be to "save elisp hyperlinks to everything that is interesting". To see what this looks like, run: ] [NARROW [P [BG #ffda99 mpv --start=5:00 --speed=8 [R http://angg.twu.net/eev-videos/2021-workshop-3.mp4]]]] [P [BF Where:] the workshop will happen on Telegram. I'm @eduardoochs on Telegram - if you want to participate just add me there and send me a "hi" and I'll add you to the group in which the workshop will happen, or join the group using [R https://t.me/+UsZbZuPdRclhZTNh this link]. For other ways to contact me, see [R contact.html here]. [STANDOUT Update:] [COLOR red the workshop will happen on IRC too!] if you prefer IRC just join the channel #eev on LiberaChat! [BR] [BF How:] a workshop by Telegram is like a workshop by IRC, but by Telegram. I will have lots of things to suggest, but there will be people of different levels talking at the same time and asking different questions and it will take a while until they converge on questions that interest several people. [BR] [BF When:] the workshop will happen on 2021-dec-04 from 15:00 to 18:00 in the timezone of São Paulo. Look at the table below to see how this converts to other timezones. ] [# # _____ _ # |_ _(_)_ __ ___ ___ _______ _ __ ___ ___ # | | | | '_ ` _ \ / _ \_ / _ \| '_ \ / _ \/ __| # | | | | | | | | | __// / (_) | | | | __/\__ \ # |_| |_|_| |_| |_|\___/___\___/|_| |_|\___||___/ # # (find-es "clock" "timezone-conversion") # «timezones» (to ".timezones")  (eepitch-shell)  (eepitch-kill)  (eepitch-shell) TZS=(America/Vancouver America/Chicago # America/Los_Angeles America/Toronto # America/New_York # America/Montreal America/Sao_Paulo # Europe/Lisbon GMT Europe/London Europe/Berlin Asia/Kolkata Asia/Singapore ) D='2021-12-04 13:00 EST' DATEOPTS=(-d $D) for i in $TZS; do printf "%-20s %s\n" "$i:" "$(TZ=$i date $DATEOPTS)" done #] [BE' America/Vancouver: Sat Dec 4 10:00:00 PST 2021 America/Chicago: Sat Dec 4 12:00:00 CST 2021 America/Toronto: Sat Dec 4 13:00:00 EST 2021 America/Sao_Paulo: Sat Dec 4 15:00:00 -03 2021 GMT: Sat Dec 4 18:00:00 GMT 2021 Europe/London: Sat Dec 4 18:00:00 GMT 2021 Europe/Berlin: Sat Dec 4 19:00:00 CET 2021 Asia/Kolkata: Sat Dec 4 23:30:00 IST 2021 Asia/Singapore: Sun Dec 5 02:00:00 +08 2021 ] [br] [RULE ----------------------------------------] [br] [# «november» (to ".november") #] [H3 2. Old notes] [P In october/2021 I prepared a [R #november workshop] on Emacs for beginners, where these "beginners" would include "M$ Windows users who had never used terminals in their lives". The workshop itself was [IT apparently] a failure, for reasons that I will explain in the next section, but 1) I learned a lot with it, 2) my real, semi-hidden, non-altruistic intent with that workshop was to do a kind of social engineering in the good sense: [IT I was trying to become friends with people who know how to use things that I find incredibly hard to learn], and I made a lot of progress on that. Let me explain.] [P The first programming language that really clicked for me was Forth. It was "simple" in a way that is unusual today:] [NARROW [P My personal impression is that Forth's main points were not the ones that I listed at the beginning of [_ miniforth-html this] [_ miniforth-pdf section], and that I said that were easy to quantify; rather, what was most important was that nothing was hidden, there were no complex data structures around with "don't-look-at-this" parts (think on garbage collection in Lua, for example, and Lua's tables - beginners need to be convinced to see these things abstractly, as the concrete details of the implementation are hard), and everything - code, data, dictionaries, stacks - were just linear sequences of bytes, that could be read and modified directly if we wished to. We had total freedom, defining new words was quick, and experiments were quick to make; that gave us a sense of power that was totally different from, say, the one that a Python user feels today because he has huge libraries at his fingertips. ]] [P A sizeable part of Emacs is "simple" in the sense above, and my workshop was going to be about that.] [P Many of the tools that most people find "simple" nowadays are very hard for me, for reasons that I only understood clearly very recently. My two favorite examples of Python and Org Mode - or, more precisely, Python classes and source blocks in Org Mode. Every time that I tried to learn Python I got stuck at the same point: I was never able to form a clear mental image of what a Python class is, so I would try to understand the details, and when I tried to ask for help the answer was always: "you are asking the wrong questions - you should try to [IT use] classes instead". And when I tried to learn some non-basic parts of Org Mode, like code blocks, a similar thing happened - I tried to understand how code blocks are implemented, but the souce code was written in a way that I found too hard...] [P So: [IT I'm trying to become friends with people who know how to use these things, and I'm trying to become someone who deserves their help and their patience.]] [P I sometimes produce material like this when I finally learn something that I found too hard,] [NARROW [BE' (find-git-intro "2. A first repository") (find-git-intro "2. A first repository" "video") http://angg.twu.net/eev-videos/2020-doubt-about-merging.mp4 (find-lexical-intro) (find-lexical-intro "3. `get/set'") ]] [P so [IT some] people know that helping me is good karma. But let me go back to eev.] [P The main idea behind eev is that we can alternate between [_ task-and-notes "task" and "notes"], and we can take "executable notes" instead of just taking notes in English. My [_ eev2019 presentation] at the EmacsConf2019 included a demo of how to "play back" "executable notes" - it starts at [_ eev2019-demo 13:10] in the video - and some of my [_ eev2020 later] [_ eev2020b videos] sort of explain how to create elisp hyperlinks, but I still don't have much material on this:] [NARROW [P Eev takes an intermediate stance between "notes by hand" and "automatic notes". It is possible to do "task"+"notes" with just a few more keystrokes than for doing just "task", but that requires learning some tricks, and having some practice. ]] [P More precisely: "taking executable notes" consists mostly of 1) saving commands that are sent to "[_ eepitch shell-like programs]" and 2) saving hyperlinks to everything that is interesting. "Saving hyperlinks to everything that is interesting" consists of 2a) deciding what is interesting and what is not, 2b) saving URLs, 2c) saving elisp hyperlinks; and "saving elisp hyperlinks" consists of 2c1) making eev generate "hyperlinks to here", 2c2) selecting the right elisp hyperlink, 2c3) optionally refining the hyperlink, 2c4) copying it to our notes. If we organize this as a tree, we get:] [NARROW [HLIST3 [J "Taking executable notes" can be split into:] [J saving commands that are sent to "[_ eepitch shell-like programs]" (1)] [HLIST2 [J saving hyperlinks to everything that is interesting (2)] [J deciding what is interesting and what is not (2a)] [J saving URLs (2b)] [HLIST2 [J saving elisp hyperlinks (2c)] [J making eev generate "[_ here hyperlinks to here]" (2c1)] [J selecting the right elisp hyperlink (2c2)] [J optionally [_ refining] the hyperlink (2c3)] [J copying it to our notes (2c4)] ] ] ]] [P I [COLOR red have the impression] that people can learn the items 2c1-2c4 very quickly if they do some [IT exercises on series of actions] - similar to how string instruments are taught; see [_ Sassmannshaus this video]. These exercises will make some series of actions, that are initially "totally alien", become "vaguely familiar", and this is enough to free some mental space, and let people pay attention to other things. If people learn how to use diagrams like this one - click on the video [COLOR red (obs: the current video is a stub, and will be replaced later!)] for a demo -] [TABLE2 [BE' . ___________________________ | | | M-h M-3 | [T] | [EH] | --------> | M-1 M-h M-h | M-h M-2 | | | M-h M-y | | | M-h M-- | | | M-w | | |______::_____| | | \/ | | | | | | [N] | | | C-y | | | | | | | |_____________|_____________| ] [FIG http://angg.twu.net/eev-videos/2021-workshop-1.mp4 IMAGES/2021-workshop-1-small.png] ] [P then being "vaguely familiar" with the key sequences should be enough - memorizing them is not necessary.] [br] [P (..)] [br] [P [BF TODO:] cite some talks from the EmacsConf2021 - the ones by [_ Greta], [_ Prot], [_ Montessori Grant], which other ones? -, point to [STOH (find-eev-exercises-intro)], explain that I will add MANY other exercises to that intro, make a video explaining the diagram, explain the prerequisites for the workshop - they are essentially just [_ nav this] - and finish this page.] [br] [br] [RULE ----------------------------------------] [br] [br] [# # _ _ _ # | \ | | _____ _____ _ __ ___ | |__ ___ _ __ # | \| |/ _ \ \ / / _ \ '_ ` _ \| '_ \ / _ \ '__| # | |\ | (_) \ V / __/ | | | | | |_) | __/ | # |_| \_|\___/ \_/ \___|_| |_| |_|_.__/ \___|_| # #] [H3 [NAME november] November: Introduction to Free Software (with Emacs and Eev)] [P In october/2021 I started to prepare a workshop on Emacs and [R index.html#eev eev] that would [IT probably] be attended [IT mostly] by Windows users who had never used terminals in their lives. I explained my plans in these two posts to help-gnu-emacs:] [LIST2 [R https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00037.html] [R https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00045.html] ] [# [P If you don't know what is eev then start by the [R http://angg.twu.net/LATEX/2019emacsconf.pdf slides] of my [R emacsconf2019.html presentation] at the EmacsConf2019.] #] [HLIST2 [J My original plan for the workshop was to cover these items:] [J [_ nav installation] and navigation with [_ M-e], [_ M-j], and [_ M-k]] [J [_ keys-567 undo, windows, files and buffers]] [J [_ cut-and-paste cutting and pasting]; putting [_ task-and-notes notes and links] in ~/TODO] [J sharing notes and links via Telegram] [J [_ elisp this tutorial on elisp]] [J [_ video-links How to use] the [' [Video links:]] blocks in the tutorials] [J How to download [_ psne local copies] of files from the internets] ] [P The workshop happened in 2021nov06 and it didn't work as I expected. The items "putting notes and links in ~/TODO" and "sharing notes and links via Telegram" were FAR more important than the other ones, but no one who attended the workshop seemed to be able to focus on them... so after the workshop I realized that this was my fault - I needed to prepare exercises on that, and in the next workshop I would have to tell everyone that sharing notes would be not only VERY IMPORTANT but also REQUIRED, and after, say, two hours of the workshop, the people who aren't sharing their notes would be simply KICKED OUT.] [P After the workshop I restructured the documentation for [R https://lists.gnu.org/archive/html/help-gnu-emacs/2021-10/msg00037.html MWUs] and it became this:] [ne' (find-windows-beginner-intro "0. Introduction") (find-windows-beginner-intro "1. Download and install Emacs") (find-windows-beginner-intro "2. Key sequences and how to quit") (find-windows-beginner-intro "3. Using M-x and installing eev") (find-windows-beginner-intro "4. Understanding buffers and the mode line") (find-windows-beginner-intro "5. More on modes") (find-windows-beginner-intro "5.1. Eev mode") (find-windows-beginner-intro "5.2. Help Mode") (find-windows-beginner-intro "5.3. Info Mode") (find-windows-beginner-intro "5.4. Dired Mode") (find-windows-beginner-intro "5.5. Shell Mode") (find-windows-beginner-intro "5.6. Eshell") (find-windows-beginner-intro "6. Video links") (find-windows-beginner-intro "7. eev-on-windows.el") (find-windows-beginner-intro "7.1. `ee-use-windows'") (find-windows-beginner-intro "7.2. Testing wget.exe") (find-windows-beginner-intro "7.3. Lua") (find-windows-beginner-intro "7.4. Downloading videos") (find-windows-beginner-intro "7.5. Downloading PDFs") (find-windows-beginner-intro "7.6. Saving your settings") (find-windows-beginner-intro "7.7. Testing your settings") (find-windows-beginner-intro "7.8. Saving your settings to your ~/.emacs") (find-windows-beginner-intro "8. Summary") (find-video-links-intro "1. Introduction") (find-video-links-intro "2. From the HTML") (find-video-links-intro "3. `find-youtube-video'") (find-video-links-intro "4. Configuring the browser") (find-video-links-intro "5. Local copies") (find-video-links-intro "6. Configuring Mpv") (find-video-links-intro "7. `find-eev-video'") (find-video-links-intro "8. Windows") (find-video-links-intro "9. First-class videos") (find-video-links-intro "10. Second-class videos") (find-video-links-intro "11. Hardcoded paths") ] [# P ...and this, as I also rewrote completely the support and the documentation for [' [Video links:]] blocks, and some sections of [STOH (find-windows-beginner-intro)] point to some sections of this other "intro" as its pre-requisites:] [P I also recorded a video in Portuguese with basic exercises on the items "putting notes and links in ~/TODO" and "sharing notes and links via Telegram", but I haven't recorded a version in English of it yet... I am also preparing other videos with exercises, and my plan is to first get feedback on them and only after that I will record something similar in English.] [P The page in Portuguese about the workshop is [_ oficina here]. The first three images at its the bottom are links to videos in Portuguese.] ] [# # Local Variables: # coding: raw-text-unix # modes: (fundamental-mode blogme-mode) # End: #]